当前位置:   article > 正文

国立高等经济大学NLP学习笔记(2):语言建模(Language modeling)_3-gram语言模型

3-gram语言模型

这周讲核心的NLP方法。

2.1 语言建模:全是计数问题(Language modeling: it's all about counting!)

2.1.1 N-gram语言模型(N-gram language models)

我们从语言模型开始讲解。

什么是语言模型呢?语言模型就是计算序列单词(sequence words)或句子出现概率的模型,我们称之为language models或LMs。

假设你看到了一些句子的起始单词,那该如何预测接下来的单词,你会如何继续你的句子,搭配的单词是否听起来顺畅,我们人对此往往会有很好的判断,但怎么让机器拥有和人一样好的判断呢?我们可以预测在前一个词出现的情况下,后一个词出现的概率,首先我们需要一些数据,也就是语料,如下图所示:

上图来自于Coursera国立高等经济大学NLP该小节PPT。

假设我们现在需要预测的是house出现在this is the之后的概率,直觉上我们知道这个概率值就等于在语料中this is the house出现的次数占this is the X出现次数的比例,这也是极大似然估计的结果。上图中有四个语句,this is the X出现四次,而this is the house出现一次,所以house出现在this is the之后的概率为1/4,而this is the house我们称为4-grams。什么是n-grams呢?

n-grams指连续n个单词所组成的语料中的一些片段,比如this is为2-grams,this is the house为4-grams。但其实将n-gram model中的model去掉之后,n-gram即可以代表n个单词组成的片段,也可以代表n-gram语言模型。

知道了有些词出现的条件概率,有时候我们需要判断整句话出现的概率,或者说有1000个单词的句子,这样做并不简单,因为这整句话可能并不出现在文本中,所以我们不能简单的count去计算整句话出现的概率,但我们可以在单词条件概率的基础上计算句子出现的概率。

计算一个句子出现的概率时,可以使用链式法则(chain rule),但是最后一项会有些复杂,因为它的条件很长,且我们无法计算,因为要用频率代替概率,首先需要很大的语料库,而语句在不断创新,且有些特定语句可能根本就不存在。那我们可以避免这种情况吗,当然是可以的,我们可以使用马尔科夫假设(markov assumption),马尔科夫假设是说你不必考虑所有历史,仅考虑前n-1个term就可以了,这个n在这里指n-grams中的n,如下图所示:

如果按照链式法则,最后一个概率值要考虑前k-1个单词,而这(k-1)-grams可能在语料中就不存在,且实际情况中,一个单词的出现可能仅跟其前几个单词有紧密联系,太过久远的历史不仅没有用处且不便于计算。

所以这里我们提出了马尔科夫假设,即计算第i个单词出现的条件概率时,不必考虑前i-1个单词,只需要考虑前n-1个单词,而n在这里就是n-grams中的n(有些博客将n看作是第n个单词,这肯定是不对的,那就无区别于链式法则)。

下面来看一个2-grams的应用实例,如下图所示:

按照马尔科夫假设,因为我们使用的是bigram语言模型,所以计算单词出现的条件概率时,仅考虑该单词的前一个单词,如上图所示。根据语料,我们计算this is the house这句话出现的概率如上图所示,最终的结果是1/24,但是这样的结果有什么问题呢?

其实,这样计算我们会存在两种问题,但我们可以解决它们:

首先,在计算开头单词出现的概率时我们可以不必考虑语料中所有单词,因为有些单词根本就不可能作为句子首单词,而this、that作为句首单词出现的概率更高些,解决方法如下图所示:

即我们可以先在语料中每一个句子的句首都加上一个假的符号(fake token),然后计算this出现在fake token之后的条件概率,这样做结果就由原来的1/24变为现在的1/4,结果更加准确。同时,有的同学应该已经发现了,这是在bigram的情况下,所以句首我们加了一个fake token,根据马尔科夫假设,如果是n-grams,我们就需要在句首加(n-1)个fake token,不要忘记了。

但是这个结果还存在一个问题,我们需要结束符号(end-symble)使所有句子拥有同一个概率分布。如果没有结束符号,不同长度的所有句子概率总和均为1。因为句子长度无限制,所以该模型将定义无限多个概率分布,即每个句子长度有一个分布。如下图所示:

上面的解释也许比较抽象,接下来是我自己的想法,我们可以这样想,在没有结尾符时,P(this)=P(_this)=P(this|

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/367182
推荐阅读
相关标签
  

闽ICP备14008679号