昇思打卡营第五期(MindNLP特辑)课程四:基于MindSpore NLP的LLM推理(decoding策略)-下:中文成语释义与解析挑战

昇思打卡营:中文成语解析的模型与解码策略

1.前言 

      这是一个2024年的比赛赛题,很有意思的中文成语释义与解析,考验大家构建开源模型PepLine的能力。

2024 iFLYTEK A.I.开发者大赛-讯飞开放平台https://challenge.xfyun.cn/topic/info?type=interpretation-challenge&option=ssgy&ch=dw24_tjsmU3https://challenge.xfyun.cn/topic/info?type=interpretation-challenge&option=ssgy&ch=dw24_tjsmU3https://challenge.xfyun.cn/topic/info?type=interpretation-challenge&option=ssgy&ch=dw24_tjsmU3https://challenge.xfyun.cn/topic/info?type=interpretation-challenge&option=ssgy&ch=dw24_tjsmU3      尝试着更换了QWEN2-7B、GLM4等模型来完成,并且切换了后端推理的方式。借着这次第四课讲解的解码策略,正好把当时的几个代码都拿出来改改并分享代码思路。

以下代码:MindNLP_workhub/4th/enhanced at main · B3DDD/MindNLP_workhub


2.Baseline

步骤0:环境

      这次环境是阿里云人工智能平台PAI-DSW(有免费试用3个月的优惠,可以试用A10阿里云免费试用 - 阿里云)。

  • ecs.gn7i-c8g1.2xlarge:NVIDIA A10 --30GB显存
  • modelscope:1.22.0-pytorch2.5.1-gpu-py310-cu124-ubuntu22.04

步骤1:更新或安装所需环境

!pip install --upgrade modelscope requests urllib3 tqdm pandas mindspore mindnlp
!apt update > /dev/null; apt install aria2 git-lfs axel -y > /dev/null
  • pip install --upgrade: 这个命令用于升级已安装的Python包到最新版本。--upgrade选项告诉pip检查并安装最新版本的指定包。

  • modelscope: ModelScope 是一个由阿里巴巴达摩院开源的模型即服务(MaaS)平台,旨在简化机器学习模型的使用流程,提供多种预训练模型,涵盖计算机视觉、自然语言处理、语音识别等多个领域。它集成了众多开源AI模型,涵盖了多个领域,开发者可以轻松找到满足自己需求的模型。ModelScope,开发者只需一行代码即可调用AI模型,极大地简化了模型调用过程。用户可以通过SDK或者WEB端的方式上传数据集,通过ModelScope或者公开Host托管。这是国内最大的大模型托管社区,类比为国内版hugging face.在这次代码中用来导入和运行大模型。

  • requests: Python的requests包是一个非常流行的HTTP请求库,广泛用于网络爬虫、API交互等场景。它简化了HTTP请求的复杂性,提供了简洁而强大的API,使得开发者可以轻松地发送HTTP请求并处理响应。

  • urllib3: urllib3 是一个功能强大且易于使用的 Python HTTP 客户端库,广泛应用于 Python 生态系统中。它提供了许多 Python 标准库 urllib 所不具备的重要特性,如线程安全、连接池管理、客户端 SSL/TLS 验证、文件分部编码上传、自动重试、支持压缩编码、支持 HTTP 和 SOCKS 代理等

  • tqdm: tqdm是一个快速、可扩展的Python进度条库,广泛用于在Python长循环中添加进度提示信息。它可以帮助用户监测程序运行的进度,估计运行时长,并且在调试时也非常有用。tqdm的主要功能是通过封装任意的迭代器来显示进度条,用户只需在循环中使用tqdm(iterator)即可。这次代码中是用来做进度条的。

  • pandas: Pandas 是一个强大的 Python 数据分析工具包,广泛应用于数据科学和数据分析领域。它提供了高效、灵活且易于使用的数据结构,旨在简化数据处理和分析任务。

