语言模型介绍(一)

本文翻译自ysda的自然语言处理课程课件,原文网址为:

https://lena-voita.github.io/nlp_course/language_modeling.html

如果想看原文可自行跳转。

语言模型

什么是"模型"

想象一下我们在真实世界中有一个模型,我们会期望他能做什么?如果他是一个好的模型,那么他应该可以在给定上下文描述的情况下预测出将要发生什么。

一个好的模型会模拟真实世界的行为,他将会“理解”哪个事件会更贴合现实世界的情况。

什么是“语言”

关于语言我们的直观上的感受都是相同的。不同的是对于事件的感受。在语言中,一个事件是一个语言单元(语言单元包括:文字,句子,标识,符号)。语言模型的目标就是预测这些事件的概率。

语言模型

语言模型(Language Model)估计不同语言单元的概率:符号,标识,句子…

语言模型的使用场景

我们每天都可以看见语言模型的身影。在大型商业服务中的模型或许比这里介绍的要复杂一些,但是思想是相同的:如果我们可以预测单词/句子/等的出现的概率,我们就可以以各种方式来使用他,有时候甚至是我们没有想到的方式。

举例说明:
在搜索引擎中,输入几个字会有联想的后边的可能出现的字,这就是语言模型的一种使用场景。
图片来自于https://lena-voita.github.io/nlp_course/language_modeling.html
现在很多的工具都提供了智能纠错的功能,如word等,这其实也是语言模型的使用。语言模型认为在这些词后边更应该出现某个词而不是你现在输入的词,进而进行纠错。如下图:
图片来自于https://lena-voita.github.io/nlp_course/language_modeling.html
同时,如果想要机器理解我们人类说的话,语言模型也起到了很重要的作用。对于人类很容易理解的话,机器可能特别困难。有了语言模型,就可以找出更符合现实世界的情况。

语言模型介绍

文本概率

我们的目标是估计文本片段的概率,为了简单起见,我们假设现在处理的是句子。我们需要这些概率去反应一个语言的信息。确切的说根据语言模型的定义,在语言中更容易出现的句子应该有更大的概率。

那么一个句子在一个语言中出现的概率有多大呢?应该如何计算这个概率呢?

图片来自于https://lena-voita.github.io/nlp_course/language_modeling.html

如上图所示,首次让我们来看一看最简单的概率理论是否可以应用在此处。最简单的概率理论就是如这里有一篮子的不同种颜色的球,我们在这个篮子中取到某一个特定颜色的球的概率(如:绿色)就是绿色球在篮子中的频率,即以频率估计概率。

这个方法是否同样适用于对句子概率的估计??
答案是不行。因为在一个文本预料库中不可能包含所有的句子。虽然有些句子比其他句子明显的更可能出现,但由于他们都不在语料库中,所以他们的概率都是0,所以这个方法并不适用。

我们需要更聪明的方法。

句子概率:分解为小块

我们之前不能估计句子的概率是因为我们把他作为一个原子单位。现在让我们来把他分解为一些小的部分。

例如,这句话“I saw a cat on a mat”,现在想象一下我们逐字的读。每一步,我们估计到目前为止看到的词的概率,不浪费一个词。当一个新词出现的时候我们不会丢弃以前的概率,而是为这个新词更新概率,看下边的图示:

图片来自于https://lena-voita.github.io/nlp_course/language_modeling.html

让y1,y2,…yn 代表句子中的词,p(y1,y2,…,yn)做为这些词按着顺序出现的概率。则使用链式法则可得:
图片来自于https://lena-voita.github.io/nlp_course/language_modeling.html
我们将一个文本的概率转变为了每一个词在之前上下文中出现的条件概率。

得到了:Left-to-Right Language Models 自左向右的语言模型

我们刚才得到的是从左到右的语言模型框架。这个框架是比较通用的:N-gram和neural language model使用了这个模型,只是使用了不同的方法来计算条件概率。

使用语言模型生成文本

一旦我们有了语言模型,我们就可以用他来产生文本。我们每次产生一个词:预测在已经给定的之前的语境中的下一个词的可能分布,并在这个分布中采样,过程如下图所示。
在这里插入图片描述
在选择过程中并没有每次都选择概率最高的词语,稍后将会展示。

N-gram 语言模型

