[英]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.