详解微调语言模型(LLMs)的全面指南:模仿研究者的写作风格

避坑指南:LLaMA-Factory微调时dataset_info.json的3个常见配置错误 本文针对LLaMA-Factory微调中常见的dataset_info.json配置错误,提供了详细的避坑指南。重点解析了JSON格式与路径映射、字段映射缺失、数据文件自身格式三大高频错误,并给出了AutoDL等云端环境的排查技巧,帮助用户高效完成数据集配置,确保微调流程顺利启动。 阅读详情

图片img

微调LLMs的介绍

微调语言模型(LLMs)已成为自然语言处理(NLP)任务中的一项关键技术,使模型能够适应特定领域或任务,并提高性能。在本文中,我们将使用Python探索微调LLMs的过程,重点介绍高效预处理文本数据的技术。

预处理文本数据

清理文本数据

在微调LLMs之前,对文本数据进行预处理以确保一致性和去除噪声是至关重要的。提供的代码片段演示了一种全面清理文本数据的方法:

import re
from cleantext import clean
def clean_text(text):
    # 去除特殊字符和额外的空格    
    cleaned_text = re.sub(r'\s+', ' ', text)  # 将多个空格替换为一个空格
    cleaned_text = re.sub(r'[^\w\s]', '', cleaned_text)  # 去除特殊字符
    cleaned_text.strip()    
    cleaned_text = clean(cleaned_text, no_line_breaks=True, no_urls=True, no_emails=True, no_phone_numbers=True, no_currency_symbols=True, no_punct=True, replace_with_punct='', replace_with_url='', replace_with_email='', replace_with_phone_number='', replace_with_currency_symbol='', lang='en')    
    return cleaned_text  # 去除前导和尾随空格

clean_text()函数利用正则表达式和cleantext库来去除文本中的特殊字符、URL、电子邮件和其他噪声元素,确保LLM的输入干净。

从PDF中提取文本

解析PDF文档

PDF文档通常包含有价值的文本数据,但提取这些数据可能具有挑战性。以下函数extract_text_from_pdf()使用PyPDF2从PDF文件中高效提取文本:
在这里插入图片描述

该函数遍历PDF文档的每个页面,提取文本,并使用先前定义的clean_text()函数进行清理。

微调过程

提取相关部分

微调LLMs通常需要关注特定的文本部分,例如摘要和参考文献。extract_abstract_and_references()函数高效地隔离这些部分:

在这里插入图片描述

使用LangChain简化文本

在本节中,我们将探索一个利用LangChain(一种强大的语言模型LLM)简化文本的Python脚本。让我们深入代码并了解其功能。

导入必要的模块

脚本首先导入所需的模块,包括langchain_together中的Together,langchain.prompts中的PromptTemplate,json和asyncio。这些模块使得使用LangChain进行文本简化成为可能。

定义示例文本

脚本定义了示例文本,每个示例包含原始文本及其对应的中性版本。这些示例作为输入供LangChain模型学习和生成简化版本。

设置提示

prompt变量定义了一个提示模板,指示LangChain简化给定的文本。它指定了输入变量text,在处理过程中将被实际文本替换。

初始化LangChain

使用Together类初始化LangChain,指定要使用的模型(mistralai/Mistral-7B-Instruct-v0.2)、温度、top-k值和LangChain的API密钥。

处理文本

脚本从JSON文件中读取输入文本块,为每个块创建提示,并将批量提示发送给LangChain进行简化。LangChain生成输入文本的简化版本,然后将其存储在一个列表中。

