文档章节

语言模型:Trigram 语言模型

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:20
字数 2452
阅读 19
收藏 0

该系列将描述一些自然语言处理方面的技术,完整目录请点击这里


有很多种定义语言模型的方式,在这里我们将重点介绍一种特别重要的方式,即三元语言模型(Trigram language model)。这将是根据上一节中关于马尔科夫模型的最直接的一个应用。在这一部分中,我们将给出三元语言模型的最基本定义,并且讨论三元模型的最大似然参数估计,并且讨论了三元模型的优势和劣势。

1.1 基础定义

在马尔科夫模型中,我们将每个句子构建成 n 个随机变量的序列 X1, X2,...,Xn。其中,长度 n 是可变的。并且,我们定义 Xn = STOP。在二阶马尔科夫模型下,任何序列 x1, x2, ..., xn 的概率可以被表示为:


其中,正如我们之前假设的 x(0) = x(-1)=*。

我们假设对于任何的 i,和任何的 x(i-2),x(i-1),x(i)。


其中,q(w | u,v) 是任何参数 (u, v, w) 的一个参数模型。接下来,我们很快就会学习到如何从语料库中学习中模型 q(w | u,v) 的参数估计,我们模型采用的具体形式是:


该等式对于任何的序列 x1, x2, ..., xn 对成立。

那么,接下来我们就可以推出如下定义:

定义 2(Trigram Language Model):一个三元语言模型包括一个有限集合 V,和一个参数 q(w | u, v) 。对于任何的三元 u, v, w,其中 w ∈ V ∪ {STOP}, 和 u, v ∈ V ∪ {*}。q(w | u,v) 的值可以理解为,在看到二元组 (u, v) 之后,看到单词 w 的概率是多少。对于任何的序列 x1, x2, ..., xn,其中 xi ∈ V for i = 1 . . .(n − 1),并且 xn = STOP。那么,根据三元语言模型可以得出序列的概率为:


其中 x(0) = x(-1) = *。

举个例子,比如我们有一个句子:

the dog barks STOP

那么我们可以得到概率:

p(the dog barks STOP)
= q(the|*, *)×q(dog|*, the)×q(barks|the, dog)×q(STOP|dog, barks)

请注意,在这个表达式中,我们对句子中的每个单词 (the, dog, barks, STOP) 都有一个独立的符号。并且三元语言模型假设:每个单词只取决于前两个单词。

对于任何的三元组 (u, v, w) 都满足 q(w|u, v) ≥ 0。
对于任何的二元组 (u, v) 都满足:


因此,q(w | u,v) 是在已知语境 (u, v) 然后预测下一个词是 w 的分布概率。

那么,现在的关键问题就是,我们如何去求得这个模型的概率分布。即 q(w | u, v)。

其中,w 可以是集合 V ∪ {STOP} 中的任何值,u, v ∈ V ∪ {*}。那么,模型的参数量级将达到 |V|^3。这是一个非常大的值。比如,我们取 |V| = 10000,那么这个量级就将达到 |V|^3 ≈ 10^12。

1.2 最大似然估计

首先,我们从估计参数最通用的解决方案开始 —— 最大似然估计。我们将看到这些估计方法都有一个严重的缺陷,但是我们将讨论如何推导相关的参数估计,使得它能更好的在实际环境中工作。

首先,我们需要定义一些符号。 c(u, v, w) 表示三元组 (u, v, w) 在语料库中出现的次数。比如, c(the, dog, barks) 表示序列 the dog barks 在语料库中出现的次数。相似地, c(u, v) 表示二元组 (u, v) 在语料库中出现的次数。对于任何的词 w, u, v,我们可以定义如下:


举个例子,如果我们要对 q(barks | the, dog) 进行估计,那么:


这个估计是非常自然的:分子是三元组 the dog barks 出现的次数,分母是二元组 the dog 出现的次数。然后把这两个进行相除就行了。

但不幸的是,这种参数估计的方法有一个非常严重的问题。设想一下,如果我们的模型中有很多的参数(比如,语料库的词汇大小是 10000,那么我们的参数规模将达到 10^12)。正因为这个原因,我们的很多计数都会变成 0。这将导致两个很严重的问题:

  • 由于分子会变成 0,那么很多的估计会 q(w|u, v) = 0。这将导致很多三元组的概率会等于 0 。但是一个在训练集中没有出现的三元组,在测试集中就把它的概率定义为 0,这显然是不合理的。

  • 还有一种更差的情况,如果分母 c(u, v) 等于,那么我们上式的定义将是无意义的。

那么,如何修正这些问题将变成一个迫在眉睫的问题,具体的方法我们会在后续章节中给出。首先,我们需要讨论如何来评估一个语言模型的好坏。然后讨论三元语言模型的优缺点。

1.3 语言模型评估指标:困惑度(Perplexity)

那么,我们怎么来评估一个语言模型的好坏呢?一个非常常见的方法是评估模型在一些已知数据集上面的困惑度(Perplexity)。

具体方法是这样的。假设,我们有一个测试数据集:


每个测试样本 x^(i) for i ∈ {1 . . . m} 是由一个序列组成的,具体如下:


其中,n(i) 表示第 i 个句子的长度。正如我们之前所假设的,句子的最后一个符号是一个特殊符号 STOP。

这有一个非常重要的信息,那就是测试句子是不存在与训练集中的句子。从这个层面上来说,这个句子是新的句子,模型是从来没有看见过这些句子。

对于任何的测试句子 x^(i),我们都能利用语言模型计算出它的概率 p(x^(i)) 。对语言模型质量的度量就是在整个测试句子中进行概率计算,即:


从式子直观来看:如果最后的数值越大,那么该语言模型的建模效果越好。

