大模型-参数配置

摘要

        在与大模型交互过程中,合理配置参数能够显著影响模型输出结果的质量与风格。接下来本篇文章会详细的解读大模型配置的各类关键参数,并给出基于deepSeek API调用,和Transformers的详细示例。

Temperature(温度)

        温度参数用于调节模型输出的随机性。取值范围通常在 0 到 1 之间,其本质是对模型生成下一个词的概率分布进行调整。当温度接近 0 时,模型倾向于选择概率最高的词,输出结果较为保守、确定,更符合常规逻辑与预期,适用于对准确性要求极高的场景,如知识问答、精确指令执行。例如在回答科学常识类问题时,低温度设置可确保答案精准无误。相反,当温度接近 1 时,概率分布更加均匀,模型会选择一些概率较低但具有创新性的词,输出更具多样性与创造性,可用于创意写作、头脑风暴等场景,像创作小说情节、构思广告文案时,较高温度能激发独特的想法 。

  • DeepSeek 配置示例

import requests​
​
api_url = "https://api.deepseek.com/v1/chat/completions"​
headers = {​
    "Authorization": "Bearer YOUR_API_KEY",​
    "Content-Type": "application/json"​
}​
data = {​
    "messages": [{"role": "user", "content": "请介绍一款新上市的电子产品" }],​
    "temperature": 0.2​
}​
response = requests.post(api_url, headers=headers, json=data)​
print(response.json())
  • Transformers 配置示例

from transformers import AutoTokenizer, AutoModelForCausalLM​
​
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-coder-1.3b")​
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-coder-1.3b")​
​
input_text = "请描述一款新的手机应用"​
input_ids = tokenizer(input_text, return_tensors='pt').input_ids​
​
output = model.generate(​
    input_ids,​
    temperature = 0.2​
)​
print(tokenizer.decode(output[0], skip_special_tokens=True))

Max Length(最大长度)

        该参数明确了模型生成文本的最大字数或 token 数。它决定了模型输出内容的篇幅上限,避免模型生成冗长、无意义或不符合需求的超长文本。在实际应用中,需根据任务需求合理设定。例如生成一篇新闻摘要,可能将最大长度设定为 200 - 300 字,既能涵盖关键信息,又简洁明了;若进行文章续写,可依据文章整体风格与续写目的,设定几百字甚至上千字的长度 。

        请注意配置最大长度时,要确定其最大长度值不能超过大模型的Max tokens 数量。Max tokens 在大模型官网中均有列出。

  • DeepSeek 配置示例

import requests​
​
api_url = "https://api.deepseek.com/v1/chat/completions"​
headers = {​
    "Authorization": "Bearer YOUR_API_KEY",​
    "Content-Type": "application/json"​
}​
data = {​
    "messages": [{"role": "user", "content": "请续写一篇悬疑小说" }],​
    "max_tokens": 500​
}​
response = requests.post(api_url, headers=headers, json=data)​
print(response.json())
  • Transformers 配置示例

from transformers import AutoTokenizer, AutoModelForCausalLM​
​
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-coder-1.3b")​
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-coder-1.3b")​
​
input_text = "请描述一款新的手机应用"​
input_ids = tokenizer(input_text, return_tensors='pt').input_ids​
​
output = model.generate(​
    input_ids,​
    max_length = 200
)​
print(tokenizer.decode(output[0], skip_special_tokens=True))

Stream(流式输出)

  stream是一个用于控制响应返回方式的重要参数。当将 stream 参数设置为 true 时,API 会以流式传输的方式返回响应结果,而不是等待整个生成过程完成后一次性返回完整的响应。以下是流式传输的具体优势和应用场景:

  1. 实时交互体验:对于需要实时交互的应用场景,如聊天机器人或实时问答系统,流式传输可以让用户在模型生成文本的过程中就开始看到部分结果,而不必等待整个回复生成完成。这大大提升了用户体验,让交互过程更加自然流畅。

  2. 减少等待时间:在处理较长文本生成时,流式传输可以显著减少用户的等待时间。用户可以在部分内容返回后就开始阅读和处理,而不需要等到完整的文本生成。

  3. 资源优化:流式传输可以降低客户端的内存压力,因为它不需要一次性存储整个响应结果。同时,也有助于服务器更高效地利用资源,因为它可以逐步生成和发送响应,而不是一次性生成整个结果。

  • DeepSeek 配置示例:

