先分词
#sed 's/$/\ 1/' seg.dict > seg_lm.dict
import sys
import re
import jieba
seg_dict="seg_lm.dict"
orig_file="lm/test_lm.txt"
seg_file="lm/test_lm.seg"
jieba.set_dictionary(seg_dict)
with open(seg_file, "w") as f:
for line in open(orig_file):
line = line.strip()
words = jieba.cut(line, HMM=False) # turn off new word discovery (HMM-based)
new_line = " ".join(words)
f.write(new_line+"\n")
分词后的文本
小明 今天 去哪 了
小明 是 我们 班 最 亮 的
小明 明天 准备 去哪
使用SRILM生成arpa
格式的语言模型
ngram-count -sort -text lm/test_lm.seg 3 -unk -map-unk "UNK" -interpolate -lm corpus.lm
将语言模型转化为G.fst
arpa2fst --disambig-symbol=#0 --read-symbol-table=gmm/data/lang/words.txt corpus.lm G.fst
使用fstdraw
绘制pdf
fstdraw --isymbols=gmm/data/lang/words.txt --osymbols=gmm/data/lang/words.txt G.fst G1.dot
上面文本的完整转化过程
arpa格式:
\data\
ngram 1=14
ngram 2=16
ngram 3=0
\1-grams:
-0.7781513 </s>
-99 <s> -0.5228788
-1.255273 了 -0.2218487
-1.255273 亮 -0.2762064
-1.255273 今天 -0.2498775
-1.255273 准备 -0.2498775
-0.9542425 去哪 -0.3679768
-0.7781513 小明 -0.5228786
-1.255273 我们 -0.2762064
-1.255273 明天 -0.2762064
-1.255273 是 -0.2762064
-1.255273 最 -0.2762064
-1.255273 班 -0.2762064
-1.255273 的 -0.2218487
\2-grams:
-0.1249387 <s> 小明
-0.30103 了 </s>
-0.30103 亮 的
-0.30103 今天 去哪
-0.30103 准备 去哪
-0.4771213 去哪 </s>
-0.4771213 去哪 了
-0.60206 小明 今天
-0.60206 小明 明天
-0.60206 小明 是
-0.30103 我们 班
-0.30103 明天 准备
-0.30103 是 我们
-0.30103 最 亮
-0.30103 班 最
-0.30103 的 </s>
\3-grams:
\end\
文本格式的G.fst:
1 7 小明 小明 0.287681967
1 0 #0 <eps> 1.20397294
0 2 了 了 2.89037275
0 3 亮 亮 2.89037275
0 4 今天 今天 2.89037275
0 5 准备 准备 2.89037275
0 6 去哪 去哪 2.19722462
0 7 小明 小明 1.79175949
0 8 我们 我们 2.89037275
0 9 明天 明天 2.89037275
0 10 是 是 2.89037275
0 11 最 最 2.89037275
0 12 班 班 2.89037275
0 13 的 的 2.89037275
0 1.79175949
2 0 #0 <eps> 0.510825515
2 0.693147242
3 13 的 的 0.693147242
3 0 #0 <eps> 0.635988772
4 6 去哪 去哪 0.693147242
4 0 #0 <eps> 0.575364172
5 6 去哪 去哪 0.693147242
5 0 #0 <eps> 0.575364172
6 2 了 了 1.09861243
6 0 #0 <eps> 0.847297907
6 1.09861243
7 4 今天 今天 1.38629448
7 9 明天 明天 1.38629448
7 10 是 是 1.38629448
7 0 #0 <eps> 1.20397246
8 12 班 班 0.693147242
8 0 #0 <eps> 0.635988772
9 5 准备 准备 0.693147242
9 0 #0 <eps> 0.635988772
10 8 我们 我们 0.693147242
10 0 #0 <eps> 0.635988772
11 3 亮 亮 0.693147242
11 0 #0 <eps> 0.635988772
12 11 最 最 0.693147242
12 0 #0 <eps> 0.635988772
13 0 #0 <eps> 0.510825515
13 0.693147242
G.fst绘制出如下图:
另一个文本
小明 今天 去哪 了
小爱 今天天气怎么样
小明 是 我们 班 最 亮 的
小明 明天 准备 去哪