版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
总结工作中用到及学习的知识,也算自己的一个笔记。
-
环境准备
#公司环境为Centos7.3
yum install gcc gcc-c++
yum install boost
yum install boost-devel
yum install zlib
yum install zlib-devel
wget -O - https://kheafield.com/code/kenlm.tar.gz | tar xz
mkdir kenlm/build
cd kenlm/build && cmake .. && make -j8
cd kenlm/build && make install
-
语言模型训练
我们通过命令行的方式使用kenlm,在我们的训练集语料上训练语言模型,
命令为 lmplz -o 5 <text > text.arpa
-o 后面的数字5代表使用N-gram的N取值为5
text.arpa 表示kenlm训练得到的文件格式为.arpa格式,名字为text
基于人民日报语料训练:
lmplz -o 2 <trainCorpus.txt_utf8> /opt/nlp/corpus/data.arpa
注意:必须是分好吃的的语料。
-
模型压缩
对训练得到的文件进行压缩:将arpa文件转换为binary文件,这样可以对arpa文件进行压缩和序列化,提高后续在python中加载的速度。针对我们训练的到的data.arpa文件其转换命令为:
-
安装Python Kenlm接口
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple kenlm
-
使用Kenlm测试
>>> import kenlm
>>> model=kenlm.LanguageModel('/opt/nlp/corpus/data.bin')
>>> model.score('我们 去 北京 天安门')
-18.509431838989258
>>> model.score('天安门 去 去 去 去 去 去 北京')
-34.48509216308594
-
智能纠错
主要写我的思路:拿不定冠词 an a 来说事
---要使用Kenlm根据英文语料生成arpa文件。
@1首先根据句子,判断每个句子包含a an的个数,并生成笛卡尔积序列。
@2读入句子,对现在读入的句子进行打分,记录。
@3使用生成的笛卡尔积序列,替换原句子中的an a 并根据model.score打分,
,如果后面的得分大于@2产生的结果,表示有错误存在,更正。
个人微信公众号,分享ml,dl,nlp。