用srilm生成语言模型

SRILM的主要目标是支持语言模型的估计和评测。估计是从训练数据(训练集)中得到一个模型,包括最大似然估计及相应的平滑算法;而评测则是从测试集中计算其困惑度。其最基础和最核心的模块是n-gram模块,这也是最早实现的模块,包括两个工 具:ngram-count和ngram,相应的被用来估计语言模型和计算语言模型的困惑度。

1.统计语料库生成n-gram统计文件

ngram-count -vocab segment_dict.txt -text train_data -order 3 -write my.count -unk

-vocab 词典文件,一行代表一个切词,格式如下:

中国
人民
你好

-text 语料库,一行行的数据,行内数据用空格隔开来表示切词,格式如下:

中国 人民
刘德华 歌曲 好 听 吗

-order 最大的n元模型,3表示统计1元模型(unigram)、2元模型(bigram)、3元模型(trigram)

-write 生成的统计文件,格式如下(ngram  count):

<s>     2
<s> 中国        1
<s> 中国 人民   1
<s> 刘德华      1
<s> 刘德华 <unk>        1
中国    1
中国 人民       1
中国 人民 </s>  1
人民    1
人民 </s>       1
</s>    2
刘德华  1
刘德华 <unk>    1
刘德华 <unk> <unk>      1
<unk>   4
<unk> <unk>     3
<unk> <unk> <unk>       2
<unk> <unk> </s>        1
<unk> </s>      1

-unk 把不在词典里面的次表示为<unk>

2.生成语言模型

ngram-count -vocab segment_dict.txt -read my.count -order 3 -lm my.lm -kndiscount1 -kndiscount2 -kndiscount3

-read 读统计文件

-lm 产生的语言模型文件,产生的格式如下:

\datangram 1=6
ngram 2=4
ngram 3=0

\1-grams:
-0.4771213      </s>
-99     <s>     -99
-0.7781513      中国    -99
-0.7781513      人民    -99
-0.7781512      你好
-0.7781513      刘德华

\2-grams:
-0.30103        <s> 中国
-0.30103        <s> 刘德华
0       中国 人民
0       人民 </s>

\3-grams:

\end

-kndiscount1 对1元模型进行的折扣平滑的方法,有很多,如good-turing,kneser-ney等

3.用语言模型计算测试数据的困惑度

ngram -ppl test.txt -order 3 -lm my.lm

测试数据的格式也是一行代表一个句子,每个句子内部用空格隔开表示切词

file test.txt: 2 sentences, 5 words, 0 OOVs
4 zeroprobs, logprob= -0.7781513 ppl= 1.817121 ppl1= 6.000001

  

时间: 2024-10-12 22:28:41

用srilm生成语言模型的相关文章

srilm的两个ppl

用srilm测试语言模型的表现时,结果报告中会给出两个ppl的值如下: ppl= 87.1826 ppl1= 113.915 它们的计算公式为: ppl = 10^(-logprob / (words - OOVs + sentences)) ppl1 = 10^(-logprob / (words - OOVs)) ref: http://www.speech.sri.com/projects/srilm/manpages/srilm-faq.7.html

[转]Kaldi命令词识别

转自: http://www.jianshu.com/p/5b19605792ab?utm_campaign=maleskine&utm_content=note&utm_medium=pc_all_hots&utm_source=recommendation http://www.jianshu.com/p/6338fab6bd0a 刚刚拿到一个简单语料库练手,发现只有语音和对应文字, 这篇文章记录了从数据预处理到kaldi对数据进行训练和测试的全过程,这里首先训练单音节模型,其

【读书笔记-数据挖掘概念与技术】数据立方体技术

基本概念: 基本单元:基本方体的单元 聚集单元:非基本方体的单元 冰山立方体:部分物化的立方体 最小支持度(最小支持度阀值):部分物化的最小阀值(说白了就是限定了一个范围) ∵冰山立方体仍有大量不感兴趣的单元需要计算 ∴引入--闭覆盖--一个单元没有后代或者它的后代的度量值与其不同 法2:只预计算涉及少数维的立方体,这些方体形成的数据立方体的立方体外壳 计算的一般策略:四种优化技术 1.    排序.散列和分组 2.    同时聚集和缓存中间结果 3.    当存在多个子女方体时,由最小的子女聚

语音识别现状 如何简单使用?

语音识别并不是什么新鲜话题,但是最近两年大家发现突然大量进入了应用阶段.比如iPhone的Siri,各搜索引擎和购物网站的语音搜索等.最近的大规模应用可能源于移动互联网的创新,智能手机的普及和网络连接(比如3G/4G)提供的硬件基础是重要的前提条件. 目前市面上的应用一般都采取语音上传,服务器端分析的方式.包括Google和苹果等.并且他们的识别效率和准确度确实让人印象深刻.我曾经试用过Google Speech API,识别率同样惊人(https://www.google.com/speech

[moses笔记]编译含有nplm的moses解码器

ACL2014的best paper Fast and Robust Neural Network Joint Models for Statistical Machine Translation在SMT中使用深度学习知识,提出了一种neural network joint model(其实就是融合源端语言知识去做语言模型),论文实验给出的结果宣称大幅度提高了以往基于n-gram语言模型翻译系统的翻译性能. 开源机器翻译系统moses也实现并集成了上述研究成果.参见[1]中 An impleme

统计翻译系统中的开源工具们

(根据 计算机世界/2007年/10月/22日/第B15版 文章改编) 开源工具对统计翻译带来的意义不必多说,想必也都能体会出来.Brown等提出IBM模型是在20世纪90年代初,而IBM模型广泛使用和研究的年份竟然是1999年以后!促成这种想象的原因竟是开源工具包的出现!开源工具的出现,降低了研究的准入门槛,使得我们可以正真意义上的站在巨人的肩膀上,来做进一步的探索!感谢那些开源工具们,记住他们,利用他们,让我们的研究更上一层楼! 一.开源工具 1. 首个开源统计机器翻译工具包Egypt (包

线程安全的SRILM语言模型c++接口

博客地址:http://blog.csdn.net/wangxinginnlp/article/details/46963659 老版本线程不安全 最近几天,在倒腾多线程的翻译解码器.单线程没问题的解码器,放在多线程下就经常无故的 segmentation fault (core dumped).排查了一天原因,才发现是语言模型的问题. 老版本的SRILM不支持多线程,多个进程环境下报错.错误具体表现如下: 将语言模型作为公共资源,多个线程去读取,会报segmentation fault (co

SRILM语言模型格式解读

先看一下语言模型的输出格式 [html] view plain copy \data\ ngram 1=64000 ngram 2=522530 ngram 3=173445 \1-grams: -5.24036        'cause  -0.2084827 -4.675221       'em     -0.221857 -4.989297       'n      -0.05809768 -5.365303       'til    -0.1855581 -2.111539   

基于SRILM的ARPA的n-gram语言模型格式

\data\ ngram 1=10 ngram 2=20 ngram 3=30 \1-grams: -2.522091   啊  -0.4599362 -3.616682   阿  -0.2710813 -5.888154   阿坝 -5.483542   阿布    -0.02341532 -5.513821   阿迪达斯    -0.08972257 -5.357502   阿哥 -5.619849   阿胶 -5.003489   阿拉    -0.0459251 -5.11305