当前位置: 首页 > news >正文

使用Llama 3.1创建合成数据集以调优你的大型语言模型

使用Llama 3.1创建合成数据集以调优你的大型语言模型

在数据驱动的人工智能领域,数据是核心资产。开发高质量数据集既复杂又昂贵,因此很多实验室和开发者选择使用合成数据集。本文将介绍如何利用大型语言模型Llama 3.1 405B创建合成数据集,并展示整个过程的关键步骤,从数据生成到数据集上传。

Llama 3.1 405B的特点与应用

模型特点

Llama 3.1 405B是Meta最新推出的语言模型家族中的一员,不仅体现在其巨大的规模,还在于其推理能力的显著提升。与之前的8B和70B版本相比,405B模型在各项基准测试中表现出色,已接近一些最佳闭源模型的表现。

应用场景

该模型特别适合用于合成数据生成,如检索增强生成(RAG)和监督微调(SFT)等复杂工作流。由于其能力强大,Llama 3.1可以在多种实际应用中发挥重要作用,例如在自然语言处理任务中生成用户指令和响应对。

数据集构建步骤

设置API密钥

为了使用Nvidia的API远程访问Llama 3.1 405B模型,开发者需要获取其API密钥。通过Nvidia NIM平台,申请免费信用额度,然后将API密钥设置在代码中:

client = OpenAI(base_url="https://integrate.api.nvidia.com/v1",api_key=os.environ["NVIDIA_API_KEY"]
)
MODEL = "meta/llama-3.1-405b-instruct"

生成子主题

在构建数据集时,涵盖各种场景是至关重要的。为此,可以定义子主题,允许Llama 3.1生成多个指令/响应对。以下代码展示了如何生成五个与Git相关的子主题:

n_subtopics = 5
TOPIC_GENERATION_PROMPT_TEMPLATE = "请根据Git主题生成{n_subtopics}个子主题。"

生成指令

针对每个子主题,生成对应的用户指令是关键步骤。虽然目标是一百条指令,但生成的最终数量往往会有所减少。这是实际操作中的常见情况,尤其是在请求大型模型生成时。

INSTRUCTION_PROMPT_TEMPLATE = "对于子主题{sub_topic}生成{n_instructions}条指令。"

生成响应

对于每条指令,接下来需要生成相关的响应。为了确保响应的质量,生成时需要关注其信息量、简洁性和相关性。

RESPONSE_PROMPT_TEMPLATE = "针对指令生成相关响应。指令是: {instruction}"

响应过滤

使用Nemotron 4

尽管生成了各种指令和响应,不是每一个都能满足质量标准。为此,利用Nvidia的Nemotron 4模型来评估并筛选低质量响应。Nemotron 4提供的评估标准涵盖了帮助程度、正确性、连贯性等多个维度。

helpfulness_THRESHOLD = 3
verbosity_THRESHOLD = 2.5
synthetic_data = [data for i, data in enumerate(synthetic_data) if not (score_list[i]["helpfulness"] < helpfulness_THRESHOLD or score_list[i]["verbosity"] > verbosity_THRESHOLD)]

数据集推送

HuggingFace登录与数据上传

生成并过滤后的合成数据集,最后一步是将其推送至HuggingFace平台以方便后续使用。首先需要登录HuggingFace,并提供API令牌进行身份验证。

from huggingface_hub import login
login()

完成登录后,通过以下代码将数据集上传至HuggingFace:

with open(f'synthetic_data_filtered.jsonl', 'r') as f:data = [json.loads(line) for line in f]
dataset = Dataset.from_list(data)
dataset_dict = DatasetDict({"train": dataset})
dataset_dict.push_to_hub("your_huggingface_username/git-prompt-dataset")

结论

通过以上步骤,我们成功利用Llama 3.1 405B创建了一个合成数据集,并借助Nemotron 4模型过滤并优化了数据质量,最后将数据集上传至HuggingFace。这一过程展示了合成数据集构建的各个环节,为需要进行指令微调的大型语言模型开发者提供了实用的指导。

http://www.lryc.cn/news/517013.html

相关文章:

  • js可不使用document直接根据id获取id元素
  • 【竞技宝】CS2:HLTV2024职业选手排名TOP8-broky
  • Apache Paimon-实时数据湖
  • hpm使用笔记————使用usb作为从机接收来自上位机的数据然后通过spi主机发送给spi从机
  • 数据结构(查找算法)
  • private前端常见算法
  • Go语言之十条命令(The Ten Commands of Go Language)
  • Residency 与 Internship 的区别及用法解析
  • 成品电池综合测试仪:电子设备性能与安全的守护者|鑫达能
  • Taro地图组件和小程序定位
  • 深入了解 SSL/TLS 协议及其工作原理
  • 【计算机操作系统:二、操作系统的结构和硬件支持】
  • 51单片机——步进电机模块
  • 当算法遇到线性代数(四):奇异值分解(SVD)
  • SASS 简化代码开发的基本方法
  • 40.TryParse尝试转化为int类型 C#例子
  • 【微服务】2、网关
  • 红队-shell编程篇(上)
  • 电子价签会是零售界的下一个主流?【新立电子】
  • 5 分布式ID
  • SpringBoot | @Autowired 和 @Resource 的区别及原理分析
  • 『SQLite』解释执行(Explain)
  • 0基础学前端-----CSS DAY12
  • (概率论)无偏估计
  • Minio-Linux-安装
  • 利用Java爬取1688商品详情API接口:技术与应用指南
  • 基于MATLAB的汽车热管理模型构建
  • LRU(1)
  • VSCode 使用鼠标滚轮控制字体
  • 数据库(3)--针对列的CRUD操作