美文网首页自然语言处理
语言模型-计算句子概率

语言模型-计算句子概率

作者: 风驰电掣一瓜牛 | 来源:发表于2017-07-18 21:30 被阅读782次

相关软件包:

mitlm只能训练语言模型,没有计算句子概率的函数,需要自己编写。

但是mitlm可以输出arpa格式的语言模型文件,通过python包arpa加载,使用相关的函数就可以计算句子概率。

mitlm训练模型:

../estimate-ngram -o 2 -t $infile \
    -wc $OUTPUT_DIR/wc.$cat \
    -wec $OUTPUT_DIR/wec.$cat \
    -wlc $OUTPUT_DIR/wlc.$cat \
    -wrc $OUTPUT_DIR/wrc.$cat \
    -wl $model_file \
    -wv $OUTPUT_DIR/wv.$cat \
    -eval-perp $infile

其中输出文件:

wc.$cat
    n-gram counts
wec.$cat
    effective n-gram counts
wl.$cat
    ARPA backoff LM
wlc.$cat
    left-branching n-gram counts
wrc.$cat
    right-branching n-gram counts

值得注意的就是 wl.$cat文件,该文件为ARPA格式的语言模型。ARPA格式一般如下:

ngram折扣概率, ngram, backoff概率(最后一个ngram没有backoff概率)

接下来就是使用arpa包计算句子概率了。

arpa包是基于python3开发的,在python2.7下可以安装,但是需要改3个地方才能运行:

第一处是 src/arpa/arpa.py文件的loadf()函数

def loadf(path, mode="rt", encoding=None, model=None, parser=None):
    """Deserialize path (a text file) to a Python object."""
    #with open(path, mode=mode, encoding=encoding) as f:
    with open(path) as f:
        return load(f, model=model, parser=parser)

第二处是 ./src/arpa/models/base.py 和/src/arpa/parsers/base.py中_metaclass_声明方式,分别改为:

class ARPAModel:
    __metaclass__ = ABCMeta
#
class ARPAParser:
    __metaclass__ = ABCMeta

第三处为 ./src/arpa/models/simple.py中的super()调用方式:

super(ARPAModelSimple, self).__init__(unk=unk)

加载arpa语言模型,计算句子概率:

import arpa
models = arpa.loadf("results/wl.a.hyp")
lm = models[0]
s = 'a b'
#计算ngram概率
print lm.p(s)
print lm.log_p(s)
#计算句子得分
print lm.s(s)
print lm.log_s(s)

ARPA格式详细可参考:

http://www.speech.sri.com/projects/srilm/manpages/ngram-format.5.html

计算句子模型的方法可以参考arpa包的源码,还可以参考代码:
https://github.com/awni/py-arpa-lm

mitlm的资料很少,貌似没有人维护和更新了,不过网上也找到一份教程,但是比较简单:
http://projects.csail.mit.edu/cgi-bin/wiki/view/SLS/MITLMTutorial

理解语言模型可参考stanford的课程:

http://www.voidcn.com/blog/fkyyly/article/p-566909.html

还可以参考中科院宗成庆老师的课件:

http://www.nlpr.ia.ac.cn/cip/ZongReportandLecture/Lecture_on_NLP/Chp-05.pdf

语言模型一般都会用到平滑方法,比较常用的是katz折扣法,详细讲解可参考:
http://blog.pluskid.org/?p=361

其他参考:
http://zhouyichu.com/nlp/Language-Model/

相关文章

  • 学习笔记-简单概念记录

    语言模型:衡量一句话是句子的概率假设有句子,根据语言模型计算s的概率为通常还使用n-gram语言模型计算句子概率 ...

  • 《数学之美》统计语言模型、分词

    语言模型 基于规则的模型 基于概率的模型 统计语言模型 问题:整个句子的概率:为了保证句子通顺,不出现歧义,计算整...

  • 语言模型-计算句子概率

    相关软件包: mitlm arpa mitlm只能训练语言模型,没有计算句子概率的函数,需要自己编写。 但是mit...

  • 词向量原理

    了解词向量要从语言模型说起,语言模型其实就是计算任意一个句子的概率。 经典的语言模型是n-gram模型,该模型假设...

  • 中文分析3:基于语言模型的无监督分词

    一、语言模型 1、什么是语言模型 语言模型就是计算条件概率的模型。 其中w1,w2,…,wn−1是句子中的前n−1...

  • 语言模型

    什么是语言模型呢? 简单地说,语言模型就是用来计算一个句子的概率的模型,也就是判断一句话是否是人话的概率? 放一篇...

  • CS224N学习笔记(七)—— RNN、LSTM和GRU

    一、语言模型 语言模型计算特定序列中多个单词的出现概率。一个 m 个单词的序列 的概率定义为 。 传统的语言模型...

  • 语言模型

    一、语言模型定义 一个句子是否合理,就看它的可能性大小如何(概率)。 语言模型缺点 參数空间过大:条件概率P(wn...

  • DeepLearning笔记: 语言模型和 N-gram

    语言模式是自然语言处理的一个基础概念。我们可以从语料中得到「语言模型」—— 即句子的概率,可用于: 发现错别句子 ...

  • 语言模型理论与实战

    原创:李孟启 1、前言 什么是语言模型(language model)?简单地说,语言模型就是用来计算一个句子的概...

网友评论

    本文标题:语言模型-计算句子概率

    本文链接:https://www.haomeiwen.com/subject/hqfkkxtx.html