AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


普通人秒变AI专家:李沐创业同款RAG微调实战,打造专属外卖评论大模型
发布日期:2024-08-19 12:31:50 浏览次数: 1780


8月14日晚上,李沐发布了一篇关于他创业一年的复盘文章《创业一年,人间三年》,引起了广泛关注。这篇文章中,李沐分享了从创业初期到现在的心路历程,许多读者读后都倍感激动。

创业之初,李沐的团队原本打算利用大语言模型(LLM)开发生产力工具。然而,在张一鸣的建议下,他们决定直接开发大语言模型本身,这一选择引领了他们进入一个更具挑战性的领域。

文章中,他详细描述了他们对LLM的认知发展,分为四个阶段:从Bert到GPT-3的探索、被GPT-4的强大所震撼、针对具体问题进行模型训练,直到最终定制出超越GPT-4的模型。

经过一年的努力,李沐的公司实现了收支平衡,主要支出集中在人力和算力上,而收入则来自于为大客户定制模型的服务。这种定制模型的过程涉及为垂直行业和特定领域开发专用的大语言模型。

对于普通人来说,这些看似高深的工作,其实也可以通过大语言模型的微调来进行体验。微调技术让你能够在已有的大模型基础上,针对特定任务或领域进行优化,打造出更符合特定需求的应用。

这不仅是一次技术上的尝试,更是一次通过亲身实践去感受前沿科技的机会。对于那些对AI和大语言模型感兴趣的创业者或个人,微调模型无疑是一个快速上手的入口,值得一试。

这篇文章将以文本分类为背景,展示如何微调一个用于外卖评论好评差评判断的模型。我们将以大家最容易接触的国产智谱大语言模型为例,详细说明从数据准备到模型微调的完整流程。

通过这个实例,普通人也能轻松体验到大语言模型微调的乐趣和实际应用价值。无论你是开发者还是对AI感兴趣的初学者,跟随这个步骤,你将能够亲身感受到AI如何为实际问题提供解决方案。

文本分类概述

文本分类是自然语言处理中的一项核心任务,广泛应用于情感分析、主题标签分类、问答系统和对话行为分类等领域。

传统的机器学习方法,如逻辑回归、朴素贝叶斯和支持向量机,虽然在处理已知类别上表现良好,但依赖大量标记数据,且在面对新任务时表现有限。

深度学习方法,如深度神经网络、递归神经网络和卷积神经网络,通过捕捉复杂的数据关系,已经在性能上超越了传统算法。

然而,这些深度学习模型同样依赖大量标记数据,并且在不经过大量重新训练的情况下,难以快速适应新任务。这使得在实际应用中,模型的适应性和灵活性仍然是一个挑战。

随着大语言模型的迅猛发展,尤其是以Transformer架构为基础的模型,如LLaMA系列和GPT系列,将NLP的发展推向了新的高度。这些模型拥有从数千亿到数万亿不等的参数,通过在大规模文本数据上进行预训练,极大地提升了其语言理解和生成能力。

相较于传统的深度学习方法,大语言模型以其更大的参数规模捕捉到更加丰富的语言表示,展现出更强的泛化能力,能够迅速适应各种下游任务。例如,在文本情感分析、阅读理解和代码生成等应用场景中,大语言模型都表现出了卓越的性能。


智谱大语言模型概述

智谱大语言模型(GLM)‌是由智谱AI研发的一系列大语言模型,旨在推动中国创新大模型的发展。自2020年底开始,智谱AI致力于研发GLM预训练架构,并成功训练出GLM-10B模型。

随后,采用MoE架构训练出万亿稀疏模型,并在2022年合作研发了双语千亿级超大规模预训练模型GLM-130B。智谱AI的目标是构建一个千亿基座模型,以打造大模型平台和产品矩阵。

最新消息,100万上下文长文本模型GLM-4-Long来了100万,大约相当2本红楼梦或者125篇科研论文的长度,极大的提高了模型的上下文理解能力,丰富了大模型应用落地能力。GLM-4-Long模型属于GLM-4系列通用大模型,专为处理超长文本和记忆型任务设计。

接下来,我们将通过使用智谱大语言模型,亲身体验一把大模型微调训练的过程。这个过程将帮助你了解如何利用已有的大语言模型,通过微调来适应特定的任务需求,比如对外卖评论的好评和差评进行精准判断。

无论你是否有编程基础,通过这个简单的操作步骤,你都可以直观感受到大模型在实际应用中的强大潜力。让我们一起进入这个AI世界,开启微调之旅。

什么是微调?

模型微调是一种通过引入企业特有的场景数据,利用微调工具对现有的基础模型进行调整的技术。这种方法可以帮助您快速定制出与您的业务场景高度契合的专属大模型。

微调的优势在于只需对基础模型进行小幅修改,就能实现特定需求的满足,这不仅提高了效率,还显著降低了成本,相较于从头训练新模型,更加经济实用。

李沐的文章中也证实了这个结论,微调定制模型的成本为GPT系列成本的十分之一。

为什么要微调?

