博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SLP读书笔记之 n-gram 语言模型
阅读量:4660 次
发布时间:2019-06-09

本文共 1376 字,大约阅读时间需要 4 分钟。

参考Speech and Language Processing[1]

假设人类的语言是上帝掷骰子生成的, 那这个骰子应该是什么样的呢? 语言模型, 就是从概率的视角, 来描述这个骰子. 具体一点, 给定一句话或者词序列, 语言模型负责给出其出现的概率. 而其中最简单的一种语言模型就是n-gram模型.

n-gram就是n个连续的词, "我"是1-gram (或者unigram), "我们" 就是2-gram (或者bigram). 平时使用时, n-gram模型会简略成n-gram. 所以n-gram有两个意思, 一说是N个连续的词, 也指接下来要介绍的n-gram语言模型.

长度为n的一句话出现的概率可以表示为P(w1, w2,..., wn), 或者P(w1n). 如果直接估计这个概率, 需要统计两个东西, (1) {

w1, w2,..., wn}这句话出现的次数, (2) 所有长度为n的词序列的个数. 想想看, 长度为n的一句话有多少种不同的情况, 当N比较大的时候呢? 而且随着序列变长, 0概率出现的情况会越来越多. 所以, 这种估计方法工作量大且不太可行. 如果通过概率论的链式法则对P(w1, w2,..., wN)进行分解, 就会得到:

额.....好像还是需要统计较长序列的出现次数. 例如最后一项P(wnw1n-1), 已知前n-1个词第n个词的概率, 还是会有上面说到的问题. 咋办呢? n-gram这个时候出场了.  以2-gram或者bigram为例, 他将上述公式中的条件概率进行的简化, 即一个词只与它前面一个词相关, 于是P(wn | w1n-1)≈P(wn | wn-1). 同理, 对于3-gram或者trigram, 一个词只与它之前两个词相关, 即P(wn | w1n-1)≈P(wn | wn-1, wn-2). 于是上述P(w1n) ≈ Π P(wk|wk-1). 我们只要估计P(wk|wk-1)就可以了.

这的C(.)代表.出现的次数. 扩展到n-gram, 概率的计算公式为:

 

以bigram为例, 假设我们有如下这样的语料:

我们可以计算出各个bigram的概率为:

于是P(<s> I am Sam </s>) = P(I | <s>) * P(am | I) * P(Sam | am) * P(</s> | Sam) = 0.67 * 0.67 * 0.5 * 0.5  = 0.11225. 实际应用中, 为了防止多个小于0的数相乘引发的下溢, 常对概率取对数. 于是, 概率相称变成对数概率的相加, 如需获得真正的概率值, 则将对数概率作为自然对数e的指数即可计算得出.

 

[1] Daniel Jurafsky and James H Martin. Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition. Tracy Dunkelberger, 2008.

转载于:https://www.cnblogs.com/zhuangliu/p/10882592.html

你可能感兴趣的文章
Hive新功能 Cube, Rollup介绍
查看>>
webpack:(模块打包机)
查看>>
程序员不得不知的座右铭(世界篇)
查看>>
表格-鼠标经过单元格变色(暂不支持IE6)
查看>>
【每日一学】pandas_透视表函数&交叉表函数
查看>>
实时读取日志文件
查看>>
【寒假集训系列2.12】
查看>>
2018牛客多校第六场 I.Team Rocket
查看>>
Vuex了解
查看>>
c++初始化函数列表
查看>>
JS的this总结(上)-call()和apply()
查看>>
ADO.net 增删改查小练习
查看>>
HDU5795A Simple Nim SG定理
查看>>
2018.10.30 NOIp模拟赛 T1 改造二叉树
查看>>
九度oj 题目1074:对称平方数
查看>>
Zookeeper原理 二
查看>>
android之APP+JNI+Drv框架
查看>>
三阶魔方公式
查看>>
BP算法
查看>>
P1855 榨取kkksc03
查看>>