[英]How to train Stanford CRF NER from a tsv file
我想训练自己的模型,例如,我需要通过训练后的模型运行此字符串:“《丰田陆地巡洋舰1956-1987黄金投资组合》杂志上的49条杂志文章的书http://t.co/EqxmY1VmLg http:// t .co / F0Vefuoj9Q “
tsv文件如下所示:
Toyota PERS
Land PERS
当我通过程序运行它时:
public static void main(String[] args) {
String serializedClassifier2 = "C:/standford-ner/ner-model.ser.gz";
try {
NERClassifierCombiner classifier = new NERClassifierCombiner(false, false,
serializedClassifier2);
String ss = "Book of 49 Magazine Articles on Toyota Land Cruiser 1956-1987 Gold Portfolio http://t.co/EqxmY1VmLg http://t.co/F0Vefuoj9Q";
System.out.println("---");
List<List<CoreLabel>> out = classifier.classify(ss);
for (List<CoreLabel> sentence : out) {
for (CoreLabel word : sentence) {
System.out.print(word.word() + '/' + word.get(AnswerAnnotation.class) + ' ');
}
System.out.println();
}
} catch (ClassCastException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这是我得到的输出:
Book/PERS of/PERS 49/O Magazine/PERS Articles/PERS on/O Toyota/PERS Land/PERS Cruiser/O 1956-1987/PERS Gold/PERS Portfolio/PERS http://t.co/EqxmY1VmLg/PERS http://t.co/F0Vefuoj9Q/PERS
对我来说,输出是错误的。 我需要得到Book/O of/O
我不确定它是如何获得此值的,例如在我的tsv文件中未提及“ book”。 我在tsv文件中没有提到的单词应该是O
这个tsv文件仅仅是个开始; 我还有很多话要补充。
您已给分类器训练数据,其中100%的数据是一类: PERS
。 由于您的训练数据中有100%是该课程,因此您可以将100%的作业返还给该课程。
对于算法, O
只是另一类。 您没有提供O
示例,因此它不会将任何内容归类为O
CHAPTER O
I O
Emma PERS
Woodhouse PERS
, O
handsome O
, O
clever O
, O
and O
rich O
, O
with O
a O
comfortable O
home O
...
因此,您可以在其中看到它们在原位标记每个标记,并带有大量O
类的示例。 我并不完全熟悉CRF分类器的工作原理,但是我怀疑您需要为它提供经过适当标记的实际数据,而不仅仅是给出目标类成员示例的列表。
但是,这引出了另一个问题-如果您只是想为该任务匹配字符串,为什么要使用NER? 为什么不匹配字符串? 如果这是您的目标,那么跳过复杂的NLP将使您免于头疼。 您将更快地获得结果,并且更容易手动调整。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.