Как генерировать пользовательские тройки с помощью OpenIEDemo.java, предоставленного stanford-nlp - PullRequest
0 голосов
/ 21 мая 2019

Я обучил пользовательской модели извлечения NER и Relation и проверил создание триплетов с сервером corenlp, но когда я использую OpenIEDemo.java чтобы генерировать тройки, он генерирует тройки, имеющие только отношения «имеет» и «иметь», но не те отношения, на которых я обучал свою модель извлечения отношений.

Я загружаю пользовательскую модель NER и Relation Extraction при запуске одного и того же сценария. Вот мой файл OpenIEDemo.java ...

<code>package edu.stanford.nlp.naturalli;

import edu.stanford.nlp.ie.util.RelationTriple;
import edu.stanford.nlp.io.IOUtils;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.semgraph.SemanticGraph;
import edu.stanford.nlp.semgraph.SemanticGraphCoreAnnotations;
import edu.stanford.nlp.util.CoreMap;
import edu.stanford.nlp.util.PropertiesUtils;

import java.util.Collection;
import java.util.List;
import java.util.Properties;

/**
 * A demo illustrating how to call the OpenIE system programmatically.
 * You can call this code with:
 *
 * <pre>
 *   java -mx1g -cp stanford-openie.jar:stanford-openie-models.jar edu.stanford.nlp.naturalli.OpenIEDemo
 * 
* * / открытый класс OpenIEDemo { private OpenIEDemo () {} // статическая главная public static void main (String [] args) выдает Exception { Свойства реквизита = новые свойства (); props.setProperty («аннотаторы», «токенизировать, ssplit, pos, лемма, депарсировать, natlog, openie»); props.setProperty ("ner.model", "./ner/ner-model.ser.gz"); props.setProperty ("sup.relation.model", "./relation_extractor/relation_model_pipeline.ser.ser"); Трубопровод StanfordCoreNLP = новый StanfordCoreNLP (реквизит); // Аннотируем пример документа. Текст строки; if (args.length> 0) { text = args [0]; } еще { text = "Обама родился на Гавайях. Он наш президент."; } Аннотация doc = новая аннотация (текст); pipeline.annotate (док); // Зацикливание предложений в документе int sentNo = 0; for (предложение CoreMap: doc.get (CoreAnnotations.SentencesAnnotation.class)) { System.out.println ("Предложение №" + ++ sentNo + ":" + предложение.get (CoreAnnotations.TextAnnotation.class)); // Распечатать SemanticGraph System.out.println (sentence.get (SemanticGraphCoreAnnotations.EnhancedDependenciesAnnotation.class) .ToString (SemanticGraph.OutputFormat.LIST)); // Получаем тройки OpenIE для предложения Коллекция triples = суждение.get (NaturalLogicAnnotations.RelationTriplesAnnotation.class); // Распечатать тройки для (RelationTriple triple: triples) { System.out.println (triple.confidence + "\ t" + triple.subjectLemmaGloss () + "\ t" + triple.relationLemmaGloss () + "\ t" + triple.objectLemmaGloss ()); } // Альтернативно, чтобы запустить только, например, разделитель предложений: List clauses = new OpenIE (реквизит) .clausesInSentence (предложение); for (предложение SentenceFragment: пункты) { System.out.println (clause.parseTree.toString (SemanticGraph.OutputFormat.LIST)); } System.out.println (); } } }

Заранее спасибо.

1 Ответ

0 голосов
/ 03 июня 2019

Поскольку модуль OpenIE stanfordCoreNLP не использует пользовательскую модель отношений (не знаю почему), я не могу вместо этого использовать модель извлечения пользовательских отношений с этим кодом, мне пришлось запустить путь добавления конвейера SanfordCoreNLP для моей пользовательской модели NER и модели извлечения отношений на сервере.Файл .properties и генерировать тройки.Если кто-то знает причину, по которой OpenIE не использует собственную модель извлечения отношений, пожалуйста, прокомментируйте, это будет очень полезно для других.

...