在这次代码中发挥了以下作用

数据导入/导出:支持从多种文件格式(如 CSV、Excel、SQL、JSON 等)导入和导出数据。

数据清洗:提供丰富的函数和方法来处理缺失数据、重复数据和异常值。

  • apt update: apt update 是一个用于更新软件包列表的命令,它在 Debian 和 Ubuntu 系统中广泛使用。这个命令的主要功能是从远程软件仓库获取最新的软件包元数据,并更新本地的软件包数据库。通过执行 apt update,系统可以确保在安装或升级软件包时,使用的是最新的可用版本。

  • /dev/null: 这个操作符将命令的输出重定向到/dev/null,即丢弃输出。这样可以避免在终端中显示更新过程中的详细信息。

  • apt install aria2 git-lfs axel -y: 这个命令用于安装指定的软件包。-y选项表示自动确认安装,不需要用户输入确认信息。

    • aria2: Aria2 是一个轻量级的多协议、多源命令行下载工具,支持 HTTP/HTTPS、FTP、SFTP、BitTorrent 和 Metalink 协议。它可以通过内置的 JSON-RPC 和 XML-RPC 接口进行操作,非常适合用于批量下载和管理下载任务。

    • git-lfs: Git LFS(Large File Storage)是一个Git扩展,专门用于处理大型文件,如音频、视频、图像或任何其他二进制大文件。它通过将这些大文件存储在外部系统而不是Git仓库本身来优化性能,从而显著减小了Git仓库的大小,同时也保留了对大文件的版本控制能力。

    • axel: Python包之axel是一个用于加速文件下载的工具,它通过同时下载文件的不同部分并合并它们来提高下载速度。这个包是Axel命令行工具的Python实现,旨在帮助用户通过多线程下载来加速文件传输。

步骤2:下载数据集

!axel -n 12 -a https://ai-contest-static.xfyun.cn/2024/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E8%83%BD%E5%8A%9B%E8%AF%84%E6%B5%8B%EF%BC%9A%E4%B8%AD%E6%96%87%E6%88%90%E8%AF%AD%E9%87%8A%E4%B9%89%E4%B8%8E%E8%A7%A3%E6%9E%90%E6%8C%91%E6%88%98%E8%B5%9B/test_input.csv

下载比赛的文档:由2972条中文通俗介绍的句子组成,每条句子对应一个成语单词。

步骤3:构建模型(使用Qwen1.5-4B模型)

from modelscope import AutoModelForCausalLM, AutoTokenizer

# 指定加载模型的设备
device = "cuda"  # the device to load the model onto

# 加载预训练的模型和tokenizer
model = AutoModelForCausalLM.from_pretrained(
    "qwen/Qwen1.5-4B-Chat",
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen1.5-4B-Chat")

# 定义提示信息
prompt = "hello"

# 构建聊天消息列表
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": prompt}
]

# 使用tokenizer将聊天消息转换为模型输入格式
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

# 将输入文本转换为模型所需的tensor格式并加载到指定设备
model_inputs = tokenizer([text], return_tensors="pt").to(device)

# 生成回复
generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512
)

# 提取生成的回复部分
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

# 解码生成的回复并移除特殊标记
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

这是通过魔搭社区modelscope来构建大模型的代码:

https://www.modelscope.cn/models/Qwen/Qwen1.5-4B-Chat

采用模型卡给出的代码示例构建大模型,格式就按范例复制就行。代码基本都是从modelscope或者transformer、openvino等库调用大模型的几个主要功能模块分词器、生成器、解码器,申明模型、设备、信息模板、参数、prompt等,最后得到一个包含诸多信息的返回值,从中选取主要回答部分,并输出回答。

步骤4:读取数据集

import pandas as pd
test = pd.read_csv('./test_input.csv', header=None)

从pandas类里拿出pd工具,这个用来读取表格test_input.csv里的2972条短句,然后全部赋值给test。

下面步骤5 就是主要操作test列表了。

