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

收藏
最新工具
喵记多APP
喵记多APP

快手推出的边聊天边记录的AI笔记,主要功能包括管理笔记,如剪藏、...

畅图
畅图

一款由摹客推出的AI原生可视化工具,专为个人和团队的创意表达、知...

Ztalk ai
Ztalk ai

一个AI驱动的会议实时语音翻译平台,可以与 Zoom、Googl...

Supercut
Supercut

一款屏幕录制工具,能帮你快速录下屏幕上的内容,录制的视频可以自动...

DreamShootAI
DreamShootAI

一个能帮你用照片生成各种风格图片的AI情侣照片生成工具,比如情侣...

讯飞星辰MaaS
讯飞星辰MaaS

科大讯飞开发的一款一站式AIGC内容运营平台,主要面向开发者,提...

星辰Agent开发平台
星辰Agent开发平台

讯飞星火新一代智能体Agent开发平台,助力开发者快速搭建生产级...

Drimo智能影视创作平台
Drimo智能影视创作平台

一款由追梦极客推出的面向影视、广告从业者以及AI视频创作者设计的...

码上飞
码上飞

一个需求秒变软件的全流程自动化智能开发平台,码上飞是L4级无人软...

Simular AI
Simular AI

一款专为Mac用户设计的本地AI智能助手,它能通过自然语言处理执...