StanfordNLP OpenIE:获得最佳三元组以匹配演示

时间:2018-08-05 15:01:53

标签: stanford-nlp

我正在使用StanfordNLP OpenIE,目的是通过使用OpenIE识别三元组来从更复杂的句子中提取更简单的句子。简单的句子对于提高对下游NLP任务进行提问/回答的性能是必不可少的。

这是我的默认属性:
properties ='{“ annotators”:“令牌化,拆分,pos,引理,ner,深度剖析,natlog,openie”,“ outputFormat”:“ json”}'

这是我的测试句子:
text ='患者被置于左侧卧位,并通过心电图追踪,脉搏血氧饱和度监测和直接观察进行连续监测。'

无论我使用docker NLP服务器还是从下载的Java发行版运行,我都会得到以下结果(有意义):
病人被放置在|横向位置
病人持续监控|心电图追踪
病人脉冲血氧饱和度监测
病人放置在|左侧位置
病人原为|已放置
病人放置在|左侧位置
病人受监控|心电图追踪
病人放置在|位置

但是,如果我在http://corenlp.run/的演示页面上运行相同的测试语句,则Brat可视化效果似乎会返回一组更为简洁的三元组:
病人持续监控|心电图追踪
病人脉冲血氧饱和度监测
病人放置在|左侧位置

我已经尝试了此处列出的每个OpenIE注释选项:
https://nlp.stanford.edu/software/openie.html#Questions,但未能产生更简洁的结果。

是否有可用的选项?如果没有,将不胜感激任何获得此结果的算法。

谢谢

1 个答案:

答案 0 :(得分:0)

当我尝试corenlp.run时,如果将鼠标悬停在每个实体上,则会得到相同的扩展三元组:

corenlp.run OpenIE Output

但是,您可以通过仅采用最大可能的subject + object + relation范围将它们折叠为更少的三元组。有几种方法可以做到这一点:

  1. 最灵活:如果您以编程方式调用OpenIE注释器,则关系三元组将保留其每个参数的句子+令牌偏移量,您可以使用它来确定每个提取关系的最大跨度参数。

  2. 从历史上讲,您可以简单地忽略作为其他提取子集的关系提取。

  3. QA_SRL输出格式实际上将为您执行选项(1),以符合惩罚“重复”关系提取的评估。

但是,在许多情况下,保持更多的提取物也是无害的/可取的。从意义上讲,每个摘录都应该是“真实的”,因为某些摘录是源于句子的-有些只是比其他的更具体。