实习做了一段时间的语言模型,使用到了Srilm这个工具,简单做一下记录,这个是一个统计和分析语言模型的工具,据说年龄很大了,可能比我大?总之它可以很方便的统计语料的n-gram,以及构建语言模型。

一、安装Srilm
  ①下载地址:为http://www.speech.sri.com/projects/srilm/download.html 。下载压缩包后,解压到你想编译安装的地方,假设为:/Users/…/srilm。
  ②进入该目录下,修改Makefile文件,找到此行: # SRILM = /home/speech/stolcke/project/srilm/devel,另起一行输入SRILM 的安装路径 SRILM = $(PWD)。
  ③这一步我并没有使用,但在我的MBP上也安装成功了,在服务器上安装应该用得着,也记录一下;使用命令uname -m查看机器的架构,比如是x86_64,那么在上一步的文件中可以看到MACHINE_TYPE := (shell (shell (SRILM)/sbin/machine-type),在其前加#将其注释掉,并另起一行输入:MACHINE_TYPE := i686-gcc4。另外用修改 srilm/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,在srilm目录下使用:make World进行编译,会出来一大堆东西,接着改变环境变量export PATH=//Users/…/srilm/bin/i686-m64:/Users/…/srilm/bin:$PATH(根据实际情况改)。
  ⑤测试Srilm,我们使用Srilm提供的测试模块进行测试,判断编译是否成功,进入Srilm根目录,输入命令:make test,出现类似下面的结果说明成功了。

*** Running test ngram-multiwords ***real    0m0.034s
user    0m0.023s
sys 0m0.007s
ngram-multiwords: stdout output IDENTICAL.
ngram-multiwords: stderr output IDENTICAL.

二、Srilm的基本使用
  Srilm工具包的主要有两个核心模块,一个是ngram-count模块,是用来根据训练数据构建语言模型的,另一个是ngram模块,对构建得到的语言模型进评测,即计算测试集困惑度(Perplexity),除此之外,还可以对模型进行剪枝、合并等,假设存在分词后的训练语料train.txt。
2.1 ngram-count模块
  ①词频统计

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

  其中-text表示读取分词后的文本文件,-order 3表示选择3-gram,默认参数就是3,train.count为统计到词频的文本。这步会得到类似以下的count文件:

how 2
how to  2
how to learn.   1
how to live 1
<s> 6
<s> everyone    1
<s> everyone has    1

  ②模型训练

ngram-count -read train.count -order 3 -lm train.lm  -interpolate -kndiscount

  其中-read表示读取count文件,train.lm为生成的语言模型,-interpolate和-kndiscount为插值与折回参数。这步得到了类似以下的语言模型:

\data\
ngram 1=145
ngram 2=221
ngram 3=2\1-grams:
-1.591065   </s>
-99 <s> -0.005417941
-2.369216   And -0.02260106
.
.\2-grams:
-2.0086 <s> Firstly,
-2.0086 <s> I
-2.0086 <s> In
.
.
\3-grams:
-0.1760913  to live a
-0.1760913  hope to be

\end\

  可以看出文件开始显示了不同的n-gram个数,接着的格式是:

log10(f(wn|w1...wn−1)w1...wnlog10(bow(w1...wn) log_{10}(f(w_{n}|w_{1} ...w_{n-1})\quad w_{1} ...w_{n} \quad log10(bow(w_{1} ...w_{n})
  主要由三列组成,第一列表示以10为底对数的条件概率f(w_{n}|w_{1} …w_{n-1},第二列是n元词,第三列是以10为底的对数回退权重,即考虑到它为未看见的n+1元词的贡献概率。

2.2 ngram模块
  ①计算困惑度(ppl),假设存在分词后的测试语料test.txt,计算困惑度(ppl)的命令为:

ngram -ppl test.txt -order 3 -lm train.lm -debug 2 > test.ppl

  其中参数-ppl表示计算句子对数概率( log10P(T) log_{10}P(T)),P(T)为句子的概率),以及计算测试语料的困惑度,有两个指标ppl和ppl1表示,test.txt为测试文本,-debug 2为对每一行语料进行困惑度计算,类似还有-debug 0 , -debug 1, -debug 3等,最后将困惑度的结果输出到test.ppl。
  ②模型剪枝(prune)。有时模型过大,为了减少模型的大小,同时保证性能最大化,引入了剪枝,剪枝命令为:

ngram -lm old.lm -order 3 -prune 1e-5 -write-lm new.lm

  其中-lm old.lm为要剪枝的语言模型,-write-lm 为得到新的语言模型,-prune 1e-5为剪枝的程度,表示删除一些ngram,满足删除以后模型的ppl增加值小于这个阈值,可见这个值越大剪枝剪得越厉害。
  ③模型插值合并。这个是用于多个语言模型之间插值合并,以期望改善模型的效果,跟模型融合(Ensemble)一样的效果,插值合并命令为:

ngram -lm 0.lm -mix-lm 1.lm -lambda 0.9 -mix-lm2 2.lm -mix-lambda2 0.18 -mix-lm3 3.lm -mix-lambda3 0.01 -write-lm new.lm

  其中-mix-lm 用于插值的第二个ngram模型,-lm是第一个ngram模型,-lambda 主模型(-lm对应模型)的插值比例,0~1,默认是0.5,但是从-mix-lambda2开始是对应用于插值模型的比例,比如是2.lm这个模型,-write-lm new.lm即对应得到的新模型。

2.3 使用词典限制语言模型
  我们有时候只想使用固定的词典来构建语言模型,一个方法是在构建语言模型的时候使用-vocab进行限制,例如:

ngram-count -text train.txt -vocab vocab.txt -order 3 -write train.count

  其中-vocab vocab.txt表示受限的输入词典,没有出现在词典的单词将全部换为替换为。
  除此之外,还有另外一种是对已构建好的语言模型,使用新的字典进行约束,构建新的语言模型,如下:

change-lm-vocab -vocab vocab.txt -lm old.lm -write-lm new.lm -order 2

  其中n-gram的概率保持不变,但是回退概率会重新计算,并且增加新的一元回退概率,-write-lm 得到新的语言模型。

【Natural Language Processing】语言模型训练工具Srilm的安装及使用简介相关推荐

  1. 语言模型训练工具SRILM详解

    语言模型训练工具SRILM详解 SRILM是著名的约翰霍普金斯夏季研讨会(Johns Hopkins Summer Workshop)的产物,诞生于1995年,由SRI实验室的Andreas Stol ...

  2. 语言模型训练工具SRILM

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴!    S ...

  3. 论文阅读:Natural Language Processing Advancements By Deep Learning: A Survey

    文章目录 一.介绍 二.背景 1.人工智能和深度学习 (1)多层感知机 (2)卷积神经网络 (3)循环神经网络 (4)自编码器 (5)生成对抗网络 2.NLP中深度学习的动机 三.NLP领域的核心概念 ...

  4. Efficient Methods for Natural Language Processing: A Survey自然语言处理有效方法综述

    Efficient Methods for Natural Language Processing: A Survey 关于自然语言处理有效方法的一个综述,近来关于自然语言处理已经取得了非常显著的结果 ...

  5. 自然语言处理NLP 2022年最新综述:An introduction to Deep Learning in Natural Language Processing

    论文题目:An introduction to Deep Learning in Natural Language Processing: Models, techniques, and tools ...

  6. 论文阅读:Pre-trained Models for Natural Language Processing: A Survey 综述:自然语言处理的预训练模型

    Pre-trained Models for Natural Language Processing: A Survey 综述:自然语言处理的预训练模型 目录 Pre-trained Models f ...

  7. Interactive Natural Language Processing

    本文是对<Interactive Natural Language Processing>的翻译. 交互式自然语言处理 摘要 1 引言 2 交互式对象 2.1 人在环 2.2 KB在环 2 ...

  8. 论文阅读:Natural Language Processing Advancements By Deep Learning: A Survey 深度学习在自然语言处理中的进展

    Natural Language Processing Advancements By Deep Learning: A Survey 深度学习在自然语言处理中的进展 目录 Natural Langu ...

  9. Deep Learning in Natural Language Processing中文连载(三)

    第二章 对话语言理解中的深度学习 Gokhan Tur, Asli Celikyilmaz, 何晓东,Dilek Hakkani-Tür 以及邓力 摘要  人工智能的最新进展导致对话助手的可用性增加, ...

最新文章

  1. 【lidar】基于YOLO的3D目标检测(激光雷达点云)课程设计
  2. 南加大提出NeROIC:还有什么不能渲染的?重建效果太强悍了
  3. web架构设计经验分享 (转)
  4. java 短路判断_随笔 | 奇淫技巧 | Java:记 return 和短路运算符的妙用
  5. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | Instrumentation 源码分析 )
  6. 记录mysql客户端所有的操作
  7. 专业解决 MySQL 查询速度慢与性能差!
  8. 最大功率点跟踪测试软件,最大功率点跟踪
  9. 【初学者必读】:前端工程师的知识体系
  10. 初创企业融资应量力而行
  11. Eclipse最全快捷键
  12. 杭电2159FATE
  13. mysql查询触发器_mysql查看所有触发器以及存储过程等操作集合【转】
  14. 某公司基于FineBI数据决策平台的试运行分析报告
  15. 机器视觉运动控制一体机应用例程|U盘视觉定位激光打标解决方案
  16. 周奕与共享软件(转)
  17. RS-485 接口电路--转载
  18. Java实习日记(1)
  19. python tornado异步_python tornado异步性能测试
  20. 计算机大赛主题板报,中小学电脑制作大赛电子板报优秀作品国学.ppt

热门文章

  1. 专访亚创集团CEO田行智:业务规模进入拐点 上市迎来好时机
  2. 日语生可以选计算机专业吗,高考日语生,不建议你大学报日语专业!
  3. 计算机图像处理技术的应用分析,计算机图像处理技术特点及应用研究
  4. 日本药妆店扫货必备手册·收藏版
  5. php gb18030 utf-8,Unicode UTF-8与GB18030编码解析(golang)
  6. xunsearch使用流程
  7. Exploratory Social Network Analysis with Pajek(第三版)11
  8. 基于Atmel128A单片机的MP31.0设计
  9. 扫地机器人漫谈(一):扫地机的形状
  10. 推荐好友和共同好友sql