这里举一个简单的例子说明srilm ngram存储过程
\data\
ngram 1=2
ngram 2=2
ngram 3=1
\1-grams:
-3.464278 一定 -0.7691519
-2.440158 有 -0.3659258
\2-grams:
-1.169282 一定 会 -0.01355691
-2.308796 有 希望 -0.200342
\3-grams:
-1.210051 一定 会 有
\end\
存储步骤
i) ngram 读取
ii) 概率值转换
iii)字符串到索引映射
iv) ngram逆序
v) ngram存储
......
尾部:
从上面实际的写入过程可以发现整个写入采用的是一个递归的写入方式,而且采用了类似于深度优先的写入方式。
关于srilm ngram trie的二进制读取和文本输出方式,如果感兴趣的话可以阅读相关代码,我相信有了上面的基础后,对这两块的理解应该不成问题。
注:需要注意的是,ngram lm 输出的时候采用了排序输出的方式,采用该方式是十分必要的,因为这会极大地提高 ngram trie的加载速度。关于这一点,可以通过相关实验验证。验证方法:将迭代器中的相关排序函数移除,并输出,同时使用ngram对比排序和非排序的lm加载速度。
全部内容,请下载:
![](http://control.cublog.cn/fileicon/pdf.gif) |
文件: |
srilm ngram数据结构.pdf |
大小: |
175KB |
下载: |
下载 | |
阅读(3746) | 评论(0) | 转发(0) |