Java 训练OPenNLP错误

Java 训练OPenNLP错误,java,opennlp,Java,Opennlp,我正在尝试使用OpenNLP训练一个名称实体模型,但是得到这个错误不知道缺少了什么。我是这个OPENNLP的新手,任何人请帮助,如果需要可以提供Train.txt文件 lineStream = opennlp.tools.util.PlainTextByLineStream@b52598 Indexing events using cutoff of 0 Computing event counts... done. 514 events Indexing... done. Sorting

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

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)
lineStream=opennlp.tools.util。PlainTextByLineStream@b52598
使用0的截止值索引事件
正在计算事件计数。。。完成。514项活动
索引。。。完成。
排序和合并事件。。。完成。将514个事件减少到492个。
完成索引。
合并索引数据进行培训。。。
完成。
事件令牌数:492
成果数量:1
谓词数:3741
……完成了。
计算模型参数。。。
执行1次迭代。
1:  ... 对数似然=0.01.0
线程“main”java.lang.IllegalArgumentException中出现异常:模型与名称查找器不兼容!
在opennlp.tools.namefind.TokenNameFinderModel。(TokenNameFinderModel.java:81)
在opennlp.tools.namefind.TokenNameFinderModel。(TokenNameFinderModel.java:106)
位于opennlp.tools.namefind.NameFinderME.train(NameFinderME.java:374)
位于opennlp.tools.namefind.NameFinderME.train(NameFinderME.java:432)
位于opennlp.tools.namefind.NameFinderME.train(NameFinderME.java:443)
在Train2.main(Train2.java:36)
Java结果:1
生成成功(总时间:2秒)
我的密码是

    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();
    }
File fileTrainer=新文件(“/home/ashfaq/Documents/Train.txt”);
文件输出=新文件(“/home/ashfaq/Documents/trainedModel.bin”);
ObjectStream lineStream=新的明文ByLineStream(新的FileInputStream(fileTrainer),“UTF-8”);
ObjectStream sampleStream=新名称采样数据流(lineStream);
System.out.println(“lineStream=“+lineStream”);
TokenNameFinderModel=NameFinderME.train(“en”,“location”,sampleStream,Collections.emptyMap(),1,0);
BufferedOutputStream modelOut=null;
试一试{
modelOut=newbufferedoutputstream(newfileoutputstream(output));
序列化(modelOut);
}最后{
if(modelOut!=null)
modelOut.close();
}

这通常是因为训练数据中的标记后没有空格。比如说,

<START:person>bob<END> 
will fail but 
<START:person> bob <END> 
will succeed.
bob
将失败,但
上下快速移动
我们会成功的。

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

我知道这是在很久以前提出的问题,我在分类设置适当的截止点时遇到了类似的问题。解决了我的问题。因此,如果您将截止值设为1,可能会有所帮助(免责声明:-我没有测试过)


如果你想保留一个默认的截止值(5),那么你必须至少对它进行5次训练,让它识别

是的,我找到了,现在训练成功了。但是现在我有另一个问题,如果你能帮忙的话。我只为一句话训练了一个名称实体识别器,作为测试它是否适合我的训练数据。它训练成功。但当它在我训练它的同一条线上测试时,它没有给我输出。至少它应该在我训练它的那一行上给我输出。。不是吗???不一定,最大熵模型需要多个验证点才能返回命中率(看起来如此)。训练句子的“标准”数量是15K。。。。