当前位置: 首页 > 面试题库 >

如何在OpenNLP中训练命名实体识别器标识符?

吕自怡
2023-03-14
问题内容

好的,我有以下代码来训练来自OpenNLP的NER标识符

FileReader fileReader = new FileReader("train.txt");
ObjectStream fileStream = new PlainTextByLineStream(fileReader);
ObjectStream sampleStream = new NameSampleDataStream(fileStream);
TokenNameFinderModel model = NameFinderME.train("pt-br", "train", sampleStream, Collections.<String, Object>emptyMap());
nfm = new NameFinderME(model);

我不知道我是否做错了什么,如果缺少什么,但是分类不起作用。我认为train.txt错误。

*发生 *的错误 是所有令牌仅被分类为一种类型。

我的train.txt数据类似于以下示例,但是条目的变化和数量更多。另一件事是,我每次都从文本中逐字逐句地查找,而不是所有标记。

<START:distance> 8000m <END>
<START:temperature> 100ºC <END>
<START:weight> 50kg <END>
<START:name> Renato <END>

有人可以证明我做错了吗?


问题答案:

您的训练数据不正确。

您应该将所有实体放在句子中的上下文中:

At an altitude of <START:distance> 8000m <END> the temperature of boiling water is less than <START:temperature> 100ºC <END> .
The climber <START:name> Renato <END> is carrying <START:weight> 50kg <END> of equipment.

如果您的训练数据来自真实世界的句子,并且具有与您要分类的句子相同的样式,那么您将获得更好的结果。例如,如果您要处理新闻,则应该使用报纸语料库进行培训。

此外,您将需要成千上万的句子来建立模型!也许您可以从一百开始,然后使用较差的模型来改进语料库并再次训练模型。

当然,您应该对句子的所有标记进行分类,否则将没有上下文来确定实体的类型。



 类似资料:
  • 我目前正在从事一个java web服务器项目,该项目需要使用自然语言处理,特别是实体识别(Entity Recognition,NER)。 我在java中使用OpenNLP,因为添加自定义训练数据很容易。它工作得很好。 然而,我还需要能够提取实体内部的实体(嵌套命名实体识别)。我试着在OpenNLP中这样做,但我遇到了解析错误。所以我猜OpenNLP很遗憾不支持嵌套实体。 下面是一个我需要解析的示

  • 编辑1:主要的问题是在训练完一个NER模型后,我将它应用到令牌上。因此,它不会识别“轮滑”,因为在代币中,它们以“轮滑”和“滑冰”的形式出现,而NER模型现在无法识别这个爱好。

  • 我想在一个特定的领域进行NER实验,即从意大利语的旅行优惠中提取位置名称。 到目前为止,我需要自己准备训练,所以我要把 在我的培训集中的一些报价中添加标签。 但在查看OpenNLP关于如何为NER进行培训的文档时,我最终遇到了几个问题: 1) 在定义开始/结束标记时,我可以自由使用标记中的任何名称(我在上面几行写了“某物”),或者是否有要绑定的限制集? 2) 我注意到对培训工具的调用 将表示语言的

  • 问题内容: 我正在寻找Java的简单但“足够好”的命名实体识别库(和字典),我正在处理电子邮件和文档并提取一些“基本信息”,例如:名称,地点,地址和日期 我一直在环顾四周,大多数似乎都是沉重的一面和完整的NLP项目。 有什么建议吗? 问题答案: 顺便说一句,我最近遇到了OpenCalais,它似乎具有我要照顾的功能。

  • 有人能指出openNLP NameFinder模块使用的算法吗?代码很复杂,只有很少的文档记录,并且将其作为黑匣子(提供默认模型)使用给我的印象是它主要是启发式的。以下是一些输入和输出示例: 输入: 约翰·史密斯很沮丧。 约翰·史密斯很沮丧。 巴拉克·奥巴马感到沮丧。 乌戈·查韦斯很沮丧。(不再) 杰夫·阿特伍德很沮丧。 刘冰对openNLP NER模块感到失望。 诺姆·乔姆斯基对这个世界感到沮丧

  • 我正在尝试训练名称查找器模型来检测名称,但它没有给出正确的结果。这是代码。 这是iam得到的输出: 检测到的名称:[07-20 19:35:47.516 8799:8799 I/Adreno EGL] en-ner-person.train内容是: 请帮忙。