1. CLS 向量和 DEC 向量的区别及训练方式
(1) CLS 向量与 DEC 向量是否都是特殊 token?
CLS 向量([CLS] token)和 DEC 向量(Decoder Input token)都是特殊的 token,但它们出现在不同类型的 NLP 模型中,并承担不同的功能。
-
CLS 向量([CLS] token)
- 主要出现在 BERT 类的双向 Transformer 编码器模型中,比如 BERT、RoBERTa、ALBERT 等。
- 用于表示整个输入序列的全局信息,常用于分类任务(如情感分析、文本匹配)。
- 具体机制:
- 在 BERT 预训练阶段,[CLS] token 被加在输入文本的最前面。
- 经过 Transformer 编码层后,输出的 CLS 向量聚合了整个文本的信息,最终送入分类头进行任务训练。
- 例如,在情感分类任务中,CLS 向量会经过全连接层和 softmax 变换,输出正负类别概率。
-
DEC 向量(Decoder Input token)
- 主要出现在 Encoder-Decoder 结构的模型中,比如 Transformer(用于机器翻译)、T5(用于文本生成)等。
- 充当解码器的初始输入,通常由
<bos>
(begin-of-sequence) 或者<s>
(start token)表示。 - 具体机制:
- 训练时,Decoder 需要一个起始 token(例如
<bos>
),然后依赖 Encoder 的输出和已生成的部分自回归地预测下一个 token。 - 生成过程中,每个时间步的 DEC 向量都会影响下一个 token 的生成。
- 训练时,Decoder 需要一个起始 token(例如
(2) CLS 向量和 DEC 向量如何初始化?
-
CLS 向量初始化 :
在 BERT 预训练时,[CLS] token 的初始向量与普通词向量一样,随机初始化,并在训练过程中通过梯度下降不断优化。
-
DEC 向量初始化 :
在 Transformer 类模型中,DEC token 也通常是随机初始化的,但是不同的模型可能采用不同的方法:
- 在 T5 这种预训练模型中,Decoder 的输入采用的是预训练时学习到的
<s>
token 。 - 在机器翻译任务中,Decoder 可能使用源语言的
<bos>
作为起点。
- 在 T5 这种预训练模型中,Decoder 的输入采用的是预训练时学习到的
(3) CLS 向量和 DEC 向量如何参与训练?
-
CLS 向量的训练方式:
- 在 BERT 预训练任务(如 Masked Language Model 和 Next Sentence Prediction)中,CLS 向量是计算句子级别任务损失的关键部分。
- 在下游任务中(如文本分类),CLS 向量会经过额外的线性层,用于预测类别标签。
-
DEC 向量的训练方式:
- 参与自回归训练,即在训练时,Decoder 只能够看到之前的词,而预测当前时间步的目标词(Teacher Forcing 机制)。
- 目标是最大化正确序列的似然,使得 DEC 向量能够学习如何有效指导解码器生成合理的输出。
(4) CLS 向量和 DEC 向量本质上是否相同?
从数学本质上看,它们都是高维向量(embedding),但在模型设计上:
- CLS 向量用于编码文本全局语义,属于 Encoder 端的产物。
- DEC 向量用于自回归地指导序列生成,属于 Decoder 端的输入。
- 区别主要体现在训练方式、任务目标和语义作用上。
2. 分类损失(如交叉熵) vs. 语言模型损失(如负对数似然)
这两种损失都用于 NLP 任务,但应用场景不同。
(1) 分类损失(Cross Entropy, CE)
-
适用任务: 用于文本分类、命名实体识别(NER)、情感分析等任务。
-
计算方式:
- 先计算模型输出的类别概率分布:
p i = softmax ( z i ) p_i = \text{softmax}(z_i) pi=softmax(zi) - 再计算真实类别 ( y ) 与预测类别 ( p ) 之间的交叉熵:
L = − ∑ i y i log p i L = -\sum_{i} y_i \log p_i L=−i∑yilogpi
- 先计算模型输出的类别概率分布:
-
特点:
- 仅在整个输入上计算一个类别概率,而不涉及逐 token 预测。
(2) 语言模型损失(Negative Log Likelihood, NLL)
-
适用任务: 用于文本生成、机器翻译、问答任务(如 GPT、T5)。
-
计算方式:
- 语言模型在训练时,目标是最大化正确序列的似然概率 ,其损失形式为:
L = − ∑ t log p ( y t ∣ y < t , x ) L = -\sum_{t} \log p(y_t | y_{<t}, x) L=−t∑logp(yt∣y<t,x) - 这里,( y_t ) 是第 ( t ) 个时间步的目标词,( y_{<t} ) 代表已生成的部分,( x ) 是输入序列(如果是 Encoder-Decoder)。
- 语言模型在训练时,目标是最大化正确序列的似然概率 ,其损失形式为:
-
特点:
- 逐 token 计算损失,关注序列的生成概率。
- 在自回归(Auto-regressive)任务中,每个 token 预测结果依赖前面已生成的部分。
(3) 两者的主要区别
分类损失(CE) | 语言模型损失(NLL) | |
---|---|---|
任务类型 | 句子级别任务(分类) | 逐 token 预测任务(生成) |
计算方式 | 计算整个文本的类别概率 | 计算每个 token 的预测概率 |
是否自回归 | 否 | 是 |
3. 自回归(Autoregressive, AR)
(1) 自回归的定义
自回归(Autoregressive)是一种序列建模方法,当前时间步的预测依赖于过去的输出。
(2) 为什么叫"自回归"?
- "回归" 这个术语在统计学中表示根据历史数据预测未来值。
- "自" 指的是模型的输入来自于自己之前的预测。
- 因此,自回归 = "使用自身过去的信息来预测未来"。
(3) NLP 中的自回归模型
-
GPT(Generative Pre-trained Transformer)
-
在第 ( t ) 个时间步,只能看到 ( y_1, y_2, \ldots, y_{t-1} ) 这些前面的 token,不能看到未来的信息。
-
预测方式:
p ( y t ∣ y < t ) p(y_t | y_{<t}) p(yt∣y<t) -
依赖"过去的输出"来预测下一个词,典型的自回归结构。
-
-
BERT 不是自回归模型
- BERT 是 双向 Transformer,训练时可以看到整个输入,因此它不是自回归模型。
(4) 自回归的应用
- 语言模型(GPT、XLNet)
- 机器翻译(Transformer Decoder)
- 语音生成(WaveNet)
总结
-
CLS 向量和 DEC 向量本质上都是向量,但用途不同:
- CLS 向量用于文本分类、全局表征;
- DEC 向量用于解码器输入,引导文本生成。
-
分类损失 vs. 语言模型损失:
- 交叉熵用于整体分类;
- 负对数似然用于逐 token 预测。
-
自回归(Auto-regressive)是指依赖自身过去输出进行预测,GPT 等生成模型采用这一机制。
在 NLP 任务中,<s>
和 <bos>
都是 特殊 token,但它们的使用方式略有不同,取决于具体的模型和任务。
1. <s>
(Start-of-Sequence Token)
<s>
代表 序列的起始 token,在不同的模型中用途不同:
-
在 T5 模型(Text-to-Text Transfer Transformer)中:
-
T5
是一个 Encoder-Decoder 结构的 Transformer,所有任务都被转换成文本生成任务。 -
在 T5 的 Decoder 中,解码输入(Decoder Input)以
<s>
作为起始 token,然后逐步生成后续 token。 -
训练时:
输入 (Encoder Input) = "Translate English to French: I love NLP" 目标输出 (Decoder Target) = "<s> J'aime le NLP </s>"
-
预测时:
<s>
提供解码起点,模型基于 Encoder 的输出和<s>
生成下一个 token。
-
-
在 BART(Bidirectional and Auto-Regressive Transformer)模型中:
BART
也是 Encoder-Decoder 结构,用于文本填充、摘要等任务。<s>
用于标识句子开始,在BART
预训练阶段,模型可能会恢复丢失的<s>
token。
-
在一些 NLP 任务中:
<s>
也可以作为整个句子或段落的起点,类似于[CLS]
(BERT 中用于分类任务的 token)。
2. <bos>
(Beginning-of-Sequence Token)
<bos>
代表 序列的开始 ,用于 自回归(Auto-regressive)解码:
-
在机器翻译(MT)任务中:
-
Transformer
结构的 Decoder 需要一个起始 token,通常用<bos>
作为 Decoder 的输入。 -
例如:
源语言输入 (Encoder Input): "I love NLP" 目标输出 (Decoder Target): "<bos> J'aime le NLP <eos>"
-
在训练时,Decoder 会在
<bos>
之后一个个预测目标语言的 token,直到遇到<eos>
(end-of-sequence)。
-
-
在 GPT 这样的自回归模型中:
GPT
主要用于文本生成任务,如对话、摘要。<bos>
告诉模型"文本从这里开始",然后 GPT 依次预测下一个 token。
3. <s>
和 <bos>
的区别
Token | 常见用途 | 典型模型 |
---|---|---|
<s> (Start-of-Sequence) |
句子/段落的起点,用于 Encoder-Decoder 任务 | T5、BART |
<bos> (Beginning-of-Sequence) |
自回归生成的起始 token,特别用于解码 | GPT、Transformer Decoder |
- 如果是 Encoder-Decoder 结构(如 T5、BART) ,一般使用
<s>
作为起始 token。 - 如果是 仅 Decoder 结构(如 GPT) ,则使用
<bos>
作为文本生成的起始 token。