全网最细:论文《Chinese NER Using Lattice LSTM》 模型详细讲解

模型介绍

简单来说,lattice LSTM 模型首次融合了字符信息和词汇信息。对比基于字符的方法,融合了词汇的方法显然能带入更多的信息。但对比于基于词汇的方法,lattice LSTM 却避免了LSTM受分词错误的影响带来的效果下降。作者这里举了一个例子:

南京市长江大桥,一般分为“南京市”,“长江大桥”。但基于词汇的方法有可能产生歧义,将其分为“南京”,“市长”,“江大桥”,严重影响网络的性能。

也因此,一般来说,基于字符的方法性能一般优于基于词汇的方法。

LSTM详解

想要读懂 lattice LSTM 的网络结构,就必须先了解清除 LSTM 的网络结构。我们先来看两张经典的 LSTM 网络结构图。
在这里插入图片描述在这里插入图片描述
我相信大家肯定知道 LSTM 的三大核心:输入门,遗忘门,输出门,大家看第二张图片,我这里分为了7个步骤来进行讲解,讲解之前,先对字符代表的意思进行了解:

  • x j x_j xj 代表输入的第 j j j 个字符向量
  • h j − 1 h_{j-1} hj1 代表第 j − 1 j-1 j1 个单元输出的隐藏状态
  • c j − 1 c_{j-1} cj1 代表第 j − 1 j-1 j1 个单元输出的单元状态(cell这里翻译为单元)
  • σ 代表 sigmod 激活函数

准备完毕,我们根据第二张图对 j j j 个单元进行解释:

  1. 将第 j j j 个字符的字向量与前一个单元输出的隐藏状态进行拼接,作为三个门的输入,拼接指直接把第二个向量拼在第一个向量后面,为 [ h j − 1 , x j ] [h_{j-1},x_j] [hj1,xj]
  2. 计算遗忘因子 f i f_i fi,计算公式为: f i = σ ( W f ⋅ [ h j − 1 , x j ] + b f ) f_i=\sigma(W_f\cdot[h_{j-1},x_j]+b_f) fi=σ(Wf[hj1,xj]+bf),简单来说就是输入乘权重加上偏值(偏值在图中没有标出)。
  3. 计算输入因子 i j i_j ij,计算公式为: i i = σ ( W i ⋅ [ h j − 1 , x j ] + b i ) i_i=\sigma(W_i\cdot[h_{j-1},x_j]+b_i) ii=σ(Wi[hj1,xj]+bi)
  4. 计算临时单元状态 c ~ j \widetilde{c}_j c j,计算公式为: c ~ j = t a n h ( W c ⋅ [ h j − 1 , x j ] + b c ) \widetilde{c}_j=tanh(W_c\cdot[h_{j-1},x_j]+b_c) c j=tanh(Wc[hj1,xj]+bc)
  5. 计算最终单元状态 c j c_j cj,计算公式为: c j = c j − 1 ⋅ f j + i j ⋅ c ~ j c_j=c_{j-1}\cdot f_j+i_j\cdot\widetilde{c}_j cj=cj1fj+ijc j,这个公式很好理解, c j − 1 ⋅ f j c_{j-1}\cdot f_j cj1fj前一个单元遗忘后保留的部分 i j ⋅ c ~ j i_j\cdot\widetilde{c}_j ijc j当前临时单元状态保留的部分,两部分相加得到最终单元状态。
  6. 计算输出因子 o j o_j oj,计算公式为: o i = σ ( W o ⋅ [ h j − 1 , x j ] + b o ) o_i=\sigma(W_o\cdot[h_{j-1},x_j]+b_o) oi=σ(Wo[hj1,xj]+bo)
  7. 计算隐藏状态 h j h_j hj,计算公式为: h j = o j ⋅ t a n h ( c j ) h_j=o_j\cdot tanh(c_j) hj=ojtanh(cj),可以理解为最终单元状态要输出多少。

到目前为止,我们已经了解了 LSTM 的所有内部计算,下面进行一个总结:
大家注意看第2、3、4、6这四个步骤的公式,可以发现其基本一致,因此,可以对其进行合并,写成矩阵的形式:

