论文解读系列| 06:【NER】LatticeLSTM模型详解

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: Lattice LSTM模型是基于词汇增强方法的中文NER的开篇之作。在该模型中,使用了字符信息和所有词序列信息,具体地,当我们通过词汇信息(词典)匹配一个句子时,可以获得一个类似Lattice的结构。这种方式可以避免因分词错误导致实体识别错误,在中文NER任务上有显著效果。

简介

LatticeLSTM 出自于 ACL2018中的Chinese NER Using Lattice LSTM。

论文地址:
https://arxiv.org/abs/1805.02023

多个版本的代码
官方版:https://github.com/jiesutd/LatticeLSTM
其他人复现版:https://github.com/LeeSureman/Batch_Parallel_LatticeLSTM

更多、更及时内容欢迎留意微信公众号: 小窗幽记机器学习

LSTM-CRF模型在英文命名实体识别任务中具有显著效果,在中文NER任务中,基于字符的NER模型也明显优于基于词的NER模型(避免分词错误对NER任务的影响)。在基于字符的NER模型中引入词汇信息,确定实体边界,对中文NER任务有明显提升效果。

Lattice LSTM模型是基于词汇增强方法的中文NER的开篇之作。在该模型中,使用了字符信息和所有词序列信息,具体地,当我们通过词汇信息(词典)匹配一个句子时,可以获得一个类似Lattice的结构。这种方式可以避免因分词错误导致实体识别错误,在中文NER任务上有显著效果。

image.png

模型结构

LSTM结构

LSTM是RNN的一个变体,能够有效解决梯度消失和梯度爆炸的问题。主要引入了三个门,即输入门$i_t$,遗忘门$f_t$,输出门$o_t$ 并用一个新的Cell State $c_t$进行信息的线性传输,同时非线性的输出信息到隐藏层的Hidden State $h_t$

公式如下:
$$ \begin{aligned} &{\left[\begin{array}{c} i_{t} \\ o_{t} \\ f_{t} \\ \tilde{c}_{t} \end{array}\right]=\left[\begin{array}{c} \sigma \\ \sigma \\ \sigma \\ \tanh \end{array}\right]\left(W\left[\begin{array}{c} X_{t} \\ h_{t-1} \end{array}\right]+b\right)} \\ &\mathbf{c}_{t}=\mathbf{f}_{t} \odot \mathbf{c}_{t-1}+\mathbf{i}_{t} \odot \tilde{\mathbf{c}}_{t} \\ &\mathbf{h}_{t}=\mathbf{o}_{t} \odot \tanh \left(\mathbf{c}_{t}\right) \end{aligned} $$

从上述公式可以看出:

  • 输入门 $\mathbf{i}_{t}$ 用于控制当前候选状态 $\tilde{\mathbf{c}}_{t}$ 有多少信息需要保存。

  • 遗忘门 $\mathbf{f}_{t}$ 用于控制上一个状态 $\mathbf{c}_{t-1}$ 需要遗忘多少信息。

  • 输出门 $\mathbf{o}_{t}$ 用户控制当前时刻的状态 $\mathbf{c}_{t}$ 有多少信息需要输出给 $\mathbf{h}_{t}$

文中介绍了3类模型方案,包括 Character-Based Model、Word-Based Model 和 Lattice Model,但是其主要网络结构都是LSTM-CRF。

image.png

Character-Based Model

