当前位置: 首页 > article >正文

语言模型的采样方法

语言模型的采样方法

语言模型的输出为一个向量,该向量的每一维代表着词典中对应词的概率。

在采用自回归范式的文本生成任务中,语言模型将依次生成一组向量并将其解码为文本。将这组向量解码为文本的过程被成为语言模型解码。

解码过程显著影响着生成文本的质量。当前,两类主流的解码方法可以总结为 (1). 概率最大化方法; (2).随机采样方法。

自回归

自回归(Autoregression,简称AR)是一种统计模型,用于描述时间序列数据中各个时间点的值与其之前时间点值之间的关系。在自回归模型中,一个变量的当前值被认为是其过去值的函数,加上一个随机误差项。这种模型用于预测和分析时间序列数据。

基本概念

  1. 时间序列数据:指按时间顺序排列的数据点。
  2. 自回归模型:假设当前值 Y t Y_t Yt 是过去 p p p 个时间点值的线性组合加上一个随机误差项 ϵ t \epsilon_t ϵt。数学表达式为:
    Y t = c + ϕ 1 Y t − 1 + ϕ 2 Y t − 2 + … + ϕ p Y t − p + ϵ t Y_t = c + \phi_1 Y_{t-1} + \phi_2 Y_{t-2} + \ldots + \phi_p Y_{t-p} + \epsilon_t Yt=c+ϕ1Yt1+ϕ2Yt2++ϕpYtp+ϵt
    其中, c c c 是常数项, ϕ 1 , ϕ 2 , … , ϕ p \phi_1, \phi_2, \ldots, \phi_p ϕ1,ϕ2,,ϕp 是模型参数, ϵ t \epsilon_t ϵt 是随机误差项。

模型类型

  1. AR(1):一阶自回归模型,只包含一个滞后项。
    Y t = c + ϕ 1 Y t − 1 + ϵ t Y_t = c + \phi_1 Y_{t-1} + \epsilon_t Yt=c+ϕ1Yt1+ϵt
  2. AR§:p阶自回归模型,包含 p p p 个滞后项。
    Y t = c + ϕ 1 Y t − 1 + ϕ 2 Y t − 2 + … + ϕ p Y t − p + ϵ t Y_t = c + \phi_1 Y_{t-1} + \phi_2 Y_{t-2} + \ldots + \phi_p Y_{t-p} + \epsilon_t Yt=c+ϕ1Yt1+ϕ2Yt2++ϕpYtp+ϵt

参数估计

自回归模型的参数通常通过最小化误差项的平方和来估计,这可以通过最大似然估计(MLE)或最小二乘法(OLS)来实现。

注意事项

  • 自回归模型假设误差项是白噪声,即具有零均值和恒定方差。
  • 模型的阶数 p p p 需要根据数据和问题背景来确定,过高或过低的阶数都可能导致模型拟合不佳。

自回归模型是时间序列分析中的基础工具,通过捕捉数据的自相关性,帮助我们理解和预测时间序列数据的行为。

概率最大化方法

  1. 目标
    • 目标是最大化生成文本 P ( w N + 1 : N + M ) P(w_{N+1}:N+M) P(wN+1:N+M) 的概率,即在给定前文的情况下,找到最有可能的后续词序列。
  2. 公式
    • 生成文本的概率可以表示为:
      P ( w N + 1 : N + M ) = ∏ i = N N + M − 1 P ( w i + 1 ∣ w 1 : i ) = ∏ i = N N + M − 1 o i [ w i + 1 ] P(w_{N+1}:N+M) = \prod_{i=N}^{N+M-1} P(w_{i+1}|w_1:i) = \prod_{i=N}^{N+M-1} o_i[w_{i+1}] P(wN+1:N+M)=i=NN+M1P(wi+1w1:i)=i=NN+M1oi[wi+1]

