Написание собственных моделей в openNLP

Если я использую запрос, как это в командной строке

./opennlp TokenNameFinder en-ner-person.bin "input.txt" "output.txt"

Я выведу имена людей в output.txt, но я хочу написать собственные модели, чтобы я мог печатать свои собственные объекты.

Например

  1. каково значение риска на icm2500.
  2. Доставка prd_234 прибудет поздно.
  3. Уотсон обрабатывает router_34.

Если я пропущу эти строки, он должен разобрать и извлечь product_entities. icm2500, prd_234, router_34... и т. д. это все продукты (мы можем сохранить эту информацию в файле и использовать ее для поиска моделей или openNLP).

Может кто-нибудь, пожалуйста, сообщите мне, как это сделать?

1 ответ

Вам нужно будет обучить свою собственную модель, комментируя некоторые предложения в формате opennlp. Для размещенных вами примеров предложений формат будет выглядеть следующим образом:

what is the risk value on <START:product> icm2500 <END>.
Delivery of <START:product> prd_234 <END> will be arrived late.
Watson is handling <START:product> router_34 <END>.

Убедитесь, что каждое предложение заканчивается новой строкой, и если в предложении есть новые строки, чтобы как-то избежать их. Как только вы сделаете такой файл из ваших данных, вы можете использовать Java API для обучения модели, подобной этой

public static void main(String[] args){

Charset charset = Charset.forName("UTF-8");
ObjectStream<String> lineStream =
        new PlainTextByLineStream(new FileInputStream("your file in the above format"), charset);
ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream);

TokenNameFinderModel model;

try {
  model = NameFinderME.train("en", "person", sampleStream, TrainingParameters.defaultParams(),
            null, Collections.<String, Object>emptyMap());
}
finally {
  sampleStream.close();
}

try {
  modelOut = new BufferedOutputStream(new FileOutputStream(modelFile));
  model.serialize(modelOut);
} finally {
  if (modelOut != null) 
     modelOut.close();      
}

}

Теперь вы можете использовать модель с именователем.

Поскольку у вас может быть точный и, возможно, короткий список названий продуктов, вы можете рассмотреть простой подход регулярных выражений.

вот документы opennlp, которые немного охватывают NameFinder:

http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind.training.tool
Другие вопросы по тегам