基于预训练语言模型的文本生成算法:重新归一化解码(Renormalized Decoding)详解
1. 题目描述
“重新归一化解码”是一种在自然语言生成任务中使用的解码策略。当使用基于采样的方法(如核采样、Top-k采样)从大型预训练语言模型(如GPT系列)生成文本时,模型会输出一个词汇表上所有可能词的概率分布。标准的采样方法会直接从这个分布中采样,但有时这个分布可能包含一些概率极低的“长尾”词汇,它们的总概率和质量可能不理想。重新归一化解码的核心思想是:在每次生成步骤中,对模型的原始概率分布进行一种“再加工”——先根据一个准则(如设置一个概率阈值)筛选出一个候选词子集,然后仅在这个子集上重新计算概率分布并进行采样。其目标是在保持生成文本多样性的同时,提高生成文本的连贯性和质量,是一种试图在“探索”(多样性)和“利用”(质量)之间取得更好平衡的解码技术。
2. 背景与动机
在文本生成中,解码策略至关重要。贪心搜索(Greedy Search)会导致重复和乏味,而随机采样(Random Sampling)又可能产生不连贯或无意义的文本。常见的改进策略如Top-k采样(只从概率最高的k个词中采样)和核采样(Top-p采样,从累积概率达到p的最小词集中采样)被广泛使用。
然而,这些方法存在一个潜在问题:筛选出的候选词集合的概率质量可能不稳定。例如,在核采样中,有时为了达到累积概率p,可能不得不纳入一些概率极低的词;有时又可能只用了几个高概率词就达到了p,导致候选集过小,多样性不足。直接从这个动态大小的集合中按原始比例采样,可能无法最优地平衡质量和多样性。重新归一化解码试图通过一个额外的“重新计算概率”步骤,来更精细地控制这个过程。
3. 算法核心思想
重新归一化解码可以看作是一个两阶段的采样过滤器:
- 第一阶段:候选集生成。使用一个初步的筛选规则(通常基于原始概率),从整个词汇表V中选出一个候选词子集C。这个规则可以是:
- 设定一个绝对概率阈值
tau,只保留概率大于tau的词。 - 设定一个相对比例,保留概率最高的前
k个词(类似于Top-k)。 - 使用累积概率达到
p的最小词集(类似于核采样)。
- 设定一个绝对概率阈值
- 第二阶段:概率重新分配与采样。不是直接从候选集C中按照它们的原始概率比例进行采样。而是,将候选集C中所有词的原始概率值进行“重新归一化”,即,计算每个候选词在C这个子集内的新的概率分布,然后从这个新的分布中进行采样。
“重新归一化”的数学表达:
设模型对下一个词预测的原始概率分布为 \(P(w|context)\),候选集为 \(C\)。
重新归一化后的分布 \(P_{renorm}(w|context)\) 计算如下:
\[P_{renorm}(w|context) = \begin{cases} \frac{P(w|context)}{Z}, & \text{if } w \in C \\ 0, & \text{otherwise} \end{cases} \]
其中,\(Z = \sum_{w' \in C} P(w'|context)\) 是候选集C中所有词原始概率的总和,这个操作确保了 \(P_{renorm}\) 在候选集C上是一个合法的概率分布(总和为1)。
4. 算法步骤详解
让我们以“基于概率阈值的重新归一化解码”为例,详细拆解其每一步。假设我们有一个预训练语言模型(如GPT-2),词汇表大小为|V|,当前已生成的上文为 \(x_{
步骤1:获取原始概率分布
模型接收上文 \(x_{
步骤2:应用初步筛选,生成候选集C
设定一个概率阈值 \(\tau\)(例如,τ = 1e-4 或 1e-5)。遍历词汇表中的每个词 \(w_i\),如果其原始概率 \(P_{original}(w_i | x_{
\[C = \{ w_i | P_{original}(w_i | x_{
这个步骤过滤掉了那些概率极低的、可能是噪声的词汇。阈值 \(\tau\) 是一个超参数,控制着候选集的“严格”程度。τ 越小,C越大,多样性潜力越高,但噪声风险也增加;τ 越大,C越小,生成更保守,但可能过于僵化。
步骤3:重新归一化概率分布
计算候选集C中所有词的原始概率之和:
\[Z = \sum_{w_j \in C} P_{original}(w_j | x_{
然后,为C中的每一个词计算新的、重新归一化后的概率:
\[P_{renorm}(w_i | x_{
对于不在C中的词,其概率设为0。P_renorm 现在是在集合C上的一个标准概率分布。
关键理解:这一步是算法的核心。它改变了候选词之间的相对权重。在标准的核采样中,采样是基于原始概率,只是将集合外的词概率置零。而在重新归一化中,我们放大了候选集内词的概率。例如,假设有两个高质量候选词A和B,原始概率分别为0.4和0.1,还有一个低质量词C概率为0.001但被阈值过滤掉了。在标准核采样(C被过滤)中,采样时A和B的相对概率是4:1。在重新归一化中,Z=0.5,A的新概率是0.8,B是0.2,相对概率变成了4:1吗?等等,计算一下:0.4/0.5=0.8, 0.1/0.5=0.2,比例依然是4:1。看起来比例没变? 对,当筛选规则是基于概率阈值时,重新归一化不会改变候选集内词之间的相对概率比例。那么它的意义是什么?
意义在于与“动态大小筛选”的结合。如果筛选规则是“保留概率最高的k个词”(Top-k),那么重新归一化也不会改变比例。但是,如果筛选规则是“累积概率达到p的最小集合”(核采样/Top-p),情况就不同了。在核采样中,集合大小是动态的,目的是包含恰好累积概率超过p的最小词集。直接在这个动态集合上按原始概率采样,意味着最后加入的那个“刚好使累积概率超过p”的词,即使其概率远小于集合内其他词,仍可能以一定的概率被采样到。重新归一化后,每个词被选中的概率与其原始概率成正比,与集合的划分点无关。虽然数学上重新归一化不改变相对比例,但其概念上的清晰性在于:它明确地将“筛选候选集”和“在候选集内分配采样权重”两个步骤分开了。更重要的一个变体是对重新归一化后的概率进行进一步的调整,比如应用温度调节(Temperature Scaling)。
步骤4:采样生成下一个词
从重新归一化后的分布 \(P_{renorm}\) 中进行随机采样,选取一个词 \(w_t\)。常用的方法是多项式采样(Multinomial Sampling)。
步骤5:迭代
将生成的词 \(w_t\) 加入到上文序列中,形成新的上文 \(x_{<eos>)或达到最大生成长度。
5. 与相关技术的对比
- 与核采样(Top-p)的关系:可以认为,重新归一化解码是核采样的一种更一般化的视角或一个可选的后处理步骤。标准的核采样算法本身就包含了“在动态集合上重新计算概率”的隐含步骤(因为它是在这个集合上采样)。重新归一化解码将其显式化,并且允许在重新归一化之前或之后加入其他操作(如调节温度)。
- 与温度调节(Temperature Scaling)的结合:这是重新归一化解码的常见且强大的扩展。在步骤3中,我们可以在重新归一化之前,先对原始概率分布应用温度调节。公式为:
\[ P_{temp}(w_i) = \frac{\exp(l_i / T)}{\sum_j \exp(l_j / T)} \]
其中 $ l_i $ 是logits,T是温度参数(T>0)。然后再对这个经过温度调节后的分布 $ P_{temp} $ 进行候选集筛选和重新归一化。**低温(T<1)会使分布更尖锐(鼓励高质量、高概率词),高温(T>1)会使分布更平滑(鼓励多样性)。** 将温度调节与重新归一化结合,可以更精细地控制生成文本的质量-多样性权衡。
6. 总结
重新归一化解码并非一个全新的、革命性的解码算法,而是一种增强现有采样方法(特别是核采样)的概念框架和实现技巧。它通过明确区分“候选词筛选”和“概率再分配”两个阶段,提供了更强的可控性。其核心价值在于:
- 概念清晰:将解码过程模块化,便于理解和调整。
- 灵活性强:易于与温度调节、重复惩罚、长度惩罚等其他解码控制技术结合使用。
- 提升稳定性:通过过滤低概率噪声词,并可能在重新归一化后应用温度调节,可以使采样过程更稳定,减少生成低质量文本片段的几率。
在实际应用中,许多现代文本生成库(如Hugging Face的transformers)中的generate函数,当你同时使用do_sample=True、top_p<1.0和temperature!=1.0等参数时,其内部执行流程就蕴含了重新归一化解码的思想。理解这一算法,有助于你更精准地调整这些超参数,以获得更符合需求的生成结果。