菜单

生成系统

相关源文件

Hugging Face Transformers 中的生成系统为语言模型的文本生成提供了全面的框架。它处理各种生成策略,包括贪婪搜索、束搜索、采样方法以及对比搜索和辅助生成等专门技术。

本文档涵盖了生成系统的核心组件、它们如何交互以及如何有效使用它们。有关特定模型实现的信息,请参阅模型实现。有关训练模型的信息,请参阅训练系统

概述

生成系统通过顺序预测token来使模型生成文本。它主要通过GenerationMixin类实现,该类提供了大多数模型继承的generate()方法。该系统由几个关键组件组成:

  1. 生成策略:用于选择下一个token的不同算法
  2. Logits处理器:在生成过程中修改token概率的组件
  3. 停止标准:决定何时停止生成的条件
  4. 缓存机制:用于高效存储和重用键值对的系统
  5. 输出格式:包含生成序列和元数据的结构化输出

来源

生成Mixin

GenerationMixin类是生成系统的核心组件。它提供了大多数模型继承的generate()方法以执行文本生成。

generate()方法高度可配置,支持各种参数来控制生成过程。这些参数可以直接提供给方法,也可以通过GenerationConfig对象提供。

GenerationMixin 的主要特性

  • 支持多种生成策略(贪婪、采样、束搜索)
  • 处理仅解码器模型和编码器-解码器模型
  • 管理缓存以实现高效生成
  • 通过可定制的处理器处理 logits
  • 应用停止标准以确定何时结束生成
  • 返回包含生成序列和可选元数据的结构化输出

来源

生成策略

生成系统支持多种策略,用于在生成过程中选择下一个token

在每个步骤中选择概率最高的token。这是最简单、最快的策略,但可能无法产生最多样化或高质量的输出。

维护多个候选序列(束),并选择累积概率最高的序列。这通常比贪婪搜索产生更好的结果,但计算成本更高。

采样

根据概率分布随机选择token。这引入了随机性,可以产生更多样化的输出。

通过惩罚与先前生成内容过于相似的token来平衡高概率token与多样性。

辅助生成

使用一个较小的“辅助”模型生成候选token,然后由主模型验证,从而加快生成速度。

来源

Logits处理器

Logits处理器在token选择之前修改预测分数(logits)。它们可用于在生成过程中实现各种约束和偏差。

常用Logits处理器

处理器目的
MinLengthLogitsProcessor在达到最小长度之前阻止EOS token
TemperatureLogitsWarper通过缩放logits调整token概率
TopKLogitsWarper只保留概率最高的top-k个token
TopPLogitsWarper保留累积概率小于等于top_p的token
RepetitionPenaltyLogitsProcessor惩罚重复的词元
NoRepeatNGramLogitsProcessor防止n-gram重复
ForcedBOSTokenLogitsProcessor在开头强制使用特定token
ForcedEOSTokenLogitsProcessor在结尾强制使用特定token

The LogitsProcessorList类管理一个logits处理器列表,并按顺序将它们应用于模型的输出logits。

来源

停止标准

停止标准决定何时停止生成过程。可以使用StoppingCriteriaList组合多个标准。

常用停止标准

标准目的
MaxLengthCriteria当输出达到最大长度时停止
EosTokenCriteria当生成EOS token时停止
MaxTimeCriteria在指定时间限制后停止
StopStringCriteria当生成特定字符串时停止

来源

缓存机制

缓存机制存储先前前向传播中的键值对,以避免在自回归生成过程中进行冗余计算。Transformers库提供了多种针对不同用例优化的缓存实现。

缓存类型

缓存类型描述最佳用途
DynamicCache随着token生成动态增长通用用途,可变长度输出
StaticCache预分配固定大小的张量内存高效,固定上下文长度
SlidingWindowCache维护近期token的窗口在有限内存下进行长上下文生成
HybridCache对不同层使用不同的缓存类型具有异构层的模型
QuantizedCache以更低精度存储值内存受限环境

来源

生成输出类型

生成系统提供结构化输出类型来组织生成结果。输出类型取决于生成策略和模型类型。

输出类型提供了一种结构化方式来访问生成的序列以及分数、注意力权重和隐藏状态等可选元数据。

来源

生成配置

GenerationConfig类提供了一种集中式方法来配置生成参数。它可以从模型的配置中加载,也可以单独创建。

关键配置参数包括

参数描述
max_length生成序列的最大长度
max_new_tokens要生成的新token的最大数量
do_sample是否使用采样而不是贪婪解码
num_beams束搜索的束数
temperature采样的温度
top_k为top-k采样保留的最高概率token的数量
top_ptop-p采样的累积概率阈值
repetition_penalty重复token的惩罚
no_repeat_ngram_size防止重复的n-gram大小
cache_implementation生成过程中使用的缓存类型

来源

生成过程流程

下图说明了生成过程的完整流程

来源

高级特性

候选生成

生成系统支持可以提高生成速度和质量的候选生成技术

  1. 辅助生成:使用一个较小的“辅助”模型生成候选token,然后由主模型验证。
  2. 提示查找:根据训练期间看到的相似提示生成候选。
  3. 推测解码:一次性预测多个token,然后进行验证。

来源

受限生成

生成系统支持受限生成,其中输出必须包含特定短语或遵循特定模式

  1. 强制词汇:强制模型在输出中包含特定词汇。
  2. 短语约束:确保特定短语出现在输出中。
  3. 析取约束:允许存在多个替代约束。

来源

与其他系统集成

生成系统与Transformers库的其他组件集成

Pipeline集成

生成系统被text-generation管道使用,该管道提供了文本生成的高级接口

量化集成

生成系统支持量化KV缓存,以减少生成过程中的内存使用

来源

结论

Hugging Face Transformers 中的生成系统为语言模型的文本生成提供了灵活而强大的框架。它支持各种生成策略、logits处理器、停止标准和缓存机制,以优化质量和性能。

要点

  1. GenerationMixin类是提供generate()方法的中心组件。
  2. 生成策略包括贪婪搜索、束搜索、采样、对比搜索和辅助生成。
  3. Logits处理器修改token概率以控制生成行为。
  4. 停止标准决定何时结束生成。
  5. 缓存机制通过存储和重用键值对来优化性能。
  6. GenerationConfig类提供了一种集中式方法来配置生成参数。

通过理解这些组件及其交互方式,您可以有效地使用和自定义生成系统以满足您的特定需求。