代码编织梦想

引言

上一节介绍了包含序列特征的数据,并介绍了处理序列数据的一些模型思想。本节从文本这类序列数据的角度,介绍学习文本特征的基于统计算法的语言模型

回顾:序列特征与文本特征

序列特征

序列特征是以时间/顺序为媒介的一类特征信息。某个随机变量集合 X \mathcal X X描述一段时间/序列中包含的特征信息,假设序列中包含 T \mathcal T T时刻,每个时刻各包含 1 1 1随机变量 x t ( t = 1 , 2 , ⋯   , T ) x_t(t=1,2,\cdots,\mathcal T) xt(t=1,2,,T)
X = { x 1 , x 2 , ⋯   , x T } \mathcal X = \{x_1,x_2,\cdots,x_{\mathcal T}\} X={x1,x2,,xT}
已知一个具体样本 x ( i ) x^{(i)} x(i),它的样本特征具体表示为如下形式:
x ( i ) = ( x 1 ( i ) , x 2 ( i ) , ⋯   , x T ( i ) ) T × 1 T x^{(i)} = (x_1^{(i)},x_2^{(i)},\cdots,x_{\mathcal T}^{(i)})_{\mathcal T \times 1}^T x(i)=(x1(i),x2(i),,xT(i))T×1T
很明显, x t ( i ) ( t = 1 , 2 , ⋯   , T ) x_t^{(i)}(t=1,2,\cdots,\mathcal T) xt(i)(t=1,2,,T)是对应随机变量 x t x_t xt的一个取值结果;并且由于序列特征的性质,导致各随机变量之间可能并不相互独立。因此,我们需要对各随机变量的联合概率分布进行求解:
P ( X ) = P ( x 1 , x 2 , ⋯   , x T ) \mathcal P(\mathcal X) = \mathcal P(x_1,x_2,\cdots,x_{\mathcal T}) P(X)=P(x1,x2,,xT)

语言特征

语言特征作为序列特征的一种情况,我们可以给随机变量赋予实际意义。这里以汉语为例,每一个随机变量描述一个词语/词组;也有可能描述一个文字

因而,一个样本,它可能是若干个词组成的长词组。例如:美丽漂亮的姑娘
x ( i ) = ( x 1 ( i ) ⏟ 美丽 , x 2 ( i ) ⏟ 漂亮 , x 3 ( i ) ⏟ 的 , x 4 ( i ) ⏟ 姑娘 ) T x^{(i)} = (\underbrace{x_1^{(i)}}_{美丽},\underbrace{x_2^{(i)}}_{漂亮},\underbrace{x_3^{(i)}}_{的},\underbrace{x_4^{(i)}}_{姑娘})^T x(i)=(美丽 x1(i),漂亮 x2(i), x3(i),姑娘 x4(i))T
它也可能是一个完整句子。例如:今天早上吃锅包肉
x ( j ) = ( x 1 ( j ) ⏟ 今天 , x 2 ( j ) ⏟ 早上 , x 3 ( j ) ⏟ 吃 , x 4 ( j ) ⏟ 锅包肉 ) T x^{(j)} = (\underbrace{x_1^{(j)}}_{今天},\underbrace{x_2^{(j)}}_{早上},\underbrace{x_3^{(j)}}_{吃},\underbrace{x_4^{(j)}}_{锅包肉})^T x(j)=(今天 x1(j),早上 x2(j), x3(j),锅包肉 x4(j))T
关于语言特征的联合概率分布,也就是整个文本序列出现的联合概率结果。

语言模型

