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

自定义OpenNLP名称查找器识别训练集中的数据,但不识别测试集中的数据

周祺
2023-03-14

所以我最终将OpenNLP纳入了我的项目,我已经成功地在15k行训练数据上训练了我的模型,存储了它,并且可以在我想用它来识别程序中的实体时加载它!

我用它来识别标签,所以我的训练数据是这样的:

    ...
    Jim , I know you to be a fighter <START:HASHTAG> #usmarine <END> @ USMC Kira has your strength & amp ; ours @ t1r1u1t1h R love 2 U , Kira & amp ; 
    What has changed that people from your JAMAT are insulting Hindu GODS and GODDESSES . Calling our Religion names ... . 
    Ibtihaj represented the United States of America at the Olympics and brought home a medal , elevating the status of 
    A story point is a metric used in agile project management and development to determine ( or estimate ) the difficul 
    I 'm not shy or quiet , I just do n't find your mind appealing in any way shape or form and I 'm not gon na force a conv 
    <START:HASHTAG> #paradisepapers <END> , Canadian Taxpayers Federation ( CTF ) & amp ; tax reform `` CTF has not uttered even a single shocked-and-a 
    ...

我发现,如果传递的句子不直接在我的训练集中,则模型无法识别任何标签,例如:

String paragraph = "Take a shot for #harambe he took one for you!";

它将无法识别本例中的标签,即使我进行了检查,并且在我的培训数据中使用了一个#harambe实例。

但是,如果我直接从训练数据中传递一句话:

String nameParagraph = "Idk whats funnier the #harambe or the fact that Im the only one who will see my page https : t.co/2eWjm6mOon ";

它将能够通过正确地将#harambe识别为HASHTAG来识别它。

我希望我的模型能够识别所有的标签,因此我不想给它提供更多的#harambe标签实例,以便它能够识别单个标签。

关于如何让我的模型正确识别不在训练集中的新实体,有什么建议吗?提前谢谢!

共有1个答案

宰修能
2023-03-14

我不知道你为什么要对确定性问题进行统计建模。jbird7提到使用正则表达式,你也可以:

使用WhitespaceTokenizer标记您的文本

遍历字符串数组,查看字符串的第一个字符(是#)。

\\ create a Tokenizer
Tokenizer tokenizer=WhitespaceTokenizer.INSTANCE
String[] tokens = tokenizer.tokenize(text)

\\ use old-style loop for span creation
List<Span> spans = new ArrayList<Span>()
for (int i=0;i<tokens.length;i++){
   if (token.charAt(0) == '#') spans.add(new Span(i,i+1,"HashTag"))
}
Span[] foundTags = spans.toArray(new Span[spans.size])

此时,您应该具有与HashTagNameFinder完全相同的输出。如果有语法错误,请原谅。代码应该让您知道您想做什么。

 类似资料:
  • 问题内容: 好的,我有以下代码来训练来自OpenNLP的NER标识符 我不知道我是否做错了什么,如果缺少什么,但是分类不起作用。我认为train.txt错误。 *发生 *的错误 是所有令牌仅被分类为一种类型。 我的train.txt数据类似于以下示例,但是条目的变化和数量更多。另一件事是,我每次都从文本中逐字逐句地查找,而不是所有标记。 有人可以证明我做错了吗? 问题答案: 您的训练数据不正确。

  • 全部的 我在我的主要Spring Boot应用程序类中定制了,如下所示。 其中,是的扩展。我的POJO是用Jackson的注释的 我使用和注释通过HTTP公开了POJO。这很好,当我运行应用程序并访问endpoint时,会调用自定义过滤器。 现在我编写了一个集成测试,如下所示。 当我运行测试时,obj为null,我看到一个错误,没有配置FilterProvider 我做错了什么,如何纠正? 我的文

  • 我有文件及其非常大的文件说100MB文件。我想执行NER以提取组织名称。我使用OpenNLP进行了培训。 示例代码: 但是我得到了一个错误:。 有没有办法使用openNLP for NER来训练大型数据集?你能发布示例代码吗? 当我谷歌时,我发现Class GIS和DataIndexer界面可用于训练大型数据集,但我知道如何训练?你能发布示例代码吗?

  • 我刚开始使用openNLP来识别名字。我使用的是open NLP附带的模型(en-ner-person.bin)。我注意到,虽然它可以识别美国、英国和欧洲的名字,但它不能识别印度或日本的名字。我的问题是(1)是否已经有模型,我可以用来识别外国名字(2)如果没有,那么我相信我将需要生成新的模型。在这种情况下,是否有一个可供我使用的copora?

  • 本文向大家介绍python 划分数据集为训练集和测试集的方法,包括了python 划分数据集为训练集和测试集的方法的使用技巧和注意事项,需要的朋友参考一下 sklearn的cross_validation包中含有将数据集按照一定的比例,随机划分为训练集和测试集的函数train_test_split 得到的x_train,y_train(x_test,y_test)的index对应的是x,y中被抽取

  • 我试图使用ApacheOpenNLP来识别文本中的日期实体。我创建了一个小java程序,该程序使用以下格式的一系列日期生成标记: 每个标签都是OpenNLP定义格式的句子。 我生成了大约40万条条目,并对模型进行了培训。培训结束后,我试图通过命令行使用TokenNameFinder来验证一切是否正常,但对于每个单词,我都键入finder,并将其标识为日期实体。例如,当我打字时: 我得到的是: 我想