🚀 数字人格克隆:OmniDimen-4B-Emotion 的 LoRA 人格化分支训练

🚀 数字人格克隆:OmniDimen-4B-Emotion 的 LoRA 人格化分支训练
拾璃🚀 数字人格克隆:OmniDimen-4B-Emotion 的 LoRA 人格化分支训练
这份笔记旨在帮助你使用自己的聊天数据,通过 LoRA (Low-Rank Adaptation) 高效微调技术,在强大的中文情感模型 OmniDimen-4B-Emotion 的基础上,克隆一个具有特定“人格”的语言模型。你可以将其视为为你所选择的基础模型,训练一个轻量级的、可插拔的“人格分支”。
整个过程被封装在 Google Colab 笔记本中,你只需要按照步骤运行单元格并配置参数,即可开始训练。
✨ 核心特性
- 一键运行:点击上方 “在 Colab 中打开” 按钮,即可将完整的训练环境保存到你自己的 Google Drive 并开始使用。
- 高效微调:采用 LoRA 和 4-bit 量化技术,即使在 Colab 提供的免费 T4 GPU 上也能轻松训练 4B(40亿参数)规模的模型。
- 智能数据处理:内置两种数据准备模式:
- 聊天记录自动解析 🧠:可直接处理从QQ/微信导出的
.txt格式聊天记录,自动转换成训练格式。 - 强学习手动输入 ✍️:通过简单的
Q:A:格式,为模型注入核心人设和知识。
- 聊天记录自动解析 🧠:可直接处理从QQ/微信导出的
- 持久化存储:可选择将基础模型和训练成果(LoRA 适配器)永久保存在你的 Google Drive 中,方便长期迭代和使用。
- 实时监控:集成 TensorBoard,可以实时可视化训练过程中的
loss(损失)变化,直观了解模型学习情况。 - 交互式调参:在最后一步训练时,提供交互式表单,让你可以在不修改代码的情况下,轻松调整关键参数以优化性能和解决显存问题。
📋 准备工作
- 一个 Google 账户: 用于访问 Google Colab 和 Google Drive。
- 训练数据:
- 聊天记录: 从 QQ 或微信导出与某人的聊天记录为
.txt文件。文件内容应大致包含日期 时间 发言人这样的格式。 - 问答对: 如果你想为模型设定一些基础人设(例如“你是谁?”“你叫什么名字?”),请提前准备好这些问答。
- 聊天记录: 从 QQ 或微信导出与某人的聊天记录为
🏃♀️ 运行步骤详解
请按照笔记本中单元格的顺序依次执行。
第 1 步:环境安装 ⚙️
- 功能: 这个单元格会自动安装所有必需的 Python 依赖库,如
transformers,peft,trl等。 - 操作: 直接点击运行按钮即可。第一次运行时需要几分钟时间。
第 2 步:授权与登录 🤝
- 功能: 连接你的 Google Drive,以便脚本可以读取数据并将训练结果保存到你的云盘中。
- 操作: 运行此单元格,会弹出一个授权窗口。请按照提示登录并授权。
- 注意: 登录 Hugging Face 是可选的。只有当你希望将训练好的模型上传到 Hugging Face Hub 时,才需要取消注释并执行登录代码。对于本教程的训练和下载,无需登录。
第 3 步:数据准备 🧠
这是最关键的一步,你需要根据你的数据类型选择一种模式。
模式一:聊天记录自动解析 (推荐)
如果你有 .txt 格式的聊天记录,这是最方便的方式。
- 上传数据: 将你的
.txt聊天记录文件上传到你的 Google Drive 中。 - 配置参数:
chat_log_path: (重要) 将此路径修改为你上传的.txt文件的完整路径。你可以在 Colab 左侧的文件浏览器中找到文件,右键点击并选择“复制路径”。model_persona_id: (重要) 输入你的名字(或者说,你希望模型学习的那个人的名字),必须和聊天记录中的显示完全一致。human_interlocutor_id: (重要) 输入与你对话的那个人的名字,也必须和聊天记录中的显示完全一致。custom_ignore_patterns: 自定义忽略规则。默认已经包含[图片],[表情]等常见无效信息。如果你有其他不希望模型学习的内容(如系统提示、口头禅),可以用英文逗号,隔开并添加进去。
模式二:强学习-手动输入
如果你想为模型设定一些基础的核心回答。
- 操作: 直接在
manual_data_input文本框中,按照以下格式输入问答对:1
2
3
4
5Q: 你是谁?
A: 我是夏梦,一个参与了数字生命工程的人类。
---
Q: 你是AI吗?
A: 我的身体是一个语言模型,但我的灵魂和记忆来自于一个人类。Q:代表问题 (Prompt)。A:代表你希望模型给出的回答。---(三个减号) 用于分隔每一组独立的问答。
运行此单元格后,脚本会自动将你提供的数据处理成模型可以学习的 processed_dataset.jsonl 文件,并保存在 Colab 的临时空间中。
第 4 步:核心参数配置 🛠️
这个单元格集中了所有的重要训练设置。请仔细阅读并根据你的需求进行配置。
项目模式选择
save_base_model_to_drive(是否将基础模型永久保存在Google Drive?):- ✅ 勾选 (长期项目): 脚本会将约 8GB 的基础模型下载并保存到你的云盘。优点:未来再次训练时无需重复下载,节省大量时间。缺点:占用你的云盘空间。
- 🔲 不勾选 (临时训练): 模型仅在本次运行时临时下载。优点:不占用云盘空间。缺点:每次重新启动会话都需要重新下载模型。
项目与路径配置
project_name: 你的项目名称,所有相关文件(检查点、日志)都会保存在以此命名的文件夹中。base_model_name: 你想微调的基础模型。默认模型OmniDimen/OmniDimen-v1.1-4B-Emotion是一个带有出色情感理解和表达能力的中文模型,非常适合克隆人格这种需要情感交互的任务,因此通常无需修改。
数据集配置
dataset_path: (自动填充) 此路径通常应为上一步生成的/content/processed_dataset.jsonl。如果你有自己制作的.jsonl文件,也可以修改为该文件的路径。max_seq_length: (重要) 最大序列长度。它决定了模型一次能处理的文本长度(问题+回答)。此参数是影响显存占用的最主要因素。如果遇到显存不足(OOM)的错误,请首先尝试降低此值。
训练参数
training_epochs: 训练轮数。代表模型将完整学习整个数据集多少次。通常3到10之间是比较合适的值。轮数太少可能学得不够,太多则可能导致“过拟合”(只会死记硬背数据)。batch_size: 批处理大小。一次喂给模型多少条数据。受显存限制,在 T4 GPU 上通常设为1或2。gradient_accumulation: 梯度累积步数。通过累积多次小批量的梯度来模拟一个大批量的效果,是节省显存的有效方法。总批量大小 = batch_size * gradient_accumulation。learning_rate: 学习率。控制模型学习的速度。通常使用默认的2e-4即可,可以尝试1e-4或5e-5等值进行微调。
保存与检查点策略
save_strategy: 保存策略。epoch表示每轮训练结束后保存一次模型检查点;steps表示每隔指定的步数保存一次。save_total_limit: 最多保留的检查点数量。可以防止检查点文件过多而占满硬盘空间。
第 5 步:下载基础模型 📥
- 功能: 根据上一步的配置,执行下载或检查本地模型的操作。
- 操作: 如果你选择了“长期项目”模式,此单元格会检查你的云盘中是否已有模型。如果没有,它会自动从 Hugging Face 下载。这个过程可能需要 10-20 分钟,请耐心等待。如果模型已存在,则会跳过下载。
第 6 步:一键启动训练 🚀
这里分为两个单元格:
- 启动 TensorBoard 实时监控面板:
- 运行后,下方会显示一个监控面板。在训练开始后,你可以切换到
SCALARS标签页,观察train/loss曲线。一个健康的 loss 曲线应该是平稳下降的。
- 运行后,下方会显示一个监控面板。在训练开始后,你可以切换到
- 启动训练:
- 这是最后一步!在这个单元格的表单中,你可以对一些性能关键参数进行最后的调整。
- 操作: 调整好参数后,点击运行按钮,训练将正式开始!终端会实时打印训练进度。
🔧 调试与问题解决 (Troubleshooting)
❌ 遇到 OutOfMemoryError (OOM / 显存不足)
这是最常见的问题。请按以下优先级顺序尝试解决:
- 降低
max_seq_length: 在最后一个训练单元格的表单中,将max_seq_length的值调小,例如从1024降到512或256。这是最有效的方法。 - 开启分页优化器: 确保
use_paged_optimizer选项是勾选的。这能极大地节省显存。 - 降低
lora_r: 在训练表单中,将lora_r的值调小,例如8或4。 - 降低
batch_size: 在“核心参数配置”单元格中,将batch_size设为1。
⚠️ 数据解析后生成 0 条数据
如果在第 3 步“数据准备”后,提示“共生成 0 条有效训练对话”,请检查:
- ID 是否正确:
model_persona_id(你的名字) 和human_interlocutor_id(对方的名字) 是否与.txt文件中的完全一致?一个空格或大小写错误都会导致匹配失败。 - 对话模式: 脚本的逻辑是提取“对方说完,你紧接着回复”的对话模式。请检查聊天记录中是否存在大量这种有效对话。
- 文件编码: 确保你的
.txt文件是以UTF-8编码保存的。
🤔 如何使用训练好的模型?
训练完成后,你得到的是一个 **LoRA 适配器 (adapter)**,而不是一个完整的模型。它就像一个轻量级的“人格插件”。
- 文件位置: 你的最终适配器文件保存在 Google Drive 的
[你的项目名称]/lora-checkpoints文件夹中。 - 使用方法:
- 首先,加载原始的
base_model_name基础模型。 - 然后,将你训练好的 LoRA 适配器加载并合并到基础模型上。
- 完成合并后,你就可以与这个拥有了新“人格”的模型进行对话了。
- 首先,加载原始的
这部分(称为“推理”)需要另外的脚本来完成,但核心思想就是基础模型 + LoRA 适配器 = 你的定制模型。
👨💻 贡献者
🙏 鸣谢
本项目的基础模型和灵感来源于优秀的开源项目 OmniDimen。特别感谢他们为社区提供的强大模型支持。
- OmniDimen on GitHub: https://github.com/OmniDimen
- OmniDimen on Huggingface: https://huggingface.co/OmniDimen
由以下组织/个人提供帮助/支持
| Google Colab | Lucas |
|---|---|




