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

收藏
最新工具
Pomelli
Pomelli

Google开发的AI营销工具,主要服务中小商家。你只需要提供企...

Gartic.io
Gartic.io

一个很受欢迎的在线绘画猜词游戏。它把经典的“你画我猜”玩法和多人...

LandPPT
LandPPT

一个基于大语言模型的开源免费AIPPT生成平台,支持将文档内容自...

AppleWalls
AppleWalls

一个免费提供苹果官方内置壁纸下载的网站,包括iPhone、iPa...

Coddy.Tech
Coddy.Tech

一个免费、有趣且实用的编程学习平台。支持学习包括 Python、...

森林电台Tree.FM
森林电台Tree.FM

一个能让你收听世界各地森林声音的网站。通过随机收听功能,你可以沉...

Sweezy Cursors
Sweezy Cursors

一个提供免费鼠标光标​​的网站,支持​​Chrome浏览器​​和...

YumCheck
YumCheck

一款能帮用户解析食品包装上的营养成分标签,评估食品是否健康的免费...

CookingGames
CookingGames

一个提供免费烹饪和烘焙游戏的网站。这里有多种类型的游戏,适合不同...

Doll Divine
Doll Divine

一款以换装和角色创建为核心的在线游戏平台,Doll Divine...