命名实体识别 (NER) 是语义理解中的一个重要课题。NER就像天然语言领域的“目标检测”。
找到文档D 中的名词实体还不够,许多状况下,咱们须要了解这个名词是表示地点(location),人名(Person)仍是组织(Organization),等等:
上图是NER输出一个句子后标记名词的示例。
在神经网络出现以前,几乎全部NER半监督或者非监督的方法,都要依靠手工的单词特征或者外部的监督库(如gazetteer)达到最好的识别效果。html
手工的单词特征能够方便提炼出相似前缀,后缀,词根,如:
-ance, —ancy 表示:行为,性质,状态/ distance距离,currency流通
-ant,ent 表示:人,…的/ assistant助手,excellent优秀的
–ary 表示:地点,人,事物/ library图书馆,military军事
能够知道-ant结尾的单词极可能是指人,而-ary结尾更可能指的地点。git
而外部的监督库(如gazetteer),把一些同种类的实体聚合在一块儿作成一个库,能够帮助识别同一个意思的实体,如:
auntie其实和aunt一个意思:姨妈
Mikey实际上是Mike的昵称,都是人名github
今天所讲的这篇卡内基梅隆大学的论文,用RNN神经网络的相关技术避开使用这些人工特征,并能达到与之至关的准确率。算法
为了获取上述的前缀,后缀,词根等相关特征,文章对每一个单词的每一个字母训练一个双向LSTM,把双向LSTM的输出做为单词的特殊embedding,和预训练eStack LSTM的算法识别命名实体,感兴趣能够继续阅读原论文。mbedding合成最后的词嵌入(final embedding):网络
双向LSTM能够捕捉字母拼写的一些规律(前缀,后缀,词根), 预训练的embedding能够捕捉全局上单词间的类似度。二者结合咱们获得了更好的词嵌入(embedding)。架构
有词嵌入表征是远远不够的,咱们要有效利用这些embedding处理NER问题,一个NER预测问题和通常的机器学习差异不大:给出一个训练集(已经标注过命名实体的文档集),用测试集(未标注命名实体的文档)上的NER识别率来评价模型。app
论文中为了提升上述的命名实体识别率,结合了两方面评估:机器学习
对于词性tag的下一个单词可能词性tag的建模(如“吃”这个动词后大几率是相似“食物”(“饭”,“面条”等)的实体,“吃”后面极少跟“地点”的实体)ide
中间层(Bi-LSTM)l 表明单词左侧的上下文特征, r 表明单词右侧的上下文特征,c 表明了左右两侧的合成。函数
最高层(CRF)把单词tag之间的关系建模,提升NER准确率。
落实到损失函数,文中也用了上述两方面的因素(tag到tag的转移率,单词是某个tag的几率):
其中,X=(x1, x2, . . . , xn) , 表明一个序列的句子 ,
y = (y1, y2, . . . , yn), 表明对上述序列的tag预测
s(X,y)即对本次预测的打分(score)
第一部分矩阵 Ayi,yi+1 表明tag yi 转移到后一个tag yi+1的可能性的打分
第二部分矩阵 Pi,yi 是第i个单词预测为tag yi 的可能性。
最后看一下实验数据:
如预想的,LSTM-CRF若是没有使用单字符的embedding提取,结果会稍逊色一些。
另外,出来LSTM-CRF,文章还使用了层叠Stack LSTM的算法识别命名实体,感兴趣能够继续阅读原论文。
参考文献:
在NLP中深度学习模型什么时候须要树形结构?
【深度学习实战】pytorch中如何处理RNN输入变长序列padding
【机器学习基本理论】详解最大后验几率估计(MAP)的理解
欢迎关注公众号学习交流~