步骤5:输出成语

from tqdm import tqdm
import os

i = 1
# 假设 test 是一个 DataFrame
# 遍历测试数据集的第一项的值,目的是生成与给定句子最相关的五个成语
for test_prompt in tqdm(test[0].values, total=len(test[0].values), desc="处理进度"):
    i = i + 1
    # 构造提示信息,要求模型输出与句子最相关的五个成语
    prompt = f"列举与下面句子最符合的五个成语。只需要输出五个成语,不需要有其他的输出,写在一行中:{test_prompt}"

    # 初始化一个长度为5的列表,填充默认成语“同舟共济”
    words = ['同舟共济'] * 5

    # 构建聊天消息格式,用于提示模型进行生成
    messages = [
        {"role": "user", "content": prompt},
    ]
    # 应用聊天模板对消息进行处理,准备模型输入
    text = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
    )
    # 对输入文本进行编码,准备模型输入数据
    model_inputs = tokenizer([text], return_tensors="pt").to(device)
    
    # 生成回答,限制最大生成长度
    generated_ids = model.generate(
        model_inputs.input_ids,
        max_new_tokens=512
    )
    # 提取模型输出,去除输入部分
    generated_ids = [
        output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
    ]
    
    # 解码模型输出,去除特殊标记
    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
    
    response = response.replace('\n', ' ').replace('、', ' ')
    # 提取回答中的成语,确保每个成语长度为4且非空
    words = [x for x in response.split() if len(x) == 4 and x.strip() != '']
    # 如果有效成语数量恰好为5,则停止循环
    if len(words) == 5:
        break

    # 如果生成的成语列表长度不满足要求(即20个字符),则使用默认成语列表
    if len(' '.join(words).strip()) != 24:
        words = ['同舟共济'] * 5

    # 将最终的成语列表写入提交文件
    with open('submit.csv', 'a+') as up:
        up.write(' '.join(words) + '\n')

    # 查看阶段性结果
    if i % 50 == 0:
        tqdm.write(f"大模型第{i}次返回的结果是:\n   {response}\n")
        tqdm.write(f"submit.cvs第{i}行输出结果:\n   {words}\n")
    
    # 为了尽快拿到结果,我们暂时仅获得500个结果(如果有时间的话,可以删除这两行)
    if i == 500:
        break

print('submit.csv 已生成')

1每个循环里把test拿出对应的一个短句子{test_prompt},放进{prompt}里输出给大模型。

2大模型处理好后{response},除去标点符号,提取四字成语{words}(这一步是后面出现大量空白行的原因)

3判断成语不足5个就直接用五个”同舟共济“替代,足够就写入《submit.csv》

4循环500次,时间够就循环2972次(实际数目缺1,这里应该填2973)

5tqdm显示进度条,print汇报阶段性成果和最终完成


3.更改模型和后端推理

使用Qwen2-7B-Instruct

from modelscope import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto

model = AutoModelForCausalLM.from_pretrained(
    "qwen/Qwen2-7B-Instruct",
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen2-7B-Instruct")

prompt = "Give me a short introduction to large language model."
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)

generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

       在魔搭社区Notebook的GPU环境中使用,通过modelscope构建模型流水线,这是个适合国内环境的代码。

通义千问2-7B-Instruct · 模型库

使用GLM-4-9B-Chat模型(transformer后端)

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

device = "cuda"

import torch

#device = "auto" # the device to load the model onto多卡分配:在AutoModelForCausalLM加载预训练模型时,加入device_map="auto",自动分配可用显存。
 #设置可见显存:在python文件外部加入CUDA_VISIBLE_DEVICES=1,2,指定特定的显卡。

tokenizer = AutoTokenizer.from_pretrained("THUDM/glm-4-9b-chat", trust_remote_code=True)

query = "列举与下面句子最相关的五个成语。只需要输出五个成语,不需要有其他的输出,写在一行中:比喻因为无能为力而写下了好文章。"

