我正在做一个NLP项目。
该项目的目的是提取两件事之间的可能关系。例如,对于一对"位置"和"人",提取的结果将是"附近"、"居住"、"工作"等。
是否有任何现有的NLP工具能够做到这一点?
您可能需要查看几种不同的工具:
米蒂
麻省理工学院的新MITIE工具支持基本的关系提取。分布中包括21个英语二元关系提取模型,这些模型是在维基百科和Freebase数据的组合上训练的。您还可以训练自己的自定义关系检测器。以下是 MITIE/MITIE-models/english/binary_relations/目录的列表,该目录是在构建过程中运行 make MITIE-models
目标时下载的(名称应该相对不言自明(:
- rel_classifier_book.write_work.author.svm
- rel_classifier_film.film.directed_by.svm
- rel_classifier_influence.influence_node.influenced_by.svm
- rel_classifier_law.发明家.发明.svm
- rel_classifier_location.location.contains.svm
- rel_classifier_location.location.near_airports.svm
- rel_classifier_location.location.partially_contains.svm
- rel_classifier_organization.organization.place_founded.svm
- rel_classifier_organization.organization_founder.organizations_founded.svm
- rel_classifier_organization.organization_scope.organizations_with_this_scope.svm
- rel_classifier_people.demated_person.place_of_death.svm
- rel_classifier_people.ethnicity.geographic_distribution.svm
- rel_classifier_people.person.ethnicity.svm
- rel_classifier_people.人.国籍.svm
- rel_classifier_people.person.parents.svm
- rel_classifier_people.person.place_of_birth.svm
- rel_classifier_people.人.宗教.svm
- rel_classifier_people.place_of_interment.interred_here.svm
- rel_classifier_time.event.include_event.svm
- rel_classifier_time.event.locations.svm
- rel_classifier_time.event.people_involved.svm
OpenIE
华盛顿大学的OpenIE将从文本中提取关系,以(Arg1, Arg2, Relation)
的形式将输出表示为三元组。例如,给定输入句子:
美国总统巴拉克•奥巴马(Barack Obama(周二向数千人发表了讲话。
OpenIE将提取这些二进制关系:
- (巴拉克·奥巴马,美国总统(
- (巴拉克·奥巴马,给,他的演讲( (
- 巴拉克•奥巴马(Barack Obama(周二发表演讲(
- (巴拉克·奥巴马向数千人发表演讲(
注意:OpenIE使用非标准的开源许可证,明确禁止商业用途。
斯坦福关系提取器
斯坦福关系提取器提取Live_In、Located_In、OrgBased_In和Work_For的关系。如果要使用一组不同的关系,可以使用代码训练自己的关系提取器(网页上提供了详细信息(。
如果需要基本依赖项,还可以使用斯坦福依赖项解析器:
斯坦福依赖解析器(斯坦福解析器的一部分(将提取句子中单词之间的语法关系。例如,给定此输入:
关于港口和移民的法案由堪萨斯州共和党参议员布朗巴克提交
斯坦福解析器将提取以下语法依赖关系:
- nsubjpass(已提交,票据(
- 奥克斯帕斯(已提交,是(
- 代理(已提交,布朗巴克(
- nn(布朗巴克,参议员(
- 阿波斯(布朗巴克,共和党(
- prep_of(共和党,堪萨斯州(
- prep_on(账单、端口(
- conj_and(港口、移民(
- prep_on(票据、移民(
门
谢菲尔德大学的GATE还包括关系提取功能,尽管我自己从未使用过它。本演示文稿概述了其工作原理: https://gate.ac.uk/sale/talks/gate-course-may10/track-3/module-11-ml-adv/module-11-relations.pdf
MIML-RE 关系提取器 (http://nlp.stanford.edu/software/mimlre.shtml( 也可能很有用,如果您正在寻找 KBP 关系集中的关系之一(请参阅 http://surdeanu.info/kbp2014/TAC_KBP_2014_Slot_Descriptions_V1.1.pdf(。诚然,这是一个更大的系统,比 CoreNLP 中的"关系"注释器更痛苦。
开始使用此选项的最简单方法可能是下载 http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22stanford-kbp%22(确保同时下载模型以及所有依赖项(。从那里开始,SlotfillingTasks
中有很多相对低门槛的进入方法(例如,getSlotsInSentence()
获取给定实体的所有关系,或者classifyRelation()
对句子中两个实体之间的关系进行分类(。
你可能还想看看ReVerb。它执行开放信息提取,即您无需指定要提取的关系类型。它自动识别并提取两个名词/名词短语之间的各种动词中介关系。
它基于词性标签的简单规则,因此它非常快,也就是说,与其他依赖句法解析的系统相比。
代码可在此处获得
更新:我在一篇博客文章中写过,如何使用ReVerb PoS模式从新闻文章中提取关系三元组:
http://davidsbatista.net/blog/2017/05/08/ReVerb