掘金 人工智能 05月15日 18:23
Prompt基础:大模型参数
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了大模型参数在提示工程中的重要性,强调了对大模型参数的理解和调整,能够显著提升输出结果的质量。文章详细介绍了temperature、top_p、top_k等关键参数的作用,并通过示例演示了不同参数设置对输出结果的影响,帮助读者掌握高效使用大模型的技巧。

🌡️ **温度(Temperature)**: 影响模型生成文本的随机性。较低的温度值(如0.2)使模型更保守,产生更一致的响应;较高的温度值(如0.8)则增加随机性,生成更具多样性的文本。

💡 **Top_p(核采样)**: 控制模型生成响应时的多样性和确定性。较低的top_p值(如0.1)使模型集中于最有可能的词汇;较高的top_p值(如0.9)则增加生成文本的多样性。

🔢 **Top_k**: 定义模型在生成每个词汇时考虑的最高概率词汇的数量。较低的top_k值(如10)使模型从概率最高的少数词汇中选择;较高的top_k值(如50)则增加生成文本的随机性和创造性。

📝 **其他参数**: 包括MinTokens、MaxTokenCount、StopSequences、NumResults、FrequencyPenalty、PresencePenalty和CountPenalty,它们分别控制文本的长度、结束方式、输出数量以及对词汇的惩罚,共同影响生成文本的质量和风格。

前言

去年写的文章,我今年发没意见吧。哈哈哈,其实说来话长本来想着趁着24年那会大家学习AI,学习提示词热情高涨。想把这些内容梳理处理写成一本关于提示词的书的。书名都想好了叫《prompt设计与应用:开启生成模型的智慧之门》是不是有点感觉了。结果这一拖又拖,给我拖没了。那就算了吧把之前写好的几章先放出来和大家分享分享、交流交流,然后把剩下的一两章补全给自己一个交代,也给我热爱的提示词一个交代。很多人说提示词是一个短期的职业,但是现在我在AI行业这一年的感受却是越来越重要了,感谢上一家公司让我真真正正的当过一段时间的提示词工程师,也感谢目前的公司让我有时间研究了一年的提示词和他的演变。

未来我相信prompt依然会发挥他魔术般的伟大神力,让世界更加美好有趣。

引言

而随着大模型的火爆,提示词应运而生,如何使用好大模型也成为大家越来越关注的话题。提示工程(Prompt Engineering)就是本内容将与您分享的内容。在认识prompt之前,我认为我们首先应该了解我们的面向对象——大模型。也许你不需要知道PyTorch和TensorFlow是如何训练出大模型的,也不需要深入理解Embedding中的encoder和decoder的具体运作机制,但了解大模型的一些常见参数对于我们运用大模型、编写高效prompt来说是至关重要的,也是最常被忽视的环节。

我们常常执着于如何优化prompt技巧,却忽略了对大模型本身的理解。然而,大模型训练完成后,如果我们希望通过它得到理想的答案或结果,首先应该明确哪些因素是我们可以控制的,哪些是无法控制的。这样一来,你会发现,除了优化prompt本身,大模型提供的参数也是我们可以利用的重要工具。尤其是在调用API或在大模型playground中进行操作时,这些参数的调控对于输出结果有着显著影响。相同的提示词在同一个模型下,不同的参数设置可能会产生截然不同的结果。

为了帮助大家更好地理解和运用这些参数,下面我将列出一些大模型的常见参数,并重点介绍其中一些关键参数的作用和使用技巧。了解这些参数不仅能帮助我们在实践中更好地驾驭大模型,还能提升我们编写prompt的整体效果,使得我们能够更加自如地获取想要的结果。

大模型参数

控制随机性。 温度参数决定了大模型在生成文本时的随机性程度。较低的值(如0.2)会让模型倾向于选择最有可能的词汇,从而生成更加保守和一致的响应;较高的值(如0.8)则会增加生成文本的随机性和多样性,使模型更可能选择一些不太常见的词汇和表达。对于需要事实性和准确性的任务,例如回答具体问题或提供专业建议,较低的温度值更为适宜。而对于需要创造性和创新性的任务,如写作、故事生成或艺术创作,较高的温度值则能更好地激发模型的潜力。

通过“核心采样”来调整确定性。 Top-p参数,也被称为核采样,控制模型生成响应时的多样性和确定性。通过设置一个概率阈值p,模型会在生成每个词汇时,仅考虑那些累计概率达到p的词汇。较低的top-p值(如0.1)会让模型集中于最有可能的词汇,从而生成较为精确和一致的响应;较高的top-p值(如0.9)则会让模型考虑更多的词汇,增加生成文本的多样性。通过调整top-p值,可以有效控制模型在生成文本时的探索范围,适应不同的应用场景。

保留最高概率词汇表令牌(token下文同)的数量。 Top-k参数定义了模型在生成每个词汇时,考虑的最高概率词汇的数量。与top-p类似,top-k控制了模型生成文本的多样性和准确性。较低的top-k值(如10)会让模型仅从概率最高的少数词汇中选择,从而生成较为一致和可预测的响应;较高的top-k值(如50)则会让模型从更多的候选词汇中选择,增加生成文本的随机性和创造性。通过结合使用top-k和top-p参数,可以精细调整模型的响应质量和风格。

