一、摘要
以前我们已经提到过一篇结合字典进行中文命名实体识别的文章《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)编码其字符具有的词信息。编码规则如下
-
B
(
c
)
B(c)
B(c)集合:包含所有以字符
c
为起始的词 -
M
(
c
)
M(c)
M(c)集合:包含所有以字符
c
为中间字的词 -
E
(
c
)
E(c)
E(c)集合:包含所有以字符
c
为结束字的词 -
S
(
c
)
S(c)
S(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
三、实验结果
具体参看论文,这里就不赘述了