[ i j o j f j c ~ j ] = [ σ σ σ t a n h ] ( W T ⋅ [ x j h j − 1 ] + b ) c j = c j − 1 ⋅ f j + i j ⋅ c ~ j h j = o j ⋅ t a n h ( c j ) \left[ \begin{matrix} i_j \\ o_j\\ f_j \\ \widetilde{c}_j \end{matrix} \right]= \left[ \begin{matrix} \sigma \\ \sigma\\ \sigma \\ tanh \end{matrix} \right] (W^T\cdot\left[ \begin{matrix} x_j \\ h_{j-1} \end{matrix} \right]+b )\\ \\ \begin{matrix} c_j=c_{j-1}\cdot f_j+i_j\cdot\widetilde{c}_j \\ h_j=o_j\cdot tanh(c_j)\\ \end{matrix} ijojfjc j = σσσtanh (WT[xjhj1]+b)cj=cj1fj+ijc jhj=ojtanh(cj)

这么一看是不是特别的简洁,也非常好理解。

Lattice LSTM详解

下面就是我们的重头戏了,因为 Lattice LSTM的模型结构还是有些复杂,所以这里我会结合论文进行讲解。
在这里插入图片描述

同理,我们先对一些符号和定义进行解释:

  • 模型的输入是一个字符序列,表示为: c 1 , c 2 , . . . , c m c_1,c_2,...,c_m c1,c2,...,cm,这里的c代表character这个英文单词。

  • 词汇集合D,这个词汇集合是作者用庞大的文本数据构建出来的。输入额外工作,不是模型的一部分。

  • w b , e d w^d_{b,e} wb,ed 代表一个属于词汇集合D的词汇,这个词汇在句子中的索引be ,这里的 w 代表 word 这个英文单词。以上图为例, w 1 , 2 d w^d_{1,2} w1,2d 代表“南京”, w 7 , 8 d w^d_{7,8} w7,8d 代表“大桥”

  • x j c = e c ( c j ) x^c_{j}=e^c(c_j) xjc=ec(cj) ,上面说到, c j c_j cj 代表第 j 个字符 e c e^c ec是一个字符向量表,通过在表中查找,得到字符 c j c_j cj 的字向量 x j c x^c_j xjc x j c x^c_j xjc 作为第 j 个单元的输入

  • x b , e w = e w ( w b , e d ) x^w_{b,e}=e^w(w^d_{b,e}) xb,ew=ew(wb,ed) ,上面说到, w b , e d w^d_{b,e} wb,ed 代表索引从 be 的词汇 e w e^w ew是一个词向量表,通过在表中查找,得到词汇 w b , e d w^d_{b,e} wb,ed 的词向量 x b , e w x^w_{b,e} xb,ew , ** x b , e w x^w_{b,e} xb,ew 在后面也作为部分单元的输入。

好,介绍完基本符号概念,我们可以正式进行模型详解了。

简单来说,lattice LSTM 模型仍然使用了 LSTM 结构,但不同的是,其在 LSTM 的基础上融合了词汇的信息,所有,问题就变成了2个部分

  • lattice LSTM 模型基本字符的结构
  • lattice LSTM 模型融合词汇信息的结构

我们来跟着论文进行解释:

作者这里列出了模型的第一个公式 Eq 11:

在这里插入图片描述
大家看,是不是很熟悉,没错!这就是完完全全的 LSTM,只不过每一个记号的右上角都带了一个小马甲 c ,这里的c指此 LSTM 用来处理字符,提取字符的信息,为了和后面处理词汇的单元做区分

好,因为我们有每一个位置的输入向量 x j x_j xj,所以我们得到了每一个单元的单元状态向量 c j c_j cj 和隐藏状态向量 h j h_j hj

我们已经使用一个 LSTM 结构来提取了字符的信息,下面我们将使用另一个 LSTM 结构来表达词汇信息。我们看作者的第二个公式Eq 13:

在这里插入图片描述
你是不是想说,这不还是和 LSTM 结构一样吗,恭喜你,完全正确!!这同样是一个标准的 LSTM 结构,只不过有一点点的不同。

