WeClone:通过微信聊天记录微调LLM,形成个人的数字分身。
WeClone是什么?
WeClone 是一个开源项目,旨在通过微信聊天记录微调LLM,并结合微信语音消息和大模型实现高质量的声音克隆,最终绑定到微信机器人,实现个人的ai数字分身。
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使用步骤
环境搭建
克隆项目:在终端中运行以下命令,将 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