▋前言
延續昨天的討論,我們已經確定「語者標籤錯位」是由於 embedding 比對排序與 NeMo 輸出順序不一致 所造成。
今天我們要嘗試修正這個邏輯,讓語者標籤在所有輸出檔案中保持一致,並從這次錯誤中歸納出對 AI 系統設計的重要啟發。
▋內容
一、修正方案 1:統一 Speaker Index
若你的目標只是自動生成標籤(不需辨識教師),可直接採用 NeMo 的原始 index:
# 統一標籤命名
for i, spk in enumerate(unique_speakers):
speaker_mapping[spk] = f"Speaker_{i}"
如此一來,NeMo 的 Speaker 0、Speaker 1 就不會被重新排序。
所有下游檔案(逐字稿、情緒報告)都能一一對應。
二、修正方案 2:保留教師比對,但固定映射表
若你仍希望保留 “teacher/student” 判斷,可新增固定映射:
teacher_id = best_match_speaker
speaker_mapping = {spk: f"Speaker_{i}" for i, spk in enumerate(unique_speakers)}
speaker_mapping[teacher_id] = "teacher"
這樣可以同時兼顧「身份標註」與「index 一致性」。
三、反思:這個錯誤教會我們什麼?
跨模組資料流的穩定性比準確率更重要
在整合多個 AI 模組時(ASR、Diarization、SER),如果中間變數不穩定,結果就難以追蹤。
標籤是一種「資料契約 (data contract)
每個模組的輸入輸出格式、標籤命名,都應該被固定與版本控制。
Embedding 相似度 ≠ 身份映射依據
在小樣本多語者情境中,embedding 距離排序容易受錄音品質、語者情緒影響。
Debug 過程的價值
這次的錯誤讓我們重新審視系統架構,也讓我們意識到日後要加上「語者 ID 對照表」作為輸出的一部分。
▋結論
AI 系統開發不只是模型訓練,更是資料一致性的工程挑戰。
語者標籤這樣的小問題,往往是整體可靠性的關鍵。
透過這次檢討,我們讓系統更穩定、可重現,也讓這個系列的實驗更有真實價值。
▋參考資料