角色 Embedding 技術入門:AI 影片角色鎖定底層如何運作
寫給工程師的技術入門:現代 AI 影片堆疊中,角色 embedding 系統的架構、設計取捨、失敗模式,以及尚未解決的開放研究問題。
本文寫給工程師—研究員、ML 從業者,以及在打造或評估 AI 影片工具的開發者。如果你想要的是非技術性的角色一致性概覽,請從完整指南開始。
這裡我們會逐步解析角色 embedding 系統在現代 AI 影片堆疊中如何實際運作:架構、設計決策、失敗模式,以及尚未解決的開放問題。
問題定義
給定一個生成式影片模型 M 和一個角色 C,我們希望有一套程序,使得對於序列 p_1、p_2、…、p_n 中任何引用到 C 的提示詞 p_i,產出的所有結果都保留 C 的身份。
最直覺的做法—在每個提示詞中都包含角色描述—會失敗,因為擴散採樣具隨機性,且提示詞描述的是類別而非身份。每次生成都是從符合描述的有效角色分布中抽樣;身份會跨抽樣漂移。
我們需要一種方式,讓模型輸出能條件化於某個具體學到的身份,而不只是描述。
系統架構
現代角色一致性系統有六個組件:
1. Feature extraction — produce identity embedding from reference
2. Storage — persist embedding tied to character_id
3. Negative prompt synthesis — auto-build negative_prompts from drift catalog
4. Conditioning injection — inject embedding into model conditioning
5. Generation — diffusion sampling with conditioned model
6. Consistency verification — post-hoc similarity check, regenerate if needed下面逐一說明。
1. 特徵抽取
角色上傳時,我們對參考圖執行多個專業模型:
- 臉部編碼器:ArcFace、FaceNet 或類似模型。輸出針對人臉辨識最佳化的 512 維身份 embedding,捕捉身份不變特徵。
- 身體解析器:PIFu 或 Sapiens 用於身體比例與姿態。較低維的向量編碼身高、體型、體態。
- 外觀編碼器:CLIP 影像編碼器,用於髮色、膚色、服裝風格。768 維語意 embedding。
- 風格分類器:另外編碼參考圖是寫實、風格化、動畫等。小型類別向量。
這些被串接(或共同注意)成高維角色 embedding e_C。總維度通常落在 1500 至 3000 之間。
為什麼用多個模型而非單一個?因為身份有多個軸向,沒有任何單一編碼器能完全捕捉。臉部編碼器擅長「這是同一張臉嗎?」但對身體比例毫無概念。身體解析器對臉部細節毫無概念。CLIP 擅長語意外觀但失去細部身份。串接給你正交覆蓋。
取捨:較複雜的抽取流程意味著角色上傳時需要更多運算(在我們系統約 30 至 90 秒)。對消費者面向的工具來說沒問題。對高吞吐量管線,可以在上傳時預先計算 embedding,生成時引用即可。
2. 儲存
每個角色儲存為 (character_id, embedding_vector, metadata)。metadata 包含:
- 來源參考圖(用於除錯與重新抽取)
- 擁有者/專案關聯
- 子變體指標(型態變化章節會詳述)
- 風格錨點(用於跨風格作品)
- 漂移模式覆寫清單(每個角色的客製化)
儲存通常使用向量資料庫(Pinecone、Qdrant、Weaviate)或客製化索引結構。查詢必須夠快—低於 100 毫秒—因為每次生成都要查詢。
對於隱私敏感的部署,embedding 可用每個租戶的金鑰加密儲存。抽取是單向函數(無法從 embedding 還原參考圖),但對處理真人的系統來說,預設將 embedding 視為個人資訊是正確的做法。
3. 負向提示詞合成
這是系統中非顯而易見的部分,也是大多數工程心力所在。
我們維護一份漂移模式目錄—觀察到的跨數千次生成的類別化失敗類型。每種模式對應一個 negative_prompt 片段以抑制該失敗。
目錄中的範例:
| 漂移模式 | 負向提示詞片段 |
|---|---|
| 眼睛顏色偏移(棕 → 綠) | 「green eyes, hazel eyes」(當參考為棕色時) |
| 下顎線變窄 | 「narrow jaw, weak chin, soft jawline」 |
| 髮際線後退 | 「high hairline, thinning hair, receding hairline」 |
| 膚色偏暖 | 「warm skin tone, golden complexion」(當參考為冷色時) |
| 不對稱蔓延 | 「asymmetric face, uneven features」 |
| 眼距偏移 | 「wide-set eyes, close-set eyes」 |
建立此目錄需要標註資料。我們從公開 AI 影片工具(Runway、Pika、Sora 等)標註了約 10,000 筆生成結果,記錄出現的具體漂移模式。聚類後得到約 30 種不同模式,涵蓋約 85% 的觀察到的漂移。
對每次生成,系統會:
- 檢索該角色的參考屬性
- 計算每個屬性的「相反」(例如參考是深色眼,相反就是淺色眼)
- 組裝該角色的負向提示詞,集合相關的漂移抑制器
結果是比純提示詞生成強得多的條件控制訊號。
4. 條件控制注入
不同影片模型接受條件控制的方式不同:
- 基於參考圖的模型(多數公開 API):可以傳入參考圖;我們透過學習投影把 embedding 編碼回「合成參考圖」再傳入。
- 純文字條件控制:傳入 embedding 的學習軟提示詞投影。
- API 層模型存取(若可得):直接把 embedding 注入到交叉注意力層,類似 IP-Adapter 的條件控制。
根據我們的經驗,API 層注入遠比基於參考圖的方式有效,但多數公開 API 並不暴露這種深度的存取。在我們可用的 API 表面上,發現結合強負向提示詞與參考圖編碼 embedding,可以達到 API 層注入 80 至 90% 的效果。
這也是為什麼即使你不掌控底層模型,建構角色一致性層仍有意義—公開 API 已暴露的條件控制表面有相當大的提升空間。
5. 生成
標準擴散採樣,但條件控制現在是以下的組合:
- 原始提示詞(場景、動作、構圖)
- 角色 embedding(透過上述機制注入)
- 負向提示詞(自動合成)
- 風格錨點(若該段落適用)
生成成本通常是純生成的 1.0 至 1.2 倍。邊際成本很小。
6. 一致性驗證
生成後,我們對輸出執行獨立的身份模型(通常是步驟 1 用過的同一臉部編碼器)。計算輸出身份 embedding 與原始參考 embedding 之間的餘弦相似度。
門檻:通常為餘弦相似度 0.85。高於門檻,輸出被接受。低於門檻,觸發以更嚴格條件控制重新生成(更高的負向提示詞權重、更強的 embedding 注入)。
這平均增加約 5 至 10% 的生成成本(多數鏡頭一次就過),並阻止最糟糕的漂移案例傳到使用者。
哪些有效,哪些不太行
有效的部分:
- 單一角色 30 個以上鏡頭,在標準場景變化下高度一致
- 跨專案角色庫重用(一次抽取,無限重用)
- 跨平台一致性(在合理範圍內,相同 character_id、跨不同場景/風格保持身份)
- 具有明顯不同特徵的多角色場景(不同年齡、性別、族裔)
較困難的部分:
- 型態變化:同一角色但受傷、變老、不同服裝。我們使用以主 embedding 為鍵的子 embedding,主 embedding 編碼不變身份,子 embedding 編碼差異。中等變化有效;大幅變換時會崩潰(例如同角色 8 歲版本)。
- 多角色場景的身份滲漏:兩個鎖定角色共處同一幀且特徵相似時(例如兩位 30 歲亞洲女性),約 10% 的生成會出現部分特徵滲漏。
- 跨風格連貫性:鎖定的寫實角色置於風格化「水彩」段落。可透過每段落風格錨點部分解決,但劣化仍可見。
- 動物/非人類角色:相同架構適用,但臉部編碼器在非人類臉上品質明顯下降。
- 超過約 3 分鐘的長片連貫性:漂移抑制按鏡頭運作,但 50 個以上鏡頭累積的細微差異仍可能對細心觀眾呈現可見的不一致。
開放研究問題
如果你在這個領域工作,以下是我們希望看到被解決的問題:
- 型態變化不變量。什麼是正確的學習表示,能捕捉身份不變的臉部結構,同時允許任意狀態變換?
- 採樣中的主動漂移偵測。當前一致性檢查是事後的。能否在擴散流程中偵測漂移並在採樣中途修正?
- 隱式與顯式身份的取捨。何時訓練每角色的小型 LoRA 比 embedding 條件控制更好?邊界在哪?
- 多角色互動建模。我們如何捕捉的不只是兩個鎖定身份,還有它們的關係動態,並能跨鏡頭穩定維持?
- 身份不確定性量化。當模型對身份不確定時,能否暴露這份不確定性,而不是產出自信的漂移?
如果你在處理上述任何問題並想交流,Juying 背後的團隊真的很有興趣。歡迎聯絡。
給打造者的實務建議
如果你考慮為自家產品建構角色一致性層,三點建議:
1. 從負向提示詞目錄開始。這是投入產出比最高的勝利。你不需要 API 層模型存取;負向提示詞每個公開 API 都有暴露。花一週標註 1000 筆生成,你就會有涵蓋多數漂移的目錄。
2. 別低估事後驗證。加上一個簡單的「相似度低於 0.85 就重生」迴圈,能抓到最糟的 10% 失敗,並大幅提升感知品質。這是從 90/100 提升到 95/100 最便宜的做法。
3. 早點投入儲存。把角色 embedding 當作持久化資產,是會複利累積的架構洞見。把對的基礎建設做對一次,每個未來功能(風格鎖定、場景庫、資產重用)都能自然延伸。
相關閱讀
如果你正在這個領域打造產品,想聊聊—info@juying.art