import requests​
​
api_url = "https://api.deepseek.com/v1/chat/completions"​
headers = {​
    "Authorization": "Bearer YOUR_API_KEY",​
    "Content-Type": "application/json"​
}​
data = {​
    "messages": [{"role": "user", "content": "请续写一篇悬疑小说" }],​
    "stream": true
}​
response = requests.post(api_url, headers=headers, json=data)​
print(response.json())

Sampling(采样)

        采样是模型从候选词中选择下一个词的方式。常见的有随机采样和确定性采样。随机采样基于概率分布随机挑选,能带来多样输出;确定性采样则按概率高低直接选取最高概率词。不同采样方式影响生成文本的多样性与稳定性,在一些需要灵活输出的场景,如创意写作、自由对话中,随机采样更合适;而对结果一致性要求高的场景,如数据标准化处理、格式固定的报告生成,确定性采样效果更佳 。

  • deepSeek 随机采样与确定性采样

    • 将temperature设为 1.0,模型将进行随机采样。

    • 当temperature设为 0 时,模型将采用确定性采样。

  • 随机采样

from transformers import AutoTokenizer, AutoModelForCausalLM​
​
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-coder-1.3b")​
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-coder-1.3b")​
​
input_text = "描绘一座神秘的岛屿"​
input_ids = tokenizer(input_text, return_tensors='pt').input_ids​
​
output = model.generate(​
    input_ids,​
    do_sample = True​
)​
print(tokenizer.decode(output[0], skip_special_tokens=True))

        通过将do_sample设为True,模型基于概率分布随机选择下一个词,为岛屿描绘带来多样、独特的表述。

  • 确定性采样

from transformers import AutoTokenizer, AutoModelForCausalLM​
​
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-coder-1.3b")​
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/deepseek-coder-1.3b")​
​
input_text = "介绍一款传统美食"​
input_ids = tokenizer(input_text, return_tensors='pt').input_ids​
​
output = model.generate(​
    input_ids,​
    do_sample = False​
)​
print(tokenizer.decode(output[0], skip_special_tokens=True))

        将do_sample设为False,模型每次选择概率最高的词,保证美食介绍准确、规范,符合常规表达。

Top - K Sampling

        Top - K 采样指模型从概率最高的 K 个候选词中进行采样。通过限制候选词范围,减少了低概率、不合理词的出现概率,同时保留一定随机性。例如 K 设为 40,模型只考虑概率排名前 40 的词,在保证生成文本质量的同时,避免了完全依赖最高概率词导致的输出单一性,适用于既需要一定多样性,又要控制文本质量不至于过度发散的场景,如对话系统中回复用户问题时 。

  • DeepSeek 配置示例:

import requests​
​
api_url = "https://api.deepseek.com/v1/chat/completions"​
headers = {​
    "Authorization": "Bearer YOUR_API_KEY",​
    "Content-Type": "application/json"​
}​
data = {​
    "messages": [{"role": "user", "content": "创作一首励志诗歌" }],​
    "top_k": 40​
}​
response = requests.post(api_url, headers=headers, json=data)​
print(response.json())
  • Transformers 配置示例

from transformers import pipeline, set_seed​
​
generator = pipeline('text-generation', model='gpt2')​
output = generator("创作一首爱情诗", do_sample = True, top_k = 40)​
print(output)

     在此配置中,top_k设置为 40,模型将从概率最高的 40 个词元中进行采样,确保生成的诗歌在保持多样性的同时,维持一定的文本质量。

Top - P Sampling

        Top - P 采样也叫核采样,模型会选择累计概率超过阈值 P 的最小词集合进行采样。例如 P 设为 0.9,模型从概率最高的词开始累加,直到这些词的累计概率超过 0.9,然后在这个词集合内采样。相较于 Top - K 采样,Top - P 采样更加动态灵活,能根据词的概率分布自动调整候选集合大小。在生成文本时,若遇到概率分布较为集中的情况,可能只需要较少的词就能达到 P 阈值,而分布分散时,候选词集合会相应扩大,适合长文本生成等对上下文连贯性和多样性要求较高的场景 。

  • DeepSeek 配置示例

