赞
踩
中文NLP的一个问题,就是中文的字除了句句之间有标点符号之外都是连在一起的,不像英文词语是单独分割的。中文NLP处理一般会有2种方式:
基于字的,char-level。现在比较常用的方法,但会缺少词组的语义信息。
基于词的,word-level。词组一般是切词来的,相比字有更多的信息。但切词会引入错误词组。同时会有OOV的问题。
这2者有各自的优点和缺点。那有没有办法将2者进行结合呢?
《Chinese NER Using Lattice LSTM》 2018
基于char-level的BiLSTM-CRF模型如下:
基于word-leve的BiLSTM-CRF模型如下:
Lattice LSTM是一个有向无环图(DAG),将序列中的词汇信息(word-level)融入到了字信息(char-level)中。具体做法是将词汇信息融入到该词汇最后一个字的信息中。比如,如下图所示,它会将“南京市”的word embedding融入到“市”的word embedding中。
对于每个字符来说,会融合以该字符结束的所有词汇word信息,如对于「桥」融合了「长江大桥」和「大桥」信息。这里,词汇word个数不定,并采用注意力机制的方式进行融合。
Lattice LSTM有效的在char-level的基础上,融入word-level信息,并且不过分依赖word-level信息,避免因切词错误带来的传播误差。但其也存在一些缺点,比如1)性能差,batch不能并行,因为每个字符融合的word个数不一致;2)每个字符只记忆以其结尾的word,对于之前的词汇并无记忆;3)只使用lstm,无法迁移到其他模型。
《FLAT: Chinese NER Using Flat-Lattice Transformer》2020
Flat-Lattice (展平的Lattice结构),是Lattice LSTM网络的展平的版本。FLAT为lattice结构引入了position encoding,对一个token增加了head position和end position。
我们可以看下如下2张图,图1是Lattice LSTM结构,图2是FLAT Lattice结构。我们可以想象一下,将图2中首尾位置相同的字(比如‘重’)取出形成一条链,然后将位置不同的词(比如‘重庆’)根据首尾位置信息,通过连线形成相应的跳转路径,即可得到图1的结构。
图2的这种结构有个好处,可以将图结构转换成简单的线性结构形式,从而可以并行计算,提高计算的性能。
FLAT将潜在词和输入的句子进行了拼接,潜在词和潜在词之间有 重叠、包含、分离 三种关系(例如上图中 人和药店 和 人和),采用绝对位置已经无法满足,因此本文提出相对位置关系。
位置i和位置j的相对位置计算方式如下:
Rij=RELU(Wr(pdij(h,h)⊕pdij(t,h)⊕pdij(h,t)⊕pdij(t,t)))
其中dij(h,h),dij(h,t),dij(t,h),dij(t,t)分别描述了单词和单词之间的关系。
dij(h,h)=head[i]−head[j]
dij(h,t)=head[i]−tail[j]
dij(t,h)=tail[i]−head[j]
dij(t,t)=tail[i]−tail[j]
pdij(h,h)就是对两个单词head和head之间相对关系的编码。
pd2k=sin(d/100002k/dmodel)
pd2k+1=cos(d/100002k/dmodel)
FLAT模型的整体架构如下图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。