该论文是发表于2016年。还算是比较早的论文了。虽然现在有更好的模型。比如BERT横空出世,相信未来也会源源不断的大牛来提出更多新的模型。但是读读总还是会收获的。
之前自己也用BERT来进行中文NER的识别,代码放到了 https://github.com/xuanzebi/BERT-CH-NER 欢迎Star啊哈哈。
论文网络模型图
论文解读
论文处理的是英文。是在CONLL2003 的数据集上针对NER任务提出的一项新模型。
主要是将字符级别的特征经过CNN和词级别的特征进行concat.之后经过双向LSTM进行NER预测。
这样能够更好的利用到前缀后缀之类的字符级特征。而且可以减少人工构造特征的工作。
自己在理解清字符级别的维度和词级别的维度如何concat上当时绕进去了,所以总结一下最后如何保持维度一致进行concat的。
1 | seq_len = len(句子长度按词划分) |
字符级别特征处理
1 | 字符特征经过embedding 后维度为 char_dim * char_emb |
词级别特征处理
一个句子的词向量经过embedding维度为: seq_len 100.
这样将字符级特征和词特征concat维度为 seq_len 130.之后经过双向lstm预测NER类别。
其中还可以在字符级特征和词级别上特征加一些人工特征。比如将词可以分为6类。包括全是大写字母,全是小写字母,全是数字,部分数字等等。
其它
其中还将双向LSTM前向和后向经过softmax得到的分值相加来判断类别。
还有一点是,因为在词embedding时全部小写了,所以又造了一列特征来判断词的类别。如:全大写,全小写,部分大写,全数字,部分数字等。
论文还加入了词典模板匹配模块。
论文复现
参考如下代码
https://github.com/kamalkraj/Named-Entity-Recognition-with-Bidirectional-LSTM-CNNs
网络结构图如下。
其中作者是将句子长度一致的放到一个batch进行训练。
而且模型训练的时候没有显示loss,需要自己修改一下。其他就都简单易懂了。
最后说一下字符级别特征特点
仅针对英语
字符级模型放弃了词所具有的语义信息,也放弃了即插即用的预训练词向量生态系统。另一方面,字符级深度学习模型又有两个基本优势:它们能缓解我们在模型输入上遇到的词汇库问题,还能避免在模型输出上的计算瓶颈。
输入方面,它们能极大地提升我们的模型所能处理的词汇量,并且能弹性地处理拼写错误和罕见词问题。在输出方面,由于字符级模型的词汇库很小,所以计算成本更低。这样的性质使得在预算有限时也能使用某些训练技术(比如联合训练一个语言模型)并达到较快的训练速度。
详细请看如下文章。
收获
在处理文本的时候,人工特征还是很有必要的,之前看的几个比赛,还是需要提取一些手工特征的,比如一些词的共现等等特征。
而且字符级别的特征和词级别特征可以考虑多种方式concat一下。也许效果会更好。
最后有哪里写的不对的也希望大家批评指正~~