WeClone:通過微信聊天記錄微調(diào)LLM,形成個人的數(shù)字分身。
WeClone是什么?
WeClone 是一個開源項目,旨在通過微信聊天記錄微調(diào)LLM,并結(jié)合微信語音消息和大模型實(shí)現(xiàn)高質(zhì)量的聲音克隆,最終綁定到微信機(jī)器人,實(shí)現(xiàn)個人的ai數(shù)字分身。

WeClone功能
使用微信聊天記錄微調(diào)LLM:通過用戶自己的微信聊天記錄對語言模型進(jìn)行微調(diào),使其更符合個人的語言風(fēng)格和習(xí)慣。
高質(zhì)量聲音克隆:結(jié)合微信語音消息和0.5B大模型,實(shí)現(xiàn)高質(zhì)量的聲音克隆。
綁定微信機(jī)器人:將微調(diào)后的模型綁定到微信機(jī)器人,實(shí)現(xiàn)自動回復(fù)等功能,形成個人的數(shù)字分身。
WeClone特性
硬件要求:默認(rèn)使用 chatglm3-6b 模型,LoRA 方法微調(diào)需要約16GB顯存。其他模型和方法可自行配置。
軟件要求:推薦使用 Python 3.10,以及特定版本的 PyTorch、Transformers 等庫。
環(huán)境搭建:通過 Git 克隆項目,使用 Conda 創(chuàng)建環(huán)境并安裝依賴。
數(shù)據(jù)準(zhǔn)備:使用 PyWxDump 提取微信聊天記錄,導(dǎo)出為 CSV 格式。
數(shù)據(jù)預(yù)處理:去除敏感信息,支持多種數(shù)據(jù)處理方式。
模型下載:推薦從 Hugging Face 或魔搭社區(qū)下載 ChatGLM3 模型。
微調(diào)模型:通過修改 settings.json 配置參數(shù),進(jìn)行單卡或多卡訓(xùn)練。
推理與測試:提供瀏覽器 demo 和接口推理功能,支持常見聊天問題測試。
微信機(jī)器人部署:通過掃碼登錄,支持私聊和群聊中的機(jī)器人交互。

