SRILM语言模型格式解读

先看一下语言模型的输出格式

[html] view plain copy

  1. \data\
  2. ngram 1=64000
  3. ngram 2=522530
  4. ngram 3=173445
  5. \1-grams:
  6. -5.24036        ‘cause  -0.2084827
  7. -4.675221       ‘em     -0.221857
  8. -4.989297       ‘n      -0.05809768
  9. -5.365303       ‘til    -0.1855581
  10. -2.111539       </s>    0.0
  11. -99     <s>     -0.7736475
  12. -1.128404       <unk>   -0.8049794
  13. -2.271447       a       -0.6163939
  14. -5.174762       a‘s     -0.03869072
  15. -3.384722       a.      -0.1877073
  16. -5.789208       a.‘s    0.0
  17. -6.000091       aachen  0.0
  18. -4.707208       aaron   -0.2046838
  19. -5.580914       aaron‘s -0.06230035
  20. -5.789208       aarons  -0.07077657
  21. -5.881973       aaronson        -0.2173971

(注:上面的值都是以10为底的对数值)

上面是一个语言模型的一部分,三元语言模型的综合格式如下:

[html] view plain copy

  1. \data
  2. ngram 1=nr # 一元语言模型
  3. ngram 2=nr # 二元语言模型
  4. ngram 3=nr # 三元语言模型
  5. \1-grams:
  6. pro_1 word1 back_pro1
  7. \2-grams:
  8. pro_2 word1 word2 back_pro2
  9. \3-grams:
  10. pro_3 word1 word2 word3
  11. \end\

第一项表示ngram的条件概率,就是P(wordN | word1,word2,。。。,wordN-1)。

第二项表示ngram的词。

最后一项是回退的权重。

举例来说,对于三个连续的词来说,我们计算三个词一起出现的概率:

[html] view plain copy

  1. P(word3|word1,word2)

表示word1和word2出现的情况下word3出现的概率,比如P(平|习,进)的意思是已经出现了“习进”两个字,后面是平的概率,这个概率这么计算:

[html] view plain copy

  1. if(存在(word1,word2,word3)的三元模型){
  2. return pro_3(word1,word2,word3) ;
  3. }else if(存在(word1,word2)二元模型){
  4. return back_pro2(word1,word2)*P(word3|word2) ;
  5. }else{
  6. return P(word3 | word2);
  7. }

上面的计算又集中在计算P(word3 | word2)的概率上,就是如果不存在习进平的三元模型,此时不管何种路径,都要计算P(word3 | word2) 的概率,计算如下:

[html] view plain copy

    1. if(存在(word1,word2)的二元模型){
    2. return pro_2(word1,word2);
    3. }else{
    4. return back_pro2(word1)*pro_1(word2) ;
    5. }
时间: 2024-11-09 01:41:10

SRILM语言模型格式解读的相关文章

基于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    

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

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

Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶

sam格式很精炼,几乎包含了比对的所有信息,我们平常用到的信息很少,但特殊情况下,我们会用到一些较为生僻的信息,关于这些信息sam官方文档的介绍比较精简,直接看估计很难看懂. 今天要介绍的是如何通过bam文件统计比对的indel和mismatch信息 首先要介绍一个非常重要的概念--编辑距离 定义:从字符串a变到字符串b,所需要的最少的操作步骤(插入,删除,更改)为两个字符串之间的编辑距离. 这也是sam文档中对NM这个tag的定义. 编辑距离是对两个字符串相似度的度量(参见文章:Edit Di

sam/bam格式

一)Sam (Sequence Alignment/Map) ------------------------------------------------- 1) SAM 文件产生背景 随着Illumina/Solexa, AB/SOLiD and Roche/454测序技术不断的进步,各种比对工具产生,被用来高效的将reads比对到参考基因组.因为这些比对工具产生不同格式的文件,导致下游分析比较困难,因此一个通用的格式可以提供一个很好的接口用于链接比对与下游分析(组装,变异等,基因分型等)

blast及其格式输出简介

1)blast产生背景 双序列比对可以采用是基于动态规划算法的Needleman-Wunsch(NW)和Smith-Waterman algorithm(SW)算法,虽然精度高,但计算消耗大.当与数据库比对的时候,该算法就显得不切实际.因此TASTA,blast采用启发式算法使得通过大幅度丢失灵敏度来减少运行时间.与FASTA软件相比,blast通过把搜索限制在狭隘的矩阵对角线条带上,来改进FASTA进行数据库搜索的速度. 2)blast的大致原理 blast 程序首先查询query序列的所有子

SDP格式

抄录:Webrtc SDP格式解读-https://blog.csdn.net/m0_37263637/article/details/96355737 SDP组成结构 +---------------------+ | v= | +---------------------+ +---------------------+ +---------------------+ ==== | Session Metadata | ===== | o= | | +--------------------

selinux 安全上下文

一:安全上下文原理 安全上下文是一个简单的.一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain),"域"和"域类型"意思都一样,即都是安全上下文中的"TYPE". 1 :DAC与MAC的关键区别(root用户) 安 全增强型Linux(SELinux)开始是由NSA(国家安全局)启动并加入到Linux系统中的一套核心组件及用户工具,可以让应用程序运行在其所需 的

JavaScript二进制数据序列化和反序列化

最近业余时间在搞h5小游戏,由于同步协议过于频繁,和服务器之间的同步直接用json就显得太浪费了,于是我们商讨之下决定改用二进制.学习过程中并没有遇到一篇就解决问题的文章,遂再总结一发. 1.二进制数据的存储 ArrayBuffer对象.TypedArray对象.DataView对象是JavaScript操作二进制数据的一个接口. (1)ArrayBuffer对象:代表内存之中的一段二进制数据,它不能直接读写,只能通过视图(TypedArray视图和DataView视图)来读写,视图的作用是以指

ManagementFactory (二) getMemoryMXBean

MemoryMXBean package cn.zno.outofmomery; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.util.ArrayList; import java.util.List; public class Test { MemoryMXBean memoryMXBean; { memoryMXBean = Manag