比如一句话「健肾平喘汤联合硫酸沙丁胺醇气雾剂吸入治疗慢性持续期哮喘临床研究」。我想抽取出健肾平喘汤与慢性哮喘这两个实体是有联系的,一直没有找到好的办法,看了上百篇文献,由于演算法居多,对于具体的还是不太明白,在这里请问大神。目前我知道的步骤是:1.分词,这里与NER结合,以降低分词不当造成的影响,或者使用自定义词典。然后可以对分词后的结果进行词性标注。2.使用句法分析器,如斯坦福工具等其他工具。后续的步骤就不清楚了。看到文章中有这样的做法:1.将关系抽取转换为分类的问题,构建分类模型;2.构建二元组或者三元组。由于本人是nlp初学者,刚刚接触,很多都不是很懂,但是马上就要开题了,很急的时间,想尽快摸索出一套可行的方法,请教大家后面具体的可以怎么实现,如何进行关系抽取


看你要做的是开放关系抽取,还是限定关系抽取。如果是限定关系抽取,那么可以作为分类问题来做,关系作为类标签,包含产生关系的两个对象的文本作为训练样本,剩下就是训练样本的特征表示问题了。开放关系抽取,大多是基于一些启发式的规则来做。


随著计算机的普及以及互联网的迅猛发展,大量的信息以电子文本的形式出现在人们面前。为了应对信息爆炸带来的挑战,迫切需要一些自动化的工具帮助人们在海量信息源中迅速找到真正需要的信息。信息抽取(Information?Extraction)研究正是在这种背景下产生的。信息抽取的主要目的是将无结构的文本转化为结构化或半结构化的信息,并以资料库的形式存储,供用户查询以及进一步分析利用。信息抽取系统的主要功能是从文本中抽取出特定的事实信息,我们称之为实体(Entity)。例如:时间(TIME)、组织机构(ORG)、人物(PER)以及武器(WEAPON)等等。

然而,在大多数的应用中,不但要识别文本中的实体,还要确定这些实体之间的关系,我们称其为实体关系抽取。与实体抽取类似,实体关系的类型也是预先定义的,例如:地理位置关系(PHYS)、雇佣关系(EMP-ORG)等等。

通常,人们将关系抽取问题转化为一个分类问题,即首先列出一个句子中所有的实体对,然后使用一个分类器决定哪些是我们真正需要的关系。

和分类问题通常的解决办法一样,人们最初也是使用知识库的方法来解决该问题。但是,此方法需要专家构筑大规模的知识库,这不但需要有专业技能的专家,也需要付出大量劳动。

为了克服知识库方法的缺点,人们后来使用机器学习的方法来解决此问题]。该方法不需要有专业技能的专家书写知识库,只需要有一定专业知识的人对任意两个实体之间的关系做出是与不是我们需要的关系的判断即可。然后以此为训练数据,使用各种学习方法构造分类器。

通常的机器学习演算法需要构造特征向量形式的训练数据。然后使用各种机器学习演算法,如支持向量机(SVM)、Winnow等作为学习机构造分类器。这种方法被称作基于特征向量的学习演算法。

接著又出现了基于Kernel的学习演算法,它最早在支持向量机(SVM)方法中被引入,后来发现多种学习方法可以使用Kernel的形式来表示。它们又被称作基于Kernel的学习演算法。在自然语言处理领域应用基于Kernel的学习演算法,与基于特征向量的学习演算法不同, 其不需要构造特征向量, 而是直接使用字元串的原始形式作为处理对象,需要做的只是计算任何两个对象之间的 Kernel? (Similarity) 函数。 Zelenko等以及Culotta等使用Kernel的方法解决关系抽取问题,取得了较好的结果,他们使用的方法需要对处理对象进行浅层的句法分析。然而,Kernel的一个致命的缺点是训练和预测的速度太慢,不适于处理大量的数据。

而北京理工大学大数据搜索与挖掘实验室张华平主任研发的NLPIR大数据语义智能分析系统能够智能识别文本中出现的人名、地名、机构名、媒体、作者及文章的主题关键词,这是对语言规律的深入理解和科学预测,其所提炼出的词语不需要在词典库中事先存在。NLPIR实体抽取系统采用基于角色标注演算法自动识别命名实体(演算法细节请参照:张华平,高凯,黄河燕,赵燕平《大数据搜索与挖掘》科学出社2014.5ISBN:978-7-03-040318-6),开发者可在此基础上搭建多样化的大数据挖掘应用。


第一步先命名实体识别,抽取出相关实体,可以参考开源代码macanv/BERT-BiLSTM-CRF-NER。

第二步关系抽取,将实体对输入,并提取实体间的关系,具体可参考THU的开源代码OpenNRE,相关步骤及paper可以参考一下:

风霖:OpenNRE关系抽取入门& 绪论?

zhuanlan.zhihu.com图标


更新一下,大概一周前吧,斯坦福manning组发表了一个新的工具:Stanza,涵盖了66种语言,可以直接做NER(命名实体识别)。

https://github.com/stanfordnlp/stanza?

github.com

相关介绍文:

机器之心:Manning大神牵头,斯坦福开源Python版NLP库Stanza:涵盖66种语言?

zhuanlan.zhihu.com图标

实战文:

hahakity:Stanza:中文自然语言处理福利?

zhuanlan.zhihu.com图标

另外我自己在博客中也总结了NER相关,包括统计时代的HMM、CRF以及深度学习时代模型方法,还有部分经典论文的介绍:

北望你的安?

wangjiaan.cn


建议通过依存句法或者语义依存提取出词序列的语义信息,再通过不同依存关系的筛选重组得到实体关系,构建元祖的方法个人感觉有点绕弯路了。具体可借助一下NLTK、LTP等库。


小白想问词性标注怎么弄呀


你好,我的导师最近也给我了类似的关系抽取但我项目,我也是刚入门,请问现在那些开源框架比如斯坦福的deepdive和浙大的openke好用吗


推荐阅读:
相关文章