对于Character-Based模型,输入为字符序列 $c_{1}, c_{2}, \ldots, c_{m}$ ,直接输入到LSTM-CRF。其中每个字符$c_{j}$ 表征为 $\mathbf{x}_{j}^{c}=\mathbf{e}^{c}\left(c_{j}\right) ,\mathbf{e}^{c}$ 是字符的嵌入矩阵,即字符表征的查找表。通常使用双向的LSTM对输入的字符表征序列 $\mathbf{x}_{1}, \mathbf{x}_{2}, \ldots, \mathbf{x}_{m}$ 进行处理,得到从左到右和从右到左 的Hidden State序列$\overrightarrow{\mathbf{h}}_{1}^{c}, \overrightarrow{\mathbf{h}}_{2}^{c}, \ldots, \overrightarrow{\mathbf{h}}_{m}^{c}$ 和 $\overleftarrow{\mathbf{h}}_{1}^{c}, \overleftarrow{\mathbf{h}}_{2}^{c}, \ldots, \overleftarrow{\mathbf{h}}_{m}^{c}$。再将两个方向的字符表征拼接,即每个字符的Hidden State表示为: $\mathbf{h}_{j}^{c}=\left[\overrightarrow{\mathbf{h}}_{j}^{c} ; \overleftarrow{\mathbf{h}}_{j}^{c}\right]$
最后在$\mathbf{h}_{1}^{c}, \mathbf{h}_{2}^{c}, \ldots, \mathbf{h}_{m}^{c}$之后接一个标准的CRF层进行序列标注。这里的上标 $c$ 表示是字符级别。

此外,Character-Based模型还可以融合n-gram信息(char+bichar)和分词信息(char+softword)。

  • Char + bichar:直接把bigram的嵌入表示和char的嵌入表示进行拼接作为该字符的嵌入表示。
  • Char + softword:分词信息可以作为soft特征加入到 Character-Based模型中。将分词标签嵌入表征字符嵌入表征拼接
    $$ \mathbf{x}_{j}^{c}=\left[\mathbf{e}^{c}\left(c_{j}\right) ; \mathbf{e}^{s}\left(\operatorname{seg}\left(c_{j}\right)\right)\right] $$
    其中$\mathbf{e}^{s}$是分词标签嵌入表示的嵌入矩阵,$seg(c_j)$表示对于$c_j$字符的分词标签结果,主要有BMES这4种标签结果,表示该字符分词结果所处的位置。

Word-Based Model

Word-Based模型与Character-Based模型类似。输入为词序列$w_1,w_2,...,w_n$,每个词$w_i$的词表征:$\mathbf{x}_{i}^{w}=\mathbf{e}^{w}(w_i)$,其中$\mathbf{e}^{w}$是词嵌入矩阵。同理,也是输入双向LSTM,再将两个结果拼接作为输出的Hidden State。通过 连接softmax和CRF实现序列标注。

Word-Based还可以进一步融合字符信息。词$w_i$中的字符表征记为$\mathbf{x}_{i}^c$,将两者的拼接结果作为词的新表征:
$$ \mathbf{x}_{i}^{w}=[\mathbf{e}^{w}\left(w_{i}\right);\mathbf{x}_{i}^c] $$
至于如何获取词$w_i$中的字符表征$\mathbf{x}_{i}^c$,有以下3种方式:

  • Word + char LSTM:直接把每个字符输入到双向LSTM,将两个方向hidden state拼接起来作为词$w_i$的字符表征:
    $$ \mathbf{x}_{i}^{c}=\left[\overrightarrow{\mathbf{h}}_{t(i, \operatorname{len}(i))}^{c} ; \overleftarrow{\mathbf{h}}_{t(i, 1)}^{c}\right] $$
    其中 $t(i,k)$表示句子中第$i$个词中索引为$k$的字符,所以$t(i,len(i))$ 表示词$w_i$的最后一个字符。可以看出,这种方式其实只取首尾字符的拼接结果。

  • Word + char LSTM':与上述方式不同,这种方式使用一个LSTM获得每个字符$c_j$的双向表征,再拼接作为字符的hidden states表征,最后再融入到词表征中。该方式与Liu et al. (2018)的结构相似但是没有使用highway layer。

  • Word + char CNN:使用CNN抽取每个词的字符序列表征,字符表征$\mathbf{x}^c_i$,字符$c_j$的词向量用$\mathbf{e}^c(c_j)$表示:

image.png

其中$\mathbf{W_{CNN}}$和$\mathbf{b_{CNN}}$都是待学习的参数,$ke$表示kernal size,文中取值为3,$max$表示最大池化。

Lattice Model

Lattice LSTM可以看做是Character-Based模型的扩展,其添加了词作为输入(比如下图输入中包括“南京市”,用红色这部分网络结构来抽取特征)和额外的门(下图的绿色线连接的门控单元)来控制信息流动。

