实体识别
下面的文字目前完全是备忘录,如果有自己的看法,也是肤浅的理解,切勿当真;
HMM
最开始是 HMM,隐马尔科夫链模型:
t+1, 与 t 有某种概率关系;
给定一个句子; NER 真的 很难学习的一门 NLP 技术;
从标注中,学习了一个模型, 我们知道 state1 -》 state2 的转移概率;
state1 -> word 的发射改了; state 的初始概率; 就可以 算出 t+1 是某个 state 的概率;
求一个句子 state 概率的最大值,微比特算法求解; 就是HMM;
# -*- coding:utf-8 -*-
# 作者:李鹏飞
# 个人博客:https://www.lookfor404.com/
# 代码说明:https://www.lookfor404.com/用隐马尔可夫模型hmm做命名实体识别-ner系列二/
# github项目:https://github.com/lipengfei-558/hmm_ner_organization
CRF
HMM 只能利用前面一个word 的信息; CRF 可以利用前面+后面 的信息;也就是 能够利用更多的上下文信息;
CRF 有一个特征模板的概念;在特征模板中,定义 利用的上下文信息;然后生成 一些列 函数集合F; F 对word 进行综合打分;求出最大的概率;
BI-LSTM CRF
是神经网络的方式, RNN 试图通过循环神经网络记住 上下文全部信息;
LSTM有记忆单元,记录他认为重要的上下文, 然后产生一个序列概率;
LSTM 特别适合序列预测场景, NER 也是其中一种, 能够利用句子中的上下文信息, 然后再输入给 CRF 模板函数,获取更高的精确度;【暂时不动为何】
这个算法在github上有很多代码的例子,需要tensorflow 或者pytorch;
上述的算法都需要大量信息的标注,作为train 的文本; 先做一些记录,后面再深入阅读;
关系抽取
https://zhuanlan.zhihu.com/p/139485679
git 上可以找到很多 RE 相关的算法, 有半监督的,无监督的;最近几年研究方向都是基于深度学习;
从知乎这篇文章来看,对于特定领域,使用基于规则的snowball算法,在实际应用中可能达到比较好的效果; snow ball 算法,属于bootstrap 思路;
有一个 seed list, 比如 公司,生产, 产品。 然后从 文本中找到 company- (y) - 产品; (y) 可能有很多类型; 比如生产, 制造等等;
这就是一个模式, 把这个模式 迭代下去,又从文本中找,可以达到一个 bootstrap的效果,能够识别越来越多的关系;
但是有一个问题就是 (y)某一个模式,可能是低质量的,或者有问题的,那么我们必须 在一个模式,加入到 tuple 之前,就行 判定;
snowball 的思想就是, 在一个 新的模式, 加入tuple 之前, 计算一个相似度,假设 tuple 里面的都是高质量的,那么 相似度越高,新加入的tuple
的质量就是越有保障的;
snowball 的算法思想。就是 构建 (L, Company, M, Product, R),这样的五元组, 把句子前,中,右的 信息考虑进去,做一个评判的上下文;
https://github.com/snowballstem/snowball, 有现成的工具,可以参考
知识融合
各种融合方法,可能根据业务场景,有的比较实用,没有很高深的算法;
https://github.com/snowballstem/snowball
https://www.pianshen.com/article/7846157877/
https://zhuanlan.zhihu.com/p/113326853
下面这个简单的例子,使用实体所在的句子的 前后的句子, 与 现有实体 的desc 信息,进行 tf-idf相似度进行对齐;
网友评论