inputs = tokenizer.apply_chat_template([{"role": "user", "content": query}],
                                       add_generation_prompt=True,
                                       tokenize=True,
                                       return_tensors="pt",
                                       return_dict=True
                                       )

inputs = inputs.to(device)
model = AutoModelForCausalLM.from_pretrained(
    "THUDM/glm-4-9b-chat",
    torch_dtype=torch.bfloat16,
    low_cpu_mem_usage=True,
    trust_remote_code=True
).to(device).eval()

gen_kwargs = {"max_length": 2500, "do_sample": True, "top_k": 1}
with torch.no_grad():
    outputs = model.generate(**inputs, **gen_kwargs)
    outputs = outputs[:, inputs['input_ids'].shape[1]:]
    print(tokenizer.decode(outputs[0], skip_special_tokens=True))

         这篇适合国外环境从Huggingface社区获取模型权重,使用GoogleColab来运行,使用GLM4-9B-CHAT模型来做这个任务。使用Transformer进行后端推理,需要使用A100(40GB)单显卡实例。推理很慢要差不多25小时,花费75个计算单元。

THUDM/glm-4-9b-chat · Hugging Facehttps://huggingface.co/THUDM/glm-4-9b-chathttps://huggingface.co/THUDM/glm-4-9b-chathttps://huggingface.co/THUDM/glm-4-9b-chathttps://huggingface.co/THUDM/glm-4-9b-chat

使用GLM-4-9B-Chat(vLLM后端推理)

from transformers import AutoTokenizer
from vllm import LLM, SamplingParams

# GLM-4-9B-Chat-1M
# max_model_len, tp_size = 1048576, 4

# GLM-4-9B-Chat
# 如果遇见 OOM 现象,建议减少max_model_len,或者增加tp_size
max_model_len, tp_size = 131072, 1
model_name = "THUDM/glm-4-9b-chat"
prompt = [{"role": "user", "content": "你好"}]

tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
llm = LLM(
    model=model_name,
    tensor_parallel_size=tp_size,
    max_model_len=max_model_len,
    trust_remote_code=True,
    enforce_eager=True,
    # GLM-4-9B-Chat-1M 如果遇见 OOM 现象,建议开启下述参数
    # enable_chunked_prefill=True,
    # max_num_batched_tokens=8192
)
stop_token_ids = [151329, 151336, 151338]
sampling_params = SamplingParams(temperature=0.95, max_tokens=1024, stop_token_ids=stop_token_ids)

inputs = tokenizer.apply_chat_template(prompt, tokenize=False, add_generation_prompt=True)
outputs = llm.generate(prompts=inputs, sampling_params=sampling_params)

print(outputs[0].outputs[0].text)

     使用vLLM进行后端推理,需要使用多张A100(40GB)实例。我目前没有足够多显卡的条件测试,只要进行多次对话就爆显存(Out of memory),max_tokens参数已经优化到底了。

THUDM/glm-4-9b-chat · Hugging Face

使用API调用glm-4-flash

#同步调用
from zhipuai import ZhipuAI
client = ZhipuAI(api_key=" ")  # 请填写您自己的APIKey 去智谱官网开个账号,充个20块钱就OK了,或者用免费的模型
response = client.chat.completions.create(
    model="glm-4-flash",  # 请填写您要调用的模型名称
    messages=[
        {"role": "user", "content": "你是一个中文文学大师,你的任务是用成语来描述中文语句。"},
        {"role": "assistant", "content": "列举与下面句子最相关的五个成语。只需要输出五个成语,不需要有其他的输出,写在一行中:双方心往一处想,意志坚定。"},
        {"role": "user", "content": "你是一个中文文学大师,你的任务是用成语来描述中文语句。"},
        {"role": "assistant", "content": "列举与下面句子最相关的五个成语。只需要输出五个成语,不需要有其他的输出,写在一行中:双方心往一处想,意志坚定。"},
        {"role": "user", "content": "列举与下面句子最相关的五个成语。只需要输出五个成语,不需要有其他的输出,写在一行中:双方心往一处想,意志坚定。"}
    ],
)
print("总消耗Tokens:",response.usage.total_tokens)
response = response.choices[0].message.content

