如何从任何文档生成指令数据集以进行LLM微调

使用轻量级库经济地生成高质量的合成数据集

大型语言模型 (LLMs) 是功能强大的通用工具,但它们通常缺乏特定于领域的知识,这些知识通常存储在企业存储库中。

使用您自己的数据微调自定义LLM可以弥合这一差距,而数据准备是此过程的第一步。这也是一个关键的步骤,可以显着影响微调模型的性能。

但是,手动创建数据集可能既昂贵又耗时。另一种方法是利用 来LLM生成合成数据集,通常使用 GPT-4 等高性能模型,这可能会非常昂贵。

在本文中,我旨在提请您注意一种经济高效的替代方案,用于自动从各种文档创建指令数据集。该解决方案涉及使用名为 Bonito 的轻量级开源库。

图像由作者使用由 DALL 提供支持的 Bing 聊天生成。E 3

开始使用 Bonito,开源解决方案

了解说明

在我们深入研究库鲣鱼及其工作原理之前,我们需要首先了解指令是什么。

指令是给 LLMLlama、GPT-4 等的文本或提示。它指示模型生成特定类型的答案。通过说明,人们可以引导讨论,确保模型的回复是相关的、有用的,并且符合用户的需求。创建清晰准确的说明对于实现预期结果非常重要。

介绍 Bonito,一种用于条件任务生成的开源模型

Bonito 是一个开源模型,专为条件任务生成而设计。它可用于创建合成指令调优数据集,使大型语言模型适应用户的专用私有数据。

Bonito 工作流程。来源:学习生成用于零样本任务适应的指令调整数据集

Bonito开发背后的研究论文说明了如何有效地使用它来使预训练和指令调整的模型适应各种任务,而无需任何文本注释。

该模型本身是使用 mistralai/Mistral-7B-v0.1 包含1.65M示例的新大规模数据集进行微调的。

Bonito 还支持多种任务类型,包括多项选择题解答、是-否问答、自然语言推理、主题分类等。

 如何使用鲣鱼

使用 Bonito 模型的最简单方法是通过他们基于 和 vllm 库构建的 transformers 包。

在下一节中,我将向您展示如何轻松地使用 Bonito 包从 PDF 文档创建合成数据集。

生成数据集的分步指南

在本指南中,我将向您展示如何使用 Bonito 包从 PDF 文档生成问答数据集。

在这个例子中,我选择了卢森堡金融监管机构 CSSF 发布的第 12/552 号通知,该通知与银行治理和中央管理有关。这种选择背后的动机源于一种观察,即像 ChatGPT 这样的工具往往难以掌握特定领域的知识,尤其是特定行业和卢森堡等较小国家的监管要求。

我的目标是将此循环转换为适合微调的LLM教学数据集。这种量身定制LLM将使我能够理解潜在的监管要求,回应有关这些要求的询问,并最终将其效用扩展到更广泛的应用,例如风险管理、影响评估和持续监控。

先决条件:由于 Bonito 是 Mistral 7B 的微调模型,因此我个人使用 Google Colab A100 GPU 实例运行此演示。它还应该在具有足够 GPU 和 RAM 的计算机上本地工作。

你可以在这里找到我的 Colab 笔记本。

第 1 步 — 安装 Bonito 软件包和其他依赖项

除了鲣鱼套餐,我们还需要:

  • 数据集和 Hugging Face Hub 库,用于处理数据集并与 Hugging Face 存储库交互
  • PyMuPDF 和 SpaCy:PyMuPDF 用于从 PDF 文件中读取和提取文本,而 SpaCy 用于自然语言处理任务。
!pip install -e git+https://github.com/BatsResearch/bonito#egg=bonito
!pip install datasets huggingface_hub
!pip install pymupdf spacy

第 2 步:处理 PDF 文档

首先,我们利用 PyMuPDF 库从文档中提取文本。

import fitz  # PyMuPDFdef extract_text_from_pdf(pdf_path):doc = fitz.open(pdf_path)  # Open the PDF filetext = ""for page in doc:  # Iterate through each pagetext += page.get_text()  # Extract text and append it to the text variablereturn textpdf_path = 'cssf_12_552_governance.pdf'  # Specify the path to your PDF document
text = extract_text_from_pdf(pdf_path)  # Call the function with the path to your PDF

接下来,我们通过将提取的文本拆分为句子来处理它。此步骤使用 SpaCy,这是一个用于高级自然语言处理 (NLP) 的库。

