評估結果如下,這是按照生成的數據進行訓練並進行測試給出的結果:

- precision recall f1-score support
喜悅 0.79 1.00 0.88 11
悲傷 0.44 1.00 0.62 8
憤怒 1.00 0.40 0.57 10
恐懼 1.00 0.11 0.20 9 ← 幾乎全错
驚訝 0.75 0.75 0.75 8
厭惡 0.83 0.62 0.71 8
macro avg 0.80 0.65 0.62 54

下面是評估結論

指標 結果 lab目標 達標
Macro F1 0.62 ≥0.75
Accuracy 0.65 ≥0.80
推理延遲中位數 178ms ≤500ms
最容易混淆 恐懼 ↔ 悲傷(5 次)

- 閱讀剩餘部分 -

下面將每筆資料透過 _to_chat_text(...) 組成 ChatML 風格輸入

def _to_chat_text(tokenizer, instruction, user_input, output=None):
    """組成 ChatML 訓練 / 推理文本。output 為 None 時只到 assistant 起始。"""
    messages = [{"role": "user", "content": f"{instruction}\n\n文本:{user_input}"}]
    if output is not None:
        messages.append({"role": "assistant", "content": output})
        return tokenizer.apply_chat_template(messages, tokenize=False)
    return tokenizer.apply_chat_template(
        messages, tokenize=False, add_generation_prompt=True
    )

- 閱讀剩餘部分 -

我們將使用 Qwen2.5-1.5B 加上 QLoRA 進行情緒語句的訓練與測試,原本的參數量來説 0.8B 模型就必須 12.8GB vram(全量微調),需要在消費級顯卡上進行測試,那麽就必須將參數量降下來,所以我們將在這裏使用 QLoRA 進行訓練推理,QLoRa 可以將 4bytes 降到 0.5bytes,并且凍結梯度、優化器狀態。

全量微調

组成 内容 FP32 參數
模型權重 x 4
梯度 x 4
優化器 Adam 的 m + v = 2x 8
合计 4x 16 bytes/參數

所以 0.8B × 16 = 12.8 GB,結果就是消费级顯卡(4080/16GB)連 1.5B 全量微調都做不到。

- 閱讀剩餘部分 -