image.png

Lattice LSTM的输入为:字符序列$c_1,c_2,...,c_m$,与词典$D$中单词匹配的所有字符子序列记为$w_{b,e}^d$,$b$是起始字符的下标,$e$是结束字符的下标。比如对于Figure 1中的句子"南京市长江大桥"的分词结果,$w^d_{1,2}$表示"南京"。模型的输入有4种向量:输入向量、隐藏层输出向量、cell 向量、门控向量。输入向量就是字符向量,$\mathbf{x}^c_j=\mathbf{e}^c(c_j)$。LSTM模型的递归结构体现于每个字符$c_j$上使用一个字符cell向量$\mathbf{c}^c_j$和一个隐藏层向量$\mathbf{h}^c_j$,其中$\mathbf{c}^c_j$用来记录从句子开始到字符$c_j$的信息流动,最终将$\mathbf{h}_j^c$输入到CRF层进行序列标注。

与character-based模型不同,计算$\mathbf{c}^c_j$时要考虑句子中对应词典的子串$w^d_{b,e}$,每个子串串$w^d_{b,e}$的表征为:$\mathbf{x}^w_{b,e}=\mathbf{e}^w(w^d_{b,e})$。此外,词的cell State $\mathbf{c}^w_{b,e}$表示从句子开始的递归状态$\mathbf{x}^w_{b,e}$,计算如下:

$$ \begin{aligned} {\left[\begin{array}{c} \mathbf{i}_{b, e}^w \\ \mathbf{f}_{b, e}^w \\ \widetilde{c}_{b, e}^w \end{array}\right] } &=\left[\begin{array}{c} \sigma \\ \sigma \\ \tanh \end{array}\right]\left(\mathbf{W}^{w \top}\left[\begin{array}{c} \mathbf{x}_{b, e}^w \\ \mathbf{h}_b^c \end{array}\right]+\mathbf{b}^w\right) \\ \mathbf{c}_{b, e}^w &=\mathbf{f}_{b, e}^w \odot \mathbf{c}_b^c+\mathbf{i}_{b, e}^w \odot \widetilde{\boldsymbol{c}}_{b, e}^w \end{aligned} $$
其中,$\mathbf{i}_{b, e}^w$和$\mathbf{f}_{b, e}^w$分别是输入门和遗忘门。$\mathbf{h}_b^c$和$\mathbf{c}_b^c$分别是来自词的 首字 LSTM单元输出的Hidden State和Cell State,比如计算词长江大桥的cell state,$\mathbf{h}_b^c$和$\mathbf{c}_b^c$来自于字,而计算大桥的cell State,$\mathbf{h}_b^c$和$\mathbf{c}_b^c$来自于字。此外需要注意的是,对于word级别的cell没有output gate,这是因为序列标注的标注结果都在character级别上。

通过词的 cell status $\mathbf{c}^w_{b,e}$会有更多的递归路径信息流进每个$\mathbf{c}^c_j$。例如Figure 2中,输入源$\mathbf{c}^c_7$包括$\mathbf{x}^c_7$(桥)、$\mathbf{c}^w_{6,7}$(大桥)、$\mathbf{c}^w_{4,7}$(长江大桥)。将所有的$\mathbf{c}^w_{b,e}$链接到cell $\mathbf{c}^c_e$,即对这3部分信息进行加权相加。对每个子串的cell status $\mathbf{c}^w_{b,e}$使用一个额外的门$\mathbf{i}^c_{b,e}$来控制流进$\mathbf{c}^c_e$的信息流(原文是$\mathbf{c}^c_{b,e}$,应该是写错了):

image.png

计算字符$c_j^c$的cell state $\mathbf{c}_j^c$,即对所有以$c_j^c$结尾的词的cell state和$c_j^c$的候选状态$\widetilde{\boldsymbol{c}}_j^c$进行加权相加。因此字符$c_j^c$的cell status $\mathbf{c}_j^c$ 的计算如下:
$$ \mathbf{c}_j^c=\sum_{b \in\left\{b^{\prime} \mid w_{b^{\prime}, j}^d \in \mathbb{D}\right\}} \boldsymbol{\alpha}_{b, j}^c \odot \boldsymbol{c}_{b, j}^w+\boldsymbol{\alpha}_j^c \odot \widetilde{\boldsymbol{c}}_j^c $$

