KenLM: Faster and Smaller Language Model Queries
kenlm 主页:https://kheafield.com/code/kenlm/
Github:https://github.com/kpu/kenlm
常用的 N-gram 训练工具有
1、下载源码
git clone https://github.com/kpu/kenlm.git
2、安装依赖包
macOS:缺失的包可以通过 brew 安装
$ brew install cmake boost eigen
Debian/Ubuntu
$ sudo apt install build-essential cmake libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev libeigen3-dev zlib1g-dev libbz2-dev liblzma-dev
3、编译
mkdir -p build
cd build
cmake ..
make -j 4
4、安装 python 包
在源码目录下执行:
$ python setup.py install
1、使用 lmplz 训练
lmplz 工具在 build/bin
文件中
./lmplz -o 5 --verbose_header --text data/test.txt --arpa result/xx.arpa --vocab_file result/xx.vocab
-o
后面的5表示的是 5-gram,一般取到3即可,但可以结合自己实际情况判断。-verbose_header
:在生成的文件头位置加上统计信息;-S
表示使用系统内存大小,比如 -S 4G
, -S 80%
。注意:需要设置合适的内存大小,不然可能会运行失败2、使用 build_binary 压缩。
压缩模型为二进制,方便模型快速加载:
./build_binary result/xx.arps result/xx.klm
xx.klm
或 xx.bin
,有的人会使用后者。但 .klm
和其他模型一起使用的时候,更能明确这是 kenlm 训练的。使用kenlm判断一句话概率
import kenlm
model = kenlm.Model('result/test.arpa')
print(model.score('this is a sentence .', bos = True, eos = True))
model.score()
中接的是分词后的文本,中文记得分词,否则分数有问题。.arpa
文件换为刚压缩的 bin 文件,跑出来的结果是一样的,但是训练速度会快。pycorrector 是一个中文文本纠错工具。
支持 Kenlm,ConvSeq2Seq,BERT,MacBERT,ELECTRA,ERNIE,Transformer,T5等模型实现,开箱即用。
pycorrector github :https://github.com/shibing624/pycorrector
安装 pycorrector
pip install -U pycorrector
使用
from pycorrector import Corrector
import os
pwd_path = os.path.abspath(os.path.dirname(__file__))
lm_path = os.path.join(pwd_path, './people2014corpus_chars.klm')
model = Corrector(language_model_path=lm_path)
corrected_sent, detail = model.correct('少先队员因该为老人让坐')
print(corrected_sent, detail)
# 少先队员应该为老人让座 [('因该', '应该', 4, 6), ('坐', '座', 10, 11)]
伊织 2022-06-23(四)