本页面介绍了 Hugging Face Transformers 库中可用的各种文本生成策略。它涵盖了用于从语言模型生成文本的核心算法和技术,包括贪婪搜索、束搜索、采样方法以及更专业的方案。
有关生成系统架构和实现细节的信息,请参阅生成系统。有关生成过程中使用的缓存机制的详细信息,请参阅缓存机制。
Transformers 库提供了多种生成策略,用于控制如何从语言模型生成文本。这些策略在 GenerationMixin 类中实现,该类由支持文本生成的模型类继承。
来源
贪婪搜索是最简单的生成策略。在每一步中,它选择概率最高的词元。
优点
缺点
用途
来源
束搜索在每一步中维护多个候选序列(束)。它用可能的下一个词元扩展每个束,并只保留累积概率最高的 Top-k 序列。
优点
缺点
用途
变体
来源
基于采样的生成根据词元的概率分布选择词元,而不是总是选择最可能的词元。
关键参数
优点
缺点
用途
来源
该策略将束搜索与采样相结合,在探索多条路径的同时引入随机性。
用途
来源
对比搜索在词元可能性与其与先前生成内容的差异性之间取得平衡。它有助于避免重复,同时保持连贯性。
关键参数
用途
来源
受限束搜索强制生成包含特定词元或短语,这对于受控文本生成非常有用。
约束类型
用途
来源
辅助生成使用一个较小的“辅助”模型来提出候选词元,然后由主模型进行验证。这可以显著加快生成速度。
关键参数
用途
来源
生成过程可以通过使用 Logits 处理器和调整器进一步定制,它们在词元选择之前修改词元概率。
| 处理器 | 目的 |
|---|---|
MinLengthLogitsProcessor | 防止在最小长度之前生成 EOS 词元 |
NoRepeatNGramLogitsProcessor | 防止 n-gram 重复 |
NoBadWordsLogitsProcessor | 防止生成特定词元 |
RepetitionPenaltyLogitsProcessor | 惩罚重复的词元 |
ForcedBOSTokenLogitsProcessor | 强制在开头生成特定词元 |
ForcedEOSTokenLogitsProcessor | 强制在结尾生成特定词元 |
| 调整器 | 目的 |
|---|---|
TemperatureLogitsWarper | 调整采样的随机性 |
TopKLogitsWarper | 限制为 Top-k 最可能的词元 |
TopPLogitsWarper | 限制为累积概率大于 p 的词元 |
TypicalLogitsWarper | 根据词元的典型性选择词元 |
用途
来源
停止标准决定何时结束生成过程。
| 标准 | 目的 |
|---|---|
MaxLengthCriteria | 在生成特定数量的词元后停止 |
MaxTimeCriteria | 在特定时间后停止 |
EosTokenCriteria | 在生成特定结束词元时停止 |
StopStringCriteria | 在生成特定字符串时停止 |
用途
来源
生成参数可以使用 GenerationConfig 类进行配置,该类可以独立于模型进行保存和加载。
用途
来源
下图说明了 Transformers 库中的完整生成过程流程
来源
生成功能在 GenerationMixin 类中实现,该类由支持文本生成的模型类继承。
来源
Transformers 库提供了一套丰富的生成策略,可以根据不同的文本生成目标进行定制。通过理解和正确配置这些策略,您可以控制确定性与创造性、速度与质量之间的权衡,以及文本生成的其他方面。
有关特定组件的更多详细信息