之前的 LSTM每一个单元代表的是一个字符,而这里的 LSTM每一个单元代表一个词汇

我们来分析下此结构不同的地方。大家肯定发现了,就是 门的输入不一样了、三个门变成了两个门,这里为大家来一一解释。

  • 门的输入不一样了:基于字符的 LSTM门的输入是前一个单元的隐藏状态 h j − 1 h_{j-1} hj1 和当前单元的输入 x j x_j xj 的拼接 [ h j − 1 , x j ] [h_{j-1},x_j] [hj1,xj],而此 LSTM 用来表示词汇,作者借用此词汇第一个字符的隐藏状态向量 h b c h^c_{b} hbc 来和此词向量 x b , e w x^w_{b,e} xb,ew 拼接,从而得到此词汇单元的单元状态向量 c b , e w c^w_{b,e} cb,ew,所以小马甲从 c 变成了 w
    至于为什么要拼接词汇的第一个字符,我认为是为了强化边界,在后面我会提到。

  • 没有输出门:首先,隐藏状态 h 是用来在最后的CRF层选择标签的。要知道,数据集的标签都是基于字符标的,而词汇没有相应的标签,所以词汇单元不需要计算 h,而输出门的作用就是用来计算 h的,h都不需要了,输出门同样就不需要了。

难度已经渐渐变高了,作者又扔出一条公式 Eq 14:

在这里插入图片描述是不是有点蒙了,为什么马甲是c,却用着词汇的索引。笔者当时看到这里也是蒙蒙的。
不用着急,大家看,其实这是第三个 LSTM 结构,但它只保留了一个输入因子, x e c x^c_e xec字向量说明这是一个索引为 e 的字符单元(定性),用来拼接的是 c b , e w c^w_{b,e} cb,ew,是以此字符e结尾的词汇单元的状态向量,还记得 c b , e w c^w_{b,e} cb,ew 是怎么计算的吗,它拼接的是开头字符b的信息,这就意味着作者将(be)这个词的信息融入了 e 这个字符中,并且强化了 be 的边界。 i b , e c i^c_{b,e} ib,ec输入因子,代表的意思是,第e个字符要融入多少词汇(b,e)的信息。

理解了这个,下面的就更好理解了,如果还是有些迷迷糊糊的,可以结合下面的公式一起来理解。

下面这个是我认为是 lattice LSTM 模型 的核心公式 Eq 15:

在这里插入图片描述我们之前已经讲解了纯字符的 LSTM 单元状态的计算公式,而Eq15计算的是融合了词汇信息的单元状态。

我们回顾一下单元状态的计算公式:
c j = c j − 1 ⋅ f j + i j ⋅ c ~ j c_j=c_{j-1}\cdot f_j+i_j\cdot\widetilde{c}_j cj=cj1fj+ijc j
作者这里稍作改变,不使用前一个字符单元 c j − 1 c_{j-1} cj1 的信息,所以从公式中扔掉遗忘门的部分,加上表示字符的马甲 c c c,即:
c j c = i j c ⋅ c ~ j c c_j^c=i^c_j\cdot\widetilde{c}_j^c cjc=ijcc jc
同时,作者在此融入以此字符为结尾的词汇单元的信息,假如以j字符结尾的词汇有三个(a,j),(b,j),(c,j),对应的词汇单元状态有3个 c a , j w c^w_{a,j} ca,jw c b , j w c^w_{b,j} cb,jw c c , j w c^w_{c,j} cc,jw,采用 i j ⋅ c ~ j i_j\cdot\widetilde{c}_j ijc j 的方式进行融合,此输入门使用Eq14:

c j c = i a , j c ⋅ c a , j w + i b , j c ⋅ c b , j w + i c , j c ⋅ c c , j w + i j c ⋅ c ~ j c c^c_j=i^c_{a,j}\cdot c^w_{a,j}+i^c_{b,j}\cdot c^w_{b,j}+i^c_{c,j}\cdot c^w_{c,j}+i^c_j\cdot\widetilde{c}_j ^c cjc=ia,jcca,jw+ib,jccb,jw+ic,jccc,jw+ijcc jc

