使用Srilm训练N-gram语言模型

举报
作家小然 发表于 2020/07/09 11:42:12 2020/07/09
【摘要】 本篇文章介绍了如何安装SRILM,并使用简单语料训练N-gram语言模型。

 一. 安装SRILM工具

1. 安装tcl

下载tcl安装包:[tcl8.6.8-src.tar.gz](http://www.tcl.tk/software/tcltk/download.html) 

执行命令并安装:

tar -zxvf tcl8.6.8-src.tar.gz
cd tcl8.6.8/
cd unix
make
make install


2. 安装srilm

执行命令安装依赖

apt-get install gcc
apt-get install make
apt-get install gwak
apt-get install gzip
apt-get install bzip2
apt-get install p7zip

下载srilm安装包:[srilm-1.7.2.tar.gz](http://www.speech.sri.com/projects/srilm/download.html) 

执行命令并安装:

pwd
$ /home/sine/
mkdir srilm
mv srilm-1.7.2.tar.gz srilm/
cd srilm
vim Makefile

在:# SRILM = /home/speech/stolcke/project/srilm/devel 后一行添加

SRILM = $(PWD)

执行命令查询机器类型

uname -i
$ x86_64

如果结果为x86_64,则对应的需要修改common/Makefile.machine.i686-m64文件

vim common/Makefile.machine.i686-m64

修改:

TCL_INCLUDE =
TCL_LIBRARY =

为:

TCL_INCLUDE =
TCL_LIBRARY =
NO_TCL = X

修改:

GAWK = /usr/bin/awk

为:

 GAWK = /usr/bin/gawk

执行命令并编译srilm

pwd
$ /home/sine/srilm/
make World

执行命令修改环境变量

pwd
$ /home/sine/
vim .bashrc

添加:

 export PATH="/home/sine/srilm/bin/i686-m64:$PATH"

并生效环境变量

pwd
$ /home/sine/
source .bashrc

安装完毕!


二. 训练模型

训练模型需要文本原始语料,例如speechocean-train.txt,其内容及格式如下:

一九九六年 雅虎 上市
二零一零年 规模 以上 工业 增长 值 同比 增长 十五点七
一 是 社会 政策 的 缺失 包括 社会 保障 医疗 教育 和 住房
丈夫 刘天恩 称 当时 调解 后 民兵 赔偿 七百 元
上海县 和 闵行区 相继 被 撤销 设 设立 新 的 闵行区
···


1. 词频统计

执行命令获取1gram词频统计

ngram-count -text speechocean-train.txt -order 1 -write speechocean-train-1gram.count

执行命令获取2gram词频统计

ngram-count -text speechocean-train.txt -order 2 -write speechocean-train-2gram.count

执行命令获取3gram词频统计

ngram-count -text speechocean-train.txt -order 3 -write speechocean-train-3gram.count

执行命令获取4gram词频统计

ngram-count -text speechocean-train.txt -order 4 -write speechocean-train-4gram.count


2. ngram模型训练

执行命令训练1gram语言模型

ngram-count -read speechocean-train-1gram.count -order 1 -lm speechocean-train-1gram.arpa -interpolate -kndiscount

其中speechocean-train-1gram.arpa为生成的语言模型,-interpolate和-kndiscount为插值与折回参数

执行命令训练2gram语言模型

ngram-count -read speechocean-train-2gram.count -order 2 -lm speechocean-train-2gram.arpa -interpolate -kndiscount

执行命令训练3gram语言模型

ngram-count -read speechocean-train-3gram.count -order 3 -lm speechocean-train-3gram.arpa -interpolate -kndiscount

执行命令训练4gram语言模型

ngram-count -read speechocean-train-4gram.count -order 4 -lm speechocean-train-4gram.arpa -interpolate -kndiscount


3.模型剪枝

对3gram语言模型进行剪枝操作

执行命令剪枝3gram模型,剪枝阈值为0.0000001

ngram -lm speechocean-train-3gram.arpa -order 3 -prune 0.0000001 -write-lm speechocean-train-3gram-pruned-0.0000001.arpa

执行命令剪枝3gram模型,剪枝阈值为0.0000003

ngram -lm speechocean-train-3gram.arpa -order 3 -prune 0.0000003 -write-lm speechocean-train-3gram-pruned-0.0000003.arpa


4. 模型质量(困惑度)检查

可以对已经训练的所有模型进行困惑度检查,例如

ngram -ppl speechocean-train.txt -order 1 -lm speechocean-train-1gram.arpa -debug 2 > speechocean-train-1gram.ppl

 

三. 模型文件压缩

gzip speechocean-train-3gram.arpa
$ speechocean-train-3gram.arpa.gz

 

四. 模型合并

ngram -order 1 -lm speechocean-train-1gram.arpa -mix-lm zhihu-train-1gram.arpa -lambda 0.5 -write-lm combine-train-1gram-.arpa



【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。