测试语料库的困惑度直接由这个数值来决定。我们定义 M 是语料库中所有词的数量。更准确地说,n(i) 表示第 i 个句子的长度。


我们对模型的度量取对数操作,即:


上式只是对整个测试语料库的概率取了对数。在这里,对于任何 z>0,我们采用 log2(z) 来进行表示,因为都是一个递增函数,所有这个值越大,那么语言模型的表现也就越好。

接下来,我们来正式的定义困惑度(Perplexity),如下:


其中,


因此,我们对刚刚讨论的平均对数概率取了负值,并且将该值作为 2 的指数。困惑度将是一个正数。困惑度的值越小,语言模型的效果越好。

一些对于困惑度的直观解释如下。假设我们有一个词库 V,其中 |V ∪ {STOP}| = N 。我们假设对词 w, u, v 进行预测,得到的概率都是:


当然,这是一个非常差的模型,它把所有词的概率当做了一个均匀分布的概率来计算,包括 STOP 符号。在这种情况下,我们得到的困惑度将等于 N 。困惑度可以被认为是在该模型下,有效词汇的多少。例如,如果模型的困惑度是 123(尽管语料库中词汇数量为 10000),那么模型也认为具有有效的词汇数量是 123 个。

为了更好的说明这个问题,我们来定义一些相关的符号 1/t ,其中




也就是说, t 是一个几何平均数。比如,如果困惑度等于 100,那么几何平均数将是 0.01,即 t = 0.01。

关于困惑度还有另一个有用的事实。如果测试集中对于任何的三元组 (u, v, w),我们有估计概率:


那么,困惑度将达到无限大 ∞。请注意,在这种情况下,模型对测试语料库的预测概率都是 0,即平均对数概率将是负无穷大 −∞。因此,我们必须认真对待困惑度这个值,想尽任何办法把这个值趋近于 0 。

最后,我们来计算一些典型模型的困惑度。比如,我们有一个词库,里面有 50000 个词。在二元语言模型中,我们有的参数形式是 q(w | v),即:


因为,每个词只依赖于它前面一个词。在一元语言模型中,我们拥有的参数是 q(w),即:


也就是说,在一元语言模型中,每个词都是独立的,不依赖于任何的词。那么,对于三元语言模型,困惑度是 74;对于二元语言模型,困惑度是 137;对于一元语言模型,困惑度是 955;如果我们采用最初介绍的均匀分布,即每一个词的预测概率是 1/50000,那么模型的困惑度将达到 50000 。所以,我们能很直观的看到,三元语言模型对于一元语言模型和二元语言模型都是一个巨大的进步。

1.4 三元语言模型的优缺点

  • 高阶 n-gram 对更多的上下文敏感,但是数据拥有更多的稀疏性。
  • 低阶 n-gram 考虑非常有限的上下文信息,但是具有更强的鲁棒性。

本文转载自:http://www.jianshu.com/p/d258625d0323

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2634
码字总数 82983
作品 0
程序员
Language Modeling---NLP学习笔记

本栏目来源于对Coursera 在线课程 NLP(by Michael Collins)的理解。课程链接为:https://class.coursera.org/nlangp-001 1. 语言模型定义: Model Representation: V:集合V包含语料中所有...

javaex999
2016/11/08
66
0
cs224d-第二课-word2vec

首先我想说下为什么会去学习cs224d,原先我一直是做工程的,做了大概3年,产品做了好多,但是大多不幸夭折了,上线没多久就下线,最后实在是经受不住心灵的折磨,转行想做大数据,机器学习的...

超级个体颛顼
2017/06/27
0
0
n元语法

语言模型 在统计自然语言处理中语言模型是很重要的一块,常用的语言模型是n元语法模型,当然现在比较流行的还有神经网络语言模型。n元语法模型需要额外的平滑处理,而神经网络语言模型则不必...

超人汪小建
2017/11/28
0
0
(转)word2vec前世今生

word2vec 前世今生 2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,...

wangxiaocvpr
2016/07/20
0
0
一种利用ngram模型来消除歧义的中文分词方法

这里的歧义是指:同样的一句话,可能有两种或者更多的切分方法,这些切分结果,有的正确,有的不正确。 消除歧义的目的就是从切分结果中挑选切分正确的。 假设我们要切分句子:结婚的和尚未结...

杨尚川
2015/05/06
0
14

没有更多内容

加载失败,请刷新页面

加载更多

为什么Java大神,都在看Spring Boot和Spring Cloud的书?

如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的书籍,那么,你今天就来对地方了。 本文,我们将讨论一些学习Spring Boot和Spring ...

Java小铺
20分钟前
7
0
springboot logback日志配置

springboot 如果不使用外部tomcat的话,日志是需要自己配置的,不然的话就只有控制台的日志,但是日志又是我们在项目上了生产环境,出问题时,检查问题的唯一途径,所以我们要配置详细的日志...

曾大大胖
20分钟前
2
0
Linux服务器集体篡改时间的方法

Red Hat 虚拟化课程RH318,中小型公司使用的话,感觉可以匹敌OpenStack。手头上有一个VMware的映像,RHEV 3.5版的,只能把系统时间调整到2016年才能使用。Red Hat的RHEV已经更新到4.1版,不过...

大别阿郎
21分钟前
1
0
Tomcat启动异常:java.lang.ClassNotFoundException

警告: Name = mysqlDataSource Property maxActive is not used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have set value of "100" for "maxActive" property, wh......

hengbao5
22分钟前
1
0
GO错误的一些处理(defer,recover,panic)

package main import("fmt""errors")func main() {num := 10fmt.Printf("num的类型%T, num的值%v, num的地址%v\n", num, num, &num)num2 := new(int) //返回一个指针//num...

汤汤圆圆
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部