LingPipe命名实体识别器输出许多不匹配

时间:2015-03-06 15:08:11

标签: nlp named-entity-recognition lingpipe

我正在尝试使用LingPipe并跟随this tutorial提取命名实体(人员,个人和组织)。这是我试图从中提取名称的full text,这里是代码(为简洁省略了异常处理):

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.pairthe BaliI'Widodo. I,{{ 1}}," Abbott。我假设库的NER工作正常,问题是上面的代码在某种程度上误用了这个库中的类/方法。但我似乎无法找到代码有什么问题?

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

似乎问题出在你在第一行读到的chunker模型中。可能它使用了错误的标记化器,它是Bali.I'Widodo. I" Abbott"的来源。 pairthe Bali可以通过普通错误来解释(标记符通常精度不超过80-90%)。但是,此类错误的来源也可以通过错误的模型来解释 - 例如,它可以针对另一个域进行培训。

是的,你为什么要使用长管,而不是Stanford NER?它通常表现出更好的结果;例如第一个可用(即随机)article。 另外,here是Standford NER的一个很好的分步教程。