总体架构设计
画出标准 Transformer 的 Encoder 和 Decoder 结构图,标注所有子层¶
Encoder(编码器):
输入嵌入 + 位置编码
│
▼
┌─────────────────────────────┐
│ Encoder Layer │
│ │
│ ┌──────────────────────┐ │
│ │ 多头自注意力 (Multi-Head │ │
│ │ Self-Attention) │ │
│ └──────────────────────┘ │
│ │ │
│ 残差连接 + LayerNorm │
│ │ │
│ ┌──────────────────────┐ │
│ │ 前馈网络 (FFN) │ │
│ └──────────────────────┘ │
│ │ │
│ 残差连接 + LayerNorm │
│ │
└─────────────────────────────┘
│
▼
(× N,通常 6、12、24 层叠加)
│
▼
Encoder 输出(送给 Decoder 的交叉注意力)
Decoder(解码器):
目标序列嵌入 + 位置编码
│
▼
┌─────────────────────────────┐
│ Decoder Layer │
│ │
│ ┌──────────────────────┐ │
│ │ 掩码多头自注意力 │ │
│ │ (Masked Multi-Head │ │
│ │ Self-Attention) │ │
│ └──────────────────────┘ │
│ │ │
│ 残差连接 + LayerNorm │
│ │ │
│ ┌──────────────────────┐ │
│ │ 交叉注意力 │ │
│ │ (Cross-Attention) │ │
│ │ Q: Decoder输出 │ │
│ │ K,V: Encoder输出 │ │
│ └──────────────────────┘ │
│ │ │
│ 残差连接 + LayerNorm │
│ │ │
│ ┌──────────────────────┐ │
│ │ 前馈网络 (FFN) │ │
│ └──────────────────────┘ │
│ │ │
│ 残差连接 + LayerNorm │
│ │
└─────────────────────────────┘
│
▼
(× N,通常与 Encoder 层数相同)
│
▼
Linear + Softmax → 输出概率
Encoder 中的自注意力与 Decoder 中的自注意力有什么本质不同?掩码有何作用?¶
本质不同:
-
Encoder 自注意力:是双向的。每个 token 可以看到序列中的所有 token(包括前后)。这允许模型在编码时充分利用全局上下文,对一个词的理解可以依赖于它左边和右边的全部信息。这种双向性对于理解任务(如文本分类、序列标注、语义相似度)至关重要,因为理解一个词的含义往往需要同时参考它的前后文。
-
Decoder 自注意力:是单向的(通常称为因果注意力或掩码自注意力)。每个 token 只能看到它前面的 token(包括自己),不能看到未来的 token。这是自回归生成的要求:在生成第 t 个词时,模型只能基于前 t-1 个已生成的词进行预测,而不能“偷看”未来。
掩码的作用:
掩码是一个上三角矩阵(通常填充为 -∞),加到注意力分数矩阵上。在 softmax 之前,将当前 token 对未来 token 的注意力分数设为负无穷,使得 softmax 后这些位置的权重为 0。这确保了:
-
训练时,模型学到的预测模式符合自回归生成的因果约束,避免了信息泄露。尽管输入是完整的目标序列,掩码保证了每个位置的预测只依赖于历史上下文。
-
推理时,模型可以逐 token 生成,每一步只基于已生成的部分,这是文本生成的基础。
Encoder-Decoder 架构中,Decoder 是如何利用 Encoder 输出的?交叉注意力的 K、V 来自哪里?¶
Decoder 通过交叉注意力(Cross-Attention) 机制来利用 Encoder 的输出。
具体过程:
-
Encoder 处理完整个输入序列后,输出一个编码后的表示序列,形状为
(batch, src_len, d_model),记作encoder_output。 -
在 Decoder 的每个层中,交叉注意力的 Q(Query)来自 Decoder 上一子层的输出(即掩码自注意力后的表示)。这个 Q 代表“我需要什么信息”,携带了目标序列当前位置的上下文特征。
-
交叉注意力的 K(Key)和 V(Value)均来自 Encoder 的输出
encoder_output。K 代表“我能提供什么信息以供匹配”,V 代表“我实际携带的信息内容”。 -
计算时,Decoder 的 Q 与 Encoder 的 K 做点积,得到注意力权重(shape:
(tgt_len, src_len)),表示目标序列每个位置对源序列各位置的关注程度。然后用这些权重去加权 Encoder 的 V,得到聚合了源语言信息的表示。
这种设计的意义:Decoder 的每一个位置都可以动态地关注 Encoder 输出中的所有位置,将源语言的信息有选择地融入到目标语言的生成中,解决了序列到序列的对齐问题。这就是 Transformer 在机器翻译等任务中表现优秀的核心原因。
为什么 Encoder-only 模型适合理解任务,而 Decoder-only 适合生成任务?¶
Encoder-only 模型(如 BERT)适合理解任务:
-
双向上下文:Encoder 的自注意力可以看到整个序列的所有位置,能同时捕捉一个词的左右上下文,这对于理解句子语义、词义消歧、关系分类等任务至关重要。
-
掩码语言模型预训练:Encoder-only 模型通常在 MLM 任务上预训练,学习的是“完形填空”式的理解能力,对文本的深层语义把握更强。微调时通常在 Encoder 输出之上加分类头,直接基于全局上下文做判断。
-
无自回归生成:Encoder 本身不是为逐个生成 token 设计的,它一次性输出整个序列的表示,不能直接用于生成任务。
Decoder-only 模型(如 GPT)适合生成任务:
-
单向因果注意力:Decoder 的注意力只关注前文,天然符合自回归生成模式——从左到右逐 token 预测下一个词。
-
语言模型预训练:Decoder-only 模型在下一个 token 预测任务上预训练,学会的是根据前文续写文本,这正是生成任务所需的核心能力。
-
灵活的条件注入:通过将条件信息(如翻译的源语言、问答的上下文)与待生成内容拼接为统一序列,Decoder-only 可以灵活处理各种条件生成任务,无需额外的交叉注意力结构。
-
训练和推理的一致性:训练时使用教师强制(Teacher Forcing),推理时自回归生成,两者在序列生成模式上一致(尽管有曝光偏差),更容易优化生成质量。
Decoder-only 模型没有显式的交叉注意力,那它怎么处理条件信息?如在 GPT 中如何进行翻译?¶
Decoder-only 模型将条件信息(源语言文本)和待生成的目标语言文本拼接成一个统一的序列,通过自注意力完成条件到生成的映射。
以 GPT 翻译为例:
-
输入序列构造:
[源语言句子] [分隔符] [目标语言句子前缀(如开始符)]。 -
训练时,源语言部分不计算损失(或掩码掉),只计算目标语言部分的语言模型损失(预测下一个 token)。Decoder 的自注意力在源语言部分可以看到完整源语言(双向),因为源语言是已知给定的;在目标语言部分则是因果掩码,只能看到前文。
-
生成时,给定
[源语言句子] [分隔符] [目标语言开始符],模型自回归地逐词生成目标语言翻译,每生成一个词就拼接到序列末尾,直到输出结束符。
这种做法的优势:
-
架构统一:无需额外设计 Encoder 和交叉注意力,一个 Decoder 处理所有信息。
-
灵活扩展:可以轻松添加更多条件信息,如翻译指令、示例(few-shot),全部通过拼接实现。
-
自注意力全程参与:源语言和目标语言在同一个自注意力计算中交互,模型的每一层都能直接访问源语言信息,信息流动更自由。
现代大语言模型(如 GPT-4、LLaMA)在多种条件生成任务中都采用了这种统一序列的方式,体现了 Decoder-only 架构的灵活性和强大扩展能力。
一个 12 层的 Transformer Encoder,它的每一层都包含哪些可训练参数?参数分布是怎样的?¶

