基于预训练语言模型的文本生成算法:典型性解码(Typicality Sampling)详解
题目描述
典型性解码(Typical Sampling)是一种用于文本生成的解码策略,旨在从预训练语言模型(如GPT系列)中生成更加符合人类语言“典型性”的文本。该方法基于一个核心理念:人类语言具有“典型性”,即在给定上下文下,高概率的词语不一定是最“自然”或“恰当”的选择,而真正自然的词语是其概率与模型所定义的“信息量”之间达到一种平衡的词语。典型性解码通过一个简洁的数学定义来自动筛选出这类词语,从而在生成文本的流畅性、连贯性和多样性之间取得更好的平衡,尤其有助于减少生成无意义或不相关文本(如重复、逻辑跳跃等)的问题。
解题过程详解
步骤1:理解问题本质与解码背景
当我们使用一个预训练好的语言模型(如GPT-3)生成文本时,模型每一步都会输出下一个词在整个词表上的概率分布 \(P(x | context)\)。我们需要一个策略从这个分布中选取下一个词。常见的策略有:
- 贪心搜索 (Greedy Search):直接选择概率最大的词。缺点是容易导致重复、单调的文本。
- 随机采样 (Random Sampling):根据概率分布随机采样。缺点是不可控,可能生成低质量、不连贯的文本。
- Top-k 和 Top-p (Nucleus) 采样:先筛选出概率和达到阈值的一部分候选词,再进行采样。这种方法提升了多样性和质量,但仍可能选出“典型性”不足的词语。
关键问题:什么是一个“恰当”的词?典型性解码从“信息论”角度给出了一个定义:一个在人类语言中“典型”的词,其信息量应该是接近整个分布的“熵”的。信息量 \(I(x) = -\log P(x)\) 衡量了一个词出现的意外程度。概率极高的词(如“the”、“is”)信息量太低,显得平淡;概率极低的词(如生僻词)信息量太高,显得突兀。“典型”的词应该处于中间地带。
步骤2:定义“典型性”的数学标准
典型性解码引入了“典型集合”的概念。对于一个概率分布 \(P\),其香农熵定义为 \(H(P) = -\sum_x P(x) \log P(x)\),它衡量了平均信息量。
对于一个候选词 \(x\),其对数概率(即负信息量)与分布的熵之间的绝对差值,可以衡量其典型性:
\[\left| -\log P(x) - H(P) \right| \]
这个差值越小,说明该词的信息量越接近这个上下文下语言的平均信息量,也就越“典型”。
为了操作方便,典型性解码设定一个阈值 \(\tau\)(通常在0.9到1.0之间的小数,常见值为0.95)。定义典型集合为:
\[\mathcal{A}_\tau = \left\{ x : \left| -\log P(x) - H(P) \right| < -\log \tau \right\} \]
其中 \(-\log \tau\) 是一个小的正数。这个条件等价于:
\[P(x) \in \left[ e^{-H(P) - (-\log \tau)}, e^{-H(P) + (-\log \tau)} \right] = \left[ \tau \cdot e^{-H(P)}, \frac{1}{\tau} \cdot e^{-H(P)} \right] \]
解读:我们只考虑那些概率值落在以 \(e^{-H(P)}\) 为中心、以 \(\tau\) 控制宽度的一个区间内的词。\(e^{-H(P)}\) 可以被看作是“典型概率”的参考值。\(\tau\) 越接近1,区间越窄,筛选越严格。
步骤3:典型性解码的具体算法流程
给定一个已经生成的部分文本(上下文),在每一步生成下一个词时,执行以下子步骤:
-
计算概率分布与熵:将当前上下文输入语言模型,得到下一个词在整个词表 \(V\) 上的概率分布 \(P = (p_1, p_2, ..., p_{|V|})\)。然后计算这个分布的香农熵 \(H(P) = -\sum_{i=1}^{|V|} p_i \log p_i\)。
-
构建候选集:对于词表中的每个词 \(w_i\),计算其信息量 \(I(w_i) = -\log p_i\)。判断其是否满足典型性条件:\(|I(w_i) - H(P)| < -\log \tau\)。将满足条件的所有词加入候选集 \(\mathcal{A}_\tau\)。
-
重归一化与采样:将候选集 \(\mathcal{A}_\tau\) 中所有词的概率进行重归一化,得到新的采样分布:
\[ P_\tau (w) = \begin{cases} P(w) / Z, & \text{if } w \in \mathcal{A}_\tau \\ 0, & \text{otherwise} \end{cases} \]
其中 $ Z = \sum_{w \in \mathcal{A}_\tau} P(w) $ 是归一化常数。
然后,从这个新的分布 $ P_\tau $ 中进行随机采样,得到下一个词。
- 迭代:将采样的词添加到生成序列的末尾,作为新的上下文,重复步骤1-3,直到生成结束符或达到指定长度。
步骤4:算法特性与优势分析
- 自动筛选:与需要手动设置K值(Top-k)或p值(Top-p)不同,典型性解码的筛选标准是基于模型自身输出的分布特性(熵)动态计算的,更具自适应性。
- 避免极端:它同时排除了概率极高(信息量低,可能导致乏味、重复)和概率极低(信息量高,可能导致不连贯、胡说)的词语。例如,在生成故事时,它会避免反复使用“然后”,也会避免突然插入一个完全无关的专业术语。
- 理论支撑:基于信息论中的“典型集”概念,有较强的数学解释力。在信息论中,一个随机过程的典型序列是指那些自信息量接近熵的序列,这些序列在长期统计中占据了绝大部分可能性。典型性解码是这一思想在单步生成中的应用。
- 控制参数少:主要参数是 \(\tau\)。增大 \(\tau\)(如从0.95到0.99)会使筛选条件更严格,候选集更小,生成文本更保守、更可预测;减小 \(\tau\) 会使条件更宽松,候选集更大,生成文本更多样,但也可能包含更多噪声。
步骤5:与Top-p(Nucleus)采样的对比
Top-p采样是选取概率累积和达到p的最小词集。它与典型性解码的关键区别在于:
- 筛选逻辑:Top-p基于概率值的降序累积,目标是覆盖分布的主体质量。典型性解码基于信息量与熵的接近程度,目标是找到统计上“典型”的词语。
- 行为差异:在分布非常尖锐(有一个词概率极高)时,Top-p可能只包含极少数词,而典型性解码可能因为高概率词的信息量远低于熵而将其排除。在分布非常平坦(长尾)时,Top-p可能包含大量低概率词,而典型性解码能有效地截断长尾,只保留中间部分。这使得典型性解码在理论上能更稳定地生成高质量文本。
总结
典型性解码是一种基于信息论原理的、优雅的文本生成解码策略。它通过比较每个候选词的信息量与整个预测分布的熵,动态地构造一个“典型”候选集,从而自动平衡生成文本的确定性与随机性、保守与冒险,是继Top-k、Top-p之后一种重要且理论基础扎实的解码方法改进。