每个响应生成的最小令牌数。 MinTokens参数规定了模型在生成响应时,至少要生成的令牌数量。设置一个较高的minTokens值可以确保生成的文本足够长,以覆盖所需的信息或达到预期的表达效果。这个参数在需要详细回答或长篇文本生成时尤为重要,可以防止模型生成过于简短和不完整的响应。

在停止之前要生成的最大令牌数。 MaxTokenCount参数限制了模型在生成响应时,最多可以生成的令牌数量。设置一个合适的maxTokenCount值,可以避免生成过长或无关的文本,从而控制响应的长度和相关性。在实际应用中,根据不同任务的需求调整maxTokenCount值,可以优化生成文本的质量和可读性。

将导致模型停止生成响应的字符串列表。 StopSequences参数定义了一组特定的字符串,当模型在生成文本时遇到这些字符串时,将立即停止生成。这个参数可以用来控制生成文本的结束点,避免模型生成不必要的后续内容。通过设置合适的stopSequences,可以确保生成的响应在合适的地方结束,保持文本的完整性和连贯性。

为给定提示生成的响应数。 NumResults参数规定了模型在每次生成时,返回的不同响应的数量。通过设置较高的numResults值,可以同时获得多个不同的响应,从中选择最合适的一个。这对于需要多样性和灵活性的任务,如创意写作或方案建议,尤为有用。可以通过对比不同响应,选择最符合需求的结果。

应用于频繁生成的令牌的惩罚。 FrequencyPenalty参数通过对频繁出现的词汇施加惩罚,来减少它们在生成文本中的重复出现。这可以帮助生成更具多样性和新意的文本,避免模型生成内容时的重复和单调。较高的frequencyPenalty值会显著减少重复词汇的出现,从而提升文本的丰富性和可读性。

应用于提示中已存在的令牌的惩罚。 PresencePenalty参数通过对提示中已经存在的词汇施加惩罚,来减少它们在生成文本中的重复使用。这有助于生成新的信息和表达,避免对提示内容的简单重复。较高的presencePenalty值可以鼓励模型生成更多新的内容,从而增强文本的创意和多样性。

基于令牌在生成的响应中出现的频率而应用于令牌的惩罚。 CountPenalty参数根据生成文本中词汇出现的频率施加惩罚,控制词汇的重复使用。通过调整这个参数,可以在保持文本连贯性的同时,减少不必要的重复,提升文本的质量。较高的countPenalty值会显著减少重复词汇的出现,使得生成的文本更加丰富和多样。

参数演示

from openai import OpenAIclient = OpenAI(api_key="sk-")completion = client.chat.completions.create(        model="gpt-4",    messages=[        {"role": "system", "content": "You are a helpful assistant"},        {"role": "user", "content": "基于“荷花”写一首七言律诗"},    ],    temperature=0,    stream=False)print(completion.choices[0].message.content)

测试输出结果:

from openai import OpenAIclient = OpenAI(api_key="sk-")completion = client.chat.completions.create(        model="gpt-4",    messages=[        {"role": "system", "content": "You are a helpful assistant"},        {"role": "user", "content": "基于“荷花”写一首七言律诗"},    ],    temperature=1,    stream=False)print(completion.choices[0].message.content)

测试输出结果:

OK,我们来看看结果,很明显温度高的结果就是比温度低的表现得更加丰富和变化,我们可以看到当温度低时,模型输出的结果为较为死板,固定。例如在这个例子中我们可以看到,他输出的每一首诗第一句都是一样的“荷叶翠绿映日辉”,其他也比较固定。而反观温度高的模型输出的内容都不尽相同,而且用词也更加大胆,显得就丰富很多。下面我们同样来看看top_p的影响

from openai import OpenAIclient = OpenAI(api_key="sk-")completion = client.chat.completions.create(        model="gpt-4",    messages=[        {"role": "system", "content": "You are a helpful assistant"},        {"role": "user", "content": "基于“荷花”写一首七言律诗"},    ],    top_p=0.1,    stream=False)print(completion.choices[0].message.content)

输出:

from openai import OpenAIclient = OpenAI(api_key="sk-")completion = client.chat.completions.create(        model="gpt-4",    messages=[        {"role": "system", "content": "You are a helpful assistant"},        {"role": "user", "content": "基于“荷花”写一首七言律诗"},    ],    top_p=1,    stream=False)print(completion.choices[0].message.content)

输出:

下面这个图是吴恩达教授在讲他自己的提示词课程时演示的一个关于温度的图,我们可以清晰地看到当温度为零时,答案基本一致,当温度为0.3时,答案就出现了不同的值,当温度为0.7时,每个答案都不一样了,这就是温度temperature的威力。

参数很多,但是我想告诉你的是最关键的就是temperature温度,简单理解温度越高不稳定性越高,模型更天马行空。所以当你想要一个准确的回答时,请将温度调为0或者接近0。当你想要一个更加新颖的回答时,请将温度调为0.7或者0.7以上。这点非常非常重要,将直接影响你的结果,这是我惨痛的教训。另一个重要参数是top_p,也叫核采样,它和温度temperature有类似的作用,我们一般建议只调节一个。Top-p 通常设置为较高的值(如 0.75),目的是限制可能被采样的低概率 token 的长尾。同时在使用 top-k 和 top-p时,如果 k 和 p 都启用,则 p 在 k 之后起作用。调节这些参数的技巧在于找到一个平衡点,使得模型输出既准确又有创意。理解并合理使用这些参数,可以大大提升你在与模型互动时的体验和结果的质量。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

大模型参数 提示工程 Temperature Top_p AI
相关文章