参数数量必须始终为偶数:opennlp

时间:2016-05-23 05:57:55

标签: java command-line-interface opennlp training-data

我一直在尝试使用命令行界面来训练我的模型:

opennlp TokenNameFinderTrainer -model en-ner-pincode.bin -iterations 500 \ -lang en -data en-ner-pincode.train -encoding UTF-8

控制台输出是:

Number of parameters must be always be even
Usage: opennlp TokenNameFinderTrainer[.evalita|.ad|.conll03|.bionlp2004|.conll02|.muc6|.ontonotes|.brat] [-factory factoryName] [-resources resourcesDir] [-type modelType] [-featuregen featuregenFile] [-nameTypes types] [-sequenceCodec codec] [-params paramsFile] -lang language -model modelFile -data sampleData [-encoding charsetName]

如果我不包含迭代次数,它可以正常工作。 有人知道这背后的原因吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

实际上问题是

    -params paramsFile
            training parameters file.
    -iterations num
            number of training iterations, ignored if -params is used.
    -cutoff num
            minimal number of times a feature must be seen, ignored if -params is used.

如果有人使用params,则会忽略iterationscutoff。因此,对于您的情况,将显示此信息消息。

资源链接:

  1. Tokenizer Training : Training Tool
  2. UPDATE:

    因此,请使用ChunkerTrainerME代替TokenNameFinderTrainer

    您的命令应如下所示

    opennlp ChunkerTrainerME -model en-ner-pincode.bin -iterations 500 \ -lang en -data en-ner-pincode.train -encoding UTF-8
    

    UPDATE2:转换数据

    我将使用西班牙语数据作为参考,但它与荷兰语的操作相同。您必须记住将“-lang es”更改为“-lang nl”并使用正确的培训文件。所以要将信息转换为OpenNLP格式:

    $ opennlp TokenNameFinderConverter conll02 -data esp.train -lang es -types per > es_corpus_train_persons.txt
    

    您也可以选择转换训练测试样本。

    $ opennlp TokenNameFinderConverter conll02 -data esp.testa -lang es -types per > corpus_testa.txt
    $ opennlp TokenNameFinderConverter conll02 -data esp.testb -lang es -types per > corpus_testb.txt
    

    使用西班牙语数据进行培训

    为名称查找器训练模型:

    \bin\opennlp TokenNameFinderTrainer -lang es -encoding u
    tf8 -iterations 500 -data es_corpus_train_persons.txt -model es_ner_person.bin
    

    UPDATE3:转换数据(可选)

    将信息转换为OpenNLP格式:

    $ opennlp TokenNameFinderConverter conll03 -lang en -types per -data eng.train > corpus_train.txt
    

    您也可以选择转换训练测试样本。

    $ opennlp TokenNameFinderConverter conll03 -lang en -types per -data eng.testa > corpus_testa.txt
    $ opennlp TokenNameFinderConverter conll03 -lang en -types per -data eng.testb > corpus_testb.txt
    

    使用英语数据进行培训

    您可以通过以下方式训练名称查找器的模型:

    $ opennlp TokenNameFinderTrainer.conll03 -model en_ner_person.bin -iterations 500 \
                                     -lang en -types per -data eng.train -encoding utf8
    

    如果您已转换数据,则可以通过以下方式训练名称查找器的模型:

    $ opennlp TokenNameFinderTrainer -model en_ner_person.bin -iterations 500 \
                                     -lang en -data corpus_train.txt -encoding utf8
    

答案 1 :(得分:0)

来自" https://opennlp.apache.org/documentation/1.6.0/manual/opennlp.html#intro.cli"

Usage: opennlp TokenizerTrainer[.namefinder|.conllx|.pos] [-abbDict
path] ...  -model modelFile ...
     

此工具命令行的一般结构包括必需的工具名称(TokenizerTrainer),可选格式   参数([.namefinder | .conllx | .pos]),可选参数   ([-abbDict path] ...),以及必修参数(-model modelFile   ...)。

所以参数都是以"开头的东西。"或者使用" - ",并且需要偶数个。文档中的示例似乎与此一致。

答案 2 :(得分:0)

简短回答,iterations不是TokenNameFinderTrainer的参数。您可以从控制台输出中列出已识别参数的问题中看到。