前往
大廳
主題

MyGOChat - 一個使用MyGO圖回覆你的語言模型

乾林老屍 | 2025-02-20 20:17:52 | 巴幣 1132 | 人氣 350

隨 MyGO 動畫的播放,各位是否也有在聊天時越來越喜歡使用MyGO圖來替代文字回覆別人(敷衍別人)?為了讓我們這些啞巴傳MyGO圖的過程更加便利,我開發了一個自動推薦MyGO圖的語言模型 - MyGOChat。
MyGOChat 是一個開源的語言模型,能夠自動分析輸入的文字內容,並推薦適合的MyGO圖。你可以串接在自己的聊天機器人上,讓它在與使用者互動時自動用MyGO圖進行回覆。也可以做為與其他人聊天時,增加配圖的貼圖推薦器等…。

這個模型基於 RoBERTa 架構進行微調,模型參數僅 330M,相當輕量。即使如我這台六年前的中階筆電,使用Intel i5 9th cpu也能順暢運行。但要注意的是,初次使用時,模型和資源的加載會稍微延遲,因此首次執行的時間會比較長。


📢本模型的正確率為 86%,因此在某些情況下可能會出現答非所問或理解偏差的情況。請在使用過程中留意模型的回應,並視需要重新進行微調。此外,模型尚未在真實對話情境中進行測試,因此其實際效果仍有待驗證。

如何使用 MyGOChat:
安裝並使用MyGOChat非常簡單,只需要幾行程式碼:
先在終端機上安裝套件:
git clone https://github.com/qaz45647/MyGOChat.git
建立環境:
conda create -n MyGOenv python=3.9
conda activate MyGOenv
安裝所需套件:
pip install -r requirements.txt
執行程式:
from mygochat import MyGOChat

# 初始化聊天
chat = MyGOChat()

# 使用聊天功能
response = chat.chat("輸入你要餵給模型的內容")

# 輸出回應
print(f"Quote: {response['quote']}")
print(f"Image URL: {response['image_url']}")
輸出說明:
  • response['quote']:輸出台詞(str),這是MyGO圖的台詞內容。
  • response['image_url']:將輸出圖片的網址(str),可以使用這個網址來顯示對應的MyGO圖。

以下是此模型的訓練過程,沒興趣的可以跳過:

製作資料集
資料集前處理
  • 取得MyGO圖
    • 我是從這篇文章下載的,感謝提供。
    • 從圖包中挑選出適合用於對話情境的圖:共157張。
  • 對圖片進行情緒標記。
  • 使用LLM對所有Mygo台詞生成一個對話範本。
  • 對生成的範本進行人工微調,以提升生成品質。
由於回覆的對象是「圖片」而非純文字,圖片的情境將影響句子的情緒與語義。因此,需針對圖片進行情緒標記,以標註其所表達的情緒、態度、互動方式及語氣,而非直接將台詞轉為對話資料。這樣能確保生成的內容更貼合圖片所傳遞的氛圍與意圖。
此外,為了提升資料集的品質,我為每張圖片建立專屬的對話範本,作為 LLM 生成資料時的參考,以增強其對圖片語境的理解,確保輸出的對話更符合需求。

生成資料集
  • 將Mygo台詞、範本、情緒標記給LLM進行資料集生成(共生成50個句子2次)
  • 資料清洗
    • 去除相似、不合適、錯誤的對話內容
  • 完成資料集
這裡使用 GPT-4o-mini 進行資料集生成,但結果不甚理想。在資料清洗過程中,移除了相似、不合適或錯誤的對話內容,導致部分對話幾乎被刪除殆盡。為了補足缺少的內容,我改用 GPT-4o 重新生成部分對話,生成出來的品質顯著提升。(果然不能因為模型便宜就亂使用)

訓練模型(第一階段)
  • 使用生成的資料集對RoBERTa模型進行微調,以建立基礎對話能力。
  • 採用混合精度訓練梯度累積技術,提高計算效率並降低 GPU 記憶體使用。
  • 設定 Early Stopping,若 5 個 epoch 內驗證損失 (val_loss) 無提升則提前停止訓練。
  • 訓練細節:
    • 基礎模型:hfl/chinese-roberta-wwm-ext-large(中文 RoBERTa 模型)
      • RoBERTa 預訓練模型負責編碼文本。
      • 添加分類層 (Linear Layer),透過 softmax 輸出各標籤的機率分佈。
    • 資料集劃分:將資料集按 8:2 劃分為訓練集與測試集。
    • 訓練方式
      • 優化器:AdamW,學習率 1e-5,搭配 Cosine Annealing 調整學習率。
      • 損失函數:Label Smoothing Loss,減少過擬合。
      • 梯度裁剪 防止梯度爆炸 (clip_grad_norm_)
  • 訓練設備:在 Colab 上使用 A100 進行訓練
  • 訓練時間:約半個小時
  • 訓練結果:
    • 我沒記錄下來,說個大概的印象:
      • 9個回合Early Stopping
      • 驗證集正確率:約為60%左右
      • 用100篇場外的文章標題進行對話測試,正確率約為70%