import requests​
​
api_url = "https://api.deepseek.com/v1/chat/completions"​
headers = {​
    "Authorization": "Bearer YOUR_API_KEY",​
    "Content-Type": "application/json"​
}​
data = {​
    "messages": [{"role": "user", "content": "讲述一次难忘的旅行经历" }],​
    "top_p": 0.9​
}​
response = requests.post(api_url, headers=headers, json=data)​
print(response.json())
  • Transformers 配置示例

from transformers import pipeline, set_seed​
​
generator = pipeline('text-generation', model='gpt2')​
output = generator("请描述一次难忘的旅行", do_sample = True, top_p = 0.9)​
print(output)

        将top_p设为 0.9,模型将根据累计概率超过 0.9 的最小词元集合进行采样,这在长文本生成场景中能确保文本的连贯性和多样性。

惩罚系数

Frequency Penalty(频率惩罚)

        频率惩罚用于抑制模型生成文本中重复词的出现频率。随着生成文本中某个词出现次数增多,该词再次被选择的概率会按频率惩罚系数降低。这有助于避免模型陷入重复表述,使生成文本更加丰富多元。例如在故事创作中,防止角色描述、情节叙述的重复,让故事更具流畅性与新鲜感 。

  • DeepSeek 配置示例:

import requests​
​
api_url = "https://api.deepseek.com/v1/chat/completions"​
headers = {​
    "Authorization": "Bearer YOUR_API_KEY",​
    "Content-Type": "application/json"​
}​
data = {​
    "messages": [{"role": "user", "content": "编写一个儿童故事" }],​
    "frequency_penalty": 0.8​
}​
response = requests.post(api_url, headers=headers, json=data)​
print(response.json())
  • Transformers 配置示例

