我已成功训练了一个Relation Extractor模型,并创建了一个.ser文件。
但是,我遇到的问题是模型成功找到关系,但如果其中一个实体包含多个令牌,则只选择一个令牌。 例如,对于名为 Friend_of 的关系,以及如下的句子:
Sam Tarly最好的朋友是Jon Snow。
模型将在以下实体之间找到Friend_of类型的关系:
这导致我的测试将此标记为误报,并将模型整体标记为得分不佳。
我尝试使用相同的训练数据训练自定义NER模型,然后使用此自定义NER模型在我的道具文件中训练RelationExtractor模型以及以下属性:
trainUsePipelineNER=true
ner.model=path/to/custom-ner-model.ser.gz
但这并没有解决问题。
这只是一个训练数据不足的问题,还是我在这里缺少什么?
以下是我用来获取关系的Java代码:
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, depparse, relation");
props.put("sup.relation.model", "lib/custom-relation-model-pipeline.ser");
props.put("pos.ptb3Escaping", "false");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
List<Relation> foundRelations = new ArrayList<>();
for (String doc : documents) {
Annotation document = new Annotation(doc);
pipeline.annotate(document);
List<CoreMap> sentences = document.get(CoreAnnotations.SentencesAnnotation.class);
for (CoreMap sentence : sentences) {
List<RelationMention> relationMentions = sentence.get(MachineReadingAnnotations.RelationMentionsAnnotation.class);
for (RelationMention relation : relationMentions) {
foundRelations.add(new Relation(relation.getArg(0).getValue(), relation.getType(), relation.getArg(1).getValue()));
}
}
}
谢谢!
西蒙。
答案 0 :(得分:1)
我想您可能想尝试使用自定义关系培训KBPAnnotator&#34; friend_of&#34;。然后,您可以在管道中使用kbp
而不是relation
,并且kbp可以更好地支持处理完整提及。完成对模型文件的训练后,可以运行管道,并将-kbp.model
设置为保存统计模型的路径。
1。)研究KBPStatisticalExtractor的主要方法,看看如何完成培训。
2.)我认为您需要添加新的&#34; friend_of&#34;与KBPRelationExtractor.java中已知关系列表的关系
https://github.com/stanfordnlp/CoreNLP/blob/master/src/edu/stanford/nlp/ie/KBPRelationExtractor.java
3.)您需要将训练数据放入CoNLL格式。以下是CoNLL培训格式的示例句子。注意如何指定关系的主语和对象,并注意例句的第一行是&#34; per:employee_of&#34;。用空行分隔训练数据中的所有句子。请注意,每列都以制表符分隔。
per:employee_of
DEE SUBJECT PERSON - - NNP PERSON compound 2
DEE SUBJECT PERSON - - NNP PERSON compound 2
MYERS SUBJECT PERSON - - NNP PERSON ROOT -1
, - - - - , O punct 2
White - - OBJECT ORGANIZATION NNP LOCATION compound 13
House - - OBJECT ORGANIZATION NNP LOCATION compound 13
Press - - - - NNP O dep 13
Secretary - - - - NNP O dep 13
The - - - - NNP O det 9
first - - - - JJ ORDINAL nsubj 13
is - - - - VBZ O cop 13
the - - - - DT O det 13
US - - - - NNP LOCATION compound 13
interests - - - - NNS O appos 2
in - - - - IN O case 15
Haiti - - - - NNP LOCATION nmod 13
and - - - - CC O cc 13
in - - - - IN O case 19
the - - - - DT O det 19
region - - - - NN O conj 13
. - - - - . O punct 2
如果您对此项目有任何建议或帮助,请告诉我们!
答案 1 :(得分:1)
所以我更多地研究了MachineReading关系提取。
我认为您希望将getValue()
替换为getExtentString()
,看看是否有帮助。
我使用默认模型运行了一个示例句子:
Joe Smith works at Google.
它运作正常。
答案 2 :(得分:0)
我知道这应该是一个评论,但我还没有能够满足。我也一直试图训练关系提取模型,但还没有成功。您是否有机会愿意分享GitHub回购或更多有关您如何添加新关系的信息?我试图做几乎完全相同的事情,但一直陷入困境。谢谢!