首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >训练OPenNLP误差

训练OPenNLP误差
EN

Stack Overflow用户
提问于 2013-12-07 10:13:05
回答 2查看 3.5K关注 0票数 5

我正在尝试使用OpenNLP来训练一个名称实体模型,但是得到这个错误不知道缺少什么。我是这个OPENNLP的新手,任何一个请帮助,如果需要的话可以提供Train.txt文件。

代码语言:javascript
复制
lineStream = opennlp.tools.util.PlainTextByLineStream@b52598
Indexing events using cutoff of 0

Computing event counts...  done. 514 events
Indexing...  done.
Sorting and merging events... done. Reduced 514 events to 492.
Done indexing.
Incorporating indexed data for training...  
done.
Number of Event Tokens: 492
    Number of Outcomes: 1
  Number of Predicates: 3741
...done.
Computing model parameters ...
Performing 1 iterations.
1:  ... loglikelihood=0.0   1.0
Exception in thread "main" java.lang.IllegalArgumentException: Model not compatible with     name finder!
at opennlp.tools.namefind.TokenNameFinderModel.<init>(TokenNameFinderModel.java:81)
at opennlp.tools.namefind.TokenNameFinderModel.<init>(TokenNameFinderModel.java:106)
at opennlp.tools.namefind.NameFinderME.train(NameFinderME.java:374)
at opennlp.tools.namefind.NameFinderME.train(NameFinderME.java:432)
at opennlp.tools.namefind.NameFinderME.train(NameFinderME.java:443)
at Train2.main(Train2.java:36)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

我的代码是

代码语言:javascript
复制
    File fileTrainer=new File("/home/ashfaq/Documents/Train.txt");
    File output=new File("/home/ashfaq/Documents/trainedModel.bin");
    ObjectStream<String> lineStream = new PlainTextByLineStream(new    FileInputStream(fileTrainer), "UTF-8");
    ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream);
    System.out.println("lineStream = " + lineStream);
    TokenNameFinderModel model = NameFinderME.train("en", "location", sampleStream, Collections.<String, Object>emptyMap(), 1, 0);

    BufferedOutputStream modelOut = null;
    try {
        modelOut = new BufferedOutputStream(new FileOutputStream(output));
        model.serialize(modelOut);
    } finally {
        if (modelOut != null)
            modelOut.close();
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-23 07:22:15

我知道这在很久以前就被问到了,我也面临着一个类似的问题,分类设置了一个合适的截止点来解决我的问题。因此,如果你给一个截止值为1,它可能会有帮助(免责声明:-我还没有测试它)

如果你想保留一个默认的截止值(也就是5),那么你必须至少训练5次才能让它识别。

票数 1
EN

Stack Overflow用户

发布于 2013-12-08 17:14:15

这通常是因为在培训数据中的标记之后没有空格。例如,

代码语言:javascript
复制
<START:person>bob<END> 
will fail but 
<START:person> bob <END> 
will succeed.

如果这不能解决问题,则发布大量培训数据。另外,确保培训文件中的每个句子都在一行上。换句话说,所有句子都不应该包含\n,必须以\n结尾

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20440131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档