精华内容
下载资源
问答
  • 有很多种定义语言模型的方式,在这里我们将重点介绍一种特别重要的方式,即三元语言模型Trigram language model)。这将是根据上一节中关于马尔科夫模型的最直接的一个应用。在这一部分中,我们将给出三元语言模型...

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


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

    1.1 基础定义

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

    10012226_OHw5.jpg

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

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

    10012227_UneO.jpg

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

    10012227_0qUV.jpg

    该等式对于任何的序列 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。那么,根据三元语言模型可以得出序列的概率为:

    10012227_bFzE.jpg

    其中 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) 都满足:

    10012228_C9XJ.jpg

    因此,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,我们可以定义如下:

    10012228_A4Te.jpg

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

    10012228_rle0.jpg

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

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

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

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

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

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

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

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

    10012228_Y2yb.jpg

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

    10012229_xznQ.jpg

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

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

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

    10012229_NbIw.jpg

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

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

    10012229_nyAp.jpg

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

    10012229_a0qO.jpg

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

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

    10012230_hW0r.jpg

    其中,

    10012230_gdu7.jpg

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

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

    10012230_1o3p.jpg

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

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

    10012231_9Y1v.jpg
    10012231_YxY8.jpg
    10012231_eBDk.jpg

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

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

    10012231_roUl.jpg

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

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

    10012232_hthx.jpg

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

    10012232_HQ1G.jpg

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

    1.4 三元语言模型的优缺点

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

    转载于:https://my.oschina.net/u/3579120/blog/1533417

    展开全文
  • 语言模型Trigram-语言模型

    千次阅读 2018-05-22 12:09:12
    有很多种定义语言模型的方式,在这里我们将重点介绍一种特别重要的方式,即三元语言模型Trigram language model)。这将是根据上一节中关于马尔科夫模型的最直接的一个应用。在这一部分中,我们将给出三元语言模型...

    作者:chen_h
    微信号 & QQ:862251340
    微信公众号:coderpai


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


    有很多种定义语言模型的方式,在这里我们将重点介绍一种特别重要的方式,即三元语言模型(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 考虑非常有限的上下文信息,但是具有更强的鲁棒性。
    展开全文
  • 语言模型Trigram-模型的平滑估计

    千次阅读 2018-05-22 12:08:50
    正如我们前面讨论的,三元语言模型有非常多的参数。利用最大似然估计会造成一个很严重的问题,就是很多的值都会变成零,数据将会非常稀疏。即使我们把训练集设置的非常大,但是很多的三元组 c(u, v, w) 或者二元组 c...

    作者:chen_h
    微信号 & QQ:862251340
    微信公众号:coderpai


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


    正如我们前面讨论的,三元语言模型有非常多的参数。利用最大似然估计会造成一个很严重的问题,就是很多的值都会变成零,数据将会非常稀疏。即使我们把训练集设置的非常大,但是很多的三元组 c(u, v, w) 或者二元组 c(u, v) 的值还是会很小或者等于 0 。

    在这一部分,我们来学习一些平滑估计的方法,这些方法将对稀疏数据起到一定的缓和作用。这些方法的关键思想非常依赖于低阶统计估计,比如我们想要去对三元语言模型进行平滑估计,那么就非常依赖于一元语言模型或者二元语言模型的估计。现在,我们来讨论在实践中非常有用的两种平滑方法:第一,线性差值法(linear interpolation);第二,折扣方法(discounting methods)。

    1.1 线性差值法

    对三元语言模型进行线性差值模型如下。我们将三元语言模型(Trigram),二元语言模型(Bigram)和一元语言模型(Unigram)的最大似然估计定义如下:

    这里,我们有一些符号之前没有讲到,先来补充一下。c(w) 表示词 w 在训练集中出现的次数,c() 表示训练集中所有词的数量。

    一元语言模型,二元语言模型和三元语言模型在不同程度上有自己的优点和缺点。一元语言模型概率估计的分子和分母都不会出现 0 的情况,因此这个概率估计就非常好定义,并且该值是永远大于 0(我们假设每个词在训练语料库中出现的次数至少一次,这个假设是可信的)。但是,一元语言模型完全的忽视了上下文信息,也就是说丢弃了很多有价值的信息。相反,三元语言模型考虑了上下文信息,但是出现的问题是很多的语句组的统计数值变成了 0。二元语言模型的优缺点介于一元语言模型和三元语言模型之间。

    接下来,我们正式开始讨论线性插值法。我们以三元语言模型为例,把线性差值用于三元语言模型,将得到如下式子:

    其中,λ1, λ2 和 λ3 是三个附加的参数,它们满足如下关系:

    因此,我们采用的是对三个估计采用加权平均的方式。

    如何去确定 λ 的值存在很多种方式,这里我们介绍一种常见的方法。假设,我们有一些额外的数据,这个数据不同于训练数据和测试数据。我们将这个数据成为开发数据。我们定义 c’(u, v, w) 表示三元组 (u, v, w) 在开发数据集中出现的参数。我们很容易在开发数据集上面计算对数似然值,具体计算公式如下:

    我们选择 λ 的值,使得 L(λ1, λ2, λ3) 的值越大越好。因此,λ 的取值如下:

    其中,

    接下来,我们的任务就是去寻找最佳的 λ1, λ2, λ3 值。

    如上所述,我们有三个平滑参数 λ1, λ2, 和 λ3。这三个参数我们可以理解为对每个语言模型的估计置信度,或者权重。比如,如果 λ1 的值非常接近于 1 ,也就是说,我们认为三元组 qML(w | u, v) 的概率估计是有重大意义的。相反,如果 λ1 接近于 0,那么我们认为对三元组 qML(w | u, v) 的概率估计意义不大。

    在实际过程中,我们需要额外的关注二元组 (u, v) 的大小,我们认为当 c(u, v) 更大时,我们应该将 λ1 的取值变得更大。从直观上来解释,当 c(u, v) 较大时,我们应该给三元组更多的置信度。

    如果当 c(u, v) = 0 时,我们需要取 λ1 = 0。因为,这个时候分母等于 0,我们无法定义三元语言模型。

    同理,如果 c(u, v) 和 c(v) 都等于 0,那么我们需要定义 λ1 = λ2 = 0,因为三元语言模型和二元语言模型都无法定义。

    那么有没有一个比较好的 λ 参数定义方法呢?答案是有的。我们先来介绍一个很简单的方法,定义如下:

    其中,γ > 0 是这个模型的唯一参数。但我们也很容易就能发现 λ1 ≥
    0, λ2 ≥ 0,并且 λ1 + λ2 + λ3 = 1。

    在这个定义下,我们可以发现 λ1 会随着 c(u, v) 的增大而增大,λ2 也会随着 c(v) 的增大而增大。而且,我们有如果 c(u, v) = 0,那么 λ1 = 0,如果 c(v) = 0,那么 λ2 = 0。至于 λ ,我们可以通过最大化一组开发数据上面的对数似然估计来决定。

    这是决定参数的方式是非常粗糙的,而且一般情况下不是最优的。但是这种方法足够简单,而且在实际过程中,在一些应用中也能取得很好的结果。

    1.2 折扣方法

    我们现在再来介绍另一种估计的方法,这种方法在实际项目中也被广泛使用。首先,我们来考虑一下二元语言模型,即我们的定义如下:

    对于任何的 w ∈ V ∪ {STOP}, v ∈ V ∪ {∗} 都成立。

    第一步,我们需要定义什么是折扣数(discounted counts)。对于二元语言模型 c(u, w) ,其中 c(v, w) > 0,我们能定义折扣数为:

    其中 β 是一个介于 0 和 1 之间的数值(一般我们取 β = 0.5)。因此,我们只是简单的从计数中减去了一个常数值 β 。从直观上来讲,如果我们从训练语料库中获得数据,其实系统会高估二元组 (u, v) 在语料库中出现的概率(并且低估了语料库中没有出现的二元组)。

    对于任何的二元组 (v, w),其中 c(v, w) > 0。我们可以定义

    因此,我们在分子上面使用了折扣数,分母上面没有任何变化。

    图1:一个折扣方法的例子

    上图是一个折扣方法的例子。我们假设一元语言 the 出现的次数是 48 词,然后我们罗列了所有的二元语言组合 (u,v) ,其中 u = * the*,c(u, v) > 0。另外,我们规定折扣因子 β = 0.5。最后我们计算出二元语言模型的概率值。

    对于任何的上下文 v,该定义都会导致一些概率质量丢失,其值定义为:

    我们再次考虑图一中的计算。在图一中,我们对所有的概率进行相加,可以得到如下:

    那也就是说,我们缺失了一些概率,即:

    对于任何上下文 v,我们直观上来解释,那些丢失的概率应该是属于 c(v, w) = 0 的。

    更准确的说,对任何 v 的完整概率估计定义应该如下:

    在图 1 中,我们可以观察到我们的词库是

    B(the) 表示词汇中剩下的一组单词。

    那么,我们就可以将估计定义为

    这个方法可以很自然的扩展到三元语言模型,比如对于任何的二元组 (u, v) ,我们定义

    那么我们定义 c^∗(u, v, w) 为三元组 (u, v, w) 的折扣值,也就是

    其中,β 是折扣因子,那么我们得到的三元模型最终结果如下:

    其中,

    α(u, v) 还是损失的概率质量。

    这个方法的唯一参数只有折扣值 β ,在线性插值模型中,去求得参数的一般方法就是采用在开发数据集上面求得最大似然。我们规定 c’(u, v, w) 表示三元组 (u, v, w) 在开发数据集上面出现的次数。开发数据集的对数似然估计是:

    其中,qD(w|u, v) 是上面所定义的。对 qD(w|u, v) 的参数估计会随着 β 的变化而变化。通常,我们会测试一组可能的 β 值,例如,我们会对 β 取 {0.1, 0.2, 0.3, …, 0.9} - 并且,对于每个 β 值,我们计算相应的对数似然值。然后我们选择最大化的对数似然的 β 值。

    1.3 线性差值法与 Bucketing

    在线性差值模型中,参数估计定义为:

    其中,λ1, λ2 和 λ3 是该方法中的平滑参数。

    在实际的环境中,允许平滑参数根据 (u, v) 的变化而变化是非常重要的,特别是,当二元组 (u, v) 越大时,参数 λ1 也应该越大。(类似地,当一元组 (v) 越大时,λ2 也应该越大)。一个实现这个目标的典型方法是延伸,即 ” bucketing”。

    这个方法的第一步需要去定义一个函数 Π,这个函数是将二元组 (u, v) 映射到值 Π(u, v) ∈ {1, 2, … , K},其中 K 是指定的 “bucket” 的数量。因此,函数 Π 将二元组 (u, v) 划分为 K 个不同的子集。这个函数是手动定义的,通常情况下,这取决于训练数据中看到的计数。举个例子,我们定义 K = 3 时,得到如下场景:

    这是一个非常简单的定义,可以简单的测试二元组 c(u, v) 和一元组 c(v) 是否等于 0 。

    另一个稍微复杂的定义,对二元组 (u, v) 的频率进行分析,得到如下结果:

    至此,我们完成了对函数 Π(u, v) 的定义,接下来我们介绍平滑参数:

    因此,每个 “bucket” 都会有一组自己的平滑参数。因此,我们对所有的 k ∈ {1 … K} 得到如下:

    因此,线性插值估计将如下:

    其中,k = Π(u, v)。

    因此,我们完全的解释了,平滑参数是如何依赖于 Π(u, v) 的值。因此,根据 Π(u, v) 二元组可以获得自己的一套平滑参数。平滑参数可以根据 Π(u, v) 的值变化而发生改变。(这个值通常与计数 c(u, v) 和 c(v) 相关)。

    我们再次使用开发数据集来进行平滑参数估计,如果我们还是定义 c’(u, v, w) 是三元组 (u, v, w) 在开发数据集上面出现的次数。那么开发数据集的对数似然度是:

    其中,我们需要选择

    的值,使得函数估计最大。


    来源: COMS W4705

    展开全文
  • 正如我们前面讨论的,三元语言模型有非常多的参数。利用最大似然估计会造成一个很严重的问题,就是很多的值都会变成零,数据将会非常稀疏。即使我们把训练集设置的非常大,但是很多的三元组 c(u, v, w) 或者二元组 c...

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


    正如我们前面讨论的,三元语言模型有非常多的参数。利用最大似然估计会造成一个很严重的问题,就是很多的值都会变成零,数据将会非常稀疏。即使我们把训练集设置的非常大,但是很多的三元组 c(u, v, w) 或者二元组 c(u, v) 的值还是会很小或者等于 0 。

    在这一部分,我们来学习一些平滑估计的方法,这些方法将对稀疏数据起到一定的缓和作用。这些方法的关键思想非常依赖于低阶统计估计,比如我们想要去对三元语言模型进行平滑估计,那么就非常依赖于一元语言模型或者二元语言模型的估计。现在,我们来讨论在实践中非常有用的两种平滑方法:第一,线性差值法(linear interpolation);第二,折扣方法(discounting methods)。

    1.1 线性差值法

    对三元语言模型进行线性差值模型如下。我们将三元语言模型(Trigram),二元语言模型(Bigram)和一元语言模型(Unigram)的最大似然估计定义如下:

    10012852_9bky.jpg

    这里,我们有一些符号之前没有讲到,先来补充一下。c(w) 表示词 w 在训练集中出现的次数,c() 表示训练集中所有词的数量。

    一元语言模型,二元语言模型和三元语言模型在不同程度上有自己的优点和缺点。一元语言模型概率估计的分子和分母都不会出现 0 的情况,因此这个概率估计就非常好定义,并且该值是永远大于 0(我们假设每个词在训练语料库中出现的次数至少一次,这个假设是可信的)。但是,一元语言模型完全的忽视了上下文信息,也就是说丢弃了很多有价值的信息。相反,三元语言模型考虑了上下文信息,但是出现的问题是很多的语句组的统计数值变成了 0。二元语言模型的优缺点介于一元语言模型和三元语言模型之间。

    接下来,我们正式开始讨论线性插值法。我们以三元语言模型为例,把线性差值用于三元语言模型,将得到如下式子:

    10012853_SdqF.jpg

    其中,λ1, λ2 和 λ3 是三个附加的参数,它们满足如下关系:

    10012853_oh4X.jpg

    因此,我们采用的是对三个估计采用加权平均的方式。

    如何去确定 λ 的值存在很多种方式,这里我们介绍一种常见的方法。假设,我们有一些额外的数据,这个数据不同于训练数据和测试数据。我们将这个数据成为开发数据。我们定义 c'(u, v, w) 表示三元组 (u, v, w) 在开发数据集中出现的参数。我们很容易在开发数据集上面计算对数似然值,具体计算公式如下:

    10012853_fusv.jpg

    我们选择 λ 的值,使得 L(λ1, λ2, λ3) 的值越大越好。因此,λ 的取值如下:

    10012853_azAM.jpg

    其中,

    10012854_Mdzz.jpg

    接下来,我们的任务就是去寻找最佳的 λ1, λ2, λ3 值。

    如上所述,我们有三个平滑参数 λ1, λ2, 和 λ3。这三个参数我们可以理解为对每个语言模型的估计置信度,或者权重。比如,如果 λ1 的值非常接近于 1 ,也就是说,我们认为三元组 qML(w | u, v) 的概率估计是有重大意义的。相反,如果 λ1 接近于 0,那么我们认为对三元组 qML(w | u, v) 的概率估计意义不大。

    在实际过程中,我们需要额外的关注二元组 (u, v) 的大小,我们认为当 c(u, v) 更大时,我们应该将 λ1 的取值变得更大。从直观上来解释,当 c(u, v) 较大时,我们应该给三元组更多的置信度。

    如果当 c(u, v) = 0 时,我们需要取 λ1 = 0。因为,这个时候分母等于 0,我们无法定义三元语言模型。

    10012854_TRfE.jpg

    同理,如果 c(u, v) 和 c(v) 都等于 0,那么我们需要定义 λ1 = λ2 = 0,因为三元语言模型和二元语言模型都无法定义。

    那么有没有一个比较好的 λ 参数定义方法呢?答案是有的。我们先来介绍一个很简单的方法,定义如下:

    10012854_qw2C.jpg

    其中,γ > 0 是这个模型的唯一参数。但我们也很容易就能发现 λ1 ≥
    0, λ2 ≥ 0,并且 λ1 + λ2 + λ3 = 1。

    在这个定义下,我们可以发现 λ1 会随着 c(u, v) 的增大而增大,λ2 也会随着 c(v) 的增大而增大。而且,我们有如果 c(u, v) = 0,那么 λ1 = 0,如果 c(v) = 0,那么 λ2 = 0。至于 λ ,我们可以通过最大化一组开发数据上面的对数似然估计来决定。

    这是决定参数的方式是非常粗糙的,而且一般情况下不是最优的。但是这种方法足够简单,而且在实际过程中,在一些应用中也能取得很好的结果。

    1.2 折扣方法

    我们现在再来介绍另一种估计的方法,这种方法在实际项目中也被广泛使用。首先,我们来考虑一下二元语言模型,即我们的定义如下:

    10012854_KMSa.jpg

    对于任何的 w ∈ V ∪ {STOP}, v ∈ V ∪ {∗} 都成立。

    第一步,我们需要定义什么是折扣数(discounted counts)。对于二元语言模型 c(u, w) ,其中 c(v, w) > 0,我们能定义折扣数为:

    10012855_72YX.jpg

    其中 β 是一个介于 0 和 1 之间的数值(一般我们取 β = 0.5)。因此,我们只是简单的从计数中减去了一个常数值 β 。从直观上来讲,如果我们从训练语料库中获得数据,其实系统会高估二元组 (u, v) 在语料库中出现的概率(并且低估了语料库中没有出现的二元组)。

    对于任何的二元组 (v, w),其中 c(v, w) > 0。我们可以定义

    10012855_IE4z.jpg

    因此,我们在分子上面使用了折扣数,分母上面没有任何变化。

    10012855_V1eZ.jpg
    图1:一个折扣方法的例子

    上图是一个折扣方法的例子。我们假设一元语言 the 出现的次数是 48 词,然后我们罗列了所有的二元语言组合 (u,v) ,其中 u = the,c(u, v) > 0。另外,我们规定折扣因子 β = 0.5。最后我们计算出二元语言模型的概率值。

    对于任何的上下文 v,该定义都会导致一些概率质量丢失,其值定义为:

    10012855_LwPN.jpg

    我们再次考虑图一中的计算。在图一中,我们对所有的概率进行相加,可以得到如下:

    10012856_FpxL.jpg

    那也就是说,我们缺失了一些概率,即:

    10012856_zY0T.jpg

    对于任何上下文 v,我们直观上来解释,那些丢失的概率应该是属于 c(v, w) = 0 的。

    更准确的说,对任何 v 的完整概率估计定义应该如下:

    10012856_ukKM.jpg

    在图 1 中,我们可以观察到我们的词库是

    10012856_iVQS.jpg

    B(the) 表示词汇中剩下的一组单词。

    那么,我们就可以将估计定义为

    10012857_EUmU.jpg

    这个方法可以很自然的扩展到三元语言模型,比如对于任何的二元组 (u, v) ,我们定义

    10012857_kIZA.jpg

    那么我们定义 c^∗(u, v, w) 为三元组 (u, v, w) 的折扣值,也就是

    10012857_VRiU.jpg

    其中,β 是折扣因子,那么我们得到的三元模型最终结果如下:

    10012857_3PMM.jpg

    其中,

    10012858_5N2Y.jpg

    α(u, v) 还是损失的概率质量。

    这个方法的唯一参数只有折扣值 β ,在线性插值模型中,去求得参数的一般方法就是采用在开发数据集上面求得最大似然。我们规定 c'(u, v, w) 表示三元组 (u, v, w) 在开发数据集上面出现的次数。开发数据集的对数似然估计是:

    10012858_4gpl.jpg

    其中,qD(w|u, v) 是上面所定义的。对 qD(w|u, v) 的参数估计会随着 β 的变化而变化。通常,我们会测试一组可能的 β 值,例如,我们会对 β 取 {0.1, 0.2, 0.3, ..., 0.9} - 并且,对于每个 β 值,我们计算相应的对数似然值。然后我们选择最大化的对数似然的 β 值。

    1.3 线性差值法与 Bucketing

    在线性差值模型中,参数估计定义为:

    10012858_9EjP.jpg

    其中,λ1, λ2 和 λ3 是该方法中的平滑参数。

    在实际的环境中,允许平滑参数根据 (u, v) 的变化而变化是非常重要的,特别是,当二元组 (u, v) 越大时,参数 λ1 也应该越大。(类似地,当一元组 (v) 越大时,λ2 也应该越大)。一个实现这个目标的典型方法是延伸,即 " bucketing"。

    这个方法的第一步需要去定义一个函数 Π,这个函数是将二元组 (u, v) 映射到值 Π(u, v) ∈ {1, 2, . . . , K},其中 K 是指定的 “bucket” 的数量。因此,函数 Π 将二元组 (u, v) 划分为 K 个不同的子集。这个函数是手动定义的,通常情况下,这取决于训练数据中看到的计数。举个例子,我们定义 K = 3 时,得到如下场景:

    10012858_3fiB.jpg

    这是一个非常简单的定义,可以简单的测试二元组 c(u, v) 和一元组 c(v) 是否等于 0 。

    另一个稍微复杂的定义,对二元组 (u, v) 的频率进行分析,得到如下结果:

    10012859_eaaP.jpg

    至此,我们完成了对函数 Π(u, v) 的定义,接下来我们介绍平滑参数:

    10012859_Zkl7.jpg

    因此,每个 "bucket" 都会有一组自己的平滑参数。因此,我们对所有的 k ∈ {1 . . . K} 得到如下:

    10012859_BDiQ.jpg

    因此,线性插值估计将如下:

    10012859_4YUs.jpg

    其中,k = Π(u, v)。

    因此,我们完全的解释了,平滑参数是如何依赖于 Π(u, v) 的值。因此,根据 Π(u, v) 二元组可以获得自己的一套平滑参数。平滑参数可以根据 Π(u, v) 的值变化而发生改变。(这个值通常与计数 c(u, v) 和 c(v) 相关)。

    我们再次使用开发数据集来进行平滑参数估计,如果我们还是定义 c'(u, v, w) 是三元组 (u, v, w) 在开发数据集上面出现的次数。那么开发数据集的对数似然度是:

    10012900_l9pJ.jpg

    其中,我们需要选择

    10012900_zIZ3.jpg

    的值,使得函数估计最大。


    来源: COMS W4705

    转载于:https://my.oschina.net/u/3579120/blog/1533554

    展开全文
  • 语言模型中unigram、bigram、trigram的概念 unigram 一元分词,把句子分成一个一个的汉字 bigram 二元分词,把句子从头到尾每两个字组成一个词语 trigram 三元分词,把句子从头到尾每三个字组成一个词语. softword :...
  • n-gram语言模型及平滑算法

    千次阅读 2018-10-09 23:24:53
    一、n-gram模型概念 n-gram模型也称为n-1阶马尔科夫模型,它有一... 当n取1、2、3时,n-gram模型分别称为unigram、bigram和trigram语言模型。n-gram模型的参数就是条件概率P(Wi|Wi-n+1,...,Wi-1)。假设词表的大小...
  • 语言模型

    2019-09-29 02:06:56
    语言模型(Language Model, LM)的目的是建立一个能够描述给定词序列在语言中的出现的概率的分布。 语言模型最开始诞生在语音识别领域,识别给定的语音信号对应的词序列。 随着历史信取值的不同,衍生出:一元模型...
  • 语言模型中unigram、bigram、trigram的概念 unigram 一元分词,把句子分成一个一个的汉字 bigram 二元分词,把句子从头到尾每两个字组成一个词语 trigram 三元分词,把句子从头到尾每三个字组成一个词语. N-...
  • 自然语言处理的语言模型包括: Unigram只考虑自身,各个单词和上下文没有关系, Bigram只考虑前一个单词, TRigram只考虑前两个单词, 其中Bigram用的最多,在网上看到一篇关于自然语言处理的语言模型的博客写的不错...
  • NPL笔记——语言模型

    2019-04-02 21:02:48
    语言模型总结: 1、语言模型是什么: 对联合概率连公式,利用马尔可夫链进行简化。每个词会依赖前面1个或多个词。最简单的时unigram,bigram,复杂点的trigram 2、如何选区N-gram中的N 3、N-gram的应用 4、解决零概率...
  • 02自然语言模型NLP

    2020-05-14 21:50:52
    1、定义:自然语言模型是一个计算单词序列(句子)的概率模型。 其实就是判断一个句子的合理性。 例如: 我今天要去【上班】 我今天要去【游泳】 我今天要去【爬山】 通过语言模型计算出去【上班】 的概率最大,得出...
  • 语言模型只要是提到模型这个词,我就会感到很抽象,但是如果把它理解为一系列的函数或者映射,就会有更加直观的...三元语言模型Trigram Language Model) 平滑处理 其他主题 简介首先给定一个包含若干句子的语料库,定
  • 目录 一、语言模型的定义和意义 ... 三、三元语言模型Trigram Language Model) 3.1 极大似然估计 3.2 平滑估计 3.2.1 线性插值(Linear Interpolation)  3.2.2 Discounting Methods 讲义...
  • 语言模型Katz backoff以及HMM模型

    千次阅读 2015-08-26 20:31:42
    之前关于信息抽取那篇文章提到使用HMM对文章段落进行分段并标注,其中会使用到trigram-HMM并对传统的HMM进行改造以符合特定情况下使用。这里分别对Katz backoff以及HMM模型在具体状况下的使用。
  • 目前正在编写手机平台上的输入法,在输入法中要向实现句子级别的智能输入,必须借助统计语言模型,依靠统计语言...目前输入法中常用的语言模型trigram(三元)和bigram(二元),其中微软拼音、智能狂拼使用
  • 2. 语言模型 即判断一句话是不是人话。是计算上文noisy channel model 模型中的P(text)。方法是用markov假设。即一个词出现概率只与它前边的一个词有关,与再往前的词无关(bigram) 2.1 Markov Assumption...
  • 基于markov的语言模型,在遇到未登录词时,会将语法合理的句子概率计算为0.这是不合理的。 Add-one Smoothing (laplace smoothing) 分母上加一个V(词典大小)的一个理由,使概率之和为1. Add-K Smoothing ...
  • n-gram语言模型引入马尔科夫假设,假设当前单词出现的概率只与前n-1个单词有关。常见的unigram、bigram、trigram公式如下: 优点:(1) 采用极大似然估计,参数易训练;(2) 完全包含了前 n-1 个词的全部信息;(3)...
  • 语言模型n-gram

    2014-04-17 18:15:11
    deleted interpolation trigram http://www.cslu.ogi.edu/HLTsurvey/ch1node41.html
  • 语言模型中unigram、bigram、trigram的概念 文本矩阵化 分词 新词识别 自定义词典 关键词提取 去除停用词 构造词表 文档向量化 参考 基本文本处理技能 目前有三大主流分词方法:基于字符串匹配的分词...
  • NLP 技术目录

    2019-09-12 01:32:51
    一、语言模型 1.1 介绍1.2 马尔可夫模型1.3 Trigram 语言模型 二、标记问题 2.1 介绍2.2 词性标注(POS)和命名实体识别(NER)2.3 标记问题:生成模型和噪声通道模型 ...
  • COMS W4705: Natural Language Processing 语言模型在广泛的应用中非常有用,最明显的也许是语音识别和机器翻译。...Trigram语言模型,这是一类重要的语言模型,直接建立在Markov模型的思想上。 Bias-Varianc
  • 在连续语音识别中为了能够在搜索的过程中实现更有效的剪枝策略,必须充分应用语言模型...为此,本文实现了一种能够在后续处理过程中有效地利用Trigram语言模型和更复杂语言模型信息的词图搜索算法。它是基于HTK平台的。
  • 所以我正在学习一个自然语言处理类,我需要创建一个trigram语言模型来生成随机文本,这些文本在一定程度上基于一些样本数据看起来“逼真”.根本需要创建一个“三元组”来保存各种3个字母的语法单词组合.我的教授暗示这...
  • 所以我选择了一个自然语言处理类,我需要创建一个trigram语言模型,根据一些样本数据生成在一定程度上看起来“真实”的随机文本。基本上需要创建一个“三元组”来保存各种3个字母的语法单词组合。我的教授暗示说,这...
  • BLEU双语评估研究(Bilingual Evaluation Understudy) 例子: 参考译文1:There is a cat on the desk. 参考译文2:The cat is on the desk. N-gram匹配规则( ...Trigram 三个单词组合 取n=1,即1-gram(unigr
  • 2.1 语言模型中unigram、bigram、trigram的概念 2.2 unigram、bigram频率统计;(可以使用Python中的collections.Counter模块,也可以自己寻找其他好用的库) 3. 文本矩阵化:要求采用词袋模型且是词级别的矩阵化 ...
  • 前言在昨天创建 GIN索引时,我们使用了pg_trgm插件,pg_trgm主要提供的是基于三元模型(trigram)匹配的...这与自然语言模型相关。在没有使用插件直接创建 GIN索引的情况下,默认情况下会报错,后面的例子会介绍到。ER...

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

trigram语言模型