Написание собственных моделей в openNLP
Если я использую запрос, как это в командной строке
./opennlp TokenNameFinder en-ner-person.bin "input.txt" "output.txt"
Я выведу имена людей в output.txt, но я хочу написать собственные модели, чтобы я мог печатать свои собственные объекты.
Например
- каково значение риска на icm2500.
- Доставка prd_234 прибудет поздно.
- Уотсон обрабатывает 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