深度学习下的文本编码方式

Wings Lv2

写在前面

在上一篇博客中,已经简单介绍过文本编码和深度学习下对文本的处理。

接下来,沿着这条线配合论文(Attention is all you need)快速熟悉当前大规模参数模型针对文本这一类数据的处理方式。

对文本数据更进一步地抽象

正如之前的文章所述,在信息世界中计算机并不直接读取“文本图像”,而是读取文本背后的“编号”,只不过呈现给用户看的是“编号”所对应的“图像”/“字体”。

一般情况下,文字字符的数量是固定的,从这个角度理解,一句话,一串文本,是由有限的符号按照先后顺序所构成的,也就是说,文字种类是有限的,但文字意思(序列)可以是无限的。

通过文本,可以针对这种形式对其进行建模。首先,存在一个有限的符号集合$C$,事实上哪怕不是有限符号集合的内容,比如数值,也可以通过压缩限制精度的方式转换成有限符号集合。所以,一串文本,一句话,模型所看到的内容就是$s = (s_1, s_2, \dots), s_i \in C$。

不过在这里需要注意一点的是,在Attention is all you need这篇论文中,其任务是从某语言的句子翻译成另一语言的句子。所以在这里可以这么去描述,针对不同的语言存在不同的有限符号集合$C_1, C_2$,其中有其对应句子对$(X, Y), X = (x_1, x_2,\dots, x_N), Y=(y_1, y_2, \dots, y_M), x_i\in C_1, y_i \in C_2$。

通过该句子对,希望其能够从$C_1$符号集合的句子翻译成$C_2$符号集合的句子。所以整个模型的模型的建模需要有一个源句子输入的地方,也叫做“Encoder”模块,翻译出目标语言的句子的模块则叫做“Decoder”模块。而具体上,Decoder模块是通过一个符号一个符号生成的,这也是序列模型的一个特点

那么,在这个基础上,如果我们不需要额外的参考,比如翻译中的原句参考,摘要中的原始文本,而只是希望模型去接着某些内容输出,此时采用的就是decoder-only的模型来执行即可。

序列任务的训练和评估

从上述建模可以看到,文本这类模型有一个特点或者“先验认识”是,序列后面的符号是根据前面的符号所生成的,虽然这个假设并不严谨,但大体上是有效的。所以针对上述所提到的Decoder模块,其生成过程就有:

$$

\begin{equation}
\begin{aligned}
x_1 &= f(X_0) = f((x_0)) \
x_2 &= f(X_1) = f((x_0, x_1)) \
x_3 &= f(X_2) = f((x_0, x_1, x_2)) \
&\dots \
x_i &= f(X_{i-1}) = f((x_0, \dots, x_{i-1})) \
&\dots

\end{aligned}
\end{equation}
$$

其中$f$是一个序列模型。自然,就可以按照这样的方式对模型进行训练和评估。

模型训练

给定前面的符号序列$X_i$,通过模型计算生成下一位置的有限符号集合中的概率分布$p(\hat{x}i) \in \mathbb{R}^C$,其中$\sum{j=1}^C p(x_i^j) = 1$,通过交叉熵损失函数来进行训练。

模型评估

在这篇论文中,出现了两个评估方式(PPL 和 BLEU),在这里简单展开讲讲。首先,在这篇论文中,并没有对语言本身有更多的评估指标,比如类似“文本完成度”,用于评估句子的完整程度;“句子阅读流畅性”,用于评估句子阅读的流畅性的指标。这些指标是比较难以量化的。

所以在这里,取巧的一点是,相信数据本身,这也是为什么后续的模型,数据很重要的缘故,其还兼有模型评估的重要功能。相信数据本身,就是相信,给定的数据是预期的数据,模型通过这些数据学习,再通过这些数据评估,能够达成一些其他的目的。

