我正在使用自定义模型进行实体提取。我在大型数据集上对基于CRF的模型进行了训练,
java -Xmx16g stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop ner.prop
使用这些功能
属性文件(ner.prop)
trainFile = training_data_IOB.tsv
#serializeTo = ner-model.ser.gz
map = word=0,answer=1
useClassFeature=true
useWord=true
qnSize=10
entitySubclassification=IOB1
retainEntitySubclassification=true
mergeTags=true
useNGrams=true
noMidNGrams=true
maxNGramLeng=6
usePrev=true
useNext=true
useSequences=true
usePrevSequences=true
maxLeft=1
useTypeSeqs=true
useTypeSeqs2=true
useTypeySequences=true
wordShape=chris2useLC
useDisjunctive=true
useGazettes=true
gazette=gazetter.txt
sloppyGazette=true
培训文件(training_data_IOB.tsv)
Thousands O
of O
demonstrators O
have O
marched O
through O
London B-LOC
to O
protest O
the O
war O
in O
Iraq B-LOC
... ...
宪报文件(gazetter.txt)
B-LOC Iraq
B-LOC Afghanistan
B-ORG Congressional
B-LOC Bangladesh
B-LOC Canada
B-ORG ...
新模型创建为 ner-model.ser.gz ,并且运行良好。
现在我的问题是,如何在不进行任何手动计数和计算的情况下如何对任何看不见的(新)数据计算其百分比准确性?
我是该领域的新手,请发表详细的描述性答案。谢谢你的时间。
答案 0 :(得分:0)
如果使用测试集的金色标签创建一个conll文件,则可以使用此命令,它将输出分数(此示例运行我们的模型,替换为您的自定义模型):
java -Xmx2g edu.stanford.nlp.ie.crf.CRFClassifier -loadclassifier edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz -testFile testData.conll