一、常用工具
1. Kenlm https://kheafield.com/code/kenlm/
C++版本,最大特点是速度快、占用内存少
2. Srilm http://www.speech.sri.com/projects/srilm/
SRI(Standford ResearchInstitute)开发,使用比较广泛,c++版本
3. IRSTLM http://sourceforge.net/projects/irstlm/
IRSTLM是意大利TrentoFBK-IRST实验室开发的语言模型训练工具包,其开发的目的是处理较大规模的训练数据
4. MITLM https://code.google.com/p/mitlm/
5. BerkeleyLM https://code.google.com/p/berkeleylm/
Java版本,速度和kenlm差不多,内存比srilm小
参考:
http://52opencourse.com/111/斯坦福大学自然语言处理第四课-语言模型(language-modeling)
http://www.52nlp.cn/language-model-training-tools-srilm-details
二、Srilm使用
1. 构建语言模型
【ngram-count】:用于统计ngram的个数和生成最终的语言模型
【ngram-merge】:用于merge多个ngram count文件,适用于内存不足以容下所有语料的情况
2. 语言模型得分
【ngram】:用于语言模型打分、计算困惑度(perplexity)、产生句子和模型插值
3. 语言模型插值
【ngram】:用于语言模型打分、计算困惑度(perplexity)、产生句子和模型插值
4. 语言模型剪枝
三、Srilm使用的文件类型
1. Ngram
最常用的arpa文件,格式如下:
\data\
ngram1=n1
ngram2=n2
...
ngramN=nN
\1-grams:
p w [bow]
...
\2-grams:
p w1 w2 [bow]
...
\N-grams:
p w1 ... wN
...
\end\
2. Classes
基于class的语言模型的格式,如下:
class [p] word1 word2 ...
其中class是语言模型中使用的class name,p是该条class定义的概率,word是该class对应的具体word
3. Psfg
Probabilistic finite-state grammars是一种被SRIDecipher(SRI的解码器)使用的有限状态机。
name name
nodes Nw1 ... wN
initial i
final f
transitionsT
n1 n2 p
...
4. Nbest
用于nbest的重打分