最近我一直在寻找合适的大模型平台,用来开发自己的AI应用。2024年是AI应用落地的重要一年,作为个人开发者,掌握和驾驭AI技术至关重要。最终我选择了智谱的GLM-4-Flash,以下是我在探索过程中获得的一些经验分享。
学习大模型需要先了解大模型
在使用大模型技术之前,了解市场上的主流大模型是必要的。目前,国外GPT系列一拔头筹,而国内则有GLM、文心一言、通义千问等,这些大模型各具特色,各有优势。
对中文语言处理更专业的大模型,其中最好的我认为就是GLM系列,而且智谱AI最近也官宣,8月27号之后,GLM-4-Flash对外全部免费调用,这款模型在中文文本的理解和生成方面表现更出色,尤其适合中文应用场景。作为开发者,非常值得尝试。
因为一些众所周知的原因,国外的大模型调用其实都比较困难,对于国内开发者来说并不友好,所以在国内做项目的开发者,个人还是推荐选择国内的大模型技术和平台。
GLM-4-Flash的特点与优势,以及如何调用和微调
GLM-4-Flash 是什么,开发者如何调用
对于需要处理大量文本的用户,GLM 4 Flash提供了128K Tokens的最大上下文,非常适合初雪AI应用开发的个人用户使用。
我是NodeJs开发者,所以我下边以NodeJs语言为例子进行介绍,5分钟学会调用GLM。
首先登录并注册:
智谱AI开放平台官网然后在API KEYS页面找到自己的API KEY并保存下来留到后边备用。
智谱AI开放平台本地创建自己的NodeJS工程,安装官方的NodeJS SDK(官网没有,但是Github上是有的)- npm install zhipuai-sdk-nodejs-v4
复制代码 下边是一个实际调用的例子:- const dialogue = async () => {
- const ai = new SDK.ZhipuAI({
- apiKey: KEY, //这里要换成上面自己的API KEY
- });
- const data = await ai.createCompletions({
- model: "glm-4-flash",
- messages: [
- { role: "user", content: "你好,请介绍下你自己吧" },
- ],
- stream: false,
- });
- console.log(data);
- console.log(data.choices[0].message);
- };
- dialogue();
复制代码 我们可以看一下输出:- {
- choices: [ { finish_reason: 'stop', index: 0, message: [Object] } ],
- created: 1724493625,
- id: '202408241800245f3dbf6f747d48d3',
- model: 'glm-4-flash',
- request_id: '202408241800245f3dbf6f747d48d3',
- usage: { completion_tokens: 55, prompt_tokens: 12, total_tokens: 67 }
- }
- {
- content: '你好!我是一个人工智能助手,基于大型语言模型开发而成。我的目标是帮助用户解答问题、提供信息以及进行各种智能互动。我可以处理多种类型的问题,从日常咨询到专业知识,力求为用户提供全面、准确的帮助。请问有什么可以帮助您的?',
- role: 'assistant'
- }
复制代码 实际上可以看到,调用这些大模型其实非常简单。感谢这些大模型开放平台,让我们能够如此便捷地利用AI技术。
如何微调 GLM-4-Flash
在微调大模型之前,先做一下简单的科普,什么是微调大模型,我们为什么要微调大模型?
什么是微调大模型,为什么要微调大模型?
大模型微调(Fine-Tuning)是对预训练大模型进行进一步训练的过程,以使其能够更好地适应特定任务或数据集。
首先,选择一个在大规模数据集上已经预训练好的模型,如GLM(General Language Model)。然后准备一个与特定任务相关的数据集,例如用于文本生成或问答的样本。接下来,在这些特定任务的数据上进行微调训练,调整GLM的参数以提高其在新任务上的表现。
最后,通过评估模型在任务中的效果,并根据需要进行参数调整或再训练,进一步优化模型的性能。
微调的优势在于其高效性,相比从头训练一个模型,微调能够节省大量计算资源和时间,同时使模型更具适应性,提升其在特定领域的准确性和效果。
微调的方式有哪些?
微调(Fine-tuning)是让预训练的大语言模型(LLM)适应特定领域任务的关键技术。根据不同的需求和资源,微调可以分为全面微调和参数高效微调两种策略。
全面微调(Full Fine-Tuning)是指对预训练模型的所有参数进行调整,以使模型更好地适应特定任务或数据集。这种方法通常需要较大的计算资源和训练时间,但能最大化地利用预训练模型的能力,使其在新任务上表现更加出色。适合需要深度定制模型能力的场景,例如特定行业的专业应用。
参数高效微调(Parameter-Efficient Fine-Tuning)则通过只调整模型的一部分参数或引入额外的微调模块来实现,减少了计算资源的需求。常见的方法包括“适配器”或“前缀调节”,这些方法能够在保留原有模型大部分参数不变的情况下,迅速适应新任务。这种方法适合资源有限的情况,同时能快速完成模型的定制和应用。
在智谱AI的模型微调控制台,这2种方式都支持。
大模型微调实战和应用
下边我就用IMDb电影评论数据集来测试一下他们的微调流程和效果,之所以选择IMDb电影评论数据集,是因为他在自然语言处理、情感分析和推荐系统等领域的研究中,被广泛使用并被视为经典,而且数据集容易找到,方便大家理解。
数据集地址:https://ai.stanford.edu/~amaas/data/sentiment/
编写代码对数据进行处理,达到智谱数据集格式要求:- const fs = require("fs-extra");
- const path = require("path");
- // 递归函数读取目录中的所有文件
- async function readDirRecursive(dir) {
- const results = [];
- // 读取目录中的所有文件和子目录
- const list = await fs.readdir(dir);
- for (const file of list) {
- const filePath = path.join(dir, file);
- const stat = await fs.stat(filePath);
- if (stat.isDirectory()) {
- // 如果是目录,递归读取子目录
- results.push(...(await readDirRecursive(filePath)));
- } else {
- // 如果是文件,添加到结果数组
- results.push(filePath);
- }
- }
- return results;
- }
- // 使用示例
- const train_dir = path.join(__dirname, "./aclImdb/train/");
- const test_dir = path.join(__dirname, "./aclImdb/test/");
- const train_file = path.join(__dirname, "./train.jsonl");
- const test_file = path.join(__dirname, "./test.jsonl");
- function createTemplate(comment, result) {
- let temp = {};
- temp.messages = [];
- temp.messages.push({
- role: "system",
- content:
- "你是一位电影评论好评差评评论专家,请用中文回答下边的评论是好评还是差评。",
- });
- temp.messages.push({ role: "user", content: comment });
- temp.messages.push({ role: "assistant", content: result ? "好评" : "差评" });
- return JSON.stringify(temp) + "\n";
- }
- function writeLine(file, isPos) {
- let comment = fs.readFileSync(file, "utf8");
- let result = isPos;
- let line = createTemplate(comment.replace(/"/gi, "'"), result);
- return line;
- }
- async function createfile(type, file) {
- let dir = type === "train" ? train_dir : test_dir;
- let negAllFiles = await readDirRecursive(dir + "/neg");
- let posAllFiles = await readDirRecursive(dir + "/pos");
- let str = "";
- negAllFiles.forEach((file) => {
- str += writeLine(file, false);
- });
- posAllFiles.forEach((file) => {
- str += writeLine(file, true);
- });
- fs.writeFileSync(file, str);
- }
- createfile("train", train_file);
- createfile("test", test_file);
复制代码 处理完毕得到train和test两个数据集用来训练和测试,然后上传到数据集平台。
创建数据集
下面我们开始设置训练任务和测试数据,选择LoRA微调模式,选择对应的数据集。
到这里点击创建后,就可以慢慢等结果了,大概30分钟左右就可以训练完成。
可以看到Train 和 Validation loss都在不断降低收敛,效果还是挺不错的。
模型训练结束之后,就可以直接去体验了,在体验中心可以使用对话方式进行验证,选择我们刚才训练的模型名,进行对话体验。
最后如果想自己单独部署,使用API调用也很简单,选择模型私有化部署就可以。
在代码层面只需把model更换成微调后的模型名字即可。
通过实战体验,使用智谱的开放平台调用和微调大模型都非常便捷。通过GLM-4-Flash,用户可以免费获得高效的语言模型,极大地降低了AI应用的开发成本。平台不仅提供了低成本的使用选项,还免去了本地配置复杂开发环境的需求。只需通过简单的代码,即可实现AI应用的快速部署和落地,为开发者提供了极大的便利。
GLM-4-Flash 免费背后的意义
从8月27号起,GLM-4-Flash的免费开放对开发者来说是个巨大机遇。这不仅降低了技术门槛,让我们可以轻松试验和开发新应用,还为个人和小团队提供了接触先进语言模型的机会。在AI迅速发展的今天,积极参与AI应用开发是保持竞争力的关键,抓住这个机会至关重要。 |
|