语言模型小结

什么是语言模型呢?
维基百科给出的概念是这样的:A statistical language model is a probability distribution over sequences of words. Given such a sequence, say of length m, it assigns a probability P ( w 1 , … , w m ) {\displaystyle P(w_{1},\ldots ,w_{m})} P(w_{1},\ldots ,w_{m}) to the whole sequence.
用中文讲:统计语言模型是一个单词序列上的概率分布,对于一个给定长度为m的序列,它可以为整个序列产生一个概率 P(w1,w2,…,wm) 。其实就是想办法找到一个概率分布,它可以表示任意一个句子或序列出现的概率。
通俗地讲:给定一个句子,看它这句话是否像人话的概率。

那语言模型可以用来干什么呢?
可以用于机器翻译,人机对话,语音识别等等。

那么,怎么来计算这个概率呢?
一般,我们会考虑bigram 和 trigram, 这是什么意思呢?也就是说,我们认为一个词的出现依赖于前一个单词或前两个单词。如果在我们的假设里,所依赖的单词数超过两个,会面临数据稀疏严重和参数空间过大这两个问题。为什么会出现这两个问题呢?原因很简单,所依赖的词数多了,可能的组合情况就多了,但是数据库可能没有有些特定的组合。就好比,让你说一个别人闻所未闻的短语要比让你说一句别人闻所未闻的句子要容易地多。
下面举个简单的例子,更清楚地说明怎么计算概率:
假设我们的语料库里有三句话,每个字母代表一个词, < s >和< /s >分别代表句首和句尾:
< s >ABCD< /s >
< s >BCDA< /s >
< s >ACDB< /s >
现在有一句新的话< s >CBAD< /s >,请问它的出现概率是多少?
在这里我们考虑bigram模型,即一个词的出现依赖前一个单词。那么P(< s >CBAD< /s >)=P(C|< s >)P(B|C)P(A|B)P(D|A)P(< /s >|D), 根据语料库求出每一项并相乘即可。具体怎么求呢,很简单,公式在这里:p(w1|wi-1) = count(wi-1, wi) / count(wi-1)

好了,统计语言模型大概就是上面所述的样子了,那么现在考虑一个问题,如果进来一句话< s >EBAD< /s >,E这个词从来没出现过咋办呢?(不过现实中常常是某个词语搭配没出现过)如果还是根据之前的公式计算,那么这句话的出现概率就是零了,这样一来,因为其中一个乘子就使得整个句话概率为零,显然不科学啊。所以这里就要用平滑技术了。
常见的平滑技术有加一平滑法,又称拉普拉斯定律,具体公式在这里:p(w1|wi-1) = (count(wi1-, wi)+1 )/( count(wi-1)+V),V为所有bigram的个数。
另外还有更多的平滑技术,可以参考文章:http://www.cnblogs.com/bnuvincent/p/6939787.html

解决了乘子为零的问题,现在我又有一个问题了,怎么来评价一个语言模型呢?
目前主要有两种评价方法:
实用方法:我们在实际应用看看生成话像不像人话不就行了呗,优点是直观、实用,缺点是缺乏针对性、不够客观
理论方法:迷惑度/困惑度/混乱度(preplexity),其基本思想就是考虑到了测试句子中每个ngram出现的概率以及句子的长度,具体公式可以参考文章:https://blog.csdn.net/index20001/article/details/78884646

讲到这里,就需要一个分隔线了,因为以上所讲的是基于统计的语言模型,即需要一个大语料库,来计算词以及词的组合出现的频次。前面已经讲过,统计语言模型最大的问题是,概率估计得不是很精准,特别是n-gram中的n很大的时候,如果需要保证精度的话,那么我们需要的数据量很大,但是实际上我们不可能获得那么多训练数据,数据会变得稀疏。

所以下面讲讲基于深度学习的语言模型。
我们直接以RNN为例来训练一个语言模型。
首先搜集很多很多的句子作为训练数据,对句子进行长度统一处理。
接着将每个句子错开一个词的方式作为输入输出。这样说比较抽像,举个例子,我们有一句话< s >ABCD< /s >, 那么输入是< s >ABCD,输出是ABCD< /s >。根据RNN的特性,我们可以认为,根据< s >,模型输出了A, 根据< s >A, 模型输出了B,根据< s >AB输出了C, 以此类推。那么现在,有一个新的句子< s >CDAB< /s > ,我们怎么来算这个句子的概率呢?首先输入< s >, 查看输出是C是概率是多少,然后将隐层单元h和C一起输入,看输出是D的概率是多少,以此类推,最后将所有的概率相乘便得到句子的产生概率。

最后推荐一下台湾大学教授李宏毅的相关课程DeepLearning for Language Modeling:https://www.bilibili.com/video/av9770302/?p=4

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值