是不是挺清晰明了的,每个词汇单元取部分输入 + 本字符单元取部分输入,得到本字符最终的单元状态向量。

但是公式太复杂,简化一下,有多少词以本字符结尾不确实,可以写成求和的形式,用 b b b 变量来表示 a , b , c a,b,c a,b,c(词汇的开头),那么 b b b 要满足的要求是,以 b b b 开头的词汇要以 j j j 结尾,并且属于词汇集合 D D D 。即:
b ∈ { b ′ ∣ w b ′ , j D ∈ D } b \in \left\{ b^{\prime}|w^D_{ b^{\prime},j}\in D \right\} b{bwb,jDD}
满足此条件的词汇可以进行求和,则上式变为:
c j c = ∑ b ∈ { b ′ ∣ w b ′ , j D ∈ D } i b , j c ⋅ c b , j w + i j c ⋅ c ~ j c c^c_j=\sum_{b \in \left\{ b^{\prime}|w^D_{ b^{\prime},j}\in D \right\}} i^c_{b,j}\cdot c^w_{b,j} + i^c_j\cdot\widetilde{c}_j^c cjc=b{bwb,jDD}ib,jccb,jw+ijcc jc

到这里已经非常圆满了,只剩最后一个问题,对,就是每个词汇都有一个输入因子(相当于权重),这么多输入因子加和肯定很大,所以要进行归一化,使其加和为1,作者使用的公式为:
在这里插入图片描述乍一看,这是啥呀,怎么这么复杂,上上下下,expp,不着急,我们定睛一看,这不就是softmax吗!!再讲softmax文章页太长了,简单来说:

是该元素的指数,与所有元素指数和的比值

假设我们有一个数组, X X X X i X_i Xi 表示 X X X 中的第 i i i 个元素,那么这个元素的Softmax值就是 :
S i = e x i ∑ j e x j S_i=\frac{e^{x_i}}{\sum_j e^{x_j}} Si=jexjexi
每个元素 X i X_i Xi 都变为了 S i S_i Si,并且 ∑ S i = 1 \sum S_i=1 Si=1,这不就和我们的公式16一样吗!!

归一化后符号发生变化 i b , j c i^c_{b,j} ib,jc 变为 α b , j c \alpha^c_{b,j} αb,jc i j c i^c_j ijc 变为 α j c \alpha^c_j αjc,放进公式:

c j c = ∑ b ∈ { b ′ ∣ w b ′ , j D ∈ D } α b , j c ⋅ c b , j w + α j c ⋅ c ~ j c c^c_j=\sum_{b \in \left\{ b^{\prime}|w^D_{ b^{\prime},j}\in D \right\}}\alpha^c_{b,j}\cdot c^w_{b,j} + \alpha^c_j\cdot\widetilde{c}_j^c cjc=b{bwb,jDD}αb,jccb,jw+αjcc jc
终于搞定了,这不就和 Eq15 一模一样吗!!这里的 c j c c^c_j cjc 就是融合了词汇信息的字符单元状态向量单元隐藏状态向量 h j c h^c_j hjc 作者使用 最基本的公式:
h j c = o j c ⋅ t a n h ( c j c ) h^c_j=o^c_j\cdot tanh(c^c_j) hjc=ojctanh(cjc)
其中: o j c o^c_j ojc是第一个 纯字符LSTM 结构计算的, c j c c^c_j cjc是最后融合词汇信息的LSTM计算的。

结语

后面的CRF层和损失函数就不说了,要讲解的话文章要长一倍。如果需要的话我会在后面更新新的文章。

以上全是我的个人见解,如果有不对的地方希望大家指正。

