Skip to content

Lesson-5 语言模型

语言模型

概念:语言模型是一种用于生成和理解文本的统计模型或者神经网络模型。主要⽬标是对⽂本数据中的语⾔结构和语法规则进⾏建模,以便计算机可以更好地理解和⽣成⾃然语⾔⽂本。

给定上下文,计算一个词出现的概率,形式化来说,就是给定一个序列:\(x^{(1)},x^{(2)},...,x^{(t)}\),我们计算出:

\[P(x^{(t+1)}|x^{(t)},...,x^{(2)},x^{(1)})\]

如何计算?采用极大似然估计:

\[P(John|<BOS>)=\frac{<BOS> John\text{出现的次数}}{<BOS> * \text{出现的次数}}\]

那么,如何计算一段话出现的概率呢?

\[P(<BOS>John read a book<EOS>)=P(John|<BOS>)P(read|John) P(a| read) P(book|a)P(<EOS>|book)\]
n元语法模型(n-gram Language Model)

n-gram 是由连续的 n 个连续单词组成的字符串:

  • unigrams: “the”, “students”, “opened”, ”their”
  • bigrams: “the students”, “students opened”, “opened their”
  • trigrams: “the students opened”, “students opened their”
  • four-grams: “the students opened their”

n 元语法模型:

  • 假设:一个词的出现仅与其前面的\(n-1\)个词有关,其形式化的定义如下:
\[P(s) = \prod_{i=1}^lP(w_i|w_{i-n+1}^{i-1})\]

其中,\(w_{i-n+1}^{i-1}=w_{i-n+1}w_{i-n+2}...w_{i-2}w_{i-1}\)

定义 n 元语法模型的核心动机是为了降低计算复杂度、缓解数据稀疏问题。

语言模型中的稀疏性问题

语言模型中的稀疏性问题指:在语言建模的过程中,由于语料库的有限性,很多可能的词序列并没有在训练资料中出现过,而导致语言模型无法对其概率进行估计。

稀疏性问题的表现:

  • 零概率问题:在训练数据中未出现的词序列,其概率被估计为 0
  • 罕见词问题:一些低频词在训练数据中出现的次数不足,导致模型难以学到合理的概率分布
  • 长尾分布:大多数词的出现频率较低,仅少数高频词占据了语料库的主要部分
平滑技术

平滑技术的基本思想:调整概率分布:是零概率增加,非零概率降低,提示系统的性能。

具体的平滑方法有:

(1)加1法(Additive smoothing):

  • 在所有的词频上加 1,避免零概率问题。
  • 概率变为:\(P(w_n|w_1w_2...w_{n-1}) = \frac{count(w_1w_2...w_{n-1}w_n)+1}{count(w_1w_2...w_{n-1})+V}\),其中\(V\)为词汇表的大小
  • 缺点:对高频事件的影响较大,可能引入过多偏差

(2)Good-Turing 平滑:

  • 基本思想:将已经出现的词的概率进行打折,将减少的概率分一部分给未出现的词
  • 其基本步骤如下:

(i)首先,假设一个词序列在训练数据中出现\(r\)次,直接用相对频率\(P=\frac{r}{N}\)来估计它的概率;

(ii)在这样的定义下,没出现的词序列概率被估计为0;

(iii)我们对概率进行调整:对于每个出现过\(r\)次的事件,我们分配给它一个新的平滑频次:

\[r^* = \frac{(r+1)N_{r+1}}{N_r}\]

其中,\(N_i\)为出现次数为\(i\)的词序列个数。

(iv)重新调整后,出现过\(r\)次的词序列频率为:\(P = \frac{r^*}{N}\)

我们发现,出现0次的词序列的频率为:\(P = \frac{N_1/N_0}{N}\)

上面这种调整方式,可以保证最后所有的概率之和仍然为1。同时,在实际操作中,一般会设定一个阈值,出现次数大于这个阈值的,不作调整,小于这个阈值的,进行调整。

缺点:对高频事件的调整可能不够精确

n-gram 中的存储问题

n-gram 模型需要存储所有可能的 n-gram 和其对应的频率或概率,其存储量的增长是随着 n 的增大而呈指数级增长的。

那么,一个直接简单的方法就是:控制 n 的大小。

神经语言模型

输入层:\(n-1\)个词向量的串接:

alt text

隐藏层:\(y = f(Wx+b)\)

其中:(1)\(f\)为激励函数:tanh 或者 sigmoid;(2)\(x\)为输入向量;(3)\(W\)为参数矩阵;(4)\(b\)为偏置向量;(5)\(y\)为隐藏层的输出。

alt text

输出层:\(p_i = softmax(y_i)=\frac{e^{y_i}}{\sum_{j=1}^V e^{y_j}}\),那么,每个元素都会转变成一个0到1之间的数(其这些数之和为1)(我们把它视为概率),那么最大的那个概率对应词表中的词,就是我们预测的下一个词。

两种语言模型的对比

神经语言模型没有稀疏性问题,也不需要存储下来所有的 n-gram。

但是,神经语言模型在处理长文本时可能会遇到固定窗口过小的问题(由于梯度消失和梯度爆炸问题,它们在实际训练中往往无法有效捕捉远距离的依赖)。

alt text

语言模型的评价指标

(1)困惑度(Perplexity):Perplexity(困惑度)是评估语言模型效果的一个常用指标,尤其是在统计语言模型和神经语言模型中。它通常用来衡量语言模型对给定文本的预测能力,表示模型对文本序列的“不确定性”或“困惑程度”。

交叉熵是它的指数:

\[Perplexity=exp(J(\theta)) = exp(-\frac{1}{N}\sum_{i=1}^NP(w_i|w_1w_2...w_{i-1}))\]

(2)交叉熵:交叉熵是衡量两个概率分布之间差异的指标。在语言模型中,交叉熵衡量的是模型预测的概率分布与真实概率分布之间的差异:

\[H(P,Q) = -\sum_{i=1}^NP(w_i)\log Q(w_i)\]