让我们回忆之前刚提到的left-to-right language model 将一个句子的概率变为了之前出现过的词语的条件概率。
如何计算这些概率目前还不清楚。我们除妖明确如何计算条件概率。p(yt|y1,…,yt-1)

和我们之前在词嵌入(Word Embedding)中提到的基于计数的方法(count-based)相似,n-gram语言模型也是使用了文本语料库的统计信息(如计数)。

也可以说,n-gram 计算p(yt|y1,…,yt-1)的方法与我们之前提到的在篮子中挑选绿色的球的概率的计算方法“几乎”是相同的。
这个几乎包含了n-gram的核心部分:马尔可夫属性(Markov property)和平滑(smothing)

马尔可夫属性:独立性假设(Markov Property:Independence Assumption)

直接的计算p(yt|y1,…,yt-1)方法是:
图片来自于https://lena-voita.github.io/nlp_course/language_modeling.html
N(y1,…,yk)代表(y1,…,yk)在文本中出现的次数。

由于我们已经讨论过的相同的原因这个方法不会得到很好的结果:很多的语段(y1,…,yt)都不会在一个语料库中出现,因此就会将概率计算为0.为了克服这个问题,我们做了一个独立性假设:
一个词出现的概率只与固定个数的前文有关。
一般来说,n-gram 模型假设:
在这里插入图片描述
例如:
在这里插入图片描述
现在对比一下n-gram对于标准的分解方法的变化:
图片来自于https://lena-voita.github.io/nlp_course/language_modeling.html

Smothing(平滑)

想象一下我们在处理一个4-gram模型,考虑下边的例子:
在这里插入图片描述
如果分子或分母为0应该怎么办呢?这两种情况都对模型不利。为了避免这个问题(以及其他问题)使用smothing是很普遍的现象。平滑重新分配了权重。他们从已经看到的事件中偷来“权重”分给还没出现的事件。

在这里,通常我会想象一个勇猛的Robin Hood, 进行劫富济贫,就像smothing做的那样。但是不幸的是,我需要强迫自己停止想象,因为就实际来说,smothing并没有那么聪明,这或许会冒犯了Robin 😃。

避免分母是0

在这里插入图片描述
如果短语“cat on a”从未在语料库中出现,我们就不能计算这个概率了。因此当这个情况发生的时候,我们需要一个“plan B”

1.Backoff:退避

其中一个解决办法是使用我们不知道的语境更少的上下文。这就叫做退避:
如果可以,使用三元组trigam
如果不能使用三元组,适用二元组bigram
如果还是不行,使用unigram

在这里插入图片描述
这个方法可能看起来很愚蠢,但是工作的效果却很好

2.更聪明一点的方法:线性插值(Linear interpolation)

一个更聪明一点的办法是混合所有的概率:unigram, bigram, trigram等。对于这个问题来说,我们需要标量正权重,权重加起来正好为1。更新的概率为:
在这里插入图片描述
可以通过对开发集进行交叉验证来选择系数。 一旦知道如何评估语言模型,便可以执行此操作:具体操作请参阅“评估”部分。

避免分子是0

在这里插入图片描述
如图所示,如果cat on a mat 从未在语料库中出现,整个句子的概率就会变为0,但句子为0的概率并不代表句子是不可能出现的,为了避免这个,我们也需要一个“plan B”

拉普拉斯平滑(Laplace smothing)也叫做加一平滑:
最简单的避免这个问题的办法就是我们假设所有的n-gram至少出现一次:就是在计数上加一,也可以用一个很小的数替代一:
在这里插入图片描述

生成

n-gram的生成与之前介绍过的普通的语言模型生成文本是一致的:给出当前的上下文,产生下一个词的可能分布(在词汇表所有词的范围内),采样一个词,将这个词放入到句子中,重复上述步骤。唯一不同的部分是n-gram计算概率部分。

接下来将会介绍神经网络语言模型,由于比较长将会写在下一篇文章里,感兴趣的小伙伴可以继续学习哦~

作者有话说:我也是刚开始学习,不知道翻译的是否有误,如果有不对的地方还请大家指出

同时这个教程我很喜欢,他也有每周相对应的代码任务,我很希望有志同道合的小伙伴一起打怪升级如果你也对这个教程感兴趣或者已经开始学习了,想拥有一个小伙伴的话,请联系我呦:)~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值