print(response)

使用官方API进行大模型交互,速度较快约1小时完成,不足0.1计算单元。

智谱AI开放平台


4.不同解码策略的生成表现分析

    改解码策略,实际上就是改model.generate()函数内的参数。以下是采用QWEN2-7B-Instruct模型,并更改解码策略后的表现:

Greedy: Select the best probable token at a time|贪心:一次选择最可能的标记


    # 生成回答,限制最大生成长度
    generated_ids = model.generate(
        model_inputs.input_ids,
        max_new_tokens=50,
        num_beams=1,
        do_sample=False    
    )
    
成语描述正确答案输出答案
双方心往一处想,意志坚定。同心同德一 心 一 意   同 舟 共 济   坚 定 不 移   齐 心 协 力   志 同 道 合
两端都极为艰难,难以作出决定。进退维谷左 右 为 难 , 进 退 维 谷 , 骑 虎 难 下 , 腹 背 受 敌 , 四 面 楚 歌
雄浑深远的意旨。细腻微妙。高超巧妙。高深莫测深 意 远 旨 , 细 腻 入 微 , 妙 手 偶 得 , 巧 夺 天 工 , 高 瞻 远 瞩
描述水流湍急,且快速且深远。一泻千里一 泻 千 里   波 涛 汹 涌   深 不 可 测   急 流 勇 进   惊 涛 骇 浪
避免被引诱做出不道德或可疑的行为。洁身自好防 微 杜 渐   洁 身 自 好   明 哲 保 身   正 人 君 子   自 律 自 省
肘部肩窝。比喻事物发生于身边。肘腋之患近 在 咫 尺   触 手 可 及   防 微 杜 渐   未 雨 绸 缪   祸 福 相 依
他张开嘴巴,吞咽着口水。垂涎欲滴垂 涎 欲 滴
仅见一面,不足以深入了解。一面之缘一 见 如 故   缘 木 求 鱼   浮 光 掠 影   走 马 观 花   浅 尝 辄 止
向四处散发施舍,同时手中拿着碗盆。沿门托钵四 散 施 舍 , 手 捧 碗 盆 。

Beam Search: Select the best probable response|波束搜索:选择最可能的响应

num_beams=3


    # 生成回答,限制最大生成长度
    generated_ids = model.generate(
        model_inputs.input_ids,
        num_beams=3,# 5 已经超显存了
        no_repeat_ngram_size=2,
        num_return_sequences=3,
        do_sample=False,
        length_penalty=1.0,
        
    )
   

成语描述正确答案输出答案
双方心往一处想,意志坚定。同心同德心 心 相 印 , 志 同 道 合 , 坚 定 不 移 , 齐 心 协 力 , 一 往 无
两端都极为艰难,难以作出决定。进退维谷左 右 为 难 , 进 退 维 谷 , 骑 虎 难 下 , 腹 背 受 敌 , 四
雄浑深远的意旨。细腻微妙。高超巧妙。高深莫测深 意 远 旨 , 细 腻 入 微 , 妙 手 偶 得 , 巧 夺 天 工 , 高
描述水流湍急,且快速且深远。一泻千里一 泻 千 里 , 波 涛 汹 涌 , 深 不 可 测 , 急 流 勇 进 , 惊 涛
避免被引诱做出不道德或可疑的行为。洁身自好防 微 杜 渐   洁 身 自 好   明 哲 保 身   正 人 先 正 己
肘部肩窝。比喻事物发生于身边。肘腋之患近 在 咫 尺 , 触 手 可 及 , 防 微 杜 渐 , 未 雨 绸 缪 ,
他张开嘴巴,吞咽着口水。垂涎欲滴口 干 舌 燥   垂 涎 欲 滴   张 口 结 舌   吞 吞 吐 吐  
仅见一面,不足以深入了解。一面之缘一 见 如 故   一 面 之 缘   窥 豹 一 斑   浮 光 掠 影   走
向四处散发施舍,同时手中拿着碗盆。沿门托钵四 海 为 家 , 施 惠 无 疆 , 手 无 寸 铁 , 盆 满 钵 满 ,

