vLLM配置
SamplingParams
是用于控制采样过程的一个配置类。它允许用户设置不同的参数来影响生成文本的方式
class SamplingParams:
def __init__(self,
temperature: float = 1.0,
top_p: float = 1.0,
top_k: int = 0,
repetition_penalty: float = 1.0,
max_tokens: int = 16,
stop: List[str] = None,
presence_penalty: float = 0.0,
frequency_penalty: float = 0.0,
use_beam_search: bool = False,
num_beams: int = 1,
length_penalty: float = 1.0):
...
下面是每个参数的详细解释:
temperature: float = 1.0
- 含义: 控制生成文本的随机性。较高的温度会导致更多样化的输出,较低的温度会使输出更加确定。
- 默认值:
1.0
,表示不进行额外的随机性调整。 - 范围: 通常大于
0
,接近0
的值会使模型的输出更趋向于最可能的选择。
top_p: float = 1.0
- 含义: 控制基于累积概率的核采样(Nucleus Sampling)。
top_p
表示选择可能性最高的前p
的候选项进行采样。例如,top_p = 0.9
意味着从累计概率为 90% 的候选项中采样。 - 默认值:
1.0
,表示不进行核采样,所有可能的词都参与采样。 - 范围:
[0.0, 1.0]
。
top_k: int = 0
- 含义: 控制基于词汇排名的采样。
top_k
表示只从前k
个最有可能的词中采样。较小的top_k
会使输出更加确定。 - 默认值:
0
,表示不进行top_k
限制,所有词汇都参与采样。 - 范围:
0
或更大的整数。
repetition_penalty: float = 1.0
- 含义: 用于控制重复词的惩罚系数。值大于
1.0
时会对重复的词进行惩罚,使生成的文本更加多样化;值小于1.0
时则会鼓励重复。 - 默认值:
1.0
,即不进行重复惩罚。 - 范围:
= 1.0
。
max_tokens: int = 16
- 含义: 设置生成文本的最大长度,即最多生成的 token 数。
- 默认值:
16
,表示生成的文本长度不超过 16 个 tokens。 - 范围:
0
的整数。
stop: List[str] = None
- 含义: 生成的文本遇到这些停止词时会终止。可以指定一组停止词,模型会在输出中遇到这些词时停止生成。
- 默认值:
None
,表示没有指定停止词。 - 类型: 字符串列表。
presence_penalty: float = 0.0
- 含义: 控制生成文本中的词汇多样性。正值会鼓励生成新的词,而不是重复使用已有的词。
- 默认值:
0.0
,即不进行词汇多样性惩罚。 - 范围: 实数,通常为正值。
frequency_penalty: float = 0.0
- 含义: 控制词汇的频率惩罚。正值会降低生成频繁词的可能性,负值则会增加重复词的生成。
- 默认值:
0.0
,即不进行频率惩罚。 - 范围: 实数,通常为正值。
use_beam_search: bool = False
- 含义: 是否使用束搜索(Beam Search)进行生成。束搜索是一种更加确定的生成方法,可以探索多个生成路径,并选择得分最高的路径。
- 默认值:
False
,即默认不使用束搜索。 - 类型: 布尔值。
num_beams: int = 1
- 含义: 设置束搜索的束的数量。
num_beams
表示在束搜索中同时保留的生成路径数。该参数仅在use_beam_search=True
时有效。 - 默认值:
1
,表示不进行束搜索。 - 范围:
0
的整数。
length_penalty: float = 1.0
- 含义: 控制生成文本长度的惩罚系数。值大于
1.0
会惩罚较长的生成文本,值小于1.0
会鼓励生成较长的文本。 - 默认值:
1.0
,即不对生成长度进行惩罚。 - 范围: 实数。
以下是一些常见应用场景及适合的参数配置建议:
1. 创意写作或自由生成内容
在创意写作或鼓励生成多样化内容的场景下,比如写小说、故事、诗歌等,需要生成富有创造性和多样化的文本。这时,模型可以允许更多的随机性和多样性。
temperature = 1.0 # 保持默认随机性,适度多样化
top_p = 0.9 # 核心采样,选择前90%概率的词,避免最小概率的候选词
top_k = 50 # 限制采样到前50个词,既有多样性又不至于太随机
repetition_penalty = 1.1 # 轻微惩罚重复,增加生成的多样性
presence_penalty = 0.5 # 鼓励生成新词
frequency_penalty = 0.5 # 减少频繁出现的词,增加词汇多样性
- 适用场景: 小说生成、诗歌创作、对话生成、广告文案。
2. 问答系统
在问答系统中,生成的文本需要尽可能准确、简洁和贴切问题。此时,减少随机性,确保生成内容的准确性和一致性是优先考虑的。
temperature = 0.7 # 减少随机性,确保生成的答案更稳定
top_p = 0.95 # 选择前95%的概率词,防止采样过于随机
top_k = 20 # 限制采样到前20个词,确保答案更加准确
repetition_penalty = 1.2 # 强烈惩罚重复,确保回答简洁
presence_penalty = 0.0 # 不特别鼓励生成新词
frequency_penalty = 0.0 # 不对频率进行惩罚,允许重复常见词(如专有名词)
- 适用场景: FAQ、智能客服、搜索引擎问答、AI 助手。
3. 技术或法律文档生成
在技术文档、法律文档等场景中,生成的文本需要严谨和连贯,容错率较低,因此需要减少生成的随机性,并且避免重复或无意义的内容。
temperature = 0.5 # 降低随机性,确保生成文本更严谨
top_p = 0.9 # 选择前90%的概率词,确保内容连贯
top_k = 10 # 只从前10个最有可能的词中采样,减少随机性
repetition_penalty = 1.5 # 严格惩罚重复,防止冗长和重复句式
presence_penalty = 0.0 # 不特别鼓励生成新词
frequency_penalty = 0.5 # 轻微惩罚频繁词,避免过度重复某些常见词
- 适用场景: 技术文档、法律条款、合同生成、报告生成。
4. 对话系统(聊天机器人)
在对话系统中,生成的内容需要自然、连贯,同时保持一定的多样性。这类场景下,既要确保生成的内容准确,又要避免过于机械化的回答。
temperature = 0.8 # 保持一定随机性,让对话自然
top_p = 0.95 # 选择前95%的概率词,避免生成过于随机的对话
top_k = 40 # 限制到前40个词,平衡多样性与连贯性
repetition_penalty = 1.2 # 轻微惩罚重复,防止对话僵化
presence_penalty = 0.5 # 鼓励生成新词,保持对话的趣味性
frequency_penalty = 0.2 # 防止过于频繁的词汇出现,增强对话多样性
- 适用场景: 聊天机器人、虚拟助手、社交媒体互动。
5. 新闻生成或摘要
在生成新闻或摘要时,生成的内容需要简洁、连贯、准确,因此随机性应该较低,确保生成的内容符合事实。
temperature = 0.6 # 降低随机性,确保生成内容准确
top_p = 0.9 # 选择前90%的概率词,保持内容连贯
top_k = 10 # 限制到前10个词,保证内容的准确性
repetition_penalty = 1.5 # 强烈惩罚重复,避免生成冗长的内容
presence_penalty = 0.0 # 不鼓励生成新词,保持事实一致性
frequency_penalty = 0.2 # 轻微惩罚频繁词,保持语言流畅性
- 适用场景: 新闻生成、自动摘要、报告概述。
6. 长文本生成(如小说章节)
如果要生成较长的文本,比如小说章节或长篇文章,模型需要在保持连贯性的同时生成较多的内容,避免过度重复。
temperature = 1.0 # 保持随机性,确保长文本中的多样性
top_p = 0.9 # 核心采样,保证生成的内容多样且连贯
top_k = 50 # 允许更多可能的选词,确保内容不单调
repetition_penalty = 1.1 # 轻微惩罚重复,防止内容冗长
presence_penalty = 0.5 # 鼓励生成新词,保持长文本中的多样性
frequency_penalty = 0.5 # 控制词汇的重复出现,提升文本质量
- 适用场景: 长篇小说、剧本、连续对话生成。
7. 精确控制生成(如数值生成或代码生成)
在生成数值、代码等高度结构化的内容时,生成的内容需要严格遵循上下文,随机性应尽量降低,确保生成结果的精确性。
temperature = 0.1 # 减少随机性,确保生成结果精确
top_p = 1.0 # 不进行核采样,确保结果符合预期
top_k = 0 # 不进行限制,所有词汇都参与采样
repetition_penalty = 1.0 # 不进行重复惩罚
presence_penalty = 0.0 # 不鼓励生成新词
frequency_penalty = 0.0 # 不惩罚频繁词汇,确保生成结构化内容
- 适用场景: 代码生成、数学表达式、数值预测。
总结
- 增加创造性: 增加
temperature
和top_k
,设置较小的repetition_penalty
。 - 提高准确性: 减少
temperature
,增加repetition_penalty
,并使用较小的top_k
。 - 减少随机性: 使用较小的
temperature
和较大的top_p
,如top_p = 1.0
。 - 控制重复: 使用较大的
repetition_penalty
。