公式都是纯手打的,希望大家捧捧场哦!

  • 34
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
LSTM(Long Short-Term Memory)是一种常用的循环神经网络(RNN)架构,特别适用于处理和预测时间序列数据。LSTM最初由Hochreiter和Schmidhuber在1997年提出,但直到近年来才受到广泛关注。 LSTM的主要优点是可以处理长时间延迟的序列信息,同时可以避免常见的梯度消失问题。这些特性使得LSTM在许多领域得到广泛应用,包括语音识别、自然语言处理、图像描述等。 LSTM模型结构如下图所示: ![LSTM模型结构图](https://i.imgur.com/lT2Uv4P.png) LSTM模型由四个主要的组件构成,每个组件都具有不同的功能,这些组件分别是: - 输入门(Input Gate):控制输入的权重,决定哪些信息需要输入到LSTM中。 - 遗忘门(Forget Gate):控制LSTM中的记忆,决定哪些信息需要被遗忘。 - 输出门(Output Gate):控制LSTM输出的信息,决定哪些信息需要输出。 - 记忆单元(Memory Cell):存储LSTM中的状态信息,包括当前输入和历史输入。 在每个时间步中,LSTM会根据当前的输入和上一个时间步的状态信息,计算出当前时间步的状态和输出信息。具体的计算过程如下: 1. 输入门控制当前输入的权重 LSTM首先通过输入门决定哪些信息需要输入到网络中。输入门根据当前的输入和上一个时间步的状态信息,计算出一个0到1之间的权重向量,表示当前输入对于LSTM状态的重要性。输入门的计算公式如下: $$i_t = \sigma(W_{xi}x_t + W_{hi}h_{t-1} + b_i)$$ 其中,$i_t$是输入门输出的权重向量,$\sigma$是sigmoid函数,$W_{xi}$、$W_{hi}$和$b_i$是输入门的权重参数,$x_t$表示当前时间步的输入,$h_{t-1}$表示上一个时间步的状态信息。 2. 遗忘门控制历史信息的保存 接下来,LSTM使用遗忘门决定哪些历史信息需要被保留下来。遗忘门根据当前的输入和上一个时间步的状态信息,计算出一个0到1之间的权重向量,表示历史输入对于LSTM状态的重要性。遗忘门的计算公式如下: $$f_t = \sigma(W_{xf}x_t + W_{hf}h_{t-1} + b_f)$$ 其中,$f_t$是遗忘门输出的权重向量,$\sigma$是sigmoid函数,$W_{xf}$、$W_{hf}$和$b_f$是遗忘门的权重参数。 3. 计算新的状态信息 在输入门和遗忘门的基础上,LSTM可以计算出新的状态信息。LSTM首先通过输入门计算出需要输入的信息,然后通过遗忘门决定历史信息的保留程度,最后将它们合并为新的状态信息。新的状态信息的计算公式如下: $$\tilde{C_t} = tanh(W_{xc}x_t + W_{hc}h_{t-1} + b_c)$$ $$C_t = f_t * C_{t-1} + i_t * \tilde{C_t}$$ 其中,$\tilde{C_t}$是通过输入门计算出的新的状态信息,$C_t$是最终的状态信息,$tanh$是双曲正切函数,$W_{xc}$、$W_{hc}$和$b_c$是计算状态信息的权重参数。 4. 输出门控制输出信息 最后,LSTM使用输出门来控制输出信息。输出门根据当前的状态信息和输入信息,计算出一个0到1之间的权重向量,表示LSTM状态对于输出的重要性。输出门的计算公式如下: $$o_t = \sigma(W_{xo}x_t + W_{ho}h_{t-1} + b_o)$$ 其中,$o_t$是输出门输出的权重向量,$\sigma$是sigmoid函数,$W_{xo}$、$W_{ho}$和$b_o$是输出门的权重参数。 5. 计算最终输出 在输出门的基础上,LSTM可以计算出最终的输出信息。LSTM首先通过输出门计算出需要输出的信息,然后将它们和当前状态信息合并为最终的输出。最终的输出的计算公式如下: $$h_t = o_t * tanh(C_t)$$ 其中,$h_t$是最终的输出,$tanh$是双曲正切函数,$C_t$是当前的状态信息。 总之,LSTM模型通过输入门、遗忘门、状态信息和输出门的组合,实现了对于时间序列数据的建模和预测。LSTM的优点在于可以处理长时间延迟的序列信息,同时可以避免常见的梯度消失问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值