贪心搜索(Greedy Search)

  1. 初始化
    • 从一个初始状态或初始词开始,通常是特殊的起始符号,如 <s>
  2. 迭代选择
    • 在每一步,模型根据当前的上下文(可能是空的或之前选择的词序列)计算所有可能的下一个词的概率。
  3. 选择概率最大的词
    • 选择概率最高的词作为当前步骤的输出:
      w i + 1 = arg ⁡ max ⁡ w ∈ D o i [ w ] w_{i+1} = \arg\max_{w \in D} o_i[w] wi+1=argmaxwDoi[w]
      其中 w i + 1 w_{i+1} wi+1 是下一步的词, D D D 是词汇表, o i o_i oi 是在给定上下文下计算的输出概率分布。
  4. 更新上下文
    • 将选择的词添加到当前上下文中,并更新模型的状态。
  5. 重复
    • 重复步骤2-4,直到达到终止条件,如特定的结束符号 </s> 或达到最大序列长度。
  6. 问题
    • 贪心搜索只考虑当前步骤中概率最大的词,可能导致后续词的概率都很小,陷入局部最优。
贪心搜索的问题
  • 局部最优
    • 贪心搜索在每一步都选择局部最优的词,这可能导致整个序列的全局最优解被忽略。换句话说,它可能会陷入局部最优,而不是找到全局最优解。
  • 缺乏回溯
    • 贪心搜索不进行回溯,一旦选择了一个词,就会一直沿着这个选择前进,不会考虑其他可能的路径。
  • 忽略长距离依赖
    • 在某些情况下,早期的贪心选择可能会影响序列的长距离依赖关系,使得最终的输出序列质量下降。### 波束搜索(Beam Search)

波束搜索(Beam Search)

波束搜索(Beam Search)是一种在序列生成问题中常用的启发式搜索算法,特别是在自然语言处理领域,如机器翻译、文本摘要等任务中。它旨在找到使得整个序列的概率最大化的词序列。

  1. 初始化
    • 从一个初始状态开始,通常是特殊的起始符号,如 <s>。初始化一个波束,其中包含这个起始状态。
  2. 扩展波束
    • 在每一步 i i i(从 N N N N + M − 1 N+M-1 N+M1),对于波束中的每个状态,生成所有可能的下一个词。
    • 计算每个扩展状态的概率,并选择概率最高的 b b b个状态作为新的波束。这里 b b b 是波束的大小,表示在每一步保留的可能性最高的词的数量。
    • 在每轮预测中保留 b b b 个可能性最高的词,构成波束:
      min ⁡ o i [ w ]  for  w ∈ B i > max ⁡ o i [ w ]  for  w ∈ D − B i \min_{o_i[w] \text{ for } w \in B_i} > \max_{o_i[w] \text{ for } w \in D - B_i} minoi[w] for wBi>maxoi[w] for wDBi
  3. 终止条件
    • 继续扩展波束,直到达到预定的序列长度 M M M 或遇到终止符号 </s>
  4. 选择最优序列
    • 在所有 M M M 个波束中,选择联合概率最大的词序列作为最终输出:
      { w N + 1 , w N + 2 , … , w N + M } = arg ⁡ max ⁡ { w i ∈ B i  for  1 ≤ i ≤ M } ∏ i = 1 M o N + i [ w i ] \{w_{N+1}, w_{N+2}, \ldots, w_{N+M}\} = \arg\max_{\{w_i \in B_i \text{ for } 1 \leq i \leq M\}} \prod_{i=1}^{M} o_{N+i}[w_i] {wN+1,wN+2,,wN+M}=argmax{wiBi for 1iM}i=1MoN+i[wi]
波束搜索的关键点
  • 波束修剪(Beam Pruning):
    • 在每一步,只保留概率最高的 b b b 个状态,这有助于减少计算量并避免无效搜索。
  • 长度归一化
    • 有时,波束搜索会考虑长度归一化,即通过惩罚过长的序列来平衡长度对概率的影响。
  • 多样性
    • 为了增加结果的多样性,可以采用一些技术,如束熵搜索(Beam Entropy Search)或束多样性搜索(Beam Diversity Search)。
