java opennlp_OpenNLP中语言检测模型训练和模型的使用
因為項目的原因,需要使用到NLP的相關技術。語言檢測模型cld3是python要與項目集成也不太方便,后來找到OpenNLP,發現它相對來說,對于亞洲的語言有一些支持。
下面是OpenNLP的訓練相關的東西,在項目里如果檢測對象過短,對于檢測結果也容易出現偏差的情況。所以語料要充足。
一 、文檔準備
我們先從文檔入手,在官網上的文檔是很規范的,先找到Language Detector這個title,然后往下看到training,我們根據文檔提示,發現其實我們的語料按照如下規范就可以
注意幾點:
1.文本文件中的一行就是一條語料,第一列是語種對應的ISO-639-3碼,第二列是tab縮進,第三列就是語料文本
2.對于長文本,不要人為的去加換行
3.訓練語料必須要有多個不同的語料信息,否則在訓練時會報錯
二 、模型訓練
有了以上的語料文件,就可以通過幾行簡單的代碼就能將其訓練成我們需要的語言檢測了
InputStreamFactory inputStreamFactory = new MarkableFileInputStreamFactory(new File("corpus.txt"));
ObjectStream lineStream = newPlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8);
ObjectStream sampleStream = newLanguageDetectorSampleStream(lineStream);
TrainingParameters params=ModelUtil.createDefaultTrainingParameters();
params.put(TrainingParameters.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE);
params.put(TrainingParameters.CUTOFF_PARAM,0);
LanguageDetectorFactory factory= newLanguageDetectorFactory();
LanguageDetectorModel model=LanguageDetectorME.train(sampleStream, params, factory);
model.serialize(new File("langdetect.bin"));
}
最后運行一下,就能在你的本地生成一個langdetect.bin的語料文件了,以后就在程序里用上就好了。
三、模型使用
public void langdetect() {
try (InputStream modelIn = new FileInputStream("/resources/langdetect.bin")) {
LanguageDetectorModel m = new LanguageDetectorModel(modelIn);
LanguageDetector languageDetectorME = new LanguageDetectorME(m);
Language bestLanguage = languageDetectorME.predictLanguage("測試語言嗅探器");
System.out.println("Best language: " + bestLanguage.getLang()); // 預測語言
System.out.println("Best language confidence: " + bestLanguage.getConfidence()); // 語言置信度
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
四、實驗結果
對多國語言進行訓練后的結果:
原始句子識別情況
長度限制后識別情況
opennlp重新訓練模型(括號為去掉對應語料內明顯是英文的句子)
opennlp(java)
cld3(python)
opennlp(java)
cld3(python)
opennlp(custom)
ar
71%
64%
100%
85%
100%
de
24%
35%
46%(修正83%)
33%
46%(修正91%)
en
63%
60%
80%
69%
93%
es
66%
66%
95%
94%
100%
fr
9%
12%
28%(修正58%)
28%
44%(修正85%)
it
44%
49%
54%
54%
85%
ja
100%
100%
100%
100%
100%
ms
65%
81%
77%
94%
0%
pl
78%
76%
83%
82%
84%
pt
88%
91%
90%
90%
94%
ru
17%
36%
31%
50%
100%
th
96%
100%
99%
100%
100%
tr
55%
17%
60%
44%
66%
zh
100%
100%
100%
100%
100%
整體
62%
57%
80%
76%
90.4%(未統計ms)
總結
以上是生活随笔為你收集整理的java opennlp_OpenNLP中语言检测模型训练和模型的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python饼状图顺时针_Python
- 下一篇: java sessionstorage_