Stanford NLP工具3.6.0版的XML输出包含这样的块用于关系提取:
<relation id="RelationMention-11">Located_In
<arguments>
<entity id="EntityMention-3">PEOPLE
<span start="12" end="13"/>
<probabilities/>
</entity>
<entity id="EntityMention-4">LOCATION
<span start="17" end="18"/>
<probabilities/>
</entity>
</arguments>
...
</relation>
什么是 Span 开始和结束的正确解释?它们明显是句子的标记列表中的索引,但它们不对应于相应提及标注的第一个和最后一个标记 . 以下是上述句子中的相关标记:
<token id="12">
<word>and</word>
<lemma>and</lemma>
<CharacterOffsetBegin>66</CharacterOffsetBegin>
<CharacterOffsetEnd>69</CharacterOffsetEnd>
<POS>CC</POS>
<NER>O</NER>
</token>
<token id="13">
<word>Lazio</word>
<lemma>Lazio</lemma>
<CharacterOffsetBegin>70</CharacterOffsetBegin>
<CharacterOffsetEnd>75</CharacterOffsetEnd>
<POS>NNP</POS>
<NER>PERSON</NER>
</token>
<token id="14">
<word>provinces</word>
<lemma>province</lemma>
<CharacterOffsetBegin>76</CharacterOffsetBegin>
<CharacterOffsetEnd>85</CharacterOffsetEnd>
<POS>NNS</POS>
<NER>O</NER>
</token>
<token id="15">
<word>in</word>
<lemma>in</lemma>
<CharacterOffsetBegin>86</CharacterOffsetBegin>
<CharacterOffsetEnd>88</CharacterOffsetEnd>
<POS>IN</POS>
<NER>O</NER>
</token>
<token id="16">
<word>Long</word>
<lemma>Long</lemma>
<CharacterOffsetBegin>89</CharacterOffsetBegin>
<CharacterOffsetEnd>93</CharacterOffsetEnd>
<POS>NNP</POS>
<NER>LOCATION</NER>
</token>
<token id="17">
<word>Beach</word>
<lemma>Beach</lemma>
<CharacterOffsetBegin>94</CharacterOffsetBegin>
<CharacterOffsetEnd>99</CharacterOffsetEnd>
<POS>NNP</POS>
<NER>LOCATION</NER>
</token>
<token id="18">
<word>Island</word>
<lemma>Island</lemma>
<CharacterOffsetBegin>100</CharacterOffsetBegin>
<CharacterOffsetEnd>106</CharacterOffsetEnd>
<POS>NNP</POS>
<NER>LOCATION</NER>
</token>
<token id="19">
<word>and</word>
<lemma>and</lemma>
<CharacterOffsetBegin>107</CharacterOffsetBegin>
<CharacterOffsetEnd>110</CharacterOffsetEnd>
<POS>CC</POS>
<NER>O</NER>
</token>
我最好的猜测是每个关系的结束偏移是形成参数的依赖结构中头部的标记索引,但我不能确定 .
更新:当我进一步观察时更加困惑 . 以下句子:
“约翰克里说总理本雅明内塔尼亚胡和巴勒斯坦民族权力机构主席阿巴斯都在接受政治考验 . ”
产生以下关系:
<relation id="RelationMention-9">Work_For
<arguments>
<entity id="EntityMention-3">O
<span start="8" end="9"/>
<probabilities/>
</entity>
<entity id="EntityMention-4">PEOPLE
<span start="11" end="12"/>
<probabilities/>
</entity>
</arguments>
...
</relation>
<relation id="RelationMention-12">Work_For
<arguments>
<entity id="EntityMention-4">PEOPLE
<span start="11" end="12"/>
<probabilities/>
</entity>
<entity id="EntityMention-3">O
<span start="8" end="9"/>
<probabilities/>
</entity>
</arguments>
...
</relation>
它发现的关系是Work_For(阿巴斯,巴勒斯坦),基本上,但它发现它两次(其中一个必须是错误的参数顺序),并且它从一个甚至不在参数中的标记中拉出实体的标签 .
我已经在3.7.0 beta测试了这个并且得到了相同的行为 . 救命!
更新2:我终于开始关注如何在Python中解码Google协议缓冲区的Chris Manning的说明,这是我在第二个例子中获得的实体:
entity {
objectID: "EntityMention-3"
extentStart: 8
extentEnd: 9
type: "O"
headStart: 8
headEnd: 9
headTokenIndex: 8
corefID: "-1"
}
entity {
objectID: "EntityMention-4"
extentStart: 10
extentEnd: 12
type: "PEOPLE"
headStart: 11
headEnd: 12
headTokenIndex: 11
corefID: "-1"
}
所以,第一个答案: Span 开始和结束是头部开始和结束,而不是范围的开始和结束 .
然后,我回到原来的NER列表,意识到"O"类型的实体有一个NER标签"MISC",然后我意识到PEOPLE不是NER标签的't an NER label. So, next answer: the types of the entities aren' . 他们不是来自coref,因为我没有明确地预计不会成为NER标签 . 这引发了额外的问题,即它们来自何处,以及标签库存是什么 .
最后的谜团是让两个关系跨越同一区间的情况 . 我必须假设这是特定训练方案不能排除的可能性,但它也可能是解码错误 .