OpenNLP中關於語言檢測的語料訓練

因爲項目的原因,需要使用到NLP的相關技術。當時是先使用過nltk,但是因爲nltk主要是外國的語種支持的比較豐富,而且又是python要與項目集成也不太方便,後來找到OpenNLP,發現它相對來說,對於亞洲的語言有一些支持。因此使用上了,最近有空,就想細緻的學習下OpenNLP的訓練相關的東西,因爲在項目裏遇到了中文與日文中的漢字交叉的情況,且如果檢測對象過短,對於檢測結果也容易出現偏差的情況。好了,廢話不多說,直接主題。
我們先從文檔入手,在官網上的文檔是很規範的,先找到Language Detector這個title,然後往下看到training,我們根據文檔提示,發現其實我們的語料按照如下規範就可以了:
OpenNLP中關於語言檢測的語料訓練

注意幾點
1.文本文件中的一行就是一條語料,第一列是語種對應的ISO-639-3碼,第二列是tab縮進,第三列就是語料文本
2.對於長文本,不要人爲的去加換行
3.訓練語料必須要有多個不同的語料信息,否則在訓練時會報錯

有了以上的語料文件,就可以通過幾行簡單的代碼就能將其訓練成我們需要的語言檢測了

InputStreamFactory inputStreamFactory = new MarkableFileInputStreamFactory(new File("corpus.txt"));

ObjectStream<String> lineStream =  new PlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8);
ObjectStream<LanguageSample> sampleStream = new LanguageDetectorSampleStream(lineStream);

TrainingParameters params = ModelUtil.createDefaultTrainingParameters();
params.put(TrainingParameters.ALGORITHM_PARAM,  PerceptronTrainer.PERCEPTRON_VALUE);
params.put(TrainingParameters.CUTOFF_PARAM, 0);

LanguageDetectorFactory factory = new LanguageDetectorFactory();

LanguageDetectorModel model = LanguageDetectorME.train(sampleStream, params, factory);
model.serialize(new File("langdetect.bin"));
}

最後運行一下,就能在你的本地生成一個langdetect.bin的語料文件了,以後就在程序裏用上就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章