OpenNLP против Stanford CoreNLP

Я делал небольшое сравнение этих двух пакетов, и я не уверен, в каком направлении идти. То, что я ищу кратко:

  1. распознавание именованных сущностей (люди, места, организации и т. д.).
  2. гендерная идентификация.
  3. достойный API обучения.

из того, что я могу сказать, OpenNLP и Stanford CoreNLP выставляют довольно похожие возможности. Однако, Стэнфорд CoreNLP, похоже, имеет гораздо больше активность в то время как OpenNLP только несколько коммитов за последние шесть месяцев.

основываясь на том, что я видел, OpenNLP, похоже, легче обучать новые модели и может быть более привлекательным только по этой причине. Тем не менее, мой вопрос заключается в том, с чего бы другие начали в качестве основы для добавления функций НЛП в приложение Java? Я в основном беспокоюсь о том, является ли OpenNLP "просто зрелым" по сравнению с полу-заброшенным.

3 ответов


в полном раскрытии, я являюсь участником CoreNLP, так что это предвзятый ответ. Но, на мой взгляд, по вашим трем критериям:

  1. распознавание именованных сущностей: я думаю, что CoreNLP явно выигрывает здесь, как по точности, так и по простоте использования. Во-первых, OpenNLP имеет модель на тег NER, тогда как CoreNLP обнаруживает все теги с одним Аннотатором. Кроме того, временное разрешение с SUTime-хороший перк в CoreNLP. С точки зрения точности, мой анекдотический опыт заключается в том, что CoreNLP делает лучше текст общего назначения.

  2. гендерная идентификация. Я думаю, что оба инструмента плохо документированы на этом фронте. OpenNLP, похоже, имеет класс GenderModel; CoreNLP имеет гендерный Аннотатор.

  3. обучение API. Я подозреваю, что OPENNLP training API проще в использовании для не готового обучения. Но, если все, что вы хотите сделать, это, например, обучить модель из файла CoNLL, оба должны быть простыми. Скорость обучения, как правило, быстрее с CoreNLP чем другие инструменты, которые я пробовал,но я не проверил его формально, так что возьмите это с солью.


немного поздно здесь, но я недавно посмотрел на OpenNLP, основанный только на том, что Стэнфорд лицензируется GPL - если это нормально для вашего проекта, то Стэнфорд часто называют эталоном/современным для НЛП.

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

сила OpenNlp в том, что он очень расширяемый и написан для удобного использования с другими библиотеками и имеет хороший API для интеграции-обучение очень простое (как только у вас есть данные обучения) с OpenNLP (я написал об этом здесь - с довольно паршивым сгенерированным набором данных я смог получить хорошие результаты, идентифицирующие продукты), и она очень конфигурируема-вы можете установить все параметры вокруг обучения очень легко и есть целый ряд алгоритмов, которые вы можете использовать (перцептрон, максимальная энтропия,и в версии моментального снимка они добавили наивный Байес)

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


это зависит от вашей цели и потребности, что я знаю об этих двух OpenNLP является открытым исходным кодом и CoreNLP нет конечно.

но если вы посмотрите на уровень точности Stanford CoreNLP есть более точное определение, чем OpenNLP. Недавно я сделал сравнение для Part Of Speech (POS) пометка для обоих и да, которая является самой бесовской частью в любой задаче НЛП, поэтому в моем анализе победителем был CoreNLP.

на NER там же CoreNLP есть более точные результаты сравниваются с OpenNLP.

Итак, если вы только начинаете, вы можете взять OpenNLP позже, если необходимо, вы можете перейти на Stanford CoreNLP.