微调模型的主要原因在于,当模型的推理结果未能达到预期时,简单地通过单样本或少样本推理来调整模型输出效果并不总是奏效,特别是对于较小的LLM(大语言模型)。

这些推理策略通常通过在提示中添加一个或多个已完成的示例来优化输出,但这种方法有其局限性。首先,提示中包含的示例会占用上下文窗口的空间,导致可用来包含其他有用信息的空间减少。其次,这些策略在实际应用中并不总是能够解决问题。

当这些方法都无法有效解决问题时,就需要对LLM进行微调。与预训练阶段不同,微调是一个监督学习过程,它使用标记好的示例数据集来更新模型的权重,从而使模型更好地完成特定任务。通过这种方式,微调能够针对特定的业务场景或任务需求,对基础模型进行少量调整,以低成本、高效率地定制出更符合实际需求的专属大模型。

这就是微调的核心价值所在:在优化模型输出的同时,最大化利用有限的上下文窗口空间,提升模型的实际应用效果。

微调有哪些方式?

微调(Fine-tuning)是让预训练的大语言模型(LLM)适应特定领域任务的关键技术。根据不同的需求和资源,可以选择全面微调或参数高效微调。

全面微调是指对预训练模型的所有参数进行调整,通过合理的数据准备、训练、评估和调整策略,使其在特定领域的数据集或任务上表现得更出色。适用于数据量大、计算资源充足的场景。


参数高效微调(Parameter-Efficient Fine-Tuning),简称PEFT。在论文《Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning》中,对2019年2月至2023年2月期间发表的40多篇论文进行了参数高效微调方法的系统概述。

它提供了一个涵盖广泛方法的分类法,把参数高效微调分为三大类:基于Addition、基于Selection和基于Reparametrization。其中,在基于Addition的方法中,又区分出2类:Adapter-like和Soft prompts。详细的分类图如下图所示。

在智谱的大语言模型微调控制台,这2种方式都支持。

LoRA微调:通过在模型的现有权重矩阵中添加低秩矩阵来调整模型,可以在增加少量计算负担的情况下有效调整模型。优点:只需要添加少量参数,参数效率高;资源利用少且训练周期较。

全参微调:对预训练模型的所有参数进行调整获得新模型。优点:可以对模型进行全面的调整,使其更好地适应新任务;在有足够数据和计算资源的情况下,更可能达到更优的性能。

微调的基本流程

首先是数据准备,选择与任务相关的数据集,并对数据进行清洗、分词和编码等预处理。

接下来是选择基础模型,通常选择一个预训练好的大语言模型,如glm-4-flash(LoRA微调、全参微调,所有用户可用)、glm-4-9b(LoRA微调、全参微调,所有用户可用)和chatglm3-6b(LoRA微调,所有用户可用)

随后,设定微调参数,包括学习率、训练轮次、批处理大小等,同时根据需要设定其他参数如权重衰减和梯度剪切等。

最后是微调流程,加载预训练模型及其权重,根据任务需求对模型进行必要的修改,如更改输出层,然后选择合适的损失函数和优化器,使用准备好的数据集进行微调训练,包括前向传播、损失计算、反向传播和权重更新。

接下来,让我们进入实战环节,体验一下如何微调大模型。通过实际操作,您将能够亲身感受到从数据准备、参数设置到模型训练的全过程,最终定制出符合特定业务需求的专属模型。

这不仅是一个理论上的学习过程,更是对实际应用场景的深度理解和掌握。准备好了吗?我们马上开始微调吧。

智谱大模型微调实战

1. 准备数据集

本次使用的是公开的某外卖平台收集的用户评价数据集,数据文件为 waimai_10k.csv。该数据集包含约4000条正向评论和约8000条负向评论。


数据:https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/waimai_10k/waimai_10k.csv

微调训练数据通常由一批包含输入和期望输出的数据构成,每条训练数据由单个输入(Prompt)以及对应的期望输出组成。目前仅支持以 jsonl 格式的文件上传训练数据。数据集格式如下:

{"messages": [{"role": "system", "content": "你是一位外卖评论好评差评评论专家。"}, {"role": "user", "content": "比在店里吃还便宜"}, {"role": "assistant", "content": "好评"}]}{"messages": [{"role": "system", "content": "你是一位外卖评论好评差评评论专家。"}, {"role": "user", "content": "还是那个味道,都很喜欢"}, {"role": "assistant", "content": "好评"}]}{"messages": [{"role": "system", "content": "你是一位外卖评论好评差评评论专家。"}, {"role": "user", "content": "送餐快,送餐大哥态度好,辛苦啦"}, {"role": "assistant", "content": "好评"}]}{"messages": [{"role": "system", "content": "你是一位外卖评论好评差评评论专家。"}, {"role": "user", "content": "垃圾,吃了拉肚子,恶心,垃圾,菜也是凉的,饭也不好。劝大家小心,本人亲自体验,实在太垃圾。"}, {"role": "assistant", "content": "差评"}]}{"messages": [{"role": "system", "content": "你是一位外卖评论好评差评评论专家。"}, {"role": "user", "content": "一品豆腐光给豆腐不给蘸酱,没有筷子!"}, {"role": "assistant", "content": "差评"}]}

