生成式模型在解码时,通常的策略是根据概率分布依次生成下一个token。然而,如果生成的内容并不好,一般是没法回头修改的,或者很难自动调整生成的方向。
针对这一问题,分享一下今天这个项目,Backtrack Sampler。通过设计自定义的采样策略,允许模型在生成过程中进行回溯和调整,避免不理想的输出。
简单来说,它让AI在生成内容时有“反悔”的机会,从而生成更符合预期的结果。目前内置了5个策略,当然可以很轻松的自定义策略。支持transformers、llama-cpp等框架
内置策略如下:
1. Anti-Slop Strategy
Anti-Slop Strategy 可以用于消除模型生成的某些不合适或不想要的短语。当生成的内容包含了某些禁用的短语(称为“slop”)时,策略会回溯并生成替代内容。这个策略的设计灵感来源于 antislop-sampler,但功能更加简化。不过如果需求很复杂,推荐使用原始的 antislop-sampler。
2. Creative Writing Strategy 创意写作策略
Creative Writing Strategy 主要用于提升生成内容的创意性。它通过抑制那些概率较高的token,鼓励模型生成更不常见的词汇,从而使生成的文本更具创造性。在生成过程中,如果模型的下一个token的概率分布过于“平坦”(即多个token的概率相近),策略还会回溯并重新生成,以避免生成过于随机和无意义的文本。
3. Debug Strategy 调试策略
Debug Strategy是最简单的策略,主要用于调试。它不会对生成过程进行复杂的干预,更多是作为一个框架,帮助开发者更好地理解模型生成的logits和概率分布,并可以作为创建新策略的起点。
4. Human Guidance Strategy 人工引导策略
Human Guidance Strategy 引入了人类在生成过程中的干预。用户可以看到模型生成的多个候选token,并手动选择下一个token。这种方式非常适合希望深入理解模型能力或对生成内容进行高度控制的场景。
5. Adaptive Temperature Strategy 自适应温度策略
Adaptive Temperature Strateg会根据生成过程中每个token的概率分布动态调整模型的温度参数。温度参数决定了生成内容的多样性:高温度会增加生成的随机性,而低温度则会使模型更倾向于选择高概率的token。这种动态调整可以帮助模型在不同上下文中生成更合适的内容。
如何创建自定义策略?
Backtrack Sampler 的核心优势之一就是它的开放性和可扩展性。你可以根据自己的需求设计新的采样策略。
例如,如果你想创建一个新的策略,可以这样:
from backtrack_sampler.strategy.base_strategy import BaseStrategy
class MyCustomStrategy(BaseStrategy):
def __init__(self, provider):
super().__init__(provider)
# 初始化你的自定义逻辑
def process_logits(self, logits):
# 在这里处理logits并返回修改后的logits
return logits
项目地址:https://github.com/Mihaiii/backtrack_sampler/blob/main/README.md