模型介绍
简单来说,lattice LSTM 模型首次融合了字符信息和词汇信息。对比基于字符的方法,融合了词汇的方法显然能带入更多的信息。但对比于基于词汇的方法,lattice LSTM 却避免了LSTM受分词错误的影响带来的效果下降。作者这里举了一个例子:
南京市长江大桥,一般分为“南京市”,“长江大桥”。但基于词汇的方法有可能产生歧义,将其分为“南京”,“市长”,“江大桥”,严重影响网络的性能。
也因此,一般来说,基于字符的方法性能一般优于基于词汇的方法。
LSTM详解
想要读懂 lattice LSTM 的网络结构,就必须先了解清除 LSTM 的网络结构。我们先来看两张经典的 LSTM 网络结构图。
我相信大家肯定知道 LSTM 的三大核心:输入门,遗忘门,输出门,大家看第二张图片,我这里分为了7个步骤来进行讲解,讲解之前,先对字符代表的意思进行了解:
- 代表输入的第
- 代表第
- 代表第
- σ 代表 sigmod 激活函数
准备完毕,我们根据第二张图对第 进行解释:
- 将第 个字符的字向量与前一个单元输出的隐藏状态进行拼接,作为三个门的输入,拼接指直接把第二个向量拼在第一个向量后面,为 。
- 计算遗忘因子 ,计算公式为:,简单来说就是输入乘权重加上偏值(偏值在图中没有标出)。
- 计算输入因子 ,计算公式为:。
- 计算临时单元状态 ,计算公式为:。
- 计算最终单元状态 ,计算公式为:,这个公式很好理解, 为前一个单元遗忘后保留的部分, 为当前临时单元状态保留的部分,两部分相加得到最终单元状态。
- 计算输出因子 ,计算公式为:。
- 计算隐藏状态 ,计算公式为:,可以理解为最终单元状态要输出多少。
到目前为止,我们已经了解了 LSTM 的所有内部计算,下面进行一个总结:
大家注意看第2、3、4、6这四个步骤的公式,可以发现其基本一致,因此,可以对其进行合并,写成矩阵的形式:
这么一看是不是特别的简洁,也非常好理解。
Lattice LSTM详解
下面就是我们的重头戏了,因为 Lattice LSTM的模型结构还是有些复杂,所以这里我会结合论文进行讲解。
同理,我们先对一些符号和定义进行解释:
- 模型的输入是一个字符序列,表示为:,这里的c代表character这个英文单词。
- 词汇集合D,这个词汇集合是作者用庞大的文本数据构建出来的。输入额外工作,不是模型的一部分。
- 代表一个属于词汇集合D的词汇,这个词汇在句子中的索引从 b 到 e ,这里的 w 代表 word 这个英文单词。以上图为例, 代表“南京”,
- ,上面说到, 代表第 j 个字符,是一个字符向量表,通过在表中查找,得到字符 的字向量 , 作为第 j 个单元的输入
- ,上面说到, 代表索引从 b 到 e 的词汇,是一个词向量表,通过在表中查找,得到词汇 的词向量 , **
好,介绍完基本符号概念,我们可以正式进行模型详解了。
简单来说,lattice LSTM 模型仍然使用了 LSTM 结构,但不同的是,其在 LSTM 的基础上融合了词汇的信息,所有,问题就变成了2个部分:
- lattice LSTM 模型基本字符的结构
- lattice LSTM 模型融合词汇信息的结构
我们来跟着论文进行解释:
作者这里列出了模型的第一个公式 Eq 11:
大家看,是不是很熟悉,没错!这就是完完全全的 LSTM,只不过每一个记号的右上角都带了一个小马甲 c ,这里的c指此 LSTM 用来处理字符,提取字符的信息,为了和后面处理词汇的单元做区分。
好,因为我们有每一个位置的输入向量 ,所以我们得到了每一个单元的单元状态向量 和隐藏状态向量 。
我们已经使用一个 LSTM 结构来提取了字符的信息,下面我们将使用另一个 LSTM 结构来表达词汇信息。我们看作者的第二个公式Eq 13:
你是不是想说,这不还是和 LSTM 结构一样吗,恭喜你,完全正确!!这同样是一个标准的 LSTM 结构,只不过有一点点的不同。
之前的 LSTM,每一个单元代表的是一个字符,而这里的 LSTM,每一个单元代表一个词汇。
我们来分析下此结构不同的地方。大家肯定发现了,就是 门的输入不一样了、三个门变成了两个门,这里为大家来一一解释。
- 门的输入不一样了:基于字符的 LSTM,门的输入是前一个单元的隐藏状态 和当前单元的输入 的拼接 ,而此 LSTM 用来表示词汇,作者借用此词汇第一个字符的隐藏状态向量 来和此词向量 ,从而得到此词汇单元的单元状态向量 ,所以小马甲从 c 变成了 w。
至于为什么要拼接词汇的第一个字符,我认为是为了强化边界,在后面我会提到。 - 没有输出门:首先,隐藏状态 h 是用来在最后的CRF层选择标签的。要知道,数据集的标签都是基于字符标的,而词汇没有相应的标签,所以词汇单元不需要计算 h,而输出门的作用就是用来计算 h的,h都不需要了,输出门同样就不需要了。
难度已经渐渐变高了,作者又扔出一条公式 Eq 14:
是不是有点蒙了,为什么马甲是c,却用着词汇的索引。笔者当时看到这里也是蒙蒙的。
不用着急,大家看,其实这是第三个 LSTM 结构,但它只保留了一个输入因子, 是字向量,说明这是一个索引为 e 的字符单元(定性),用来拼接的是 ,是以此字符e结尾的词汇单元的状态向量,还记得 是怎么计算的吗,它拼接的是开头字符b的信息,这就意味着作者将(b,e)这个词的信息融入了 e 这个字符中,并且强化了 b,e 的边界。 是输入因子,代表的意思是,第e个字符要融入多少词汇(b,e)的信息。
理解了这个,下面的就更好理解了,如果还是有些迷迷糊糊的,可以结合下面的公式一起来理解。
下面这个是我认为是 lattice LSTM 模型 的核心公式 Eq 15:
我们之前已经讲解了纯字符的 LSTM 单元状态的计算公式,而Eq15计算的是融合了词汇信息的单元状态。
我们回顾一下单元状态的计算公式:
作者这里稍作改变,不使用前一个字符单元 ,所以从公式中扔掉遗忘门的部分,加上表示字符的马甲 ,即:
同时,作者在此融入以此字符为结尾的词汇单元的信息,假如以j字符结尾的词汇有三个(a,j),(b,j),(c,j),对应的词汇单元状态有3个 ,,,采用
是不是挺清晰明了的,每个词汇单元取部分输入 + 本字符单元取部分输入,得到本字符最终的单元状态向量。
但是公式太复杂,简化一下,有多少词以本字符结尾不确实,可以写成求和的形式,用 变量来表示 (词汇的开头),那么 要满足的要求是,以 开头的词汇要以 结尾,并且属于词汇集合 。即:
满足此条件的词汇可以进行求和,则上式变为:
到这里已经非常圆满了,只剩最后一个问题,对,就是每个词汇都有一个输入因子(相当于权重),这么多输入因子加和肯定很大,所以要进行归一化,使其加和为1,作者使用的公式为:
乍一看,这是啥呀,怎么这么复杂,上上下下,expp,不着急,我们定睛一看,这不就是softmax吗!!再讲softmax文章页太长了,简单来说:
是该元素的指数,与所有元素指数和的比值
假设我们有一个数组,, 表示 中的第 个元素,那么这个元素的Softmax值就是 :
每个元素 都变为了 ,并且 ,这不就和我们的公式16一样吗!!
归一化后符号发生变化, 变为 , 变为 ,放进公式:
终于搞定了,这不就和 Eq15 一模一样吗!!这里的 就是融合了词汇信息的字符单元状态向量,单元隐藏状态向量 作者使用 最基本的公式:
其中:是第一个 纯字符LSTM 结构计算的, 是最后融合词汇信息的LSTM计算的。
结语
后面的CRF层和损失函数就不说了,要讲解的话文章要长一倍。如果需要的话我会在后面更新新的文章。
以上全是我的个人见解,如果有不对的地方希望大家指正。
公式都是纯手打的,希望大家捧捧场哦!