java opennlp_OpenNLP中语言检测模型训练和模型的使用
因?yàn)轫?xiàng)目的原因,需要使用到NLP的相關(guān)技術(shù)。語(yǔ)言檢測(cè)模型cld3是python要與項(xiàng)目集成也不太方便,后來(lái)找到OpenNLP,發(fā)現(xiàn)它相對(duì)來(lái)說(shuō),對(duì)于亞洲的語(yǔ)言有一些支持。
下面是OpenNLP的訓(xùn)練相關(guān)的東西,在項(xiàng)目里如果檢測(cè)對(duì)象過(guò)短,對(duì)于檢測(cè)結(jié)果也容易出現(xiàn)偏差的情況。所以語(yǔ)料要充足。
一 、文檔準(zhǔn)備
我們先從文檔入手,在官網(wǎng)上的文檔是很規(guī)范的,先找到Language Detector這個(gè)title,然后往下看到training,我們根據(jù)文檔提示,發(fā)現(xiàn)其實(shí)我們的語(yǔ)料按照如下規(guī)范就可以
注意幾點(diǎn):
1.文本文件中的一行就是一條語(yǔ)料,第一列是語(yǔ)種對(duì)應(yīng)的ISO-639-3碼,第二列是tab縮進(jìn),第三列就是語(yǔ)料文本
2.對(duì)于長(zhǎng)文本,不要人為的去加換行
3.訓(xùn)練語(yǔ)料必須要有多個(gè)不同的語(yǔ)料信息,否則在訓(xùn)練時(shí)會(huì)報(bào)錯(cuò)
二 、模型訓(xùn)練
有了以上的語(yǔ)料文件,就可以通過(guò)幾行簡(jiǎn)單的代碼就能將其訓(xùn)練成我們需要的語(yǔ)言檢測(cè)了
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"));
}
最后運(yùn)行一下,就能在你的本地生成一個(gè)langdetect.bin的語(yǔ)料文件了,以后就在程序里用上就好了。
三、模型使用
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("測(cè)試語(yǔ)言嗅探器");
System.out.println("Best language: " + bestLanguage.getLang()); // 預(yù)測(cè)語(yǔ)言
System.out.println("Best language confidence: " + bestLanguage.getConfidence()); // 語(yǔ)言置信度
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
四、實(shí)驗(yàn)結(jié)果
對(duì)多國(guó)語(yǔ)言進(jìn)行訓(xùn)練后的結(jié)果:
原始句子識(shí)別情況
長(zhǎng)度限制后識(shí)別情況
opennlp重新訓(xùn)練模型(括號(hào)為去掉對(duì)應(yīng)語(yǔ)料內(nèi)明顯是英文的句子)
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%(未統(tǒng)計(jì)ms)
總結(jié)
以上是生活随笔為你收集整理的java opennlp_OpenNLP中语言检测模型训练和模型的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python饼状图顺时针_Python
- 下一篇: java sessionstorage_