如何从任何文档生成指令数据集以进行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.hqwc.cn/news/538340.html

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

相关文章

如何在Linux部署Docker Registry本地镜像仓库并实现无公网IP远程连接

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

子查询 封装属性创建Connection连接类 数据库连接池

子查询 在select语句中包含另一个select 语句 -->子查询 子查询的分类 单行单列子查询 在where子句中使用 运算符 ! > < -- 查询工资比公司平均工资高的员工信息 -- 查询与员工’smith‘同职位的员工信息 -- 查询比员工joins入职…

八数码(C++)

原题在这里P1379 八数码难题 思路&#xff1a; 本题的思路很有意思&#xff0c;首先我们知道0是可以和上下左右交换位置的&#xff08;前提是不出边界&#xff09; 不难看出我们可以把这个二维数组给转化为一个相对应的字符串来表示当前的状态&#xff0c;每进行一次&#xff…

wxss和css的区别

目录 1. 语法差异 2. 尺寸单位 3. 样式导入 WXSS 示例代码&#xff1a; CSS 示例代码&#xff1a; 4. 组件和属性的支持 总结 WXSS (WeiXin Style Sheets) 和 CSS (Cascading Style Sheets) 都是用于描述文档样式的语言&#xff0c;但它们在微信小程序和网页开发中有一些…

英飞凌电源管理PMIC的安全应用

摘要 本篇文档主要用来介绍英飞凌电源管理芯片TLF35584的使用&#xff0c;基于电动助力转向应用来介绍。包含一些安全机制的执行。 TLF35584介绍 TLF35584是英飞凌推出的针对车辆安全应用的电源管理芯片&#xff0c;符合ASIL D安全等级要求&#xff0c;具有高效多电源输出通道&…

413 Request Entity Too Large 问题如何解决

遇到“413 Request Entity Too Large”错误通常意味着你尝试上传或提交到服务器的数据量超过了服务器能够处理的限制。这个问题通常与Web服务器的配置相关&#xff0c;比如Nginx或Apache。这个问题出现在使用Nginx作为Web服务器的环境中。这里有几种解决方法&#xff1a; 1. 调…

【UE5】非持枪趴姿移动混合空间

项目资源文末百度网盘自取 创建角色在非持枪状态趴姿移动的动画混合空间 在BlendSpace文件夹中单击右键选择 动画(Animation) 中的混合空间(Blend Space) 选择SK_Female_Skeleton 命名为BS_NormaProne 打开BS_NormaProne 水平轴表示角色的方向&#xff0c;命名为Directi…

【刷题训练】反转字符串i 和 ii(区间部分翻转)

344.反转字符串 题目要求 示例 1&#xff1a; 输入&#xff1a;s [“h”,“e”,“l”,“l”,“o”] 输出&#xff1a;[“o”,“l”,“l”,“e”,“h”] 示例 2&#xff1a; 输入&#xff1a;s [“H”,“a”,“n”,“n”,“a”,“h”] 输出&#xff1a;[“h”,“a”,“n”,…

paraview处理openfoam对称模型

paraview处理openfoam对称模型 步骤如下: 导入对称模型,以openfoam中xx\tutorials\incompressible\SRFSimpleFoam\mixer中的搅拌器为例;使用ctrl+space,查找transform,在Filters中也能找到;经过三次transform,可以移动旋转出对称的其他3部分;经过此三次移动旋转,并不能…

C#文件交互

C#是一种流行的编程语言&#xff0c;广泛应用于开发各种类型的应用程序&#xff0c;包括需要进行文件交互的应用程序。文件交互是指应用程序与计算机文件系统进行交互&#xff0c;包括读取、写入、创建、删除和修改文件等操作。在C#中&#xff0c;文件交互通常通过.NET框架提供…

工业界真实的推荐系统(小红书)-召回-改进双塔模型-自监督学习

课程特点&#xff1a;系统、清晰、实用&#xff0c;原理和落地经验兼具 b站&#xff1a;https://www.bilibili.com/video/BV1HZ421U77y/?spm_id_from333.337.search-card.all.click&vd_sourceb60d8ab7e659b10ea6ea743ede0c5b48 讲义&#xff1a;https://github.com/wangsh…

傅立叶之美:深入研究傅里叶分析背后的原理和数学

一、说明 T傅里叶级数及其伴随的推导是数学在现实世界中最迷人的应用之一。我一直主张通过理解数学来理解我们周围的世界。从使用线性代数设计神经网络&#xff0c;从混沌理论理解太阳系&#xff0c;到弦理论理解宇宙的基本组成部分&#xff0c;数学无处不在。 当然&#xff0c…