基于之前Lattice LSTM的问题进行改进 Lattice LSTM虽然达到了SOTA 但是模型结构非常复杂 限制了在工业上的应用 这篇提出了一个简化且高效的模型 融合了词汇信息到字编码中 避免了复杂的序列建模结构 而且对于任何神经NER模型 只需要对字表示层进行微调来引入词汇信息
本文提出了两个方法 后者为前者的优化
第一个方法 构造exsoftword特征 这种方法能保存所有可能的词典匹配的分词结果
{B, M , E, S, O}对应(begin, middle, end, single, other)
如上图 以c7:西 为例 按BMESO的规则 西只有中山西路(西为M)和 山西(西为E)这两种表示所以构造出的exsoftword特征就是{M, E} 同理 如果是c6:山 那么就表示为{B, M, E}
但是这种方法有两个问题 且没有继承LATTICELSTM的优点:
- 不能引入预训练的词向量 因为转化为 BMESO表示
- 仍然损失了一些匹配结果的信息 例如上图中 c5 c6 c7 c8构造出来的exsoftword特征就有两种情况 中山 山西 中山西路 和 中山 中山西 山西路 所以会损失信息
然后基于exsoftword 作者就提出了softlexicon方法来合并词典信息 也就是改进版本
改进的方式:每个字符分配BMES 如果一个词是空的就以NONE字符表示
如上图 这样对于c6:山 表征方式就变成了
这样就可以利用预训练的词向量了 而且这种方法能覆盖到字符的所有词
具体的input生成过程为:把每个字符的四种词集合 压缩到一个固定的维度的向量
为了尽可能保留原始信息 用concat拼接四套词的表征 然后再加到字符表征中去
其中单字符的四个词集合中的每个集合 也需要映射到一个固定维度向量 使用的方法是 mean pooling和加权求和 后者效果更好
加权求和的过程中 权值是由词频决定的 但是当两个词中有字符重叠时 频率不增加(其实感觉这个实现还挺难的) 比如南京和南京市 当计算南京市长江大桥的词频时 南京的词频就不增加 因为南京和南京市重叠 这样就可以避免短字的频率总是大于他的长字的频率的问题
然后看整体模型结构:
在softlexicon后 concat 然后接常规的encoding层 这里包括bilstm cnn transformer 这篇论文利用的是单层的bilstm 然后接crf
实验结果:推理速度提升了六倍多
效果没有很突出