波束搜索的优势
  • 全局最优
    • 与贪心搜索相比,波束搜索考虑了多个候选词,更有可能找到全局最优解。
  • 避免局部最优
    • 波束搜索避免了贪心搜索中的局部最优问题,因为它在每一步都考虑了多个可能的下一步。
  • 灵活性
    • 波束搜索的参数(如波束大小 b b b)可以根据具体任务进行调整,以平衡计算成本和结果质量。
概率最大化方法的问题
  1. 平庸文本
    • 概率最大化方法倾向于生成最常见的平庸文本,缺乏多样性和新颖性。
  2. 改进
    • 为了提升生成文本的新颖度和多样性,可以在解码过程中加入随机元素,如随机采样方法。

随机采样方法

为了增加生成文本的多样性,随机采样的方法在预测时增加了随机性。在每轮预测时,其先选出一组可能性高的候选词,然后按照其概率分布进行随机采样,采样出的词作为本轮的预测结果。

当前,主流的 Top-K 采样和 Top-P 采样方法分别通过指定候选词数量划定候选词概率阈值的方法对候选词进行选择。

在采样方法中加入 Temperature 机制可以对候选词的概率分布进行调整。

Top-K 采样

Top-K 采样是一种结合了贪心搜索和随机采样的序列生成方法,它旨在平衡探索(exploration)和利用(exploitation)。这种方法在每轮预测中不是选择概率最高的单个词,而是选择概率最高的 K K K 个词作为候选词集合,然后从这个集合中随机采样一个词作为下一步的输出。

  1. 选择候选词
    • 在每一步 i i i,从所有可能的词中选择概率最高的 K K K 个词作为候选词集合。
  2. 概率归一化
    • 对这 K K K 个候选词的概率进行归一化,使得它们的和为1。这通常通过softmax函数实现,但在这里只对 K K K 个候选词应用,而不是整个词汇表。
  3. 随机采样
    • 根据归一化后的概率分布,从 K K K 个候选词中随机采样一个词作为输出。
Top-K 采样的公式

对于每个候选词 w j w_j wj(其中 j = 1 , 2 , … , K j = 1, 2, \ldots, K j=1,2,,K),归一化的概率 p ( w i + 1 ) p(w_{i+1}) p(wi+1) 计算如下:
p ( w i + 1 ) = ( exp ⁡ ( o i [ w 1 ] T ) ∑ j = 1 K exp ⁡ ( o i [ w j ] T ) , … , exp ⁡ ( o i [ w K ] T ) ∑ j = 1 K exp ⁡ ( o i [ w j ] T ) ) p(w_{i+1}) = \left( \frac{\exp\left(\frac{o_i[w_1]}{T}\right)}{\sum_{j=1}^{K} \exp\left(\frac{o_i[w_j]}{T}\right)}, \ldots, \frac{\exp\left(\frac{o_i[w_K]}{T}\right)}{\sum_{j=1}^{K} \exp\left(\frac{o_i[w_j]}{T}\right)} \right) p(wi+1)= j=1Kexp(Toi[wj])exp(Toi[w1]),,j=1Kexp(Toi[wj])exp(Toi[wK])
然后,根据这个分布随机采样 w i + 1 w_{i+1} wi+1
w i + 1 ∼ p ( w i + 1 ) w_{i+1} \sim p(w_{i+1}) wi+1p(wi+1)
其中:
- o i [ w j ] o_i[w_j] oi[wj] 是第 i i i 轮预测中词 w j w_j wj 的原始概率。
- T T T 是温度参数(temperature),用于控制概率分布的平滑程度。 T T T 的值越大,分布越平滑,值越小,分布越尖锐。

Top-K 采样的优势
  • 平衡探索和利用
    • Top-K 采样通过选择 K K K 个最高概率的词,增加了生成多样性,避免了贪心搜索中的局部最优问题。
  • 控制随机性
    • 通过调整 K K K 的值,可以控制生成过程中的随机性。较小的 K K K 值会增加随机性,而较大的 K K K 值会接近贪心搜索。
  • 灵活性
    • 温度参数 T T T 提供了额外的控制,允许调整概率分布的形状,以适应不同的生成需求。