num_beams=4


    # 生成回答,限制最大生成长度
    generated_ids = model.generate(
        model_inputs.input_ids,
        num_beams=4,# 5 已经超显存了
        no_repeat_ngram_size=2,
        num_return_sequences=4,
        do_sample=False,
        length_penalty=1.0,
        
    )
   
成语描述正确答案输出答案
双方心往一处想,意志坚定。同心同德心 心 相 印 , 志 同 道 合 , 坚 定 不 移 , 齐 心 协 力 , 一 往 无
两端都极为艰难,难以作出决定。进退维谷左 右 为 难 , 进 退 维 谷 , 骑 虎 难 下 , 腹 背 受 敌 , 四
雄浑深远的意旨。细腻微妙。高超巧妙。高深莫测深 意 远 旨 , 细 腻 入 微 , 妙 手 偶 得 , 巧 夺 天 工 , 高
描述水流湍急,且快速且深远。一泻千里急 流 勇 进 , 一 泻 千 里 , 波 涛 汹 涌 , 深 不 可 测 , 瞬 息
避免被引诱做出不道德或可疑的行为。洁身自好防 微 杜 渐   洁 身 自 好   明 哲 保 身   正 人 先 正 己
肘部肩窝。比喻事物发生于身边。肘腋之患近 在 咫 尺 , 触 手 可 及 , 防 微 杜 渐 , 未 雨 绸 缪 ,
他张开嘴巴,吞咽着口水。垂涎欲滴口 干 舌 燥   垂 涎 欲 滴   张 口 结 舌   吞 吞 吐 吐  
仅见一面,不足以深入了解。一面之缘一 见 如 故   一 面 之 缘   窥 豹 一 斑   浮 光 掠 影   走
向四处散发施舍,同时手中拿着碗盆。沿门托钵四 海 为 家 , 施 惠 无 疆 , 手 无 寸 铁 , 盆 满 钵 满 ,

Temperature: Shrink or enlarge probabilities|温度:缩小或扩大概率 


    # 生成回答,限制最大生成长度
    generated_ids = model.generate(
        model_inputs.input_ids,
        do_sample=True,
        temperature=0.6,
    )
    
成语描述正确答案输出答案
双方心往一处想,意志坚定。同心同德一 心 一 意   同 舟 共 济   坚 定 不 移   心 齐 力 倍   众 志 成 城
两端都极为艰难,难以作出决定。进退维谷左 右 为 难 , 进 退 维 谷 , 骑 虎 难 下 , 腹 背 受 敌 , 四
雄浑深远的意旨。细腻微妙。高超巧妙。高深莫测深 意 远 旨 , 细 腻 入 微 , 妙 手 偶 得 , 巧 夺 天 工 , 精
描述水流湍急,且快速且深远。一泻千里一 泻 千 里   波 涛 汹 涌   深 不 可 测   急 流 勇 进   瞬 息
避免被引诱做出不道德或可疑的行为。洁身自好 防 微 杜 渐   洁 身 自 好   明 哲 保 身   正 人 君 子  
肘部肩窝。比喻事物发生于身边。肘腋之患近 在 咫 尺   触 手 可 及   防 微 杜 渐   未 雨 绸 缪  
他张开嘴巴,吞咽着口水。垂涎欲滴 垂 涎 欲 滴 "
仅见一面,不足以深入了解。一面之缘一 见 如 故   缘 木 求 鱼   浮 光 掠 影   浅 尝 辄 止  
向四处散发施舍,同时手中拿着碗盆。沿门托钵四 散 施 舍 , 手 无 寸 铁 , 空 手 而 归 , 一 无 所 有 , 两 手

