Lesson-5 语言模型
语言模型
概念:语言模型是一种用于生成和理解文本的统计模型或者神经网络模型。主要⽬标是对⽂本数据中的语⾔结构和语法规则进⾏建模,以便计算机可以更好地理解和⽣成⾃然语⾔⽂本。
给定上下文,计算一个词出现的概率,形式化来说,就是给定一个序列:\(x^{(1)},x^{(2)},...,x^{(t)}\),我们计算出:
如何计算?采用极大似然估计:
那么,如何计算一段话出现的概率呢?
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\)个词有关,其形式化的定义如下:
其中,\(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\)次的事件,我们分配给它一个新的平滑频次:
其中,\(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\)个词向量的串接:
隐藏层:\(y = f(Wx+b)\)
其中:(1)\(f\)为激励函数:tanh 或者 sigmoid;(2)\(x\)为输入向量;(3)\(W\)为参数矩阵;(4)\(b\)为偏置向量;(5)\(y\)为隐藏层的输出。
输出层:\(p_i = softmax(y_i)=\frac{e^{y_i}}{\sum_{j=1}^V e^{y_j}}\),那么,每个元素都会转变成一个0到1之间的数(其这些数之和为1)(我们把它视为概率),那么最大的那个概率对应词表中的词,就是我们预测的下一个词。
两种语言模型的对比
神经语言模型没有稀疏性问题,也不需要存储下来所有的 n-gram。
但是,神经语言模型在处理长文本时可能会遇到固定窗口过小的问题(由于梯度消失和梯度爆炸问题,它们在实际训练中往往无法有效捕捉远距离的依赖)。
语言模型的评价指标
(1)困惑度(Perplexity):Perplexity(困惑度)是评估语言模型效果的一个常用指标,尤其是在统计语言模型和神经语言模型中。它通常用来衡量语言模型对给定文本的预测能力,表示模型对文本序列的“不确定性”或“困惑程度”。
交叉熵是它的指数:
(2)交叉熵:交叉熵是衡量两个概率分布之间差异的指标。在语言模型中,交叉熵衡量的是模型预测的概率分布与真实概率分布之间的差异:
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:OI-wiki
本页面的全部内容在 协议之条款下提供,附加条款亦可能应用