语言模型的应用任务场景

  • 预训练 ( Pre-Training ) (\text{Pre-Training}) (Pre-Training)模型:
    预训练的任务目标在于:文本数据 D \mathcal D D中学习并归纳出文本特征的概率分布 P m o d e l ( X ) \mathcal P_{model}(\mathcal X) Pmodel(X)
    直面配分函数——随机最大似然中介绍过,可以将 D \mathcal D D看作是从真实分布 P d a t a ( X ) \mathcal P_{data}(\mathcal X) Pdata(X)中采集样本得到的样本集合;而模型 m o d e l model model D \mathcal D D的特征进行学习,从而得到与真实分布 P d a t a ( X ) \mathcal P_{data}(\mathcal X) Pdata(X)近似的模型分布 P m o d e l ( X ) \mathcal P_{model}(\mathcal X) Pmodel(X),陌生样本 x ^ \hat x x^通过模型产生的文本特征结果 P m o d e l ( x ^ ) \mathcal P_{model}(\hat x) Pmodel(x^)

    这种特征也被称作幻想粒子 ( Fantasy Particle ) (\text{Fantasy Particle}) (Fantasy Particle)——因为这个特征并不是真实分布 P d a t a ( x ^ ) \mathcal P_{data}(\hat x) Pdata(x^)的结果,仅是 P m o d e l ( x ^ ) \mathcal P_{model}(\hat x) Pmodel(x^)产生的近似结果。
    D ∼ P d a t a ( X ) ⟹ Learning P m o d e l ( X ) \mathcal D \sim \mathcal P_{data}(\mathcal X) \overset{\text{Learning}}{\Longrightarrow} \mathcal P_{model}(\mathcal X) DPdata(X)LearningPmodel(X)
    例如一些大型生成模型 BERT(Bidirectional Encoder Representations from Transformers),GPT-3 \text{BERT(Bidirectional Encoder Representations from Transformers),GPT-3} BERT(Bidirectional Encoder Representations from Transformers),GPT-3等。预训练属于语言模型的核心任务,可以将预训练分布结果作为输入,对其他下游任务做微调 ( Fine-Tunning ) (\text{Fine-Tunning}) (Fine-Tunning)

  • 生成文本
    和我们输入法中的提示词有一些类似。给定前面的若干个词 x 1 , x 2 , ⋯   , x t x_1,x_2,\cdots,x_t x1,x2,,xt,通过模型学习出分布 P ( x t + 1 ∣ x 1 , x 2 , ⋯   , x t ) \mathcal P(x_{t+1} \mid x_1,x_2,\cdots,x_{t}) P(xt+1x1,x2,,xt),并从该分布中采样得到 x t + 1 x_{t+1} xt+1的结果:
    x t + 1 ∼ P m o d e l ( x t + 1 ∣ x 1 , x 2 , ⋯   , x t ) x_{t+1} \sim \mathcal P_{model}(x_{t+1} \mid x_1,x_2,\cdots,x_{t}) xt+1Pmodel(xt+1x1,x2,,xt)
    例如某样本 x ( i ) x^{(i)} x(i)给定一些词: x 1 ( i ) = x_1^{(i)}= x1(i)= 今天 x 2 ( i ) = x_2^{(i)}= x2(i)= 早上 x 3 ( i ) = x_3^{(i)}= x3(i)=;下一时刻存在某两个样本 x 4 ( k ) = x_4^{(k)}= x4(k)= 黑板; x 4 ( j ) = x_4^{(j)}= x4(j)= 锅包肉。从人思考的角度观察,基于给定词组成的语义信息,下一个词后验分布的特性需要和食物相关。因而有:
    而这个分布特性需要模型学习出来,并在 P m o d e l \mathcal P_{model} Pmodel中体现。
    P ( x 4 ( j ) ∣ x 1 ( i ) , x 2 ( i ) , x 3 ( i ) ) > P ( x 4 ( k ) ∣ x 1 ( i ) , x 2 ( i ) , x 3 ( i ) ) \mathcal P(x_4^{(j)} \mid x_1^{(i)},x_2^{(i)},x_3^{(i)}) > \mathcal P(x_4^{(k)} \mid x_1^{(i)},x_2^{(i)},x_3^{(i)}) P(x4(j)x1(i),x2(i),x3(i))>P(x4(k)x1(i),x2(i),x3(i))
    从而不断执行这个操作,从而将后续的文本信息补全出来。
    需要模型的性能优秀。在每一次后验的采样过程中出现误差,误差会随着采样过程进行累积。最终可能出现‘生成的文本信息’与期望结果相差很远。

  • 判断常见的文本序列
    例如如下两个文本序列
    { S 1 = to recognize a speech ⏟ 去识别一段语音 S 2 = to wreck a nice beach ⏟ 去破坏一个美丽的海滩 \begin{cases} \mathcal S_1 = \underbrace{\text{to recognize a speech}}_{去识别一段语音} \\ \mathcal S_2 = \underbrace{\text{to wreck a nice beach}}_{去破坏一个美丽的海滩} \end{cases} S1=去识别一段语音 to recognize a speechS2=去破坏一个美丽的海滩 to wreck a nice beach
    这两段序列的读音非常相似。如果使用一个语音转换文字模型得到 P ( S 1 ∣ ∗ ) \mathcal P(\mathcal S_1 \mid *) P(S1) P ( S 2 ∣ ∗ ) \mathcal P(\mathcal S_2 \mid *) P(S2)的结果都不低,此时我们需要去判别哪个文本序列更加常见,或者更加符合当前语义环境。
    这里的 ∗ * 表示语音特征,上面的英语是翻译软件翻译的,老美可能不会这么说话~

统计算法——使用计数进行建模

场景构建:
假设要求的文本序列长度 = 2 =2 =2,给定包含 n n n文本的数据集 D \mathcal D D,想要求解:文本 x x x相邻文本 x ′ x' x构成的序列在 D \mathcal D D中的出现次数
这里的文本 x , x ′ x,x' x,x可能不仅是一个具体的词,它是一个随机变量。

  • 这个序列的联合概率分布可表示为:
    其中 n ( x ) n(x) n(x)表示满足随机变量 x x x条件的文本的数量;同理, n ( x , x ′ ) n(x,x') n(x,x)表示满足'随机变量 x , x ′ x,x' x,x先后出现'条件的序列的数量。
    P ( x , x ′ ) = P ( x ) ⋅ P ( x ′ ∣ x ) = n ( x ) n ⋅ n ( x , x ′ ) n ( x ) \mathcal P(x,x') = \mathcal P(x) \cdot \mathcal P(x' \mid x) = \frac{n(x)}{n} \cdot \frac{n(x,x')}{n(x)} P(x,x)=P(x)P(xx)=nn(x)n(x)n(x,x)
  • 同理,我们可以调整序列长度,从而获取满足条件序列的联合概率分布:
    文本长度 = 3 =3 =3的情况。
    P ( x , x ′ , x ′ ′ ) = P ( x ) ⋅ P ( x ′ ∣ x ) ⋅ P ( x ′ ′ ∣ x , x ′ ) = n ( x ) n ⋅ n ( x , x ′ ) n ( x ) ⋅ n ( x , x ′ , x ′ ′ ) n ( x , x ′ ) \begin{aligned} \mathcal P(x,x',x'') & = \mathcal P(x) \cdot \mathcal P(x' \mid x) \cdot \mathcal P(x'' \mid x,x') & = \frac{n(x)}{n} \cdot \frac{n(x,x')}{n(x)} \cdot \frac{n(x,x',x'')}{n(x,x')} \end{aligned} P(x,x,x′′)=P(x)P(xx)P(x′′x,x)=nn(x)n(x)n(x,x)n(x,x)n(x,x,x′′)

这种做法显然过于简单
一旦 序列过长,并且数据集 D \mathcal D D的文本量不够多 的情况下,导致序列 ( x , x ′ , x ′ ′ ) (x,x',x'') (x,x,x′′)在数据集 D \mathcal D D内出现出现的次数极少甚至没有出现过—— P ( x , x ′ , x ′ ′ ) ⇒ 0 \mathcal P(x,x',x'') \Rightarrow 0 P(x,x,x′′)0。这种做法自然是不准确的。

统计算法——基于马尔可夫假设的 N-Gram \text{N-Gram} N-Gram语言模型

针对序列过长产生的情况,可以使用马尔可夫假设缓解该问题:
P ( x t ∣ x t − 1 , x t − 2 , ⋯   , x 1 ) = P ( x t ∣ x t − 1 , x t − 2 , ⋯   , x t − τ ⏟ τ 个随机变量 ) \mathcal P(x_t \mid x_{t-1},x_{t-2},\cdots,x_1) = \mathcal P(x_t \mid \underbrace{x_{t-1},x_{t-2},\cdots,x_{t - \tau}}_{\tau 个随机变量}) P(xtxt1,xt2,,x1)=P(xtτ个随机变量 xt1,xt2,,xtτ)
1-Gram \text{1-Gram} 1-Gram语言模型:某随机变量 x t x_t xt的条件概率结果仅和 x t x_t xt自身相关这意味着被作为条件约束的随机变量数量 τ = 0 \tau=0 τ=0。对应序列的联合概率分布表示为如下形式:
相当于随机变量之间‘相互独立’。
P ( x 1 , x 2 , ⋯   , x T ) = P ( x 1 ) ⋅ ∏ t = 2 T P ( x t ∣ x t − 1 , ⋯   , x 1 ) = ∏ t = 1 T P ( x t ) = ∏ t = 1 T n ( x t ) n \begin{aligned} \mathcal P(x_1,x_2,\cdots,x_{\mathcal T}) & = \mathcal P(x_1) \cdot \prod_{t=2}^{\mathcal T} \mathcal P(x_t \mid x_{t-1},\cdots,x_1) \\ & = \prod_{t=1}^{\mathcal T} \mathcal P(x_t) \\ & = \prod_{t=1}^{\mathcal T} \frac{n(x_t)}{n} \end{aligned} P(x1,x2,,xT)=P(x1)t=2TP(xtxt1,,x1)=t=1TP(xt)=t=1Tnn(xt)
同理, N-Gram \text{N-Gram} N-Gram语言模型表示:某随机变量 x t x_t xt的条件概率结果不仅与自身相关,并且与基于顺序相邻 N − 1 N-1 N1个随机变量相关。此时的 τ = N − 1 \tau=N-1 τ=N1。这里以 3-Gram \text{3-Gram} 3-Gram语言模型为例,其联合概率分布表示如下:
很明显,前两个随机变量的条件数量不足。
P ( x 1 , x 2 , ⋯   , x T ) = P ( x 1 ) ⋅ ∏ t = 2 T P ( x t ∣ x t − 1 , ⋯   , x 1 ) = P ( x 1 ) ⋅ P ( x 2 ∣ x 1 ) ⋅ ∏ t = 3 T P ( x t ∣ x t − 1 , x t − 2 ) = n ( x 1 ) n ⋅ n ( x 1 , x 2 ) n ( x 1 ) ⋅ ∏ t = 3 T n ( x t , x t − 1 , x t − 2 ) n ( x t − 1 , x t − 2 ) \begin{aligned} \mathcal P(x_1,x_2,\cdots,x_{\mathcal T}) & = \mathcal P(x_1) \cdot \prod_{t=2}^{\mathcal T} \mathcal P(x_t \mid x_{t-1},\cdots,x_1) \\ & = \mathcal P(x_1)\cdot \mathcal P(x_2 \mid x_1) \cdot \prod_{t=3}^{\mathcal T} \mathcal P(x_t \mid x_{t-1},x_{t-2}) \\ & = \frac{n(x_1)}{n} \cdot \frac{n(x_1,x_2)}{n(x_1)} \cdot \prod_{t=3}^{\mathcal T} \frac{n(x_{t},x_{t-1},x_{t-2})}{n(x_{t-1},x_{t-2})} \end{aligned} P(x1,x2,,xT)=P(x1)t=2TP(xtxt1,,x1)=P(x1)P(x2x1)t=3TP(xtxt1,xt2)=nn(x1)n(x1)n(x1,x2)t=3Tn(xt1,xt2)n(xt,xt1,xt2)
N-Gram \text{N-Gram} N-Gram语言模型的优势在于:基于该假设,我们能够处理较长的序列(序列长度和马尔可夫假设关系不大,我们仅观察局部的序列信息)。并且随着局部范围内 N N N越大,它的统计精度就越高。

相反, N-Gram \text{N-Gram} N-Gram劣势就在于 N N N上面:

  • 2-Gram \text{2-Gram} 2-Gram语言模型为例,如果数据集 D \mathcal D D对应的字典(对数据集 D \mathcal D D所有词语进行收集)中包含 1 , 000 1,000 1,000个词,在 2-Gram \text{2-Gram} 2-Gram条件下,一共包含 1 , 000 × 1 , 000 = 1 , 000 , 000 1,000 \times 1,000 = 1,000,000 1,000×1,000=1,000,000序列组合
    这个序列组合是随机组合,并且是有序的。例如 ( x i , x j ) (x_i,x_j) (xi,xj) ( x j , x i ) (x_j,x_i) (xj,xi)均算作不同的序列组合。

    当然,上述的随机组合必然不会全部出现在 D \mathcal D D中,仅需要统计各组合出现的频数,在计算 P ( x 1 , x 2 , ⋯   , x T ) \mathcal P(x_1,x_2,\cdots,x_{\mathcal T}) P(x1,x2,,xT)中,仅需要查表即可。
    这里需要强调的是:相比于计数建模, N-Gram \text{N-Gram} N-Gram语言模型的时间复杂度有明显提升。我们不需要将 D \mathcal D D执行一次又一次的遍历,仅需要查找‘组合表’中对应结果的频数即可。

  • 上述是 2-Gram \text{2-Gram} 2-Gram的情况。那么 N N N数值较大时,上述组合数量 1 , 00 0 N 1,000^N 1,000N种,这个指数关系会导致内存的负担。
    它的‘空间复杂度’是指数级的。

相关参考:
53 语言模型【动手学深度学习v2】
一起入门语言模型(Language Models)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34758157/article/details/130721705