-
两个 LayerNorm 层:
-
每个 LayerNorm 包含缩放参数 γγ 和偏移参数 ββ,各 768 维
-
两个 LayerNorm 总参数量:4×768=3,0724×768=3,072
每层总参数量:约 2.36M + 4.72M + 约 0.003M ≈ 7.08M
参数分布规律:
-
FFN 占主导:每层约 67% 的参数集中在 FFN 部分(4.72M / 7.08M)。
-
注意力次之:注意力部分约占 33%。
-
归一化层极轻量:LayerNorm 参数几乎可以忽略不计。
12 层的 Encoder 总参数量(不计嵌入层)约为 12×7.08M≈85M12×7.08M≈85M。加上嵌入层(30k 词汇表 × 768 = 23M)、位置编码等,BERT-base 总参数量约为 110M。
为什么现在主流的 LLM 大多采用 Decoder-only 架构?Encoder-Decoder 架构有哪些劣势?¶
Decoder-only 架构的优势(为何成为主流):
-
架构统一简单:只有一种 Transformer 块,所有信息(条件、上下文、生成内容)都通过统一的自注意力处理。无需分别设计 Encoder 和 Decoder,代码实现、优化和扩展都更简单。
-
预训练目标与生成一致:下一个 token 预测的预训练任务与自回归生成天然一致,训练和推理的模式差异小(仅有曝光偏差)。Encoder-Decoder 需要在预训练时设计类似 Seq2Seq 的任务,训练效率和数据利用率相对较低。
-
灵活的零样本/少样本能力:通过文本拼接可将任何任务转化为语言模型格式。例如翻译、问答、摘要只需在输入中提供指令和上下文,无需改变模型结构。这种“一切皆生成”的范式使得同一个模型可以处理极多样化的任务。
-
易于扩展到极大规模:Decoder-only 的因果注意力在训练时可以利用 FlashAttention 等优化,且序列级别的自回归训练适合用教师强制做高效批量训练。Encoder-Decoder 的双向/交叉注意力增加了额外的计算复杂度和内存开销。
-
更长的有效上下文:Decoder-only 的 KV 缓存机制在推理时较为直接,且容易结合 PagedAttention 等优化。Encoder-Decoder 还需要缓存 Encoder 的表示,且交叉注意力的 KV 缓存管理更复杂。
Encoder-Decoder 的劣势:
-
结构复杂:需要两组不同的 Transformer 块,参数量和训练开销更大。
-
任务适配不灵活:新增任务通常需要设计特定的输入格式或微调策略,不像 Decoder-only 可通过 Prompt 统一处理。
-
推理效率较低:生成时 Encoder 需要先处理整个输入,Decoder 再逐步生成,无法像 Decoder-only 那样可以在生成的同时对输入做增量处理。
-
扩展性受限:在超大模型和超长文本场景下,Encoder 的双向注意力复杂度为 O(n2),且与 Decoder 的交叉注意力也是 O(n2),相比 Decoder-only 的因果注意力更难以用稀疏或线性注意力优化。
Encoder-Decoder 的优势场景是什么?请至少举三个典型任务。¶
尽管 Decoder-only 大行其道,Encoder-Decoder 在以下场景仍有独特优势:
-
机器翻译(特别是低资源语言对):
-
Encoder 可以充分双向编码源语言,捕获完整的上下文信息。Decoder 通过交叉注意力显式地从源语言表示中提取信息,这种结构化的对齐机制在翻译时需要精确的源-目标映射,比 Decoder-only 的拼接方式更直接。在训练数据有限的情况下,Encoder-Decoder 往往能更高效地学习到翻译模式。
-
长文本摘要:
-
输入是一篇长文档,输出是简短摘要。Encoder 可以双向处理整个长文档,提取关键信息并压缩为密集表示。Decoder 通过交叉注意力有选择地关注文档的不同部分来生成摘要。双向编码能更好地理解文档的全局结构和要点,避免因果解码器可能发生的“长文档前部信息在生成时被淡忘”的问题。
-
语音识别(ASR)或多模态理解:
-
语音信号或图像特征经过编码器提取为高级表示,解码器(可能是自回归的)基于这些特征生成文本。Encoder 负责从连续信号中抽象出离散的语义信息,Decoder 负责将这些语义转化为流畅文本。这种感知-生成分离的结构天然适合这类任务。
其他场景:代码生成(源语言为自然语言描述)、图像描述(图到文)、知识图谱到文本等,这些任务都具有“从结构化或非文本表示到文本”的转换特征,Encoder-Decoder 的分离设计更贴合。
如果要用一个预训练的 Encoder-only 模型做文本摘要,你会怎么做?会遇到什么限制?¶
怎么做:
由于 Encoder-only 模型无法直接生成文本,需要将其改造为生成式架构。一种常见做法是在 Encoder 上添加一个随机初始化的 Decoder,形成一个 Encoder-Decoder 框架。预训练的 BERT 作为 Encoder,提供强大的文本理解能力;Decoder 使用标准 Transformer 解码器,通过交叉注意力利用 Encoder 的表示进行自回归生成。训练时,可以冻结 BERT 部分(或使用小学习率微调),重点训练 Decoder 和交叉注意力层。这实际上就是 BERT2BERT 或 BERT-gen 的做法。
另一种方案是将摘要任务转化为抽取式摘要:在 Encoder 的输出上训练一个分类头,为每个句子预测是否应该被选入摘要。这不需要生成,完全在 Encoder-only 框架内完成,但只能做抽取式,不能做生成式摘要。
限制:
-
缺乏生成能力:Encoder-only 模型预训练时没有学过文本生成,添加的 Decoder 需要从头训练,需要大量摘要标注数据,且训练成本高。
-
Encoder 与 Decoder 不匹配:BERT 的表示是针对 MLM 和 NSP 优化的,与生成任务所需的表示可能不完全适配。直接使用可能需要较多的微调。
-
序列长度受限:BERT 通常使用绝对位置编码,最大长度为 512。对于长文档摘要,无法直接输入完整文档,需要截断或分段处理,可能丢失关键信息。
-
不是主流方案:相比直接用预训练的 Seq2Seq 模型(如 BART、T5)或 Decoder-only 大模型,使用 Encoder-only 做摘要的性价比和效果上限都较低。
Transformer 结构的“深度”和“宽度”分别指什么?哪个对模型能力影响更大?¶
深度:指 Transformer 的层数(即 Encoder 或 Decoder 的堆叠数量)。深度决定了模型能够进行多少次非线性变换和注意力聚合。更深的网络可以建模更复杂的层次化特征:浅层关注局部模式,中层组合为短语级表示,深层捕捉全局语义和复杂推理。
宽度:指每层内部的维度大小,主要是 d_model(模型隐藏维度)和 d_ff(FFN 中间层维度)。宽度决定了每层能表示多少信息容量。更宽的网络每个位置可以存储更丰富的特征。
哪个影响更大:
-
在模型总参数量固定的情况下,深度往往比宽度更重要。研究表明,增加层数通常比增加宽度带来更显著的性能提升。深层网络可以逐步抽象化表示,每一层的增量可以叠加为强大的推理能力。而宽度增加仅提升了单层的容量,边际收益递减更快。
-
然而,过深的网络训练困难(即使有残差连接和 Pre-Norm),会遭遇梯度消失、表示崩溃等问题。因此大模型通常会同时增加深度和宽度,但深度优先。例如 GPT-3 的 175B 模型有 96 层,而不是减少层数但把宽度做得很极端。
-
近年也有研究关注深度与宽度的最优配比。对 Transformer 而言,在一定范围内,加深比加宽收益更大,但需要配合更优的归一化和初始化策略。
Encoder 的双向自注意力和 Decoder 的单向自注意力各自适合什么任务?为什么不能互换?¶
双向自注意力(Encoder)适合的任务:
-
文本理解:文本分类、情感分析、自然语言推理、命名实体识别、关系抽取等。这些任务需要综合整个句子的上下文来做出判断。
-
序列标注:每个位置的标签可能依赖于前后文,双向信息至关重要。
-
句子/文档编码:用于检索、语义相似度计算、句子嵌入等。
单向自注意力(Decoder)适合的任务:
-
文本生成:语言建模、对话生成、故事创作、代码生成等。生成过程必须遵守时间顺序,只能基于已生成内容预测下一个词。
-
自回归生成:翻译、摘要等条件生成任务中,目标端需要按顺序逐个生成。
为什么不能互换?
-
如果用双向注意力去做生成,模型在预测第 t 个词时能看到未来的正确答案(信息泄露),训练出的模型无法用于实际生成——因为它依赖的未来信息在推理时根本不存在。
-
如果用单向注意力去做理解任务,每个 token 的表示只包含左侧上下文,对于需要右向信息的任务(如理解一个代词指向前文还是后文),模型会丢失重要信号,性能显著下降。
例外:有些理解任务(如文本分类)对方向性不敏感,单向模型也能取得不错效果,因为最终分类只需全局聚合信息,从左到右逐步聚合也能近似全局语义。但序列标注等细粒度任务对双向信息的需求更为刚性。
为什么 Encoder-Decoder 架构在神经机器翻译中逐渐被 Decoder-only 取代?除了统一性还有哪些原因?¶
统一性确实是重要原因——用一个模型处理所有任务,减少架构复杂性。但还有更深层的原因:
-
数据和规模优势:Decoder-only 的预训练目标(下一个 token 预测)天然适合从海量无标注文本中学习。互联网上几乎有无穷无尽的自然文本可用于训练语言模型。而 Encoder-Decoder 需要成对的平行语料(如翻译对)进行监督训练,这种数据昂贵且稀缺。Decoder-only 可以先在海量单语数据上预训练强大的语言能力,再用少量平行数据微调,大幅降低了对标注数据的依赖。
-
零样本/少样本的涌现能力:当 Decoder-only 模型足够大时,即使只在单语数据上训练,也能通过提示(prompt)展现出一定的翻译能力——这源于多语言文本在训练数据中的共现。Enc-Dec 没有这种涌现特性,必须显式在平行数据上训练。
-
长序列的注意力效率:Decoder-only 的自回归生成时,源语言和目标语言在同一个自注意力中。源语言部分不需要生成,可以直接用双向注意力(通过掩码控制),目标语言部分用因果掩码。这种灵活掩码机制比 Enc-Dec 的 Encoder 双向 + 交叉注意力更高效,因为交叉注意力需要额外的 KV 缓存和计算。
-
更适合多任务统一:在同一个序列中,Decoder-only 可以自然混合指令、示例、输入和输出。这催生了 In-Context Learning 和 Chain-of-Thought 等能力。Enc-Dec 很难自然融入这些范式。
-
社区和生态的收敛:GPT 系列的成功证明了 Decoder-only 的大规模可扩展性,大量资源和优化工具(如 FlashAttention、vLLM)围绕这一架构展开,形成了强大的生态飞轮。
Decoder-only 模型进行条件生成时,如何将条件信息(如源语言)注入?常用的做法有哪些?¶
核心做法:条件信息与目标序列拼接成统一序列。
具体方法如下:
-
前缀拼接法: 将条件文本直接拼接在待生成序列之前,用特殊分隔符隔开。格式为
[条件文本] [分隔符] [目标前缀]。训练时只对目标部分计算语言模型损失。这是最基础也最常用的做法,GPT 系列处理翻译、摘要等任务均采用此法。 -
指令+上下文拼接: 在条件信息前再拼接任务指令(如“将以下文本翻译成英文:”),形成
[指令] [条件] [分隔符] [目标]的结构。这让模型能够区分不同类型的条件生成任务,实现多任务统一。 -
部分双向掩码(PrefixLM):
允许条件部分使用双向注意力(token 之间可以互相看到),而目标生成部分使用因果掩码。这通过自定义的注意力掩码矩阵实现:条件部分的 mask 是全零(可见),目标部分的 mask 是上三角因果掩码,且条件到目标方向是可见的。这样既保留了条件部分的双向理解能力,又不破坏生成的因果性。GLM、PaLM 等模型采用了这种策略,可以在条件理解上获得接近 Encoder 的双向能力。
- 交叉注意力替代方案(Decoder with Encoder):
有些模型保留一个单独的轻量 Encoder 来编码条件,但主网络仍是 Decoder。Encoder 输出的表示通过额外的交叉注意力注入 Decoder。这介于纯 Decoder 和 Enc-Dec 之间,用于需要强条件控制的场景。
- 提示嵌入法(Prompt Tuning):
在输入层插入可学习的软提示(soft prompt)向量,这些向量作为条件的压缩表示,与输入 token 嵌入拼接。只需少量条件文本示例即可,适用于高效微调。
在实际工程中,前缀拼接 + 因果掩码是绝大多数生成式 LLM 的首选,因其最简单、最统一、且能充分利用 Decoder-only 的架构优势。
如果让你设计一个同时具备理解和生成能力的混合架构,你会怎么安排层的类型和比例?¶
设计目标:结合双向理解的深度和单向生成的自然性。一种成熟的思路是非对称的 Encoder-Decoder 或 PrefixLM 变体。
方案一:深层双向编码器 + 浅层自回归解码器
-
前端:约 60%-70% 的层采用双向自注意力,负责对输入进行深度的全局理解,提取丰富的上下文表示。这部分类似 BERT 的 Encoder,可处理输入文本、图像特征等多模态信息。
-
后端:约 30%-40% 的层采用因果掩码自注意力,负责基于前面的双向表示进行自回归生成。生成部分不设交叉注意力,而是直接从双向编码器的最后一层输出作为初始隐藏状态,或以残差方式注入生成层。
-
理由:理解需要深度双向建模,生成则需要因果约束。将更多层分配给理解,可以建立强大的语义基础,生成部分在高质量表示之上仅需少量层即可完成流畅输出。
方案二:混合层(PrefixLM 的层内切换)
-
所有层共享,不区分编码器/解码器。在每一层内,根据 token 位置动态切换注意力掩码:前缀(条件/输入)部分使用双向注意力,后缀(待生成)部分使用因果注意力。
-
比例控制:输入和输出的序列长度自然形成分工,无需固定层的比例。模型可以灵活处理任意长度的条件。
-
理由:这种设计在 PaLM、GLM 中已被验证,兼顾理解和生成,且架构统一,训练高效。
方案三:MoE 混合
-
在每层引入两组专家 FFN:一组是“理解专家”,在双向特征上表现更好;另一组是“生成专家”,在因果特征上优化。路由机制根据 token 是前缀还是后缀来激活不同的专家。
-
这可以增加模型容量而不显著增加计算量。
权衡:混合架构的复杂度高于纯 Decoder-only,但如果应用场景明显区分理解与生成(如文档理解+问答生成),且对理解深度有刚性需求,那么非对称方案更具优势。纯 Decoder-only 因其极致的统一性和扩展性仍是当前主流。
Transformer 的深度对“局部模式”和“全局模式”的捕捉有什么不同影响?¶
局部模式通常指邻近 token 之间的依赖关系,如短语结构、语法搭配、相邻词性约束等。全局模式指跨越长距离的依赖,如指代消解、段落主题一致性、全文逻辑结构等。
深度的影响:
-
浅层更擅长捕捉局部模式。注意力权重通常在浅层集中于对角线附近(每个 token 关注自己和左右几个 token),这是类似于卷积的局部特征提取。浅层的表示也更多保留词级和短语级的特征。
-
随着层数加深,注意力范围逐渐扩大,全局模式开始涌现。深层通过多层自注意力的组合,每个 token 的感受野指数级扩大,能够关注到距离很远的语义相关 token。同时,深层 FFN 存储的“记忆”模式更多涉及高层语义和抽象概念。
-
极深网络能捕捉极其复杂的全局依赖,但也可能出现“过度全局化”:所有 token 的表示趋于相似(表示坍缩),失去局部细节的辨别力。这解释了为什么很深的 Transformer 有时需要引入局部注意力窗口或额外的局部增强机制。
实证:BERT 的可视化研究表明,浅层注意力有明确的局部模式(邻近关注),中间层开始出现句法结构(如关注同一短语的其他词),深层则关注语义相关但距离较远的词。因此,足够的深度是实现从局部到全局逐层抽象的关键。
现代大模型很少单独使用 Segment Embedding,取而代之的是什么机制?¶
Segment Embedding 最初在 BERT 中引入,用于区分输入中的不同句子(如句子 A 和句子 B),便于 NSP 任务。现代大模型普遍不再单独使用 Segment Embedding,原因和替代方案如下:
为什么不再使用:
-
NSP 被抛弃:RoBERTa 等研究发现 NSP 任务效果有限甚至有害,因此区分句子的 Segment Embedding 失去了主要作用对象。
-
统一序列建模:Decoder-only 模型将一切输入视为连续序列,通过特殊分隔 token(如
<sep>、<eos>、<|user|>、<|assistant|>)和注意力掩码来区分不同部分(指令、上下文、生成内容)。模型从分隔符的位置和掩码模式中隐式学会部分之间的边界和关系。 -
灵活性受限:Segment Embedding 需要预先设定句子段落数量,难以适应复杂多变的对话、多文档输入等场景。
取而代之的机制:
-
特殊 Token 标记:使用特殊的控制 token 来标明不同段落的起止,这些 token 的嵌入和位置编码包含了段落边界信息。现代对话模型(如 LLaMA-2-Chat、ChatGPT)使用
<|system|>、<|user|>、<|assistant|>等标记清晰划分角色和内容。 -
注意力掩码控制:通过构造不同形状的注意力掩码,精确控制哪些 token 可以互相看到。例如,对话历史可以互相看到,但当前回复只能看到历史(不能看到未来的回复)。这种掩码机制比 Segment Embedding 更灵活、更细粒度。
-
位置编码:现代模型使用旋转位置编码(RoPE)或 ALiBi 等,使模型能更好地区分不同位置的 token,隐式包含了段落的顺序信息,无需额外嵌入。
-
无显式分隔:在某些架构中,输入和输出只是自然拼接,模型从语义和上下文中自己学习边界,不依赖任何显式的段落标记。
总结来说,Segment Embedding 被更灵活、更通用的特殊 token + 注意力掩码 + 位置编码组合取代,使得模型可以处理任意形式的文本拼接和复杂的对话结构。