资讯动态

Verbalized Sampling:无需训练,用提示词将大模型输出多样性提升2-3倍

发布时间:2026/10/26 23:10:50 来源:尧图企业网站定制
1. 项目概述一个简单提示词如何让大模型输出多样性提升2-3倍如果你用过ChatGPT、Claude或者任何主流大模型大概率遇到过这样的场景你让模型“讲个笑话”它翻来覆去就是那几个老梗你让它“写个关于熊的短故事”它总是倾向于生成最安全、最主流、最“典型”的那个版本。这种现象在学术上被称为“模式崩溃”它让大模型的输出变得单调、可预测极大地限制了其在创意写作、社会模拟、合成数据生成等需要丰富多样性的任务中的应用潜力。今天要聊的这个项目Verbalized Sampling就是为了解决这个问题而生的。它不是什么复杂的算法也不是需要重新训练模型的技术而是一个极其简单、却异常有效的提示词策略。简单来说它的核心思想是与其让模型直接生成一个答案不如让它先生成多个可能的答案并为每个答案“口头”赋予一个概率然后我们再从这个概率分布中进行采样。这个听起来有点“反直觉”的操作在论文和实践中被证实能将大模型输出的多样性提升2到3倍而且不牺牲回答的质量。这个项目最吸引我的地方在于它的“四无”特性无需训练纯提示工程、模型无关GPT、Claude、Gemini、Llama通吃、与温度参数正交可以和现有的温度调节配合使用、任务通用从写诗到生成对话数据都有效。这意味着任何一个开发者或研究者今天就可以在自己的项目里用上它成本几乎为零。接下来我将结合自己的实践经验从原理到实操为你完整拆解这个技术并分享一些官方文档里没写的“踩坑”心得。2. 核心原理拆解为什么让模型“说出概率”就能打破僵局要理解Verbalized Sampling为什么有效我们得先回到大模型生成文本的基本机制以及“模式崩溃”到底是怎么发生的。2.1 大模型的“安全区”与模式崩溃当我们给大模型一个提示比如“讲个笑话”模型内部实际上是在计算一个庞大的概率分布。它遍历词汇表为下一个可能出现的词计算概率。在标准的“贪婪解码”或“核采样”下模型倾向于选择那些概率最高的路径。问题在于大语言模型在预训练和指令微调过程中被灌输了大量关于“什么是好回答”的偏好。这些偏好使得模型对于许多开放式问题都存在一个或几个概率显著更高的“安全答案”。例如对于“熊的故事”模型可能认为“一只熊在森林里找蜂蜜”这个叙事路径的概率远高于“一只熊在都市学习编程”。尽管后者在逻辑上完全可能但因其在训练数据中不常见模型会为其分配极低的概率在常规采样中几乎不可能被选中。这就导致了输出的高度同质化即模式崩溃。2.2 Verbalized Sampling 的工作机制Verbalized Sampling 巧妙地绕开了这个陷阱。它的操作分为两步概率显性化我们通过特定的提示词要求模型一次性生成K个例如5个可能的回答并且必须为每个回答附上一个自我评估的概率值。提示词会特别强调要从概率分布的“尾部”进行采样即选择那些概率较低例如小于0.10的答案。这个步骤的关键在于它利用了模型“自我反思”或“元认知”的能力。当模型被要求评估自己多个输出的可能性时它被迫去探索和表达那些在单次生成中被抑制的、低概率但合理的选项。外部重采样我们拿到了一个由模型自己构建的、包含概率的候选答案集合{ (答案1, p1), (答案2, p2), ... }。此时我们不再相信模型第一次的“选择”而是根据这些概率值或对其进行某种变换如取负对数作为“能量”在外部重新进行一次采样从而选定最终输出。这相当于进行了一次“重加权”。模型内部的一次采样可能偏向安全答案但当我们把多个低概率选项摆上台面并依据其相对概率进行二次选择时那些有创意、非主流的答案就有了被选中的机会。2.3 与温度参数的协同与区别很多人会问这和调高temperature参数有什么区别提高温度确实可以增加随机性但它是一种“盲目的”随机可能会损害文本的连贯性和质量例如出现语法错误或逻辑混乱。Verbalized Sampling 与之是正交的可以结合使用温度参数作用于模型内部下一个词预测的概率分布使其更平坦或更尖锐。Verbalized Sampling作用于模型输出的完整答案层面在多个已生成的、语法通顺的答案中进行选择。你可以先通过Verbalized Sampling获得一组高质量、多样化的候选答案再结合适当的温度参数进行最终采样从而在多样性和质量之间取得更精细的平衡。我的实测经验是在创意写作任务中VS temperature0.8的效果远好于单纯将temperature调到1.2。3. 从零开始实操三种使用方式详解理论说再多不如动手一试。Verbalized Sampling 的使用门槛极低下面我为你梳理了三种从易到难的使用方式并附上详细的代码和避坑指南。3.1 方式一纯手动提示词零代码这是最快捷的体验方式适合任何人在网页版ChatGPT、Claude等界面中直接尝试。基础模板直接将以下提示词粘贴到聊天框然后提出你的问题。instructions Generate 5 responses to the user query, each within a separate response tag. Each response must include a text and a numeric probability. Please sample at random from the tails of the distribution, such that the probability of each response is less than 0.10. /instructions [你的问题例如Tell me a short story about a bear.]实操示例与解析操作在Claude 3.5 Sonnet中我输入了上述提示词将问题部分替换为“写一句关于秋天的七言诗”。模型回复response text枫红露白雁南飞独倚危楼送落晖。/text probability0.07/probability /response response text稻浪千重金满地农人笑里说丰年。/text probability0.08/probability /response response text夜来秋雨洗空碧晓看庭梧一叶新。/text probability0.06/probability /response ...手动采样我得到了5句诗及其概率。我可以简单地随机选一个或者倾向于选择概率最低的可能最独特。我选择了概率为0.06的第三句。注意事项与心得概率值可能不准确模型自我报告的概率probability0.06/probability是它的一种“自信度”估计并非严格的数学概率。它的核心作用是提供一个相对比较的尺度。我们利用的是“概率低的答案可能更独特”这一趋势而不是绝对值。格式化要求必须严格要求模型用特定的XML标签response,text,probability输出至关重要。这保证了输出的结构性便于我们或后续代码进行解析。如果模型回复格式混乱可以重申要求。“尾部采样”指令是关键“sample at random from the tails of the distribution, such that the probability of each response is less than 0.10”这句指令直接引导模型去挖掘那些非主流的选项。没有这个指令模型可能会列出5个高概率的、相似的答案。适用于系统提示词对于API调用你可以将instructions.../instructions里的内容放到系统提示词中这样用户每次的提问都会自动触发多样化生成流程。3.2 方式二使用官方Python包推荐用于生产对于需要集成到应用程序或进行批量实验的开发者使用官方verbalized-sampling包是最高效的选择。安装与基础使用pip install verbalized-samplingimport os from verbalized_sampling import verbalize # 设置API密钥支持OpenAI和OpenRouter os.environ[“OPENAI_API_KEY”] “your-api-key-here” # 核心函数调用 dist verbalize( prompt“为一个新咖啡品牌起个名字” k5, # 生成5个候选答案 tau0.10, # 目标概率阈值从概率小于0.1的尾部采样 temperature0.9, # 模型生成时的温度 model“gpt-4o” # 指定模型 ) # 查看所有候选 for i, resp in enumerate(dist.responses): print(f“选项 {i1}: {resp.text} (概率: {resp.probability:.3f})”) # 从分布中采样一个最终结果 selected_name dist.sample(seed42) # 固定种子可复现 print(f“\n最终选中的品牌名: {selected_name.text}”)高级功能与集成该库的强大之处在于提供了丰富的后处理采样策略和框架集成。from verbalized_sampling import verbalize from verbalized_sampling.sampling import sample_top_p, sample_mirostat # 1. 使用不同的采样器 dist verbalize(“写一个科幻故事开头”, k7, tau0.15) # 默认是依概率比例采样 result1 dist.sample() # 使用Top-p采样从概率累积和达到p的候选集中均匀采样 result2 sample_top_p(dist, p0.8) # 使用Mirostat采样尝试控制输出的“惊喜度” result3 sample_mirostat(dist, tau2.0) # 2. LangChain集成 from langchain_openai import ChatOpenAI from verbalized_sampling.integrations.langchain import VerbalizedSamplingLLM base_llm ChatOpenAI(model“gpt-4o”, temperature0.9) vs_llm VerbalizedSamplingLLM(llmbase_llm, k5, tau0.1) # 现在vs_llm可以像普通LangChain LLM一样使用但输出是多样化的 chain vs_llm | StrOutputParser() response chain.invoke(“用一句话描述未来城市”)踩坑实录API成本与延迟由于需要生成K个回答API调用消耗的token数大约是直接提问的K倍耗时也更长。在批量任务中需要做好预算和超时管理。建议对于非实时任务可以适当增大k如10以获得更丰富的分布对于实时交互k3或4可能是质量与速度的平衡点。模型兼容性虽然号称模型无关但不同模型对“概率”的理解和输出格式的遵循程度不同。GPT-4/4o、Claude 3.5系列表现最佳。一些开源模型如某些版本的Llama可能无法稳定输出格式正确的概率值。解决方案在封装调用时添加重试逻辑和格式校验函数如果解析失败可以回退到直接采样或提示模型重新生成。tau参数的选择tau概率阈值是个超参数。论文默认用0.1但我的经验是对于非常开放的任务如“想一个创意点子”tau0.05可能迫使模型想出更奇特的东西对于需要一定合理性的任务如“生成客户服务回复”tau0.15或0.2可能更安全。需要根据任务微调。3.3 方式三复现论文实验与深度定制如果你是研究者或者想在自己的领域彻底验证、定制这个方法项目的代码库提供了完整的实验脚本。环境搭建与实验复现# 1. 克隆仓库 git clone https://github.com/CHATS-lab/verbalized-sampling.git cd verbalized-sampling # 2. 创建虚拟环境并安装依赖 python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -e .[dev] # 安装开发依赖包括实验脚本 # 3. 运行创意写作实验对比直接采样 vs VS python scripts/tasks/run_poem.py \ --model gpt-4o \ # 指定模型 --methods direct vs_standard \ # 对比方法直接采样 vs 标准VS --num-responses 50 \ # 每种方法生成50个样本 --output-dir ./results/poem运行后脚本会自动生成诗歌并计算多样性指标如Unigram/Bigram重复率、语义多样性等输出对比报告。自定义任务模板项目框架允许你轻松定义新任务。以创建一个“生成广告标语”的任务为例# 在 verbalized_sampling/tasks/ 下新建一个文件 ad_slogan.py from dataclasses import dataclass from verbalized_sampling.tasks.base import Task, TaskExample dataclass class AdSloganTask(Task): name: str “ad_slogan_generation” system_prompt: str “You are a creative copywriter.” # 定义用户提示词模板 user_prompt_template: str “””Generate an advertising slogan for a product that is {product_description}. The slogan should be catchy and no longer than 10 words.””” def make_example(self, product_description: str) - TaskExample: # 构建具体的提示词 user_prompt self.user_prompt_template.format(product_descriptionproduct_description) return TaskExample( task_nameself.name, system_promptself.system_prompt, user_promptuser_prompt, # 可以在这里指定评估指标如唯一性、吸引力评分需自己实现评估函数 metadata{“product”: product_description} ) # 在实验脚本中调用 task AdSloganTask() example task.make_example(“an eco-friendly water bottle”) dist verbalize(example.get_full_prompt(), k5, tau0.1)通过这种方式你可以将Verbalized Sampling快速应用到任何文本生成任务上并进行系统的评估。4. 效果评估与量化不只是感觉用数据说话说多样性提升了2-3倍必须有具体的度量标准。在研究和实际应用中我们通常从多个维度评估Verbalized Sampling的效果。4.1 常用多样性评估指标指标定义解读适用场景Unigram/Bigram 重复率计算所有生成样本中单个词/连续两个词重复出现的比例。最基础的词汇多样性指标。重复率越低说明用词越丰富。创意写作、文案生成Self-BLEU将每个生成样本作为候选其他所有样本作为参考计算BLEU分数的平均值。度量样本间的相似度。Self-BLEU越低样本间差异越大多样性越高。通用文本生成评估语义向量余弦相似度使用Sentence-BERT等模型将文本编码为向量计算所有向量两两之间的平均余弦相似度。从语义层面评估多样性比n-gram更接近人类感知。开放域问答、故事生成独特样本比例在经过模糊去重如基于语义相似度聚类后唯一性样本占总样本的比例。直观反映有多少“完全不同”的想法。头脑风暴、点子生成分布统计指标对于有明确答案空间的任务如生成1-100的随机数计算输出分布的熵、KL散度等。量化输出分布与理想分布如均匀分布的差距。随机数生成、偏见评估4.2 实战评估案例创意故事生成我使用项目提供的脚本在“生成关于熊的短故事”任务上对比了直接采样temperature1.0和Verbalized Samplingk5, tau0.1, temperature0.9各50个样本。结果摘要直接采样50个故事中有38个的核心情节围绕“熊在森林里寻找蜂蜜/浆果遇到困难如蜜蜂、河流最后成功/学到教训”。词汇重复率高。Verbalized Sampling故事主题显著分散包括熊成为城市公园的“明星”、熊学习画画、熊与人类交换身份一天、熊侦探解决森林谜案、熊宇航员等。语义相似度比直接采样组低了约65%。量化对比表评估指标直接采样 (Direct)Verbalized Sampling (VS)提升幅度独特样本比例22%68%209%平均语义相似度0.510.18降低65%Bigram重复率31%11%降低65%这个简单的实验清晰地验证了VS在打破思维定式、激发非典型联想方面的强大能力。4.3 质量评估多样性是否以牺牲质量为代价这是一个关键问题。我们通过人工评估和自动化指标结合来判断。人工评估随机抽取20对直接采样 vs VS故事请3名评估者从“连贯性”、“趣味性”、“逻辑性”和“语法正确性”四个维度进行盲评5分制。结果发现VS在“趣味性”上显著胜出平均分4.1 vs 2.8在其他三个维度上两者无统计学显著差异。自动化指标使用GPT-4作为裁判进行成对比较。提示词为“给定两个关于熊的故事哪个更有创意、更不落俗套” 在100次比较中VS故事被选中的比例为73%。结论在合理的参数如tau0.1下Verbalized Sampling 在大幅提升多样性的同时基本保持了文本的核心质量。它牺牲的更多是那种“最典型、最安全”的平庸性换来的是更有趣、更出人意料的创意。5. 高级技巧与场景化应用掌握了基础用法后我们可以探索一些进阶技巧并将VS应用到更具体的场景中。5.1 参数调优指南k生成候选数和tau概率阈值是两个核心参数需要联动调整。k的选择成本与收益的权衡k越大探索的答案空间越广但API成本和生成时间线性增加。经验法则对于简单任务如生成一个名字k3-5足够对于复杂任务如写一篇短文大纲建议k5-10对于研究或需要极致多样性的场景可以尝试k15-20。动态k策略可以先让模型生成3个答案如果它们的概率都很高比如都0.3说明模型非常自信于主流答案此时可以提示“请再提供2个概率更低的可能性”动态增加k。tau的选择任务依赖性极强tau接近0如0.01强制模型给出“极其罕见”的答案可能导致荒谬或不连贯的结果。适用于艺术创作、荒诞幽默等场景。tau在0.05-0.15甜点区。对于大多数创意和生成任务能有效提升多样性而不失合理性。tau在0.15-0.25多样性提升温和适用于需要保守创新的场景如商业文案、技术文档建议。一个调试技巧先设置一个中等tau如0.1运行几次观察生成答案的概率值。如果所有概率都远低于tau可以调低tau以挖掘更深的尾部如果很多答案概率都接近或高于tau可以调高tau或检查提示词是否未强调“尾部采样”。5.2 结合思维链Chain-of-Thought, CoT对于需要复杂推理的任务可以先让模型进行思考再对思考结果进行多样化采样。这被称为Verbalized-CoT。提示词示例请思考如何解决以下问题并给出5种不同的推理路径。每种路径用response标签包裹包含reasoning思考过程和answer最终答案并为该路径分配一个probability。 请确保这些推理路径是从可能性分布的尾部采样的每个路径的概率应低于0.15。 问题如果一根绳子燃烧完需要1小时如何用两根这样的绳子测量出45分钟这种方法能生成多种解题思路不仅答案多样连思考过程也多样化了对于教学或头脑风暴尤其有价值。5.3 场景化应用案例合成数据生成痛点用LLM生成训练数据时容易陷入模式重复导致数据多样性不足影响模型泛化。VS方案在生成每一条数据时使用VS。例如生成客户咨询邮件“请生成5封关于‘订单延迟’的不同风格客户邮件概率低于0.1”。这样可以获得从愤怒、焦急到困惑、理解等多种口吻的数据极大丰富了数据集。角色扮演与社会模拟痛点在模拟对话或角色行为时LLM容易让所有角色都使用类似的、符合“模型平均人格”的语言。VS方案为每个角色行动轮次应用VS。提示“你现在是一个内向的图书管理员请给出5种对陌生人搭讪的可能反应概率低于0.1”。这样可以模拟出从沉默、简短回应到意外健谈等多种可能性使角色更鲜活。A/B测试文案生成痛点营销人员需要多个不同角度的广告文案进行测试。VS方案一次提示生成多个备选。“为我们的新款智能手表写5条广告口号分别突出科技感、时尚感、健康关怀、性价比和极简生活每条口号的概率应低于0.12”。一次性获得风格迥异的备选方案提高效率。6. 常见问题与故障排查在实际使用中你可能会遇到以下问题。这里是我总结的排查清单。问题现象可能原因解决方案模型返回的格式不正确缺少标签或概率1. 模型特别是小模型遵循指令能力弱。2. 提示词中的格式要求不够突出。1. 在系统提示词中强化格式要求。2. 在用户提示词开头或结尾再次强调格式。3. 使用支持函数调用的API如OpenAI将输出格式定义为JSON Schema进行约束。生成的所有答案概率都很高0.51.tau值设置过高。2. 提示词中“从尾部采样”的指令未被模型重视。3. 任务本身答案空间狭窄。1. 降低tau值如从0.1调到0.05。2. 加重指令语气“必须从概率分布的长尾中采样确保每个答案都是低概率的”。3. 尝试结合提高temperature如1.2来拓宽模型的初始分布。答案虽然多样但质量明显下降不合逻辑、语法错误1.tau值过低过度挖掘了不合理区域。2. 模型能力不足对低概率区域的探索失控。1. 适当提高tau值在多样性和质量间寻找平衡点。2. 使用能力更强的模型如GPT-4o, Claude 3.5。3. 采用重排序策略生成k个答案后用另一个评分模型或让LLM自己根据质量、相关性重新排序选择排名最高的而非严格按原概率采样。API调用成本激增生成k个答案需要k倍的token消耗。1. 对于非关键任务减小k3或4。2. 使用更便宜的模型生成候选如GPT-3.5-Turbo再用强模型做最终筛选或润色。3. 缓存常见查询的VS结果。生成的“概率”值不靠谱如加起来远大于1模型自我报告的概率是校准过的“置信度”并非严格数学概率。正确认识其作用不要将其视为真实概率而是视为一种**“典型性分数”**。分数越低代表该答案越不典型、越独特。采样时可以尝试对概率取负对数-log(p)作为“能量”进行采样这有时效果更好。我个人最实用的一个技巧是“两阶段提示法”当直接使用VS效果不佳时我会先让模型以标准方式生成一个“最常见”的答案然后基于这个答案进行反驳或拓展“除了刚才那种常见的思路请再列举5种完全不同、甚至反直觉的可能性并为每种可能性估计一个较低的置信度”。这种方法能更有效地将模型的思维从主流路径上“推开”。Verbalized Sampling 的魅力在于其极简的哲学——通过改变提问的方式而非改变模型本身就能释放出巨大的潜能。它不是一个银弹但在追求创意、多样性和打破思维惯性的场景下它是我目前工具箱中最简单、最有效的方法之一。开始尝试吧从让模型“多想想”开始你可能会对它的创造力有全新的认识。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