自然语言处理——语言模型

1.语言模型

语言模型是自然语言处理的重要技术。自然语言处理中最常见的数据是文本数据。我们可以把一段自然语言文本看做一段离散的时间序列。假设一段长度为T的文本中的词依次为 w 1 , w 2 , . . . , w T w_1,w_2,...,w_T ,那么在离散的时间序列中, w t ( 1 t T ) w_t(1\leq t\leq T) 可看做在时间步t的输出或者标签。给定一个长度为T的词的序列 w 1 , w 2 , . . . , w T w_1,w_2,...,w_T ,语言模型将计算该序列的概率: P ( w 1 , w 2 , . . . , w T ) P(w_1,w_2,...,w_T) 语言模型可用于提升语言识别和机器翻译的性能。例如,在语言识别中,给定一段“厨房食油用完了”的语言,有可能会输出“厨房里食油用完了”和“厨房里石油用完了”这两个读音完全一样的文本序列。如果语言模型判断出前者的概率大于后者的概率,我们就可以根据相同读音的语言输出“厨房里食油用完了”的文本序列。

在机器翻译中,如果对英文“you go first”逐词翻译成中文的话,可能得到“你先走”“你走先”等排列方式的文本序列。如果语言模型判断出“你先走”的概率大于其他排列方式的文本序列的概率,我们就可以把“you go first”翻译成“你先走”。

1.1.语言模型计算

既然语言模型很有用,那该如何计算它呢?假设序列 w 1 , w 2 , . . . , w T w_1,w_2,...,w_T 中的每个词是依次大生成的,我们有 P ( w 1 , w 2 , . . . , w T ) = t = 1 T P ( w t w 1 , . . . , w t 1 ) P(w_1,w_2,...,w_T)=\prod_{t=1}^TP(w_t|w_1,...,w_{t-1}) 例如,一段含有4个词的文本序列的概率 P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 w 1 ) P ( w 3 w 1 , w 2 ) P ( w 4 w 1 , w 2 , w 3 ) P(w_1,w_2,w_3,w_4)=P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)P(w_4|w_1,w_2,w_3) 为了计算语言模型,我们需要计算词的概率,以及一个词在给定前几个词的情况下的条件概率,即语言模型参数。设训练数据集为一个大型文本语料库,如维基百科的所有条目。词的概率可以通过该词在训练数据集中的相对词频来计算。例如, P ( w 1 ) P(w_1) 可以计算为 w 1 w_1 在训练数据集中的词频(词出现的次数)与训练数据集的总词数之比。因此,根据条件概率定义,一个词在给定前几个词的情况下的条件概率也可以通过训练数据集中的相对词频计算。例如, P ( w 2 w 1 ) P(w_2|w_1) 可以计算为 w 1 w_1 w 2 w_2 两词相邻的频率与 w 1 w_1 词频的比值,因为该比值即 P ( w 1 , w 2 ) P(w_1,w_2) p ( w 1 ) p(w_1) 之比;而 P ( w 3 w 1 , w 2 ) P(w_3|w_1,w_2) 同理可以计算为 w 1 , w 2 , w 3 w_1,w_2,w_3 这三个词相邻的频率与 w 1 , w 2 w_1,w_2 这两个词相邻的频率的比值,以此类推。

1.2. n元语法

当序列长度增加时,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。n元语法通过马尔科夫假设(虽然不一定成立)简化了语言模型的计算。这里的马尔科夫假设是指一个词出现的只与前面n个词相关,即n阶马尔科夫链。如果n=1,那么有 P ( w 3 w 1 , w 2 ) = P ( w 3 w 2 ) P(w_3|w_1,w_2)=P(w_3|w_2) 。如果基于n-1阶马尔科夫链,我们可以将语言模型改写为: P ( w 1 , w 2 , . . . , w T ) t = 1 T P ( w t w t ( n 1 ) , . . . , w t 1 ) P(w_1,w_2,...,w_T)\approx \prod_{t=1}^T P(w_t|w_{t-(n-1)},...,w_{t-1}) $$以上也叫n元语法(n-grams)。它是基于n-1阶马尔科夫链的概率语言模型。当n分别为1、2和3时,我们将其分别称作一元语法(unigram)、二元语法(bigram)、三元语法(trigram)。

当n较小时,n元语法往往并不准确。例如,在一元语法中,由3个词组成的句子“你走先”和“你先走”的概率是一样的。然而,当n较大时,n元语法需要计算并存储大量的词频和多词相邻频率。

在n元语法中,时间步t的词 w t w_t 基于前面所有词的条件概率只考虑了最近时间步的n-1和词。如果要考虑比t-(n-1)更早时间步的词对 w t w_t 的可能影响。我们需要增大n,但这样模型参数的数量将随之呈指数级增长。

与n元语法不同,循环神经网络并非刚性地记忆所有固定长度的序列,而是通过隐藏状态来存储之间时间步的信息。

发布了256 篇原创文章 · 获赞 10 · 访问量 8266

猜你喜欢

转载自blog.csdn.net/qq_37388085/article/details/104378313