Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204496
  • 博文数量: 16
  • 博客积分: 2001
  • 博客等级: 大尉
  • 技术积分: 265
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-29 16:25
文章分类
文章存档

2011年(1)

2009年(1)

2008年(14)

我的朋友

分类: C/C++

2008-12-04 17:10:56

这里举一个简单的例子说明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\
 
 
存储步骤
ingram 读取
ii) 概率值转换
iii)字符串到索引映射
ivngram逆序
v ngram存储
 
......
 
尾部:
从上面实际的写入过程可以发现整个写入采用的是一个递归的写入方式,而且采用了类似于深度优先的写入方式。
 
关于srilm ngram trie的二进制读取和文本输出方式,如果感兴趣的话可以阅读相关代码,我相信有了上面的基础后,对这两块的理解应该不成问题。
 
注:需要注意的是,ngram lm 输出的时候采用了排序输出的方式,采用该方式是十分必要的,因为这会极大地提高 ngram trie的加载速度。关于这一点,可以通过相关实验验证。验证方法:将迭代器中的相关排序函数移除,并输出,同时使用ngram对比排序和非排序的lm加载速度。
 
全部内容,请下载:

文件: srilm ngram数据结构.pdf
大小: 175KB
下载: 下载

 
阅读(3746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~