LingPipe Named Entity Recognizer выводит много несоответствий
Я пытаюсь извлечь именованные объекты (люди, лица и организации), используя LingPipe и следуя этому руководству. Вот полный текст, из которого я пытаюсь извлечь имена, и вот код (обработка краткости исключена для краткости):
Chunker chunker = readChunker("/path-to-chunker"); // custom method for
reading the model
String article = "Some long news article spanning multiple lines...";
Chunking chunking = chunker.chunk(article);
Set<Chunk> chunkingSet = chunking.chunkSet();
for (Chunk chunk : chunkingSet) {
String name = article.substring(chunk.start(), chunk.end()));
System.out.println(name);
}
И это (часть) вывод, который я получаю:
Tony Abbott
Indonesia
Joko Widodo
Sukumaran
Andrew Chan
Bali.
pair
the Bali
Nusa Kambangan
Indonesian
Indonesian
I’
Widodo. I
” Abbott
Julie Bishop
Widodo
al-Jazeera
Sukumaran
Chan
Bishop
”
Как вы можете видеть, существует множество несовпадений / частичных совпадений, таких как Bali.
, pair
, the Bali
, I'
, Widodo. I
, " Abbott
, "
, Я предполагаю, что NER библиотеки работает просто отлично, и проблема в том, что приведенный выше код каким-то образом неправильно использует классы / методы из этой библиотеки. Но я просто не могу найти, что не так с кодом?
Есть идеи?
1 ответ
Кажется, проблема в модели чанкера, которую вы читаете в первой строке. Возможно, он использует неправильный токенизатор, который является источником Bali.
, I'
, Widodo. I
, " Abbott
, "
, pair
а также the Bali
может быть объяснено обычными ошибками (метки обычно имеют точность не более 80-90%). Однако источник таких ошибок также можно объяснить плохой моделью - например, ее можно обучить для другого домена.
Кстати, почему вы используете Longpipe, но не Stanford NER? Показывает лучшие результаты, как правило; например, первая доступная (т.е. случайная) статья. Кроме того, вот хорошее пошаговое руководство для Standford NER.