简单举例理解,比如,相信给定的文本本身就包含了句子流畅性,能够让人直接阅读清晰,这样在不断拟合这些数据的过程中,也相信模型能够学会这个特性,而在评估中,用这些带有“流畅性”的句子进行评估,从而验证模型具有该特性。

总结来说就是,并没有一个直观地指标直接计算相关的性质,而是通过包含在数据之中具有这些性质,使得模型训练得较为良好的时候,用这些带有这些性质的数据对模型进行评估的一种间接度量性能。

所以在这里:最原初的交叉熵,在训练过程中,用以衡量模型输出和数据之间的差距,则在评估过程中,相当于固定模型,去衡量在这些评估数据中,模型能够预测得有多确信,交叉熵指标越低,则越说明在给定的文本上数据拟合较好。

进一步地,PPL(Perplexity)也叫做困惑度,以及BLEU(Bilingual Evaluation Understudy)也叫双语评估替补,则是在上述核心思想下,利用可相信的文本数据的针对特定任务对模型进行评估的算法设计。

困惑度(Perplexity, PPL)

该指标可以理解为在交叉熵的基础上,针对给定的文本,让模型在该文本上进行预测,对预测的分布结果进行统计从而判断在给定文本上的“确信度”,数值越低,“确信度”越高,说明模型对给定的文本已经有了良好的训练,越高概率具有给定文本的特性;而数值越高,说明“确信度”越低,说明在给定文本上,没有学会相关的特性,一定程度反映模型没有训练好。

其计算指标有:
$$
\begin{equation}
\text{PPL}(f, S) = \exp\left(-\frac{1}{N}\sum_{i=1}^N \ln P(s_i|s_1\dots s_{i-1}) \right),
\end{equation}
$$
其中,$f$是该模型在给定句子$S = (s_1, \dots, s_N)$序列下的针对有限符号集合预测的概率$P(s_i|s_1\dots s_{i-1})$。该计算方式相当于把所有的概率可能进行求和,而这种计算方式和交叉熵的计算方式接近,能够和交叉熵相互对照。

双语评估替补(Bilingual Evaluation Understudy, BLEU)

而在这篇论文中,由于需要评估根据输入$X$所翻译出来的$\hat{Y}$,该翻译的句子和给定的目标句子$Y$之间相似程度,在这里则采用双语评估替补来计算相关指标:

$$
\begin{equation}
\text{BLEU} = \text{BP} \cdot \exp\left(\sum_{n=1}^N w_n \log p_n \right),
\end{equation}
$$

其中$p_n$是n-gram精度,直观理解就是生成句子的”n个词”的组合与目标句子中的组合的重合度有多少,一般n取1到4。然后$\text{BP}$表示惩罚,当生成句子较小的时候需要给定惩罚。但这种评估对语序不关心,可能存在一定语序上不准确的问题,但话又说回来了,很多时候语序也不影响理解。

序列模型的构建

接着再来讨论序列信息如何构建:

在这里就要涉及到,信息如何流转上的计算。首先一个基础共识是,序列信息是后者需要用到前者的信息,这就意味着模型针对序列的一个位置计算的时候,需要考虑之前的信息。

那么在这里就有两种情况:

1 存在一个状态变量,这个状态变量能够受到每一个位置输入的信息的影响,从而根据这个状态来进行输出。就好像一个人,Ta在不断经历事情的时候,这些事情对其有影响,而Ta根据这些事情做出新的判断。

2 并不存储一个中间状态变量,而是直接计算每一个位置之前所有位置的影响,这就好像,每一个位置都是一个单独的位置,要去查找之前所有位置哪些位置影响最多,从而决定这个位置应该输出什么。

前者就是RNN等状态模型的思想,后者就是Transformer也就是这篇论文的思想。

参考文献

[1] aswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.

  • 标题: 深度学习下的文本编码方式
  • 作者: Wings
  • 创建于 : 2026-04-29 10:00:00
  • 更新于 : 2026-05-03 18:40:48
  • 链接: https://www.wingslab.top/深度学习/深度学习下的文本编码方式/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。