Top-K Sampling: Select top probable K tokens|Top-K 采样:选择最可能的 K 个 token


    # 生成回答,限制最大生成长度
    generated_ids = model.generate(
        model_inputs.input_ids,
        do_sample=True,
        temperature=0.6,
        top_k=50
    )
    
成语描述正确答案输出答案
双方心往一处想,意志坚定。同心同德一 心 一 意   同 舟 共 济   坚 定 不 移   齐 心 协 力   志 同 道 合
两端都极为艰难,难以作出决定。进退维谷左 右 为 难 , 进 退 维 谷 , 骑 虎 难 下 , 腹 背 受 敌 , 四
雄浑深远的意旨。细腻微妙。高超巧妙。高深莫测深 意 远 旨 , 细 腻 入 微 , 妙 手 偶 得 , 巧 夺 天 工 , 高
描述水流湍急,且快速且深远。一泻千里一 泻 千 里   波 涛 汹 涌   深 不 可 测   急 流 勇 进   奔 腾
避免被引诱做出不道德或可疑的行为。洁身自好 洁 身 自 好 , 防 微 杜 渐 ; 明 辨 是 非 , 固 守 本 心 ;
肘部肩窝。比喻事物发生于身边。肘腋之患近 在 咫 尺 , 触 手 可 及 , 防 微 杜 渐 , 未 雨 绸 缪 ,
他张开嘴巴,吞咽着口水。垂涎欲滴垂 涎 欲 滴   口 水 直 流   馋 涎 欲 滴   望 眼 欲 穿   馋
仅见一面,不足以深入了解。一面之缘一 见 如 故   一 目 了 然   浅 尝 辄 止   浮 光 掠 影  
向四处散发施舍,同时手中拿着碗盆。沿门托钵四 散 施 舍 , 手 中 持 盆

Nucleus Sampling: Dynamically choose the number of K (sort of)|核采样Top-P:动态选择K的数量


    # 生成回答,限制最大生成长度
    generated_ids = model.generate(
        model_inputs.input_ids,
        do_sample=True,
        temperature=0.6,
        top_k=50,
        top_p=0.9
    )
   
成语描述正确答案输出答案
双方心往一处想,意志坚定。同心同德一 心 一 意   同 舟 共 济   坚 定 不 移   心 照 不 宣   志 同 道 合
两端都极为艰难,难以作出决定。进退维谷骑 虎 难 下   进 退 两 难   左 右 为 难   腹 背 受 敌   四
雄浑深远的意旨。细腻微妙。高超巧妙。高深莫测深 意 远 旨   细 致 入 微   神 妙 绝 伦
描述水流湍急,且快速且深远。一泻千里一 泻 千 里 , 波 涛 汹 涌 , 深 不 可 测 , 急 流 勇 进 , 惊 涛
避免被引诱做出不道德或可疑的行为。洁身自好 洁 身 自 好 , 明 辨 是 非 , 防 微 杜 渐 , 正 人 君 子 , 心
肘部肩窝。比喻事物发生于身边。肘腋之患近 在 咫 尺   触 手 可 及   防 微 杜 渐   未 雨 绸 缪  
他张开嘴巴,吞咽着口水。垂涎欲滴 望 梅 止 渴 , 垂 涎 三 尺 "
仅见一面,不足以深入了解。一面之缘一 见 如 故   一 目 了 然   浅 尝 辄 止   浮 光 掠 影  
向四处散发施舍,同时手中拿着碗盆。沿门托钵 四 海 为 家 , 广 散 施 舍 , 手 无 寸 铁 , 空 有 其 名

     在这个任务中看, Beam_search策略表现比较不错,采样的表现也尚可。实际调优中,可以尝试混合策略以提高准确率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值