資料增強
由於 LLM 生成的資料較為單一,泛化能力較差,因此導入二階段資料增強策略。
  • 爬取場外休憩區約 40,000 篇文章的標題。
  • 資料清洗
    • 刪除版務公告。
    • 刪除大樓串。
    • 刪除標題低於5個字的文章。
    • 刪除爬蟲沒抓好的標題。
    • 去除屬性框
  • 標籤預測
    • 使用已訓練模型預測每篇文章標題的前 5 個可能標籤。
    • 將文章標題與標籤組成選擇題。
      • 選項會包括 A 到 F 六個選項,其中 F 代表「以上選項皆不符合」。
    • 使用 GPT-4o-mini 根據選擇題挑選最佳標籤。
    • 使用 GPT-4o 驗證選擇題答案是否能形成合理對話並進行過濾。
  • 人工逐筆檢查過濾後的選擇題答案。
  • 將原始資料集與新對話資料合併,形成更豐富的訓練資料。
這階段的工作相當耗時。第一階段使用 GPT-4o-mini 進行選擇題,由於 API 的限制,當處理 10,000 筆資料後,模型的推理速度會顯著下降,因此每天處理完 10,000 筆資料後就休息。這一過程大約持續了 4 到 5 天。第二階段則使用推理能力較強的 GPT-4o 來驗證答案,考量到時間和呼叫成本問題,所以一次驗證 10 題選擇題答案,大約一天就能完成。最後,以防萬一,對 GPT-4o 過濾後的結果進行了人工檢查,這個過程大約花了 1.5 個禮拜 (中間還感冒躺了3天==)。

訓練模型(第二階段)
  • 透過增強後的資料集重新訓練模型,以提升對話能力與準確度。
  • 訓練細節與第一階段相同。
  • 訓練結果:
    • 16個回合 Early Stopping
    • 驗證集正確率:53.80%
    • 驗證集loss:2.1393
    • 儘管相較於第一階段,模型的正確率有所下降,但在對話測試的表現上,反而效果更好,具體情況請參見下文。
評估
  • 測試數據:從未參與訓練的文章標題中隨機挑選 300 篇作為測試樣本。
  • 人工驗證
    • 人工審查生成的對話是否合理。
    • 結果顯示:
      • 258 則對話成立
      • 42 則對話不成立
      • 最終正確率達 86%
專案成本評估
  • 時間成本:約為1個月
  • OpenAI API 費用:6.45 美元
  • Colab Pro 訂閱費用:10.49 美元

結語
MyGOChat 的開發過程說長不長,說短不短,期間踩了不少坑,也學到不少東西。最終,模型雖然不是完美的,但已經能做到 86% 的正確率,讓各位在聊天時更輕鬆地傳圖,省去翻圖、找圖的麻煩。
雖然目前還有很多可以改進的地方,像是某些場景下還是會有答非所問的情況,也不知道導入真實對話情境的結果如何,但我相信,它能在大多數情況下順利推薦合適的 MyGO 圖,達成「用圖溝通」的目標。接下來這半年比較忙
,再不弄碩論就要岩壁了,但如果有機會,也會試試看製作母雞卡的版本。
總之,MyGOChat 已經能用了,歡迎各位試試,讓你的對話變得更輕鬆、更有趣

創作回應

猶格 所托斯
2025-02-20 23:59:54
乾林老屍
2025-02-21 12:03:28
あかつき
哇靠原來你這麼猛喔 話說之後會不會去擴充資料集啊?逐幀搞
2025-02-21 00:28:29
乾林老屍
暫時不會 弄資料集的過程太血汗了
2025-02-21 12:03:01
乾林老屍
2025-02-21 12:03:05
小龍蝦
請問有機會開源訓練資料集嗎?
2025-02-21 13:26:24
乾林老屍
資料集不會開源喔,請見諒。
2025-02-21 13:49:00
あかつき
話說我沒有練過語言模型 你練這個vram會用到多少啊
2025-02-21 16:36:56
乾林老屍
主要看你模型、訓練參數的設計,我這模型較小、batch_size只有8,16GB的ram跑起來應該綽綽有餘
2025-02-21 17:08:10
乾林老屍
colab免費的t4就可以跑了
2025-02-21 17:09:19
あかつき
我自己有4090 有在想要不要自己練練看 只是資料集處理起來感覺太麻煩了想到就好懶
2025-02-21 19:59:13
乾林老屍
訓練模型最麻煩的工作就是處理資料集
2025-02-21 20:22:05

相關創作

更多創作