WeClone使用步驟
環(huán)境搭建
克隆項目:在終端中運(yùn)行以下命令,將 WeClone 項目克隆到本地。
git clone https://github.com/xming521/WeClone.git
創(chuàng)建并激活虛擬環(huán)境:使用 Conda 創(chuàng)建一個新的 Python 環(huán)境,并激活該環(huán)境。
conda create -n weclone python=3.10 conda activate weclone
安裝依賴:進(jìn)入項目目錄,安裝項目所需的依賴包。
cd WeClone pip install -r requirements.txt
數(shù)據(jù)準(zhǔn)備
提取微信聊天記錄:使用 PyWxDump 軟件提取微信聊天記錄。下載并安裝該軟件,解密數(shù)據(jù)庫后,點(diǎn)擊聊天備份,導(dǎo)出類型選擇為 CSV。可以導(dǎo)出多個聯(lián)系人或群聊的聊天記錄。
放置數(shù)據(jù):將導(dǎo)出的位于 wxdump_tmp/export 的 csv 文件夾放在項目目錄下的 ./data 目錄中,即不同人聊天記錄的文件夾一起放在 ./data/csv。示例數(shù)據(jù)位于 data/example_chat.csv。
數(shù)據(jù)預(yù)處理
去除敏感信息:項目默認(rèn)會去除數(shù)據(jù)中的手機(jī)號、身份證號、郵箱、網(wǎng)址等敏感信息。此外,還提供了一個禁用詞詞庫 blocked_words,可以自行添加需要過濾的詞句,程序會默認(rèn)去掉包含禁用詞的整句。
處理數(shù)據(jù)格式:執(zhí)行 ./make_dataset/csv_to_json.py 腳本對數(shù)據(jù)進(jìn)行處理。在同一人連續(xù)回答多句的情況下,可以選擇以下三種處理方式之一:
使用 csv_to_json.py:將多句回答用逗號連接。
使用 csv_to_json-單句回答.py(已廢棄):只選擇最長的回答作為最終數(shù)據(jù)。
使用 csv_to_json-單句多輪.py:將多句回答放在提示詞的 'history' 中。
模型下載
首選 Hugging Face:在 Hugging Face 下載 ChatGLM3 模型。如果在 Hugging Face 模型的下載中遇到問題,可以使用魔搭社區(qū)的模型。
使用魔搭社區(qū):如果選擇使用魔搭社區(qū)的模型,需要先執(zhí)行以下命令來使用魔搭社區(qū)的模型。
export USE_MODELSCOPE_HUB=1 # Windows 使用 `set USE_MODELSCOPE_HUB=1` git lfs install git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
注意:魔搭社區(qū)的 modeling_chatglm.py 文件需要更換為 Hugging Face 的。
配置參數(shù)并微調(diào)模型
修改配置文件:訓(xùn)練以及推理相關(guān)配置統(tǒng)一在文件 settings.json 中。可以根據(jù)需要修改以下參數(shù):
修改 per_device_train_batch_size 以及 gradient_accumulation_steps 來調(diào)整顯存占用。
根據(jù)數(shù)據(jù)集的數(shù)量和質(zhì)量修改 num_train_epochs、lora_rank、lora_dropout 等參數(shù)。
(可選)修改 settings.json 選擇本地下載好的其他模型。
單卡訓(xùn)練:運(yùn)行以下命令進(jìn)行 sft 階段微調(diào)。
python src/train_sft.py
作者說他本人的 loss 只降到了 3.5 左右,降低過多可能會過擬合,其使用了大概 2 萬條整合后的有效數(shù)據(jù)。
多卡訓(xùn)練:如果有多塊顯卡,可以使用 deepspeed 進(jìn)行多卡訓(xùn)練。先安裝 deepspeed,然后運(yùn)行以下命令。
pip install deepspeed deepspeed --num_gpus=使用顯卡數(shù)量 src/train_sft.py
推理與測試
使用瀏覽器 demo 簡單推理:項目提供了瀏覽器 demo,可以進(jìn)行簡單的推理測試。
使用接口進(jìn)行推理:運(yùn)行以下命令啟動 api 服務(wù)。
python ./src/api_service.py
使用常見聊天問題測試:運(yùn)行以下命令進(jìn)行常見聊天問題的測試。
python ./src/test_model.py
部署微信聊天機(jī)器人
啟動 api 服務(wù):先運(yùn)行以下命令啟動 api 服務(wù)。
python ./src/api_service.py
運(yùn)行微信機(jī)器人腳本:再運(yùn)行以下命令啟動微信聊天機(jī)器人。
python ./src/wechat_bot/main.py
默認(rèn)在終端顯示二維碼,掃碼登錄即可。可以私聊或者在群聊中 @ 機(jī)器人使用。
注意事項:微信有封號風(fēng)險,建議使用小號,并且必須綁定銀行卡才能使用。
語音克隆模塊(WeClone-audio)
Spark-TTS 方案(推薦):
導(dǎo)入相關(guān)模塊。
import SparkTTS from SparkTTS import SparkTTS
初始化模型。
model = SparkTTS("WeClone-audio/pretrained_models/Spark-TTS-0.5B", "cuda")進(jìn)行語音克隆推理。
with torch.no_grad(): wav = model.inference( text="要生成的文本內(nèi)容", prompt_speech_path="示例音頻路徑", prompt_text="示例音頻對應(yīng)的文本", )
Llasa 方案:
導(dǎo)入相關(guān)模塊。
from text_to_speech import TextToSpeech
初始化并進(jìn)行推理。
tts = TextToSpeech(sample_audio_path, sample_audio_text)
result = tts.infer("要生成的文本內(nèi)容")Github地址:https://github.com/xming521/WeClone
提交您的產(chǎn)品
Ai應(yīng)用
Ai資訊
AI生圖
AI生視頻
FastbuildAI