通过下面的代码把数据分割成两部分,一部分做训练集,一部分做验证集。

import jsonimport pandas as pdfrom sklearn.model_selection import train_test_split
df = pd.read_csv("waimai_10k.csv")train_df, test_df = train_test_split(df, test_size=0.3, random_state=100)
def prepare_fine_tunes_data(datasets: list, output_file="result.jsonl"):system_content = "你是一位外卖评论好评差评评论专家。"system_content = {"role": "system", "content": system_content}with open(output_file, 'w', encoding='utf-8') as fd:for dataset in datasets:messages = [system_content]
review = dataset.get('review')user_content = {"role": "user", "content": review}messages.append(user_content)
label = dataset.get('label')label = '好评' if label == 1 else '差评'assistant_content = {"role": "assistant", "content": label}messages.append(assistant_content)row = {"messages": messages}row_dumps = json.dumps(row, ensure_ascii=False)fd.write(row_dumps + "\n")

train_file = "train.jsonl"test_file = "test.jsonl"
prepare_fine_tunes_data(train_df.to_dict(orient='records'), train_file)prepare_fine_tunes_data(test_df.to_dict(orient='records'), test_file)

2. 创建数据集

3. 创建微调任务

如果已经按照上述说明准备好了优质的训练数据,接下来您可以开始创建微调任务,训练模型。通过页面操作微调任务创建,入口如下:

本次优先选择LoRA微调模式。

然后配置微调参数。

不得不说,国内的大语言模型真便宜,香~~

本次训练一轮需要6.0972元。

在微调大语言模型时,几个关键参数会直接影响模型的表现和训练效果。下面是对常见微调参数的解释:

学习率 (Learning Rate):这是控制模型权重更新步幅的参数。学习率决定了每次权重更新的幅度,较高的学习率可能导致训练过程不稳定,而过低的学习率可能导致训练速度缓慢甚至陷入局部最优解。

训练轮次 (Epochs):指整个训练数据集被输入模型的次数。更多的训练轮次可以让模型更好地学习数据,但也可能导致过拟合,特别是在小数据集上。

批处理大小 (Batch Size):这是每次更新模型权重时使用的数据量。较大的批处理大小能更稳定地更新权重,但需要更多的内存资源;较小的批处理大小则训练速度较慢,但内存需求更少。

4. 确认创建任务

刚提交的任务,显示排队中。(提交之后,可以去喝杯茶了,等会再来看结果)

查看任务详情,预计完成时间从提交到完成时间,大概30分钟吧,效率杠杠滴。

评估效果如下图,Train 和 Validation loss都在不断收敛。

5. 模型评估与体验

模型训练结束之后,可以去体验和部署,先看看体验吧。

击右上角的“去体验”按钮:

在输入框,输入评论进行体验。

6. 微调模型部署

在智谱微调之后的模型可以选择在线部署,部署界面如下:在模型配置区域,用户可以输入微调后的模型,设置部署实例个数。

整个部署流程设计得既适合初学者快速上手,也能满足专业开发者的高级需求。通过这样的在线部署平台,用户可以轻松地将智谱微调后的模型转化为实际可用的服务,加速AI技术的应用和创新。


通过上述步骤,我们成功完成了智谱大语言模型的训练过程。整个过程涵盖了从数据准备、选择基础模型、设定微调参数,到实际微调流程的所有关键环节。通过这些步骤,我们不仅将模型调整到了符合特定任务需求的状态,还有效地优化了模型的性能,提升了其在处理特定问题时的准确性和效率。

这一实战过程展示了大语言模型微调的强大能力,让我们能够创建出更具针对性和实用性的定制化模型,为各种实际应用场景提供了可靠的技术支持。建议大家都动手试一试。

结束语

李沐在文章中提到的对大模型的愿景,即创造能够长期陪伴人类的智能体,具有高情商和智商,这体现了一种深远的思考和对技术潜力的深刻理解。他所追求的不仅仅是技术上的突破,更是对人类情感和社会联系的深刻洞察。

关于创业感悟,李沐表达了超越名利,追求生命意义的态度。这与许多历史上的名言不谋而合。使我我最喜欢的史蒂夫·乔布斯(Steve Jobs)的一句话来阐述这种创业精神:

翻译成中文的意思是:

对于李沐而言,创业并不仅仅是为了财富或名誉,而是为了创造价值,实现一种更深层次的满足和生命的意义。

这种态度对我们普通人来说也有启发,让我们认识到,追求财富和名誉固然重要,但更重要的是如何通过自己的努力创造真实的价值,做一些真正有意义的事情。

无论是创业还是其他领域,我们都可以从中汲取灵感,努力在自己的工作和生活中实现价值,成就自己,并从中获得内心的满足和生命的意义。通过这种方式,我们不仅能够在物质上获得回报,更能在精神上获得充实和满足,真正体验到生活的深刻意义。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询