OpenNLP中语言检测模型训练和模型的使用

因为项目的原因,需要使用到NLP的相关技术。语言检测模型cld3是python要与项目集成也不太方便,后来找到OpenNLP,发现它相对来说,对于亚洲的语言有一些支持。

下面是OpenNLP的训练相关的东西,在项目里如果检测对象过短,对于检测结果也容易出现偏差的情况。所以语料要充足。

一 、文档准备

我们先从文档入手,在官网上的文档是很规范的,先找到Language Detector这个title,然后往下看到training,我们根据文档提示,发现其实我们的语料按照如下规范就可以

OpenNLP中语言检测模型训练和模型的使用

注意几点
1.文本文件中的一行就是一条语料,第一列是语种对应的ISO-639-3码,第二列是tab缩进,第三列就是语料文本
2.对于长文本,不要人为的去加换行
3.训练语料必须要有多个不同的语料信息,否则在训练时会报错

二 、模型训练

有了以上的语料文件,就可以通过几行简单的代码就能将其训练成我们需要的语言检测了

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

ObjectStream lineStream =  new PlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8);
ObjectStream 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的语料文件了,以后就在程序里用上就好了。

三、模型使用

undefined

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();    }}

undefined

四、实验结果

对多国语言进行训练后的结果:

原始句子识别情况

长度限制后识别情况

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)

Original: https://www.cnblogs.com/abc8023/p/13993342.html
Author: 藤露
Title: OpenNLP中语言检测模型训练和模型的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8136/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部