from langchain_together import Together
from langchain.prompts import PromptTemplate
import json
import asyncio
from langchain_core.prompts.few_shot import FewShotPromptTemplate
import pprint
examples = [
    {      
        "Raw_text": """The purpose of this paper is to highlight the important advances in unsupervised learning, and after providing a tutorial introduction to these techniques, to review how such techniques have been, or could be, used for various tasks in modern next-generation networks comprising both computer networks as well as mobile telecom networks.""",        
        "Neutral_text": """The objective of this document is to outline significant progress in unsupervised learning. Following a tutorial-style introduction to these methods, it aims to examine the potential applications of such techniques in contemporary next-generation networks, encompassing computer networks and mobile telecommunications networks.""",    
    },    
    {
        "Raw_text": """The rapid advances in deep neural networks, the democratization of enormous computing capabilities through cloud computing and distributed computing, and the ability to store and process large swathes of data have motivated a surging interest in applying unsupervised ML techniques in the networking field.""",        
        "Neutral_text": """The swift progress in deep neural networks, the widespread access to vast computing power via cloud and distributed computing, and the capacity to handle extensive data sets have spurred a growing enthusiasm for the application of unsupervised machine learning techniques in the networking domai""", 
    }
]
example_prompt = PromptTemplate(
    input_variables=["Raw_text", "Neutral_text"], template="Raw_text: {Raw_text}\nNeutral_text:{Neutral_text}"
)
prompt=PromptTemplate(
    template=    
    """Simplify the given text. Your output should only be the simplified text nothing else.\n\n
Given text:\n{text}""",
    input_variables=["text"]
)
llm = Together(
    model="mistralai/Mistral-7B-Instruct-v0.2",    
    temperature=0.5,    
    top_k=1,    
    together_api_key="API_Key",    
    max_tokens=300
)
with open('./output_chunks.json', 'r') as f:
    data = json.load(f)
all_prompts = []
for chunk in data:
    formatted_prompt = prompt.format(text=chunk)    
    all_prompts.append(formatted_prompt)
chain=prompt|llm
print(len(data))
count=0
neutral_texts=[]
while len(all_prompts)>count:    
    ans=asyncio.run(chain.abatch(all_prompts[count:count+100]))    
    for a in ans:
        neutral_texts.append({"Raw_text":data[count],"Neutral_text":a})        
        print("===========================================================================")        
        print(data[count])        
        print("---------------------------------------------------------------------------")        
        print(a)
        print("===========================================================================")        
        count+=1    
    print("Processed ",count," texts")    
    with open('neutral_texts.json', 'w') as f:   
        json.dump(neutral_texts, f, indent=4)

使用 LangChain 进行高效文本分块

在本节中,我们将探讨一个使用 LangChain 高效将文本分割成较小块的 Python 脚本。让我们逐步分解代码并理解其功能。

导入必要模块

在这里插入图片描述

脚本首先导入了一些必要的模块,包括 os、json 和 langchain.text_splitter 中的 RecursiveCharacterTextSplitter。这些模块有助于使用 LangChain 进行文本分块。

初始化文本分块器

在这里插入图片描述

初始化了一个 RecursiveCharacterTextSplitter 对象,用于将文本分割成块。通过配置参数如 chunk_size 和 chunk_overlap 控制分块过程。

加载文本数据

在这里插入图片描述

脚本从名为 ‘extracted_text.json’ 的 JSON 文件中读取文本数据。这些数据很可能包含需要分割成较小、可管理块的大段文本。

将文本分割成块

在这里插入图片描述

对加载的数据中的文本项进行迭代,将每个项使用初始化的文本分块器分割成较小块。生成的块存储在名为 chunks_dict 的字典中。

将块保存到 JSON 文件

在这里插入图片描述

最后,脚本将生成的块保存到名为 ‘output_chunks.json’ 的新 JSON 文件中。该文件包含了分割后的文本块,可供进一步处理或分析使用。

运行 Tiny Llama:逐步指南

在本节中,我们将通过从 Google Colab 笔记本中提取的代码片段,逐步介绍设置和运行 Llama Factory 的过程。让我们逐步分解每个步骤,了解如何有效地执行 Tiny Llama 进行微调。

步骤 1:使用 LangChain 进行文本分块

在这里插入图片描述

这段代码演示了如何使用 LangChain 将大段文本分割成较小、可管理的块,这是在将数据输入到我们的 Tiny Llama 模型之前的关键预处理步骤。

步骤 2:安装所需软件包

!pip install bitsandbytes

这个命令安装了必要的 Python 软件包 bitsandbytes,这是与 Llama Factory 交互所需的软件包。

步骤 3:验证 GPU 可用性

import torch
assert torch.cuda.is_available() is True

确保 GPU 可用以有效运行 Llama Factory 是至关重要的。这个断言验证了 GPU 的可用性。

步骤 4:登录 Hugging Face

!huggingface-cli login --token Hugging_Face_Token

这个命令使用提供的令牌登录 Hugging Face,从而可以访问 Llama Factory 所需的模型和资源。

步骤 5:安装 TensorRT

!pip install tensorrt

