我会从架构、训练目标、输出形式和任务四个维度比较。GPT 类模型是 Decoder-only,使用 causal self-attention,每个位置只能看当前 token 之前的内容;BERT 类模型是 Encoder-only,使用双向 self-attention,一个位置可以同时利用左右上下文。这里的 decoder-only 是从 Transformer 组件演化来的单栈结构,不代表它必须搭配一个 Encoder。
训练目标上,GPT 做自回归 next-token prediction,把序列概率分解成历史条件下的下一个 token 概率。这个目标与生成过程一致。原始 BERT 的主要目标是 masked language modeling:随机遮住部分 token,让模型结合左右上下文恢复它们;原论文还使用了 next sentence prediction。后续 BERT 变体可以调整目标,但比较时要注明具体版本。
输出形式决定了典型用途。GPT 每一步输出下一 token 分布,反复调用就能生成长文本,所以适合对话、开放式问答、代码、摘要和翻译,也能把示例放进上下文做 in-context learning。摘要和翻译完全可以把源文本与任务指令放在同一个因果前缀里,再生成目标,不需要额外 Encoder。Encoder-decoder 对明确的 source-target 任务仍是一个有价值的选择,但不是 GPT 能否做这些任务的前提。
BERT 一次输出整段中每个 token 的双向上下文表示,通常在 CLS 或 token 表示上接分类、回归、序列标注或检索头。因此它很适合文本分类、NER、抽取式问答、语义匹配和向量编码,推理可以一次完成,不需要逐 token 解码。原始 BERT 并不是自然的长文本生成器。
另一个常见误区是把普通 BERT 直接称为 faithfulness 检查器。BERT 只是预训练编码器,本身不会自动判断摘要是否被来源支持。只有把 BERT 类模型在 NLI、事实一致性或目标领域的判别数据上训练,定义好 entailment、contradiction 等标签,并在域内验证和校准后,它才可以作为核验流水线的一部分;高风险事实仍要回到证据或规则。
选型时,如果输出是开放文本、需要多轮生成或上下文示例,我会优先生成模型;如果输出是固定标签、span、token tag 或 embedding,且更看重吞吐和低延迟,encoder-only 往往更经济。两类模型都能通过微调扩展边界,所以不能粗暴说 GPT 只会生成、BERT 只会理解。最核心差别还是 attention 可见范围、预训练目标和输出接口。
实际比较还应固定任务头和输入长度。一个小型 BERT 编码器在高 QPS 分类上可能比生成式 GPT 更省成本,而需要解释、改写或多轮交互时 GPT 的统一生成接口更合适。不能只按模型新旧选型,要按输出约束和错误代价决定。