import spacynlp = spacy.load("en_core_web_sm")  # Load the English language modeldef split_into_sentences(text):doc = nlp(text)  # Process the text with SpaCysentences = [sent.text.strip() for sent in doc.sents]  # Extract sentences and strip whitespacereturn sentencessentences = split_into_sentences(text)  # Split the extracted text into sentences

最后,我们将句子列表转换为模型 Bonito 可以使用的格式,特别是使用 datasets 库:

from datasets import Dataset# Assuming sentences is a list of strings, where each string is a sentence
data = {"sentence": sentences}
dataset = Dataset.from_dict(data)print(dataset)

步骤 3:生成合成数据集

现在是时候利用 Bonito 库来生成为问答量身定制的合成数据集了!

from bonito import Bonito, SamplingParams
from datasets import load_dataset# Initialize the Bonito model
bonito = Bonito("BatsResearch/bonito-v1")sampling_params = SamplingParams(max_tokens=256, top_p=0.95, temperature=0.5, n=1)
synthetic_dataset = bonito.generate_tasks(dataset,context_col="sentence",task_type="qg",sampling_params=sampling_params
)

在此示例中,我们使用 Bonito 进行“问题生成”(qg) 为数据集创建问题。但鲣鱼可以处理各种各样的任务。以下是 Bonito 可以管理的任务类型的简要概述:

  • 抽取式问答 (exqa):根据给定的文本片段生成问题的答案,直接从文本中提取答案。
  • 多项选择题解答 (mcqa):提供一组多项选择题的答案。
  • 问题生成 (qg):根据所提供文本的内容创建问题。
  • 无选择的问答 (qa):在不提供多项选择选项的情况下回答问题。
  • 是-否问答 (ynqa):生成问题的“是”或“否”答案。
  • 共指解析 (coref):标识文本中引用同一实体的提及。
  • 释义生成(释义):用不同的措辞重写句子或短语,同时保留原始含义。
  • 释义识别 (paraphrase_id):确定两个句子或短语是否传达相同的含义。
  • 句子完成 (sent_comp):填补句子中缺失的部分。
  • 情绪分析(情绪):标识文本中表达的情绪,例如正面、负面或中性。
  • 摘要:将较长的文本压缩为较短的摘要,以捕捉要点。
  • 文本生成 (text_gen):根据提示创建连贯且上下文相关的文本。
  • 主题分类 (topic_class):将文本分类为预定义的主题。
  • 词义消歧 (wsd):根据词的上下文确定词的含义。
  • 文本蕴涵 (te):预测给定文本是否在逻辑上遵循另一个文本。
  • 自然语言推理 (nli):确定两个文本之间的关系,例如矛盾、蕴涵或中立性。

步骤 4:保存生成的数据集

现在,我们可以将生成的数据集保存在本地或将其上传到 Hugging Face Hub。

要在 Hugging Face Hub 上上传和保存数据集,请登录 Hub。

from huggingface_hub import notebook_loginnotebook_login()

然后,为数据集创建存储库并将其推送到中心。

from huggingface_hub import create_repo
from huggingface_hub import Repositoryrepo_name = "dataset_12_552"  # Choose a name for your dataset repository
repo_url = create_repo(repo_name, repo_type="dataset")
print("Repository URL:", repo_url)
synthetic_dataset.push_to_hub(f"Ronal999/dataset_12_552")

这是我用我的文档创建的数据集,当然,在微调过程之前,它需要一些进一步的清理和改进,以确保其质量和性能。

我用 Bonito 生成的合成数据集

 结束语

创建高质量的指令数据集是实现性能良好的模型的关键,但这可能是一个耗时的过程。

在本指南中,我们研究了如何使用 Bonito(一种经过特殊微调的开源模型)从任何文本创建数据集。与手工做事或使用 GPT-4 等付费模型相比,这种新方式提供了一个不错的选择,这可能会变得非常昂贵。

鲣鱼是一种相对较新的方法,上个月刚刚发布。由于大量知识存在于分散在各种文档中的非结构化数据中,因此我使用 Bonito 从多个文档自动生成数据集。然后,这些数据集用于训练本地LLM,使我能够自定义我的模型来理解和利用特定知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Shiro反序列化漏洞】Shiro-550反序列化漏洞复现

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

了解下索引的几棵树?

二叉树 二叉搜索树最好的情况性能是O(logn),最坏情况是O(n) 红黑树 它的时间复杂度是O(logn),但是在数据量特别大的时候,树会特别高,就会遍历很多层级,对性能影响较大 BTree B树是一种多叉路衡查找树,相对于…

解决NVM安装Node失败:淘宝NPM镜像HTTPS证书到期及源切换指南

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

如果利用AOP/Aspect来修改方法的入参

