微調 Qwen 3:0.6B 用於問題分類
微調 Qwen 3:0.6B 用於問題分類
概述
微調一個極小的本地 LLM 可以將其從一個不可靠的分類器轉變為一個用於元數據感知 RAG 的高性能工具。透過使用 Unsloth 框架和 QLoRA 微調 Qwen 3:0.6B,一位開發者將家用相關問題的分類準確度從 10% 的基準線提高到了 92%。
分類在 RAG 中的角色
問題分類作為預處理步驟,可提高檢索增強生成 (RAG) 的精確度。透過將用戶查詢映射到特定的元數據類別(例如,「pool」、「hvac」、「cooking」),系統可以將向量排序的搜索空間縮小到僅匹配該類別的索引條目。這可以防止模型從其他類別檢索到不相關的文件,從而提高最終答案的整體準確度。
基準線性能:僅使用提示詞
在使用原始的 Qwen 3:0.6B 模型且未進行微調的情況下,開發者使用了一個嚴格的提示詞,要求模型僅從提供的列表中返回類別名稱。
基準線結果:
- 準確度: ~10%(131 次測試中正確 13 次)。
- 失敗模式: 模型經常過度使用「electric」或「appliances」等廣泛標籤,並且經常編造不在允許列表中的新類別(例如,「apartments」)。
微調策略與實施
為了超越基準線,開發者利用了開源框架 Unsloth 並搭配 QLoRA 進行微調。
數據集與訓練
- 數據集大小: 約 850 條數據條目。
- 數據分割: 70% 訓練集、15% 評估集和 15% 測試集。
- 評估: 使用了一系列 131 次集成測試來衡量訓練後的性能。
第一次微調嘗試
在第一次嘗試中,模型被訓練為直接輸出類別名稱。
- Accuracy: 79%(131 次測試中正確 104 次)。
- 剩餘問題: 模型偶爾會發出類別的片段(例如,「ac」而非「hvac」),並且在處理語義重疊的類別時感到吃力(例如,「water heater」與「pool」)。
使用不透明 ID 優化準確度
將類別映射到不透明的兩字母代碼(例如,「AA」代表 appliances,「KK」代表 hvac)比使用語義類別名稱的效果顯著提高了性能。透過移除輸出標記 (tokens) 中的語義重疊,這個微小的模型能夠更好地將查詢映射到固定的、不重疊的格式。
最終結果:
- 準確度: 92%(131 次測試中正確 120 次)。
- 關鍵發現: 要求使用固定的、不重疊的輸出格式有助於小型模型保持一致性,並防止它們產生同義詞或片段的幻覺。
剩餘挑戰
儘管準確度達到 92%,但仍存在一些失敗案例,特別是在類別含義重疊的地方。例如,模型繼續將「water heater」查詢誤分類為「pool」查詢,因為兩者共享「watery」的上下文。作者指出,進一步的改進將需要更細緻的訓練數據,以更好地區分這些特定的語義重疊。