角色 Embedding 技術入門:AI 影片角色鎖定底層如何運作

寫給工程師的技術入門:現代 AI 影片堆疊中,角色 embedding 系統的架構、設計取捨、失敗模式,以及尚未解決的開放研究問題。

·9 min read·technical

本文寫給工程師研究員、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. 特徵抽取

角色上傳時,我們對參考圖執行多個專業模型:

這些被串接(或共同注意)成高維角色 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% 的觀察到的漂移。

對每次生成,系統會:

  1. 檢索該角色的參考屬性
  2. 計算每個屬性的「相反」(例如參考是深色眼,相反就是淺色眼)
  3. 組裝該角色的負向提示詞,集合相關的漂移抑制器

結果是比純提示詞生成強得多的條件控制訊號。

4. 條件控制注入

不同影片模型接受條件控制的方式不同:

根據我們的經驗,API 層注入遠比基於參考圖的方式有效,但多數公開 API 並不暴露這種深度的存取。在我們可用的 API 表面上,發現結合強負向提示詞與參考圖編碼 embedding,可以達到 API 層注入 80 至 90% 的效果。

這也是為什麼即使你不掌控底層模型,建構角色一致性層仍有意義公開 API 已暴露的條件控制表面有相當大的提升空間。

5. 生成

標準擴散採樣,但條件控制現在是以下的組合:

生成成本通常是純生成的 1.0 至 1.2 倍。邊際成本很小。

6. 一致性驗證

生成後,我們對輸出執行獨立的身份模型(通常是步驟 1 用過的同一臉部編碼器)。計算輸出身份 embedding 與原始參考 embedding 之間的餘弦相似度。

門檻:通常為餘弦相似度 0.85。高於門檻,輸出被接受。低於門檻,觸發以更嚴格條件控制重新生成(更高的負向提示詞權重、更強的 embedding 注入)。

這平均增加約 5 至 10% 的生成成本(多數鏡頭一次就過),並阻止最糟糕的漂移案例傳到使用者。

哪些有效,哪些不太行

有效的部分:

較困難的部分:

開放研究問題

如果你在這個領域工作,以下是我們希望看到被解決的問題:

  1. 型態變化不變量。什麼是正確的學習表示,能捕捉身份不變的臉部結構,同時允許任意狀態變換?
  2. 採樣中的主動漂移偵測。當前一致性檢查是事後的。能否在擴散流程中偵測漂移並在採樣中途修正?
  3. 隱式與顯式身份的取捨。何時訓練每角色的小型 LoRA 比 embedding 條件控制更好?邊界在哪?
  4. 多角色互動建模。我們如何捕捉的不只是兩個鎖定身份,還有它們的關係動態,並能跨鏡頭穩定維持?
  5. 身份不確定性量化。當模型對身份不確定時,能否暴露這份不確定性,而不是產出自信的漂移?

如果你在處理上述任何問題並想交流,Juying 背後的團隊真的很有興趣。歡迎聯絡。

給打造者的實務建議

如果你考慮為自家產品建構角色一致性層,三點建議:

1. 從負向提示詞目錄開始。這是投入產出比最高的勝利。你不需要 API 層模型存取;負向提示詞每個公開 API 都有暴露。花一週標註 1000 筆生成,你就會有涵蓋多數漂移的目錄。

2. 別低估事後驗證。加上一個簡單的「相似度低於 0.85 就重生」迴圈,能抓到最糟的 10% 失敗,並大幅提升感知品質。這是從 90/100 提升到 95/100 最便宜的做法。

3. 早點投入儲存。把角色 embedding 當作持久化資產,是會複利累積的架構洞見。把對的基礎建設做對一次,每個未來功能(風格鎖定、場景庫、資產重用)都能自然延伸。

相關閱讀

如果你正在這個領域打造產品,想聊聊info@juying.art