问题描述: 最近项目代码过三方测试(国企项目),在一系列代码扫描审计检查下,代码发现一部分修改,例如请求参数发生了编码/加密,导致后台需要对请求的参数进行解码/解密,后端那么接口&…

访问者模式(Visitor Pattern)

访问者模式 说明 访问者模式(Visitor Pattern)属于行为型模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 该模式是将数据结构与数据操作分离的设计模式,是…

Flutter 多语言、主题切换之GetX库

多语言、主题切换之GetX库 前言正文一、配置项目二、模拟UI三、语言配置① 常量键② 语言配置文件③ 配置 四、持久化五、切换语言① my_home.dart② home.dart③ mine_controller.dart④ language_setting_controller.dart⑤ language_setting.dart⑥ mine.dart 六、切换主题①…

基于SpringBoot的“家政服务管理平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“家政服务管理平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 服务信息界面…

WorldGPT、Pix2Pix-OnTheFly、StyleDyRF、ManiGaussian、Face SR

本文首发于公众号:机器感知 WorldGPT、Pix2Pix-OnTheFly、StyleDyRF、ManiGaussian、Face SR HandGCAT: Occlusion-Robust 3D Hand Mesh Reconstruction from Monocular Images We propose a robust and accurate method for reconstructing 3D hand mesh from m…

ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

发生的错误信息: File "C:\Users\malongqiang\.conda\envs\ObjectDetection\lib\ssl.py", line 1309, in do_handshakeself._sslobj.do_handshake() ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。 分析原因: …

接口的回调

接口是引用型变量 接口回调技术:把实现该接口的类的实例引用赋给接口变 量(存放对象的引用)→接口变量可调用被类重写的接口方法。 ★注意★:接口com无法调用类中非接口方法

SQL语句在MySQL中的执行过程

有一条SQL语句,给到MySQL,是怎么被执行的 基本架构 连接器:进行身份认证,确定操作权限 查询缓存: 执行查询语句时,先查询缓存(不太实用,MySQL 8.0 版本后删了) 分析器&#xff1a…

格子表单GRID-FORM | 必填项检验 BUG 修复实录

格子表单/GRID-FORM已在Github 开源,如能帮到您麻烦给个星🤝 GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互文档网站搭建(VitePress)与部署(Github Pages)必填项检验 BUG…

搭建谷歌Gemini

前言 Gemini是Google AI于2023年发布的大型语言模型,拥有强大的文本生成、理解和转换能力。它基于Transformer模型架构,并使用了大量文本和代码数据进行训练。Gemini可以执行多种任务,包括: 生成文本:可以生成各种类…

一张图让你学会Python

有编程基础的人一看就可以了解 Python 的用法了。真正的 30 分钟上手。 国外一高手画的,现把它翻译成中文,入门超简单 python入门神图!(看不清可以“另存为”查看)

C++类和对象一

#include <iostream> using namespace std;//设计一个学生类 class CStudent {public: //公有成员void InputData(){cout << "请输入学号";cin >> sno;cout << "请输入姓名";cin >> sname;cout << "请输入分…

③【Docker】Docker部署Nginx

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ③【Docker】Docker部署Nginx docker拉取nginx…

Linux环境下安装DGL及其CUDA

前段时间看到一篇AAAI2024的论文Patch-wise Graph Contrastive Learning for Image Translation&#xff0c;它采用GNN的思想来进行image-to-image translation的任务&#xff0c;非常的新颖&#xff0c;但我进行复现的时候&#xff0c;发现直接下载它里面需要的DGL库是无法运行…

第一次vp蓝桥杯

最失败的一集&#xff0c;这是学了个什么&#xff1f; 果然是一个很失败的人呢&#xff0c;第一次逃晚自习就被辅导员发现了呢&#xff0c;还给我打电话&#xff0c;虽然知道可能他也没办法。但这就更体现我很失败了。 题也不会写&#xff0c;其他的方面也不是很如意。嘻嘻嘻…

【Flutter 面试题】Flutter如何处理响应式布局?

【Flutter 面试题】Flutter如何处理响应式布局&#xff1f; 文章目录 写在前面口述回答补充说明完整代码示例运行结果详细说明 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&am…

NB-IoT模块

目录 一. NB-IoT模块实物图 二. BC20/NB-IoT模块产品规格 三. 指令顺序 1. AT判断BC20模组是否正常 2. ATE0返回OK&#xff0c;已经返回回显 3. ATCSQ 4. AT_CEREG? 5. ATCGATT? 6. ATCGATT? 四. OneNet 连接 1. AT 查看 NB(当前NB)&#xff0c;云平台根据这两个…