以前我们已经提到过一篇结合字典进行中文命名实体识别的文章《Chinese NER Using Lattice LSTM》. 这个方法能够一定程度解决分词错误。然而,这个方法有一个重要的缺陷,就是效率低下,其在源码的issue中也提到了,目前竟然不支持并行化。因此,这篇文章希望设计出一种更加有计算效率的方式。
该论文主要是在底层字和词的表示上进行了创新。首先文章总结了Lattice Lstm
成功的原因:
word embedding
嵌入到系统中。attention
机制自动给单词赋权重。基于此三个方法,文章提出了一种新的对输入进行编码的方式。这样的方法是一种集合编码的方法。对每个字符c
使用集合 B ( c ) , M ( c ) , E ( c ) , S ( c ) B(c),M(c),E(c),S(c) B(c),M(c),E(c),S(c)编码其字符具有的词信息。编码规则如下
c
为起始的词c
为中间字的词c
为结束字的词c
单独组成一个词如果集合为空则成员为None
举例来说:
suppose that { c 1 , c 2 } , { c 1 , c 2 , c 3 } , { c 2 , c 3 , c 4 } \{c1, c2\}, \{c1, c2, c3\}, \{c2, c3, c4\} {c1,c2},{c1,c2,c3},{c2,c3,c4} , Consider the sentence s = { c 1 , ⋅ ⋅ ⋅ , c 5 } s = \{c1, · · · , c5\} s={c1,⋅⋅⋅,c5} and and { c 2 , c 3 , c 4 , c 5 } \{c2, c3, c4, c5\} {c2,c3,c4,c5} match the lexicon. Then, for c 2 c_2 c2, B ( c 2 ) = { { c 2 , c 3 , c 4 } , { c 2 , c 3 , c 4 , c 5 } } B(c2) = \{\{c2, c3, c4\}, \{c2, c3, c4, c5\}\} B(c2)={{c2,c3,c4},{c2,c3,c4,c5}}, M ( c 2 ) = { { c 1 , c 2 , c 3 } } M(c2) = \{\{c1, c2, c3\}\} M(c2)={{c1,c2,c3}}, E ( c 2 ) = { { c 1 , c 2 } } E(c2) = \{\{c1, c2\}\} E(c2)={{c1,c2}}, and S ( c 2 ) = { N O N E } S(c2) = \{NONE\} S(c2)={NONE}
这样,融合词的表示,我们构造新型的字向量表示:
其中 V s ( X ) V^s(X) Vs(X)用于词集合编码为固定大小的向量,最后作者采用的方法为:
其中 e w ( w ) e^w(w) ew(w)为对应词的word embedding
, z ( w ) z(w) z(w)是固定的单词出现的频数
We set c to the value that there are 10% of training words occurring less than c times within the statistic data set
具体参看论文,这里就不赘述了