Top-P 采样

Top-P 采样,也称为 Nucleus 采样,是一种序列生成技术,它不是简单地选择概率最高的 K K K 个词,而是选择累积概率达到某个阈值 p p p 的所有词作为候选词集合。

这种方法旨在生成更多样化和连贯的文本,同时避免贪心搜索的局部最优问题。

  1. 选择候选词
    • 在每一步 i i i,从所有可能的词中选择累积概率达到阈值 (p) 的词作为候选词集合 S p S_p Sp
  2. 概率归一化
    • 对候选词集合 S p S_p Sp 中的词的概率进行归一化,使得它们的和为1。这通常通过softmax函数实现,但在这里只对候选词集合中的词应用。
  3. 随机采样
    • 根据归一化后的概率分布,从候选词集合 S p S_p Sp 中随机采样一个词作为输出。
Top-P 采样的公式

对于每个候选词 w j w_j wj(其中 j = 1 , 2 , … , ∣ S p ∣ j = 1, 2, \ldots, |S_p| j=1,2,,Sp),归一化的概率 p ( w i + 1 ) p(w_{i+1}) p(wi+1) 计算如下:
p ( w i + 1 ) = ( exp ⁡ ( o i [ w 1 ] T ) ∑ j = 1 ∣ S p ∣ exp ⁡ ( o i [ w j ] T ) , … , exp ⁡ ( o i [ w ∣ S p ∣ ] T ) ∑ j = 1 ∣ S p ∣ exp ⁡ ( o i [ w j ] T ) ) p(w_{i+1}) = \left( \frac{\exp\left(\frac{o_i[w_1]}{T}\right)}{\sum_{j=1}^{|S_p|} \exp\left(\frac{o_i[w_j]}{T}\right)}, \ldots, \frac{\exp\left(\frac{o_i[w_{|S_p|}]}{T}\right)}{\sum_{j=1}^{|S_p|} \exp\left(\frac{o_i[w_j]}{T}\right)} \right) p(wi+1)= j=1Spexp(Toi[wj])exp(Toi[w1]),,j=1Spexp(Toi[wj])exp(Toi[wSp])
然后,根据这个分布随机采样 w i + 1 w_{i+1} wi+1
w i + 1 ∼ p ( w i + 1 ) w_{i+1} \sim p(w_{i+1}) wi+1p(wi+1)
其中:

  • o i [ w j ] o_i[w_j] oi[wj] 是第 i i i 轮预测中词 w j w_j wj 的原始概率。
  • T T T 是温度参数(temperature),用于控制概率分布的平滑程度。 T T T 的值越大,分布越平滑,值越小,分布越尖锐。
  • ∣ S p ∣ |S_p| Sp 是候选词集合 S p S_p Sp 的大小。
Top-P 采样的优势
  • 提高多样性
    • 通过选择累积概率达到阈值 (p) 的词,Top-P 采样可以生成更多样化的文本。
  • 控制风险
    • 通过设置阈值 (p),可以控制生成文本的冒险程度,避免生成概率极低的词。
  • 灵活性
    • 温度参数 T T T 提供了额外的控制,允许调整概率分布的形状,以适应不同的生成需求。

Temperature 机制的作用

Temperature 机制是一种调整 Softmax 函数输出概率分布的方法,它通过改变 Softmax 函数中输入的尺度来控制输出概率分布的形状。

这种机制在机器学习和深度学习中被用来控制模型的不确定性和随机性,特别是在生成模型和强化学习中。

  1. 增加随机性:当 Temperature T > 1 T > 1 T>1 时,Softmax 函数的输出分布变得更加平坦,这意味着各个类别的概率更加接近,从而增加了模型输出的随机性。

  2. 减少随机性:当 0 < T < 1 0 < T < 1 0<T<1 时,Softmax 函数的输出分布变得更加集中,这意味着模型更倾向于输出概率最高的类别,从而减少了模型输出的随机性。