TensorRT 是一个高性能的深度学习推理库。安装它对于优化模型推理性能是必要的。

步骤 6:运行 Llama Factory Web UI

!CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui

这个命令启动 Llama Factory 的 Web 用户界面(UI),允许用户与工厂进行交互并执行各种与文本相关的任务。

步骤 7:导出环境变量

!export GRADIO_SHARE=False

导出环境变量确保为运行 Llama Factory 的 Web 界面进行正确配置。

步骤 8:训练 Web 界面

!CUDA_VISIBLE_DEVICES=0 python src/train_web.py

这个命令启动了Llama Factory的Web界面的训练过程,可以根据特定的用例进行定制和优化。

运行界面前的一些先决条件

在启动Llama Factory Web界面之前,有一些关键的文件调整是必要的。这些调整确保功能的无缝性和模型与数据集的正确集成。让我们来看看必要的预配置:

1. 修改 interface.py

进入 interface.py 并找到 launch() 函数。右键单击以访问其定义,这将打开 blocks.py。在 blocks.py 中,设置 share: bool = True。这一步可以在Web界面内实现共享功能,增强协作和可访问性。

def launch():
    share: bool = True    
    # 其他配置和功能

2. 更新 constants.py

访问位于 data 文件夹中的 constants.py,具体位于 extras 子文件夹下。在这里,使用提供的代码片段注册您的模型。这一步确保Llama Factory Web界面能够无缝地识别和集成指定的模型。

"LLaMA-Tiny": {
    DownloadSource.DEFAULT: "TinyLlama/TinyLlama-1.1B-Chat-v1.0",},

3. 配置 dataset_info.json

打开 dataset_info.json,将您的数据集包含在Web界面中以供显示。定义数据集的规格,如文件名和列映射。这样可以确保用户可以在界面内轻松访问和使用数据集。

在这里插入图片描述

使用Llama Factory界面

第一步:模型选择和数据集配置

第一步是选择Tiny Llama模型作为基础,并选择要训练的数据集。借助Tiny Llama的高效性和有效性,再加上Llama Factory的灵活性,我们可以根据不同的文本生成任务来定制我们的模型,而在本例中是像研究人员一样写作。

图片img

第二步:配置训练设置

一旦选择了模型和数据集,我们就开始配置训练设置。在这里,我们设置关键参数,如学习率为2e-5,训练轮数为1.0,每批最大样本数为10,000。这些设置在确定训练模型的性能和收敛性方面起着至关重要的作用,确保获得最佳结果。

图片img

第三步:优化的高级配置

除了基本设置之外,我们还可以探索高级配置来进一步优化训练过程。其中一个配置是量化,我们将精度设置为4。通过降低模型权重和激活的精度,我们在模型大小和性能之间取得平衡,提高效率而不损失质量。

图片img

第四步:使用Llama Factory启动训练

配置好模型、数据集和设置后,我们可以使用Llama Factory启动训练过程。

图片img

结论

在本讨论中,我们介绍了在Google Colab上设置和执行Llama Factory的过程,利用LangChain的能力进行高效的文本处理。

通过按照这些步骤,用户可以有效地利用LangChain和Google Colab上的Llama Factory,为各个领域的文本处理和生成开启无限可能。

​

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

使用LoRA技术微调大语言模型,模仿特定写作风格实战指南 大语言模型(LLM)微调是提升模型在特定领域应用效果的关键技术。其核心原理是通过在预训练模型基础上,使用特定领域数据对模型参数进行有监督的调整,从而让模型掌握新的知识或技能。参数高效微调技术(PEFT)因其能大幅降低计算资源需求而成为主流实践方案,其中LoRA(Low-Rank Adaptation)通过引入低秩矩阵来模拟权重变化,实现了效果与效率的出色平衡。这种技术价值在于,它能以极低的参数量(通常仅为原模型的0.1%-1%)让模型快速适应新任务,同时避免灾难性遗忘,极大地降低了个人开发者和研究团队的应用 阅读详情

相关推荐

LLMs真的像人类一样写作吗?——语言风格的秘密

