乙巳马年·皇城大门春联生成终端W模型微调实战:注入特定企业文化元素

news2026/4/21 21:35:13
乙巳马年·皇城大门春联生成终端W模型微调实战注入特定企业文化元素最近几年用AI写春联、对对联已经不是什么新鲜事了。很多公司都尝试过用现成的模型来生成一些吉祥话但结果往往差强人意——要么是千篇一律的套话要么就是跟自家公司的气质完全不搭边。我们团队去年就遇到了这个问题。公司想在乙巳马年推出一款带有“皇城大门”主题元素的定制春联作为给客户的新年礼物。我们试了好几个公开的模型生成的春联要么太“通用”要么意境和用词跟我们的品牌文化对不上。比如我们公司强调“稳健”和“创新”但模型生成的春联里要么是“财源广进”这类过于常见的词汇要么就是一些天马行空但不符合我们调性的对子。后来我们意识到想要真正解决问题不能只靠“拿来主义”。最好的办法是让模型学会我们自己的“语言”。于是我们决定动手用公司过去几年积累的优秀春联作品作为“教材”对一个大语言模型进行专门的“训练”也就是模型微调。这个过程听起来有点技术门槛但实际操作下来我们发现只要思路清晰、步骤明确完全可以在一个下午的时间里跑通整个流程。今天这篇文章我就把我们从数据准备到最终模型上线的完整过程分享出来希望能给有类似需求的朋友们提供一个清晰的参考。1. 微调能解决什么问题为什么不用提示词在开始动手之前我们先得想清楚为什么要大费周章地做模型微调直接用更精巧的提示词Prompt去引导模型不行吗这确实是个好问题。我们最初也尝试过用提示词工程比如在输入里加上“请生成一副体现稳健与创新精神的、带有‘皇城大门’意象的春联”。模型有时候能给出不错的句子但问题在于不稳定和不可控。风格不稳定这次生成的还不错下次同样的提示词可能就偏了需要反复调整和筛选效率很低。知识不可控模型并不知道我们公司内部那些特有的文化词汇、历史典故或者产品名称。它无法在上下文中“记住”并运用这些专属信息。格式易出错春联有严格的平仄、对仗和字数要求。通用模型虽然懂规则但生成时偶尔还是会出格需要人工反复校验。而模型微调恰恰就是为了解决这些问题。你可以把它理解为给一个“通才”模型进行“岗前培训”。我们用自己的数据集公司历年优秀春联作为培训材料让模型深入学习我们特有的用词偏好比如我们喜欢用“基石”、“骏业”代替“财源”、“生意”。行文风格是偏典雅稳重还是活泼现代主题范围除了通用吉祥话如何自然地融入“数字化”、“云服务”等业务相关元素。格式规范确保每一次生成都严格符合七言或五言对联的格律。经过微调后的模型就像一个已经熟悉了公司文化的“老员工”你只需要给它一个简单的指令比如“生成马年大门春联”它就能自动输出风格统一、质量稳定、且深深打上公司烙印的作品。从长期来看这比每次都要写小作文一样的提示词要高效、可靠得多。2. 准备工作数据、模型与平台微调就像做菜食材、厨具和厨房得先准备好。我们的准备工作主要围绕三件事数据、基础模型和计算平台。2.1 数据准备把公司春联变成“教材”这是最关键的一步。数据质量直接决定了微调后模型的“成色”。我们的数据来源是公司过去五年行政部收集的优秀春联大约有200多副。原始数据可能是Word文档、Excel表格或者图片。我们需要把它整理成模型能理解的格式。通常用于对话或文本生成的微调数据格式是一个包含“instruction”指令和“output”输出的JSON列表。但对于春联生成这种“条件生成”任务结构可以更简单直接。我们采用“上联-下联-横批”作为一条样本同时把一些关键属性如年份、适用场景也放进去。我们编写了一个简单的Python脚本将Excel数据转换为标准的JSON格式import pandas as pd import json # 假设原始数据在一个Excel里有‘up’, ‘down’, ‘horizontal’, ‘year’, ‘theme’这几列 df pd.read_excel(‘company_couplets.xlsx’) data_list [] for _, row in df.iterrows(): # 构建一个清晰的“指令”告诉模型要生成什么 instruction f请生成一副适用于{row[‘year’]}年、主题为‘{row[‘theme’]}’的公司大门春联。 # 构建完整的输出 output f上联{row[‘up’]}\n下联{row[‘down’]}\n横批{row[‘horizontal’]} data_list.append({ “instruction”: instruction, “input”: “”, # 这里我们没有额外输入留空 “output”: output }) # 保存为JSON文件 with open(‘couplets_train.json’, ‘w’, encoding‘utf-8’) as f: json.dump(data_list, f, ensure_asciiFalse, indent2) print(f”共处理了 {len(data_list)} 条数据已保存到 couplets_train.json”)处理完的数据我们按照8:2的比例拆分成训练集train.json和验证集eval.json用于训练和评估模型。2.2 选择基础模型找一个好“胚子”我们不需要从零训练一个模型那样成本太高。而是选择一个在中文理解和生成上表现良好的开源大语言模型作为起点。考虑到春联是典型的中文文化产物我们选择了在中文语料上训练充分、且对对联任务有潜在基础的模型例如Qwen1.5-7B-Chat或ChatGLM3-6B。这类模型已经具备了强大的语言能力我们的微调只是对它进行“精修”注入特定知识。2.3 选择计算平台在云端“开火”模型微调需要强大的GPU算力。自己购买和维护显卡成本高昂因此我们选择在云端的GPU平台上进行。这里我们使用星图GPU平台它提供了丰富的算力选项和预置的环境非常适合快速启动深度学习任务。在星图平台上我们可以选择一台带有足够显存例如24GB或以上的GPU实例这样就能轻松跑动7B参数规模的模型。3. 实战开始使用PEFT进行高效微调万事俱备现在可以开始“烹饪”了。传统的全参数微调需要更新模型的所有权重非常耗时耗资源。现在更流行的方法是参数高效微调其中LoRA是最常用的一种。LoRA的原理很巧妙它不在原模型庞大的权重矩阵上直接动刀而是通过引入两个小的、可训练的“适配器”矩阵让模型在微调时只学习这些新增的参数。这就像给模型加了一个“外挂模块”训练又快保存的模型文件又小。3.1 环境搭建与依赖安装在星图GPU平台创建实例后我们通过终端连接。首先创建一个Python虚拟环境并安装必要的库。# 创建并激活虚拟环境 python -m venv venv source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows # 安装核心库 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 根据CUDA版本选择 pip install transformers datasets peft accelerate trl bitsandbytes3.2 数据加载与预处理使用datasets库可以方便地加载我们准备好的JSON数据。from datasets import load_dataset # 加载数据集 dataset load_dataset(‘json’, data_files{‘train’: ‘train.json’, ‘validation’: ‘eval.json’}) # 定义一个处理函数将数据格式化为模型需要的对话格式 def format_conversation(example): # 这里我们使用ChatML格式这是很多对话模型支持的格式 formatted_text f”|im_start|user\n{example[‘instruction’]}|im_end|\n|im_start|assistant\n{example[‘output’]}|im_end|” return {‘text’: formatted_text} # 应用处理函数 tokenized_dataset dataset.map(format_conversation, remove_columnsdataset[‘train’].column_names)接下来需要对文本进行分词将其转换为模型能处理的数字ID。from transformers import AutoTokenizer model_name “Qwen/Qwen1.5-7B-Chat” # 以Qwen为例 tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) tokenizer.pad_token tokenizer.eos_token # 设置填充令牌 def tokenize_function(examples): return tokenizer(examples[“text”], truncationTrue, padding“max_length”, max_length512) tokenized_datasets tokenized_dataset.map(tokenize_function, batchedTrue)3.3 配置LoRA并加载模型现在我们来配置PEFT参数高效微调并加载基础模型。from transformers import AutoModelForCausalLM, TrainingArguments, Trainer from peft import LoraConfig, get_peft_model, TaskType import torch # 1. 定义LoRA配置 lora_config LoraConfig( task_typeTaskType.CAUSAL_LM, # 因果语言模型任务 r8, # LoRA的秩影响适配器大小通常8或16 lora_alpha32, # 缩放参数 lora_dropout0.1, # Dropout率防止过拟合 target_modules[“q_proj”, “v_proj”] # 对Transformer中的Q, V投影层应用LoRA ) # 2. 加载基础模型使用4-bit量化以节省显存 model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, # 使用半精度浮点数 device_map“auto”, # 自动分配模型层到GPU load_in_4bitTrue, # 4-bit量化 trust_remote_codeTrue ) # 3. 将基础模型转换为PEFT模型 model get_peft_model(model, lora_config) model.print_trainable_parameters() # 打印可训练参数量会发现只占原模型的很小一部分3.4 设置训练参数并开始训练我们使用TrainerAPI来管理训练循环。# 定义训练参数 training_args TrainingArguments( output_dir“./qwen-couplet-lora”, # 输出目录 num_train_epochs5, # 训练轮数根据数据集大小调整 per_device_train_batch_size4, # 每个GPU的批次大小 per_device_eval_batch_size4, gradient_accumulation_steps4, # 梯度累积步数模拟更大批次 warmup_steps100, # 学习率预热步数 logging_steps50, # 每50步记录一次日志 save_steps500, # 每500步保存一次检查点 eval_strategy“steps”, # 按步数进行评估 eval_steps500, learning_rate2e-4, # 学习率LoRA通常可以设大一点 fp16True, # 使用混合精度训练加速 push_to_hubFalse, # 不上传到Hugging Face Hub report_to“none”, # 不报告到其他平台 ) # 创建Trainer trainer Trainer( modelmodel, argstraining_args, train_datasettokenized_datasets[“train”], eval_datasettokenized_datasets[“validation”], tokenizertokenizer, ) # 开始训练 trainer.train()训练开始后你可以在终端看到损失值下降的过程。根据数据量和GPU性能这个过程可能需要几十分钟到几小时。4. 模型评估与应用看看“培训”成果如何训练完成后我们保存的其实主要是LoRA适配器的权重通常只有几十MB而不是整个7B的大模型。这非常便于分享和部署。4.1 加载微调后的模型进行推理from peft import PeftModel # 加载基础模型 base_model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, device_map“auto”, trust_remote_codeTrue ) # 加载训练好的LoRA权重 model PeftModel.from_pretrained(base_model, “./qwen-couplet-lora/checkpoint-1000”) # 替换为你的检查点路径 model model.merge_and_unload() # 将LoRA权重合并到基础模型中便于后续推理 # 准备提示词 prompt “请生成一副适用于乙巳马年、体现公司稳健与创新精神的公司大门春联。” inputs tokenizer(prompt, return_tensors“pt”).to(model.device) # 生成 with torch.no_grad(): outputs model.generate(**inputs, max_new_tokens100, temperature0.8, do_sampleTrue) generated_text tokenizer.decode(outputs[0], skip_special_tokensTrue) print(generated_text)4.2 效果对比与评估我们对比了微调前后模型生成的结果微调前通用模型输入相同提示词生成结果多为“骏马奔腾迎新春吉祥如意贺新年”这类通用对子缺乏个性。微调后我们的模型生成了“上联数字云途稳如磐石奠骏业下联创新智道疾似天马拓新程横批龙马精神”。这副对联不仅包含了“马年”元素还巧妙融入了“数字云途”、“创新智道”等业务关键词并且“稳如磐石”和“疾似天马”的对仗精准地体现了“稳健”与“创新”并存的企业文化。我们让公司行政部和市场部的同事对多组生成结果进行盲评微调后模型的输出在“符合公司文化”、“用词精准”、“对仗工整”等多个维度上得分都显著高于通用模型。5. 总结与后续思考回过头来看这次微调实战整个过程其实是一条清晰的路径明确需求 - 准备高质量数据 - 选择合适的基础模型和高效微调技术 - 在云平台上执行训练 - 评估并应用成果。最大的感触是数据是灵魂。我们花在清洗、整理和格式化公司历年春联上的时间远比调参要多但这份投入是值得的。正是这些高质量的数据让模型真正学会了我们的“语言风格”。另外PEFT尤其是LoRA这类技术大大降低了微调的门槛。我们不需要动辄数张A100显卡在星图平台上一张高性能的消费级显卡就能在可接受的时间内完成训练且产出的模型权重文件小巧部署起来非常方便。这次成功之后我们已经在考虑下一步的计划。比如是否可以收集更多元的数据如公司内部邮件、宣传文案的写作风格让模型不仅能写春联还能辅助生成其他类型的、带有公司特色的文案或者将微调后的模型封装成一个简单的Web应用让非技术部门的同事也能轻松使用模型微调就像一把钥匙为你打开了定制化AI应用的大门。它不再是一个遥不可及的黑科技而是任何一个有数据、有明确场景的团队都可以尝试的工程实践。如果你的企业也有类似的、希望AI能更“懂你”的需求不妨就从整理你的专属数据集开始吧。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…