Temperature 机制的公式

对于一个给定的输入 o i o_i oi 和类别集合 S p S_p Sp,Softmax 函数的输出 p ( w i + 1 ) p(w_{i+1}) p(wi+1) 可以表示为:

p ( w i + 1 ) = exp ⁡ ( o i [ w 1 ] T ) ∑ j = 1 ∣ S p ∣ exp ⁡ ( o i [ w j ] T ) , … , exp ⁡ ( o i [ w ∣ S p ∣ ] T ) ∑ j = 1 ∣ S p ∣ exp ⁡ ( o i [ w j ] T ) p(w_{i+1}) = \frac{\exp\left(\frac{o_i[w_1]}{T}\right)}{\sum_{j=1}^{|S_p|} \exp\left(\frac{o_i[w_j]}{T}\right)}, \ldots, \frac{\exp\left(\frac{o_i[w_{|S_p|}]}{T}\right)}{\sum_{j=1}^{|S_p|} \exp\left(\frac{o_i[w_j]}{T}\right)} p(wi+1)=j=1Spexp(Toi[wj])exp(Toi[w1]),,j=1Spexp(Toi[wj])exp(Toi[wSp])

其中:
- o i [ w j ] o_i[w_j] oi[wj] 是模型对于第 i i i 个输入和第 j j j 个类别的原始输出(通常是神经网络的最后一层的输出)。
- T T T 是 Temperature 参数,控制概率分布的形状。
- ∣ S p ∣ |S_p| Sp 是类别集合 S p S_p Sp 中的类别数量。
- exp ⁡ \exp exp 是指数函数。

引入 Temperature

在引入 Temperature 机制后,Top-K 采样和 Top-P 采样的候选集分布都受到了 Temperature 参数 T T T 的影响。这两种采样方法都是在生成模型中常用的技术,用于从模型输出的概率分布中选择最可能的候选集。

Top-K 采样

Top-K 采样是一种选择概率分布中前 K K K 个最高概率值的方法。在引入 Temperature 机制后,Top-K 采样的候选集分布可以表示为:

p ( w i 1 + 1 , … , w i K + 1 ) = ( exp ⁡ ( o i [ w 1 i + 1 ] T ) ∑ j = 1 K exp ⁡ ( o i [ w j i + 1 ] T ) , … , exp ⁡ ( o i [ w K i + 1 ] T ) ∑ j = 1 K exp ⁡ ( o i [ w j i + 1 ] T ) ) p(w_{i1+1}, \ldots, w_{iK+1}) = \left( \frac{\exp\left(\frac{o_i[w_{1i+1}]}{T}\right)}{\sum_{j=1}^{K} \exp\left(\frac{o_i[w_{ji+1}]}{T}\right)}, \ldots, \frac{\exp\left(\frac{o_i[w_{Ki+1}]}{T}\right)}{\sum_{j=1}^{K} \exp\left(\frac{o_i[w_{ji+1}]}{T}\right)} \right) p(wi1+1,,wiK+1)= j=1Kexp(Toi[wji+1])exp(Toi[w1i+1]),,j=1Kexp(Toi[wji+1])exp(Toi[wKi+1])

这里:

  • w i 1 + 1 , … , w i K + 1 w_{i1+1}, \ldots, w_{iK+1} wi1+1,,wiK+1 表示选择的前 K K K 个候选。
  • o i [ w j i + 1 ] o_i[w_{ji+1}] oi[wji+1] 是模型对于第 i i i 个输入和第 j j j 个候选的输出。
  • T T T 是 Temperature 参数。
Top-P 采样

Top-P 采样是一种选择累积概率达到 P P P 百分比的候选集的方法。在引入 Temperature 机制后,Top-P 采样的候选集分布可以表示为:

p ( w i 1 + 1 , … , w i ∣ S p ∣ + 1 ) = ( exp ⁡ ( o i [ w 1 i + 1 ] T ) ∑ j = 1 ∣ S p ∣ exp ⁡ ( o i [ w j i + 1 ] T ) , … , exp ⁡ ( o i [ w ∣ S p ∣ i + 1 ] T ) ∑ j = 1 ∣ S p ∣ exp ⁡ ( o i [ w j i + 1 ] T ) ) p(w_{i1+1}, \ldots, w_{i|S_p|+1}) = \left( \frac{\exp\left(\frac{o_i[w_{1i+1}]}{T}\right)}{\sum_{j=1}^{|S_p|} \exp\left(\frac{o_i[w_{ji+1}]}{T}\right)}, \ldots, \frac{\exp\left(\frac{o_i[w_{|S_p|i+1}]}{T}\right)}{\sum_{j=1}^{|S_p|} \exp\left(\frac{o_i[w_{ji+1}]}{T}\right)} \right) p(wi1+1,,wiSp+1)= j=1Spexp(Toi[wji+1])exp(Toi[w1i+1]),,j=1Spexp(Toi[wji+1])exp(Toi[wSpi+1])

这里:

  • w i 1 + 1 , … , w i ∣ S p ∣ + 1 w_{i1+1}, \ldots, w_{i|S_p|+1} wi1+1,,wiSp+1 表示选择的累积概率达到 P P P 百分比的候选集。
  • ∣ S p ∣ |S_p| Sp 是候选集的大小,即累积概率达到 P P P 百分比所需的候选数量。
  • o i [ w j i + 1 ] o_i[w_{ji+1}] oi[wji+1] 是模型对于第 i i i 个输入和第 j j j 个候选的输出。
  • T T T 是 Temperature 参数。
影响

引入 Temperature 机制后,这两种采样方法都会受到 T T T 的影响,从而改变候选集的分布形状:

  • T > 1 T > 1 T>1 时,分布变得更加平坦,增加了随机性,使得更多的候选被选中的可能性增加。
  • 0 < T < 1 0 < T < 1 0<T<1 时,分布变得更加集中,减少了随机性,使得更高概率的候选被选中的可能性增加。

这种调整可以帮助模型在生成过程中平衡探索和利用,或者根据特定的任务需求调整生成的多样性和一致性。


http://www.kler.cn/a/379789.html

相关文章:

  • DP3复现基础知识(一)—— Hydra 库
  • Unreal5从入门到精通之如何解决在VR项目在头显中卡顿的问题
  • 论文阅读-用于点云分析的自组织网络
  • 《AI产品经理手册》——解锁AI时代的商业密钥
  • 使用AWS Lambda构建无服务器应用程序
  • 浅谈QT中Tab键的切换逻辑
  • 企业培训考试系统源码
  • 深入理解Spring、SpringMVC、SpringBoot和Spring Cloud的区别与用法
  • 服务器数据恢复—RAID5阵列硬盘坏道掉线导致存储不可用的数据恢复案例
  • 【前端开发入门】JavaScript快速入门--数据操作
  • [vulnhub] DC:9
  • antdesignvue + AWS-S3实现Minio大文件分片上传
  • qt QPainter详解
  • React面试基础题大全(all)
  • C++ | Leetcode C++题解之第539题最小时间差
  • 创建型模式-建造者模式:构建复杂对象的优雅解决方案
  • springboot 单元测试-各个模块举例
  • 科研绘图系列:R语言多个组合堆积图(stacked plot)
  • 【1个月速成Java】基于Android平台开发个人记账app学习日记——第4天,注册登录逻辑代码
  • 理解 WordPress | 第一篇
  • 占地1.1万平,2亿投资的智能仓储系统:高架库、AGV、码垛机器人……
  • 基于MATLAB疲劳监测系统
  • 【基于LSM的ELF文件安全模块设计】参考
  • iOS 18.2 可让欧盟用户删除App Store、Safari、信息、相机和照片应用
  • PyTorch核心概念:从梯度、计算图到连续性的全面解析(一)
  • docker-compose安装rabbitmq 并开启延迟队列和管理面板插件(rabbitmq_delayed_message_exchange)