from transformers import pipeline, set_seed​
​
generator = pipeline('text-generation', model='gpt2')​
output = generator("编写一个童话故事", do_sample = True, frequency_penalty = 0.8)​
print(output)

            通过frequency_penalty参数设置为 0.8,模型在生成故事时将抑制重复词的出现频率,使故事文本更加丰富。

    Presence Penalty(存在惩罚)

            存在惩罚则针对已经在生成文本中出现过的词进行惩罚。与频率惩罚不同,它不考虑词出现的次数,只要词出现过,再次被选择的概率就会降低。这促使模型探索更多不同的词汇,拓宽文本内容范围,适用于对词汇丰富度要求高的场景,如诗歌创作、创意文案撰写 。

    • DeepSeek 配置示例

    import requests​
    ​
    api_url = "https://api.deepseek.com/v1/chat/completions"​
    headers = {​
        "Authorization": "Bearer YOUR_API_KEY",​
        "Content-Type": "application/json"​
    }​
    data = {​
        "messages": [{"role": "user", "content": "构思一个未来城市的场景" }],​
        "presence_penalty": 0.8​
    }​
    response = requests.post(api_url, headers=headers, json=data)​
    print(response.json())

    • Transformers 配置示例

    from transformers import pipeline, set_seed​
    ​
    generator = pipeline('text-generation', model='gpt2')​
    output = generator("构思一个未来城市的场景", do_sample = True, presence_penalty = 0.8)​
    print(output)

              将presence_penalty设为 0.8,模型将降低已出现词的选择概率,鼓励使用更多不同的词汇,丰富未来城市场景的描述。

      Sequences(序列)

              Sequences 参数可用于指定模型生成文本应遵循的特定模式或序列。比如在代码生成中,规定特定的代码结构或函数调用序列;在文本创作中,设定开头或结尾的固定句式等。通过明确这些序列,引导模型生成符合特定格式或逻辑的文本 。

      Stop Sequences(停止序列)

              停止序列用于指示模型在生成文本时遇到特定字符串或序列时停止生成。这在一些场景中极为重要,例如在生成邮件回复时,设置 “此致 敬礼” 为停止序列,模型一旦生成该序列,便会终止,确保输出内容符合预期格式,不会过度生成无用信息 。

      • DeepSeek 配置示例

      import requests​
      ​
      api_url = "https://api.deepseek.com/v1/chat/completions"​
      headers = {​
          "Authorization": "Bearer YOUR_API_KEY",​
          "Content-Type": "application/json"​
      }​
      data = {​
          "messages": [{"role": "user", "content": "请生成一封商务邮件" }],​
          "stop": ["此致敬礼"]​
      }​
      response = requests.post(api_url, headers=headers, json=data)​
      print(response.json())

           在此示例中,通过stop参数设置 “此致敬礼” 为停止序列,当模型生成该序列时,将停止文本生成,确保生成的商务邮件格式符合预期。

      response_format (指定响应格式)

              DeepSeek 可以在提示词中设置response_format 参数,以确定大模型的返回内容格式,目前包含两种格式分别是text和json_object。

      • DeepSeek 配置示例

      import requests​
      ​
      api_url = "https://api.deepseek.com/v1/chat/completions"​
      headers = {​
          "Authorization": "Bearer YOUR_API_KEY",​
          "Content-Type": "application/json"​
      }​
      data = {​
          "messages": [{"role": "user", "content": "请生成一封商务邮件" }],​
          "response_format": {
              "type": "json_object"
        },
      }​
      response = requests.post(api_url, headers=headers, json=data)​
      print(response.json())

              我们可以将type 设置为 { "type": "json_object" } 以启用 JSON 模式,该模式保证模型生成的消息是有效的 JSON。

      functionCall(tools)

              functionCall 参数允许模型调用外部工具或函数来辅助生成结果。在处理一些需要特定领域知识或复杂计算的任务时,模型可借助该参数调用相关工具获取准确信息。例如在数据分析场景中,调用统计分析工具进行数据计算,再基于计算结果生成分析报告;在知识问答中,调用知识图谱工具获取更权威准确的知识内容,提升回答的专业性与准确性 。​

      • DeepSeek funcationCall 示例

      from openai import OpenAI
      
      def send_messages(messages):
          response = client.chat.completions.create(
              model="deepseek-chat",
              messages=messages,
              tools=tools
          )
          return response.choices[0].message
      
      client = OpenAI(
          api_key="<your api key>",
          base_url="https://api.deepseek.com",
      )
      
      tools = [
          {
              "type": "function",
              "function": {
                  "name": "get_weather",
                  "description": "Get weather of an location, the user shoud supply a location first",
                  "parameters": {
                      "type": "object",
                      "properties": {
                          "location": {
                              "type": "string",
                              "description": "The city and state, e.g. San Francisco, CA",
                          }
                      },
                      "required": ["location"]
                  },
              }
          },
      ]
      
      messages = [{"role": "user", "content": "How's the weather in Hangzhou?"}]
      message = send_messages(messages)
      print(f"User>\t {messages[0]['content']}")
      
      tool = message.tool_calls[0]
      messages.append(message)
      
      messages.append({"role": "tool", "tool_call_id": tool.id, "content": "24℃"})
      message = send_messages(messages)
      print(f"Model>\t {message.content}")

      这个例子的执行流程如下:

      1. 用户:询问现在的天气

      2. 模型:返回 function get_weather({location: 'Hangzhou'})

      3. 用户:调用 function get_weather({location: 'Hangzhou'}),并传给模型。

      4. 模型:返回自然语言,"The current temperature in Hangzhou is 24°C."

      注:上述代码中 get_weather 函数功能需由用户提供,模型本身不执行具体函数。

      tool_choice

              DeepSeek 包含一个tool_choice 参数,我们可以通过这个参数控制模型调用 tool 的行为。tool_choice 包含以下配置:

      • none 意味着模型不会调用任何 tool,而是生成一条消息。

      • auto 意味着模型可以选择生成一条消息或调用一个或多个 tool。

      • required 意味着模型必须调用一个或多个 tool。

      • 通过 {"type": "function", "function": {"name": "my_function"}} 指定特定 tool,会强制模型调用该 tool。

      • 当没有 tool 时,默认值为 none。如果有 tool 存在,默认值为 auto

      参考文献

      对话补全 | DeepSeek API Docs

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包

      打赏作者

      找了一圈尾巴

      你的鼓励将是我创作的动力

      ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
      扫码支付:¥1
      获取中
      扫码支付

      您的余额不足,请更换扫码支付或充值

      打赏作者

      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值