目录:

一基本训练

二语言模型打分

三语言模型剪枝

四语言模型合并

五语言模型使用词典限制

一、基本训练

#功能
读取分词后的text文件或者count文件,然后用来输出最后汇总的count文件或者语言模型
#参数
输入文本:
-read 读取count文件
-text 读取分词后的文本文件
词典文件:
-vocab 限制text和count文件的单词,没有出现在词典的单词替换为<unk>;如果没有,所有的单词将会被自动加入词典
-limit-vocab 只限制count文件的单词(对text文件无效),没有出现在词典里面的count将会被丢弃
-write-vocab 输出词典
语言模型:
-lm 输出语言模型
-write-binary-lm 输出二进制的语言模型
-sort 输出语言模型gram排序

有两种训练方法,分别如下:

#choice1: text->count->lm
#ngram-count -text $text -vocab ${vocab} -order 2 -sort -tolower -lm ${arpa} #choice2: text->count count->lm
#ngram-count -text ${text} -order 2 -sort -tolower -write ${count}
cat data/corpus/* | tools/SRILM/ngram-count -vocab dict/aicar.v9.wlist -text - -order 3 -debug 1 -interpolate -kndiscount -gt3min 1 -lm lm/aicar_music.v7.13.tg.lm &

二、语言模型打分

#功能
用于评估语言模型的好坏,或者是计算特定句子的得分,用于语音识别的识别结果分析。
#参数
计算得分:
-order 模型阶数,默认使用3阶
-lm 使用的语言模型
-use-server S 启动语言模型服务,S的形式为port@hostname
-ppl 后跟需要打分的句子(一行一句,已经分词),ppl表示所有单词,ppl1表示除了</s>以外的单词
-debug 只输出整体情况
-debug 具体到句子
-debug 具体每个词的概率
产生句子:
-gen 产生句子的个数
-seed 产生句子用到的random seed
ngram -lm ${lm} -order -ppl ${file} -debug > ${ppl}

例:

./tools/SRILM/ngram -debug  -order  -lm lm/final/$name.pru1e-.fg.lm -ppl $fie.wseg > ppltest/ppl/$p.aicar0..pru1e-.fg.ppl

三、语言模型剪枝

#功能
用于减小语言模型的大小,剪枝原理参考(http://blog.csdn.net/xmdxcsj/article/details/50321613)
#参数
模型裁剪:
-prune threshold 删除一些ngram,满足删除以后模型的ppl增加值小于threshold,越大剪枝剪得越狠
-write-lm 新的语言模型
ngram -lm ${oldlm} -order -prune ${thres} -write-lm ${newlm}

例:

./tools/SRILM/ngram -debug  -order  -lm lm/final/$name.fg.lm -prune 0.0000000000001 -write-lm lm/final/$name.pru1e-.fg.lm &

四、语言模型合并

#功能
用于多个语言模型之间插值合并,以期望改善模型的效果
#参数
模型插值:
-mix-lm 用于插值的第二个ngram模型,-lm是第一个ngram模型
-lambda 主模型(-lm对应模型)的插值比例,~,默认是0.
-mix-lm2 用于插值的第三个模型
-mix-lambda2 用于插值的第二个模型(-mix-lm对应的模型)的比例,那么第二个模型的比例为1-lambda-mix-lambda2
-vocab 当两个模型的词典不一样的时候,使用该参数限制词典列表,没有效果
-limit-vocab 当两个模型的词典不一样的时候,使用该参数限制词典列表,没有效果
ngram -lm ${mainlm} -order -mix-lm ${mixlm} -lambda 0.8 -write-lm ${mergelm}

在合并语言模型之前,可以使用脚本计算出最好的比例,参考srilm的compute-best-mix脚本  #这个后面算下,如何求得最好的比例

五、语言模型使用词典限制

有两种方法可以根据给定的词典对模型加以限制 
一种是在训练的时候使用-vocab限制 
另外一种是在训练完成以后,使用srilm的脚本,如下:

#功能
对已有的语言模型,使用新的字典进行约束,产生新的语言模型
.n-grams的概率保持不变
.回退概率重新计算
.增加新的一元回退概率
#参数
模型裁剪:
-vocab 词典单词的列表,不包括发音
-write-lm 新的语言模型
change-lm-vocab -vocab ${vocab} -lm ${oldlm} -write-lm ${newlm} -order

这个一般都是在训练的时候加词典,很少在训练之后加.

语言模型srilm基本用法的更多相关文章

  1. [转]语言模型训练工具SRILM

    SRILM是一个建立和使用统计语言模型的开源工具包,从1995年开始由SRI 口语技术与研究实验室(SRI Speech Technology and Research Laboratory)开发,现 ...

  2. SRILM语言模型格式解读

    先看一下语言模型的输出格式 \data\ ngram = ngram = ngram = \-grams: -5.24036 'cause -0.2084827 -4.675221 'em -0.22 ...

  3. SRILM Ngram 折扣平滑算法

    关于n-gram 语言模型,大部分在这篇博客里 记过了,   SRILM 语言模型格式解读 , 其实看完了,ngram的大概用法都比较清楚了, 但是关于平滑算法,一直很模糊,就晓得一个"劫富 ...

  4. Deep Learning in NLP (一)词向量和语言模型

    原文转载:http://licstar.net/archives/328 Deep Learning 算法已经在图像和音频领域取得了惊人的成果,但是在 NLP 领域中尚未见到如此激动人心的结果.关于这 ...

  5. Word2Vec之Deep Learning in NLP (一)词向量和语言模型

    转自licstar,真心觉得不错,可惜自己有些东西没有看懂 这篇博客是我看了半年的论文后,自己对 Deep Learning 在 NLP 领域中应用的理解和总结,在此分享.其中必然有局限性,欢迎各种交 ...

  6. SRILM的使用及平滑方法说明

    1.简介 SRILM是通过统计方法构建语言模型,主要应用于语音识别,文本标注和切分,以及机器翻译等. SRILM支持语言模型的训练和评测,通过训练数据得到语言模型,其中包括最大似然估计及相应的平滑算法 ...

  7. 【NLP】自然语言处理:词向量和语言模型

    声明: 这是转载自LICSTAR博士的牛文,原文载于此:http://licstar.net/archives/328 这篇博客是我看了半年的论文后,自己对 Deep Learning 在 NLP 领 ...

  8. 斯坦福大学自然语言处理第四课“语言模型(Language Modeling)”

    http://52opencourse.com/111/斯坦福大学自然语言处理第四课-语言模型(language-modeling) 一.课程介绍 斯坦福大学于2012年3月在Coursera启动了在 ...

  9. srilm使用杂记

    训练n-gram语言模型 ngram-count -text train.txt -order -lm model -kndiscount -interpolate -gt3min -gt4min 计 ...

随机推荐

  1. springboot集成Guava缓存

    很久没有写博客了,这段时间一直忙于看论文,写论文,简直头大,感觉还是做项目比较舒服,呵呵,闲话不多说,今天学习了下Guava缓存,这跟Redis类似的,但是适用的场景不一样,学习下吧.今天我们主要是s ...

  2. python并行编程学习之并行计算存储体系结构

    基于指令和可被同时处理的存储单元的数目,计算机系统可以分为以下四种类目: 单指令,单数据单元(SISD)在该体系结构中,计算机是单处理器机器,一次只能用单一的指令来操作单一的数据流.在SISD中,机器 ...

  3. C++类成员空间分配和虚函数表

    最近在自学python,看到继承和类,就顺便复习了C++的类和继承等方面的知识. 先看Base基类 class Base { private: virtual void display() { cou ...

  4. .Net并行编程之二:并行循环

    本篇内容主要包括: 1.能够转化为并行循环的条件 2.并行For循环的用法:Parallel.For 3.并行ForEach的用法Parallel.ForEach 4.并行LINQ(PLINQ)的用法 ...

  5. Java集合框架(list,Queue)

    List和Queue都继承自Collection接口 list常规用法 List判断两个对象相等的标准:equals方法返回true class A2 { public boolean equals( ...

  6. HDU 4946 凸包

    给你n个点,具有速度,一个位置如果有其他点能够先到,则不能继续访问,求出里面这些点哪些点是能够无限移动的. 首先我们考虑到,一个速度小的和一个速度大的,速度小的必定只有固定他周围的一定区域是它先到的, ...

  7. HDU 4990 Reading comprehension 简单矩阵快速幂

    Problem Description Read the program below carefully then answer the question.#pragma comment(linker ...

  8. 【CodeForces】960 F. Pathwalks 主席树+动态规划

    [题目]F. Pathwalks [题意]给定n个点m条边的有向图,可能不连通有重边有自环.每条边有编号 i 和边权 wi ,求最长的路径(可以经过重复节点)满足编号和边权都严格递增.n,m,wi&l ...

  9. favico.js笔记

    1. favicon.js是什么 一个js库可以使用徽标.图像.视频等来设置网页的favicon,即网页标题栏上的小图标. 2. 如何使用 2.1 使用徽标 basic demo: <!DOCT ...

  10. 10 - 函数嵌套-作用域-闭包-LEGB-函数销毁

    目录 1 函数嵌套 2 作用域 2.1 global关键字 3 闭包 3.1 nonlocal关键字 4 默认值的作用域 5 变量名解析原则LEGB 6 函数的销毁 1 函数嵌套         一个 ...