LLMs倾向于使用一些特定的词汇,而这些词汇在人类文本中的使用频率较低。例如,指令微调后的模型更倾向于使用信息密集的风格,表现为更频繁地使用名词化和从句结构,而基础模型的风格与人类更为接近。每篇文本的前500个词作为LLMs生成文本的提示,之后LLMs会继续生成500个词,使得我们可以直接比较LLMs生成的文本与人类的写作风格。这些差异表明,LLMs在生成文本时,存在一种“过度书写”的倾向,尤其是在指令微调后的模型中,这些模型更倾向于使用华丽、复杂的词汇,而这些词汇在人类的日常写作中并不常见。

步子哥的博客 185

Hugging Face Dataset的 dataset_info.json 文件详解

这个文件包含了有关数据集的基本信息、下载链接、数据集的分割、数据大小、文件格式等元数据。它通常位于数据集缓存目录下,在下载并解压数据集时由 HF 自动生成。

阿正的梦工坊 3037

古诗内容提取json格式转jsonl

古诗内容提取json格式转jsonl

open-instruct框架使用记录:只使用huggingface数据集的小部分进行训练,如何修改dataset_info.json文件

训模型的经验

阿正的梦工坊 2015

dataset-info.json 文件

llamafactory中 data目录下的 dataset_info.json 文件

Proteus仿真实战:用STM32F103C8T6输入捕获模式精准测量PWM频率(附完整代码)

本文详细解析了如何在Proteus仿真环境中,利用STM32F103C8T6的输入捕获模式精准测量PWM频率。文章从输入捕获的工作原理、Proteus电路搭建、模块化代码实现到调试优化,提供了完整的实战指南和代码示例,帮助开发者深入理解并掌握这一关键技术。

weixin_29158047的博客 257

五步炼丹,qwen通义千问1.5版本微调实战

通用千问微调,lora微调,qwen1.5微调,通义千问1.5微调,最近阿里大模型通义千问qwen推出了1.5版本的开源模型,涉及了0.5B, 1.8B, 4B, 7B, 14B, 及72b在内的多种参数模型与量化模型因此本篇文章是基于一个开源大模型微调训练工具包使用lora对qwen1.5的,但是对于每个人的机器配置以及cuda环境,可能会导致一些问题,如果遇到问题可以发在评论区,大家一起研究,同时测试数据我放到下面了,需要的自行获取。

IT大头的博客 2万+

svn 分支(branch)和标签(tag)管理

svn的分支管理

caohongxing的博客 3万+

用LangChain教AI模仿你的写作风格:详细教程

你已经掌握了如何使用LangChain构建一个模仿你写作风格的LLM。从文档提取、嵌入生成,到检索与内容生成,每一步都至关重要。结合RAG技术,LLM不仅能生成高质量内容,还能精准模仿你的写作风格,为你的创作带来更多可能性。

优快云_224022的博客 2664

DDR4 硬件设计笔记

DDR4-DRAM是第四代支持双倍数据读取,支持随机位置存取的静态存储器。DDR4-DRAM的工作原理。DDR之T拓扑和Fly-by拓扑。DDR的硬件设计。DDR4 PCB设计要点介绍。DDR4之PCB走线间距的串扰评估。DDR4之内存通道(channel)和内存列(rank)。

qq_26815321的博客 1万+

STM32实战:电容触摸屏I2C转USB HID设备全解析

本文详细解析了基于STM32的电容触摸屏I2C转USB HID设备实现方案。通过硬件选型、协议分析和代码实现,展示了如何将GT911触摸屏数据转换为标准USB HID协议,并提供了关键调试经验与性能优化技巧,为智能家居控制面板等应用提供高性价比解决方案。

weixin_42548829的博客 320

语言模型微调简述

大型语言模型的大部分知识来自预训练。我们可以通过继续预训练的形式进行微调,让大型语言模型接触更多(以及新的)数据 / 知识。以对齐为重点的目标可以通过在小型、高质量数据集上进行微调(有监督微调,SFT)来实现。我们不需要大量数据来学习输出的风格或格式,只有学习新知识时才需要。在进行微调时,非常重要的一点是我们要清楚自己的目标 —— 是对齐还是知识注入。然后,我们应该设置合适的基准测试,以便能够准确、全面地评估该目标是否已经实现。模仿模型未能做到这一点,从而导致了一系列具有误导性的说法 / 结果!

Whoisbug的博客 1059

Rasa Core开发指南

文章目录1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型4. 搭建CustomA...

老蒋也疯狂 1万+

模仿的专有大语言模型给出虚假承诺