上述式子中的$\alpha$是门控归一化结果,门控根据当前词的cell state $\mathbf{c}_{b, e}^w$和字符嵌入$\mathbf{x}_{e}^c$计算如下:
$$ \mathbf{i}_{b, e}^c=\sigma\left(\mathbf{W}^{l \top}\left[\begin{array}{c} \mathbf{x}_e^c \\ \mathbf{c}_{b, e}^w \end{array}\right]+\mathbf{b}^l\right) $$

$\mathbf{i}_{b, j}^c$ 和 $\mathbf{i}_j^c$分别归一化为$\boldsymbol{\alpha}_{b, j}^c$ 和 $\boldsymbol{\alpha}_j^c$,使其求和为$\mathbf{1}$:

$$ \begin{aligned} \boldsymbol{\alpha}_{b, j}^c &=\frac{\exp \left(\mathbf{i}_{b, j}^c\right)}{\exp \left(\mathbf{i}_j^c\right)+\sum_{b^{\prime} \in\left\{b^{\prime \prime} \mid w_{b^{\prime \prime}, j}^d \in \mathbb{D}\right\}} \exp \left(\mathbf{i}_{b^{\prime}, j}^c\right)} \\ \boldsymbol{\alpha}_j^c &=\frac{\exp \left(\mathbf{i}_j^c\right)}{\exp \left(\mathbf{i}_j^c\right)+\sum_{b^{\prime} \in\left\{b^{\prime \prime} \mid w_{b^{\prime \prime}, j}^d \in \mathbb{D}\right\}} \exp \left(\mathbf{i}_{b^{\prime}, j}^c\right)} \end{aligned} $$

南京市长江大桥为例,计算的cell state,是通过对长江大桥大桥的cell state,以及的候选cell state,进行加权求和。加权系数,则是对字符和词的门控进行Softmax得到。
需要指出的是,当前字符有词汇融入时,则采取上述公式进行计算;如当前字符没有词汇时,则采取原生的LSTM进行计算。换句话说,当有词汇信息时,Lattice LSTM并没有利用前一时刻的记忆向量$c_{j-1}^c$,即不保留对词汇信息的持续记忆。

Decoding 和 Training

Decoding 部分,就是在$\mathbf{h}_{1},\mathbf{h}_{2},...,\mathbf{h}_{\tau}$之后接一个CRF层计算输出概率,然后选择最大的输出概率argmaxP(y|s)。对于Character-Based Model,$\tau$值为$n$,对于Word-Based Model,$\tau$值为$m$。下面是计算某个标注序列$y$的概率。

$$ P(y \mid s)=\frac{\exp \left(\sum_{i}\left(\mathbf{W}_{\mathrm{CRF}}^{l_{i}} \mathbf{h}_{i}+b_{\mathrm{CRF}}^{\left(l_{i-1}, l_{i}\right)}\right)\right)}{\sum_{y^{\prime}} \exp \left(\sum_{i}\left(\mathbf{W}_{\mathrm{CRF}}^{l_{i}^{\prime}} \mathbf{h}_{i}+b_{\mathrm{CRF}}^{\left(l_{i-1}^{\prime}, l_{i}^{\prime}\right)}\right)\right)} $$

使用一阶Viterbi算法找到得分最高的标注序列,损失函数是带L2正则的log-likelihood loss。

$$ L=\sum_{i=1}^{N} \log \left(P\left(y_{i} \mid s_{i}\right)\right)+\frac{\lambda}{2}\|\Theta\|^{2} $$

