当前位置: 首页 > 知识库问答 >
问题:

如何在OpenNLP中创建良好的NER训练模型?

贾实
2023-03-14

我刚开始使用OpenNLP。我需要创建一个简单的训练模型来识别名称实体。

<START:person> Pierre Vinken <END> , 61 years old , will join the board as a nonexecutive director Nov. 29 .
Mr . <START:person> Vinken <END> is chairman of Elsevier N.V. , the Dutch publishing group .
<START:person> Rudolph Agnew <END> , 55 years old and former chairman of Consolidated Gold Fields PLC ,
    was named a director of this British industrial conglomerate .
<START:person> Robert <END>

<START:person> Maria <END>

<START:person> John <END>

共有1个答案

邹玮
2023-03-14

你的第一个问题的答案是,算法工作于句子中的周围上下文(标记);它不仅仅是一个简单的查找机制。OpenNLP使用最大熵这一多项式logistic回归的一种形式来建立模型。这样做的原因是为了减少“词义歧义”,并在上下文中找到实体。例如,如果我的名字是April,我很容易与四月的月份混淆,如果我的名字是May,那么我会与五月的月份以及动词May混淆。在第一个问题的第二部分,你可以列出一个已知的名称列表,并在一个程序中使用这些名称,该程序查看你的句子并自动注释它们,以帮助你创建一个训练集,然而,单独列出一个名称列表,而不考虑上下文,将无法充分训练模型,或者根本无法训练模型。事实上,有一个名为“ModelBuilder addon”的OpenNLP addon就是为此设计的:您给它一个名称文件,它使用这些名称和一些数据(句子)来训练模型。如果您正在寻找通常不模棱两可的实体的特定名称,那么最好使用列表和类似regex的东西来发现名称,而不是ner。

至于你的第二个问题,有几个选择,但总的来说,我不认为NER是一个很好的工具来描述像性别这样的东西,但如果有足够的训练句子,你可能会得到不错的结果。由于NER使用一个基于句子训练集中的周围标记的模型来建立命名实体的存在,所以它在识别性别方面做不到很多。你最好找到所有的人名,然后引用一个你知道是男性还是女性的名字索引来获得匹配。此外,一些名字,如帕特,既有男性也有女性,在大多数文本数据中,不会表明它是人类还是机器。也就是说,您可以分别创建男模型和女模型,或者可以在同一个模型中创建不同的实体类型。您可以使用如下注释(使用不同的实体类型名male.person和female.person)。我从来没有尝试过这个,但它可能会做得很好,你必须在你的数据上测试它。

<START:male.person> Pierre Vinken <END> , 61 years old , will join the board as a nonexecutive director Nov. 29 .
Mrs . <START:female.person> Maria <END> is chairman of Elsevier N.V. , the Dutch publishing group

ner=命名实体识别

HTH

 类似资料:
  • 我想训练用于提取人名的模型(NER系统的一部分),但我想使这个模型无大小写(我的意思是,该模型不会考虑字母大小写,大写字母和小写字母之间没有区别),因为我有嘈杂的文本。 那么训练步骤中是否有任何参数可以做到这一点,或者任何其他方式?

  • 我正在研究为一名日本人创建训练数据。 想知道我是否需要预先标记训练数据,或者是否有办法在模型创建期间指定标记器? 在下面的示例中,日语没有任何空格: 这对培训模型有用吗?还是我需要提供标记化的培训句子?

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

  • 我的要求是像这样分析句子。“给我找一本饥饿的潮汐书。”或者“饥饿的潮水或破碎的镜子,哪一个更好。”饥饿的潮汐和破碎的镜子是书的名字,为此我需要创建一个自定义模型,在给定的令牌数组中找到书的标题。因此,稍后我可以根据给定的句子创建一个查询。请让我知道我如何做到这一点,或者如果有任何其他方法来分析这样的句子。

  • 我想使用Apache OpenNLP为我的母语乌尔都语训练NER模型。我已经准备好了中的训练数据。制作训练模型(. bin)的下一步是什么,就像我们在模型下载部分的OpenNLP站点上找到的那样。

  • 我可能需要为OpenNLP创建一个自定义训练集,这将需要我手动注释很多条目。 为了让事情变得更容易,GUI解决方案可能是最好的主意(手动编写注释标签并不酷),我刚刚发现了看起来像我需要的BRAT。 BRAT可以导出带注释的文件(. ann),但我在OpenNLP的手册中没有找到任何对该文件类型的引用,我不确定这是否可行。 我想做的是从BRAT导出这个带注释的文件并使用它来训练OpenNLP的模型,