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