WeClone:通过微信聊天记录微调LLM,形成个人的数字分身。

WeClone是什么?

WeClone 是一个开源项目,旨在通过微信聊天记录微调LLM,并结合微信语音消息和大模型实现高质量的声音克隆,最终绑定到微信机器人,实现个人的ai数字分身。

WeClone:通过微信聊天记录微调LLM,形成个人的数字分身。.webp

WeClone功能

  • 使用微信聊天记录微调LLM:通过用户自己的微信聊天记录对语言模型进行微调,使其更符合个人的语言风格和习惯。

  • 高质量声音克隆:结合微信语音消息和0.5B大模型,实现高质量的声音克隆。

  • 绑定微信机器人:将微调后的模型绑定到微信机器人,实现自动回复等功能,形成个人的数字分身。

WeClone特性

  • 硬件要求:默认使用 chatglm3-6b 模型,LoRA 方法微调需要约16GB显存。其他模型和方法可自行配置。

  • 软件要求:推荐使用 Python 3.10,以及特定版本的 PyTorch、Transformers 等库。

  • 环境搭建:通过 Git 克隆项目,使用 Conda 创建环境并安装依赖。

  • 数据准备:使用 PyWxDump 提取微信聊天记录,导出为 CSV 格式。

  • 数据预处理:去除敏感信息,支持多种数据处理方式。

  • 模型下载:推荐从 Hugging Face 或魔搭社区下载 ChatGLM3 模型。

  • 微调模型:通过修改 settings.json 配置参数,进行单卡或多卡训练。

  • 推理与测试:提供浏览器 demo 和接口推理功能,支持常见聊天问题测试。

  • 微信机器人部署:通过扫码登录,支持私聊和群聊中的机器人交互。

WeClone使用.webp

WeClone使用步骤

环境搭建

克隆项目:在终端中运行以下命令,将 WeClone 项目克隆到本地。

git clone https://github.com/xming521/WeClone.git

创建并激活虚拟环境:使用 Conda 创建一个新的 Python 环境,并激活该环境。

conda create -n weclone python=3.10
conda activate weclone

安装依赖:进入项目目录,安装项目所需的依赖包。

cd WeClone
pip install -r requirements.txt

数据准备

  • 提取微信聊天记录:使用 PyWxDump 软件提取微信聊天记录。下载并安装该软件,解密数据库后,点击聊天备份,导出类型选择为 CSV。可以导出多个联系人或群聊的聊天记录。

  • 放置数据:将导出的位于 wxdump_tmp/export 的 csv 文件夹放在项目目录下的 ./data 目录中,即不同人聊天记录的文件夹一起放在 ./data/csv。示例数据位于 data/example_chat.csv。

数据预处理

  • 去除敏感信息:项目默认会去除数据中的手机号、身份证号、邮箱、网址等敏感信息。此外,还提供了一个禁用词词库 blocked_words,可以自行添加需要过滤的词句,程序会默认去掉包含禁用词的整句。

  • 处理数据格式:执行 ./make_dataset/csv_to_json.py 脚本对数据进行处理。在同一人连续回答多句的情况下,可以选择以下三种处理方式之一:

  • 使用 csv_to_json.py:将多句回答用逗号连接。

  • 使用 csv_to_json-单句回答.py(已废弃):只选择最长的回答作为最终数据。

  • 使用 csv_to_json-单句多轮.py:将多句回答放在提示词的 'history' 中。

模型下载

首选 Hugging Face:在 Hugging Face 下载 ChatGLM3 模型。如果在 Hugging Face 模型的下载中遇到问题,可以使用魔搭社区的模型。

使用魔搭社区:如果选择使用魔搭社区的模型,需要先执行以下命令来使用魔搭社区的模型。

export USE_MODELSCOPE_HUB=1 # Windows 使用 `set USE_MODELSCOPE_HUB=1`
git lfs install
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git

注意:魔搭社区的 modeling_chatglm.py 文件需要更换为 Hugging Face 的。

配置参数并微调模型

修改配置文件:训练以及推理相关配置统一在文件 settings.json 中。可以根据需要修改以下参数:

修改 per_device_train_batch_size 以及 gradient_accumulation_steps 来调整显存占用。

根据数据集的数量和质量修改 num_train_epochs、lora_rank、lora_dropout 等参数。

(可选)修改 settings.json 选择本地下载好的其他模型。

单卡训练:运行以下命令进行 sft 阶段微调。

python src/train_sft.py

作者说他本人的 loss 只降到了 3.5 左右,降低过多可能会过拟合,其使用了大概 2 万条整合后的有效数据。

多卡训练:如果有多块显卡,可以使用 deepspeed 进行多卡训练。先安装 deepspeed,然后运行以下命令。

pip install deepspeed
deepspeed --num_gpus=使用显卡数量 src/train_sft.py

推理与测试

使用浏览器 demo 简单推理:项目提供了浏览器 demo,可以进行简单的推理测试。

  • 使用接口进行推理:运行以下命令启动 api 服务。

python ./src/api_service.py
  • 使用常见聊天问题测试:运行以下命令进行常见聊天问题的测试。

python ./src/test_model.py

部署微信聊天机器人

  • 启动 api 服务:先运行以下命令启动 api 服务。

python ./src/api_service.py
  • 运行微信机器人脚本:再运行以下命令启动微信聊天机器人。

python ./src/wechat_bot/main.py

默认在终端显示二维码,扫码登录即可。可以私聊或者在群聊中 @ 机器人使用。

注意事项:微信有封号风险,建议使用小号,并且必须绑定银行卡才能使用。

语音克隆模块(WeClone-audio)

Spark-TTS 方案(推荐):

  • 导入相关模块。

import SparkTTS
from SparkTTS import SparkTTS
  • 初始化模型。

model = SparkTTS("WeClone-audio/pretrained_models/Spark-TTS-0.5B", "cuda")
  • 进行语音克隆推理。

with torch.no_grad():
wav = model.inference(
text="要生成的文本内容",
prompt_speech_path="示例音频路径",
prompt_text="示例音频对应的文本",
)

Llasa 方案:

  • 导入相关模块。

from text_to_speech import TextToSpeech
  • 初始化并进行推理。

tts = TextToSpeech(sample_audio_path, sample_audio_text)
result = tts.infer("要生成的文本内容")

Github地址:https://github.com/xming521/WeClone

收藏
最新工具
OPPO小布助手网页版
OPPO小布助手网页版

网址是xiaobu.coloros.com ,融合满血版Deep...

OldPicRestore
OldPicRestore

一个免费的老照片修复工具,可修复老照片中的损坏、模糊和褪色问题,...

HaiSnap
HaiSnap

一个适合小白用户快速开发简单应用的零代码开发平台。用户只需描述需...

OpenCut
OpenCut

一款智能音视频剪辑工具,具备去水印、视频转GIF、音频提取、人声...

Singify
Singify

一款FineShare推出的在线AI音乐与歌曲生成器,可将文本、...

iFable AI
iFable AI

一个结合了冒险棋盘游戏、《龙与地下城》和视觉小说叙事元素的角色扮...

Replit Ghostwriter
Replit Ghostwriter

一款由Replit公司推出的 AI 编程助手,内置于 Repli...

夸克浏览器AI助手
夸克浏览器AI助手

一个功能强大的浏览器插件。支持多种浏览器,包括Chrome、Ed...

达医智影
达医智影

阿里巴巴达摩院医疗AI实验室自研的智能读片产品。它通过常规的胸部...

Noiz.io
Noiz.io

一款AI驱动的YouTube 视频摘要工具,可以快速提取视频的关...