缺点:

  • 计算性能低下,不能batch并行化。究其原因主要是每个字符之间的增加word cell(看作节点)数目不一致;
  • 信息损失:1)每个字符只能获取以它为结尾的词汇信息,对于其之前的词汇信息也没有持续记忆。如对于「药」,并无法获得‘inside’的「人和药店」信息。2)由于RNN特性,采取BiLSTM时其前向和后向的词汇信息不能共享。
  • 可迁移性差:只适配于LSTM,不具备向其他网络迁移的特性
相关文章
|
2月前
|
自然语言处理 索引
使用BERT进行情感分析
【10月更文挑战第2天】
|
4月前
|
机器学习/深度学习 存储 自然语言处理
【NLP-新闻文本分类】3 Bert模型的对抗训练
详细介绍了使用BERT模型进行新闻文本分类的过程,包括数据集预处理、使用预处理数据训练BERT语料库、加载语料库和词典后用原始数据训练BERT模型,以及模型测试。
77 1
|
5月前
|
机器学习/深度学习 人工智能
ICML 2024:Transformer究竟如何推理?基于样例还是基于规则
【7月更文挑战第12天】ICML 2024研究表明Transformer模型在解决数学问题时倾向于基于样例而非规则的推理。通过规则遵循微调(RFFT),模型被教会遵循规则,实现从1-5位到12位加法的高精度泛化,提升40%以上。论文探讨了提升AI在数学推理上的潜力。[arxiv.org/abs/2402.17709](https://arxiv.org/abs/2402.17709)**
49 2
|
机器学习/深度学习 自然语言处理 安全
Bert on ABSA、ASGCN、GAN、Sentic GCN…你都掌握了吗?一文总结情感分析必备经典模型(1)
Bert on ABSA、ASGCN、GAN、Sentic GCN…你都掌握了吗?一文总结情感分析必备经典模型
155 0
|
机器学习/深度学习 数据采集 自然语言处理
【Deep Learning A情感文本分类实战】2023 Pytorch+Bert、Roberta+TextCNN、BiLstm、Lstm等实现IMDB情感文本分类完整项目(项目已开源)
亮点:代码开源+结构清晰+准确率高+保姆级解析 🍊本项目使用Pytorch框架,使用上游语言模型+下游网络模型的结构实现IMDB情感分析 🍊语言模型可选择Bert、Roberta 🍊神经网络模型可选择BiLstm、LSTM、TextCNN、Rnn、Gru、Fnn共6种 🍊语言模型和网络模型扩展性较好,方便读者自己对模型进行修改
630 0
|
机器学习/深度学习
【文本分类】基于预训练语言模型的BERT-CNN多层级专利分类研究
【文本分类】基于预训练语言模型的BERT-CNN多层级专利分类研究
492 0
【文本分类】基于预训练语言模型的BERT-CNN多层级专利分类研究
|
7月前
|
机器学习/深度学习 自然语言处理 数据挖掘
预训练语言模型中Transfomer模型、自监督学习、BERT模型概述(图文解释)
预训练语言模型中Transfomer模型、自监督学习、BERT模型概述(图文解释)
207 0
|
机器学习/深度学习 自然语言处理 数据挖掘
Bert on ABSA、ASGCN、GAN、Sentic GCN…你都掌握了吗?一文总结情感分析必备经典模型(2)
Bert on ABSA、ASGCN、GAN、Sentic GCN…你都掌握了吗?一文总结情感分析必备经典模型
257 1
|
机器学习/深度学习 自然语言处理 算法
论文解读系列| 05:【NER】SoftLexicon模型详解
SoftLexicon是一种简单而有效的将词汇信息纳入字符表示的方法。这种方法避免设计复杂的序列建模结构,并且对于任何NER模型,它只需要细微地调整字符表示层来引入词典信息。在4个中文NER基准数据集上的实验结果表明,该方法的推理速度比现有SOTA方法快6.15倍,性能更好。
|
机器学习/深度学习 移动开发 知识图谱
论文解读系列| 03:【NER】FGN模型详解
汉字作为象形文字有其潜在的特殊字形信息,而这一点经常被忽视。FGN是一种将字形信息融入网络结构的中文NER方法。除了用一个新型CNN对字形信息进行编码外,该方法可以通过融合机制提取字符分布式表示和字形表示之间的交互信息。