23年5月份来自加州伯克利分校的论文“The False Promise of Imitating Proprietary LLMs“。

yorkhunter的博客 764

在ubuntu20.04中安装MATLAB时常见问题及解决方法

   如果你刚装完ubuntu20.04,这时你想要安装MATLAB2021A,在输入命令./install进行安装时,可能会报以下错误:    terminate called after throwing an instance of ‘JailContainerException’ what(): Error: 88: No JRE version parsed from/media/jzx/MATHWORKS_R2021A/sys /java/jre/glnxa64/jre/release   

慕羽★的博客 1万+

【unity实战】Cinemachine虚拟相机实战,使用InputSystem+Cinemachine+CharacterController复刻各种主流游戏的相机控制

这里主要是探讨如何使用InputSystem+Cinemachine+CharacterController复刻各种主流游戏的相机控制,我们主要专注Cinemachine实战效果,所以并不会深入讨论Cinemachine和CharacterController比较细节的参数介绍。注意:前面为了测试方便,我还是先用的旧的输入系统代替InputSystem【推荐100个unity插件之10】Unity最全的最详细的Cinemachine(虚拟相机系统)介绍,详细案例讲解,快速上手。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3750

微调语言模型前,需要考虑这三个关键方面

目前,市场正处于LLMs(大语言模型)和生成式人工智能的风口上。IBM的一项数据显示,将近三分之二的企业高管感受到了来自投资者的压力——要求他们加快使用生成式人工智能。自然而然,这种压力也传导到了数据科学和机器学习团队,他们肩负着抓住机遇、成功应用生成式AI的重任。随着形势的发展,LLMs的生态系统迅速分化为开源和商业化两种模式,“护城河”正被迅速填平。这一前所未有的局面促使许多团队思考一个问题:我们如何使LLM更贴近我们的具体需求?在本文中,我们细致探讨了构建一款特定垂直领域的LLM所需考虑的一些关键因素

Y525698136的博客 956

作为专家系统与应用的审稿人:提醒你投稿注意事项

本文为《专家系统与应用》(ESWA)期刊投稿指南,重点强调研究方向匹配性、学术质量和写作规范。要求论文以智能系统/算法为核心,突出增量创新并具可验证性,需包含严谨方法论和充分实验验证。写作需结构清晰,符合期刊格式要求,包括明确的研究问题、分类文献综述、详细技术实现和量化结果。投稿前需仔细核对期刊指南,引用相关文献,并妥善处理审稿意见。ESWA注重创新实质性和应用落地价值,建议突出智能系统设计核心,避免成为单纯技术应用描述。

ZhangJiqun&191cm&85kg 1804

AI 在模仿历史语言方面面临挑战:大型语言模型在生成历史风格文本时的困境与研究进展

为了探索 AI 在生成具有历史准确性文本方面的潜力,研究人员尝试了多种方法。他们从使用 20 世纪早期的散文对模型进行简单提示入手,逐步深入到对商业模型在该时期的少量书籍上进行微调。此外,他们还将这些结果与一个完全在 1880 年至 1914 年间出版的书籍上训练的独立模型进行了对比分析。

知来者逆的博客 1145

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WeClone大语言模型微调终极指南:从零构建你的AI数字分身

想拥有一个能模仿你说话风格的AI数字分身吗?WeClone作为从聊天记录创造数字分身的一站式解决方案,让你通过微调大语言模型,轻松打造专属的AI聊天机器人。本文将带你一步步完成从环境搭建到部署使用的全过程,即使是新手也能快速上手。 ## 📋 准备工作:环境搭建与依赖安装 在开始之前,我们需要先准备好必要的环境。首先克隆项目仓库: ```bash git clone https://gitco

gitblog_00989的博客 1003

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LLM大模型:微调语言模型前,需要考虑这三个关键方面

目前,市场正处于LLMs(大语言模型)和生成式人工智能的风口上。IBM的一项数据显示,将近三分之二的企业高管感受到了来自投资者的压力——要求他们加快使用生成式人工智能。

Langchain的博客 1309
上一篇: 探索AI的魔力:这5款AI应用让你全面感受人工智能的魅力
下一篇: QLoRA:高效的LLMs微调方法,48G内存可调65B 模型
冻感糕人~
博客等级 码龄3年 8926粉丝 2384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值