你有沒有試過跟一個數字人
聊天,發現它說話時手腳完全不會動,或者動作和話音明顯不對拍?那種感覺挺詭異的,像是配音配錯了軌道。
現在的虛擬主播、AI伴侶、遊戲NPC越來越多用到這種"數字人"形象,但它們身上普遍藏著一個技術上的死結:要讓手勢和說話對上口型很容易,只要提前錄好整段音頻再生成動作就行。可問題是,真人對話是實時的,數字人說下一句話之前,連它自己都不知道要說什麼,更別提提前生成配套的手勢了。
這就好比你在看一場同聲傳譯。傳統的動作生成方法,相當於讓翻譯先把發言人講完的整段話拿到手,琢磨透了再翻,準確是準確,但發言人已經講完五分鐘了。而真正的實時對話場景要求翻譯必須聽一句翻一句,甚至聽半句就要開始張嘴,這時候還要保證翻譯內容通順、語調貼合,難度完全不一樣。
這篇來自上海科技大學
和騰訊LIGHTSPEED
團隊的論文,就是專門啃這塊硬骨頭的。他們給這個問題起了個名字,叫在線協同語音手勢生成
(Online Co-speech Gesture Generation)。
引用塊:協同語音手勢(Co-speech Gesture):指人在說話時自然伴隨的身體動作,比如強調時揮手、猶豫時摸頭,這些動作和語音節奏、語義高度相關。
offline的方法為什麼在真實場景里全部失靈
先說清楚現有方法卡在哪。
論文裡提到,過去幾年那些效果不錯的協同語音手勢生成模型,比如TalkSHOW、EMAGE、LOM,幾乎都是在offline(離線)設定下訓練和測試的。所謂離線,意思是模型拿到的是一整段已經錄製完畢的語音,可以從頭看到尾,甚至能看到未來幾秒鐘要說什麼,然後再慢悠悠地生成一套動作。
這在做動畫後期、給已經錄好的配音配動作時完全沒問題。但放到真人對話場景里就徹底不成立了,因為數字人的語音本身也是實時流式生成的,它自己都不知道下一秒要說什麼詞,你怎麼指望它提前把配套手勢算出來?
論文用數據說明了這種方法直接搬到在線場景會有多慘。他們測試了幾個代表性的offline方法,在嚴格要求"只能用當前和過去的語音,不能看未來"的條件下重新跑了一遍,發現問題主要出在兩頭。一部分方法比如LOM依賴完整語音上下文,一旦被切斷未來資訊,生成質量明顯下滑,延遲還高達22.9毫秒(相比之下作者提出的方法只要1.6毫秒左右)。另一部分處理長語音片段的方法,乾脆存在結構性的"必須等全部說完才能開始生成"的問題,論文裡用+∞來表示這種方法的延遲,意思是它壓根沒法用在實時場景。
這裡還有第二層麻煩,是數據的問題。現在市面上能找到的協同語音動作數據集,基本都是單人自言自語錄的(比如BEATv2
),或者是普通社交場景下採集的對話。這些數據里的情緒表達偏平淡,姿態變化也比較有限。可虛擬陪伴場景恰恰需要更豐富的情緒表現,比如安慰用戶時要柔和,鼓勵用戶時要有力量感,這類細膩的情感表達,老數據集裡根本沒有覆蓋。
拆解一個不可能的任務:讓模型只看"過去"就能預測"現在"
面對這個死結,研究團隊的思路是把整個系統拆成兩條線同時跑。
一條線是負責把用戶輸入的語音、文字、視覺資訊轉成流式的回應語音,這部分他們直接用了Qwen-Omni
這個流式實時大模型來做。
引用塊:流式(Streaming):數據以連續、逐段的方式產生和處理,而不是等待全部數據準備好再一次性處理,好比水龍頭持續出水,而不是等水桶灌滿再倒出來。
另一條線,也是這篇論文真正要解決的核心難題,是拿著這條流式語音,實時地、逐幀地生成配套手勢,而且絕對不能偷看未來的語音內容。
這個約束聽起來簡單,做起來卻很棘手。因為身體的不同部位對語音的反應節奏完全不一樣,手部動作可能跟著某個重音詞瞬間抖一下,而軀幹的轉向可能是跨越好幾句話慢慢完成的。如果把全身當成一個整體一起預測,模型很容易在資訊不完整的情況下顧此失彼。
研究團隊的解決方案是先把身體拆開,再重新組裝。他們把人體分成四個部分:下半身、上半身、雙手、以及包含頭部表情的臉部,分別用四個獨立的VQ-VAE
模型把每部分的連續動作編碼成離散的"動作詞彙"。
引用塊:VQ-VAE(向量量化變分自編碼器):一種把連續、複雜的數據(比如動作曲線)壓縮成有限個離散"代碼"的技術,類似把無限種顏色歸類成一個有限的調色板,每種顏色都有個編號,之後只需要傳編號,不用傳具體的顏色值。
這個設計其實很像樂團分譜演奏。想像一個交響樂團,如果指揮要求每個樂手都必須同時看懂整份總譜才能演奏自己的聲部,那這個樂團基本沒法排練,因為資訊量太大,反應速度會被拖垮。但如果每個樂器組只需要看自己的分譜,同時留意指揮棒和其他聲部的大致走向,整體配合反而更順暢。這裡的"總譜"就是完整的全身動作,"分譜"就是拆開後的四個身體部位,每部分只需要處理自己的動態規律,同時通過一個跨模態機制留意其他部位在做什麼,這樣既降低了單步預測的複雜度,又不會讓身體各部分動作互相打架。如果不做這個拆分,直接讓一個模型硬啃全身動作的聯合分布,在語音資訊本身就不完整的在線場景下,模型很容易學出僵硬或者不協調的動作,論文的消融實驗也證實了這一點。
拆完之後,四個部位的動作token並不是各自獨立生成的,論文用了一個叫做跨模態自回歸建模
(cross-modal autoregressive modeling)的機制,讓每個部位在生成當前時刻動作的時候,不僅參考自己過去的動作歷史,還要參考其他三個部位過去的動作,以此保證四肢和軀幹看起來像一個協調的整體,而不是四段各說各話的動畫拼貼。
一道"因果面具":逼著模型忘記未來
真正解決在線生成核心矛盾的,是論文提出的一個叫causal masked audio-conditioned cross-attention(因果掩碼音頻條件交叉注意力
)的機制。
引用塊:交叉注意力(Cross-Attention):一種讓模型在生成某個模態(這裡是動作)時,主動去"查閱"另一個模態(這裡是語音)里相關資訊的機制,類似寫文章時不斷回頭看提綱,確認自己沒有偏題。
正常的交叉注意力,是讓動作在生成的時候,可以自由地看語音序列里任何一個時間點的資訊,包括未來的。這在離線場景下完全沒問題,反而能幫助模型提前"預判"該做什麼動作。但放到在線場景下,這就成了一個作弊漏洞:如果訓練階段允許模型偷看未來的語音,那模型學到的其實是一種依賴未來資訊的"投機"策略,一旦部署上線,未來資訊被物理上切斷,模型立刻就會表現失常。
研究團隊的做法是,在交叉注意力層里加入一個因果掩碼,強制規定第t時刻的動作,只能看到第t時刻及之前的語音特徵,後面的一律被遮住看不到。而且這個限制不只是推理階段的技巧,訓練時也嚴格執行同樣的規則。
這一點特別值得展開說說,因為它其實回應了一個很容易被忽視的陷阱。很多團隊做在線系統時,習慣性地用離線的方式訓練模型,等部署的時候再簡單粗暴地把未來資訊"擋住"。這就好比一個學生做練習題的時候一直可以翻答案抄,考試的時候突然不讓翻了,那這個學生大概率是考不好的。因為他從來沒有真正訓練過"在資訊不全的情況下獨立推理"這項能力。論文的消融實驗清楚地印證了這一點:去掉因果注意力掩碼之後,FGD指標(衡量動作與真實動作分布的差距,數值越低越好)從2.795惡化到3.037,BC指標(衡量動作與語音節拍的同步程度,數值越高越好)也從7.354掉到7.027。這說明因果約束不是可有可無的裝飾,它實實在在地改變了模型學到的表徵方式。
論文還做了另一個對照實驗,把這套交叉注意力機制換成一種更簡單的"前綴拼接"方式,也就是把語音token直接拼在動作token前面,再加個因果掩碼防止看未來。結果FGD直接飆到3.745,Diversity(動作多樣性指標)也掉到8.749。這說明單純把語音塞進序列前面,和真正設計一個專門的跨模態對齊模組,效果差距很大,前者更像是把兩種資訊硬湊在一起,而不是讓模型學會真正地"邊聽邊看邊動"。
數據從哪來:虛擬陪伴場景的空白,靠什麼填
技術架構定下來了,接下來的問題是訓練數據從哪兒來。這一部分我覺得是這篇論文裡比模型設計更有意思的地方,因為它揭示了一個很實際的困境:好模型是需要好數據餵出來的,但虛擬陪伴這種場景下的高質量數據幾乎不存在。
研究團隊搭了一套offline interactive data synthesis pipeline(離線交互式數據合成管線)來解決這個問題,思路是先讓大語言模型生成對話文本,再合成配套的語音和動作。
但這裡有個坑,如果直接讓大模型隨便生成用戶和數字人之間的對話,很容易掉進模式化陷阱,聊來聊去總是那幾種話題、那幾種語氣,因為大語言模型本身有固定的表達偏好。研究團隊的解法是先建立一個subject corpus(主題語料庫),裡面收錄了各種話題片段和情緒片段,比如"如何面對失敗"這樣的話題,配上"冷靜而理性"這樣的情緒標籤,每次生成對話前先隨機抽取一組話題和情緒,當作結構化的提示詞框架餵給大模型。
這個做法其實類似寫作老師給學生出題目的方式。如果只是讓學生"隨便寫一篇作文",大概率寫出來的東西千篇一律,因為學生會本能地寫自己最熟悉、最省力的內容。但如果老師給出具體的主題和情感要求,比方說"寫一段關於失敗的、語氣冷靜的對話",學生就被迫跳出舒適區,寫出更多樣化的內容。如果不做這層約束,合成出來的對話數據會嚴重偏向大模型自己的默認寫作風格,訓練出來的手勢生成模型也會跟著變得單一。
有了對話文本之後,團隊用語音克隆或者文本轉語音系統把數字人的回應轉成語音,再用一個專門的offline gesture generator(離線手勢生成器,和部署時用的在線版本不同,這個版本可以看到完整語音,生成質量優先,不追求實時性)合成配套的動作序列,這樣就得到了一整套語音、文本、動作三者對齊的合成數據。
但純合成數據也有風險,容易帶上人工合成留下的痕跡,或者和真實人類動作有系統性偏差。為了兜底,團隊專門請了職業演員,按照預先設計好的對話腳本進行真人表演,同時用光學動作捕捉系統記錄下高質量的動作數據。這套數據被命名為JIYI
,總共約6小時,用16個高解析度相機、50個動作捕捉標記點採集而成,內容涵蓋天氣、旅行、人際關係、運動健康、遊戲、食物、職業等多個話題,情緒覆蓋開心、生氣、恐懼、悲傷、冷靜理性等多種狀態。
讓系統"越用越懂你":自我進化的閉環
如果故事到這裡就結束了,這篇論文其實也算完整。但研究團隊還多走了一步,他們注意到,離線合成的數據再怎麼豐富,終究還是模擬出來的,真實用戶在實際使用中的喜好和反饋,才是最有價值的信號。
於是他們設計了一套user-feedback-driven self-evolution(用戶反饋驅動的自我進化)機制。系統上線之後,持續收集用戶輸入、數字人的回應、生成的手勢,以及用戶對這些內容的反饋信號。這些被用戶認可的高質量交互樣本,會被存進一個叫Data Library(資料庫)的池子裡,而質量不達標的樣本會被一個validation tool(校驗工具)過濾掉,這個工具會檢查語音動作同步性、關節角度是否超出合理範圍、是否存在腳部打滑之類的物理不合理現象。
關鍵的地方在於,這些被篩選出來的高質量在線樣本,不只是被簡單地拿來當訓練數據用,它們還被當作in-context examples(上下文示例),重新塞回給大語言模型,讓它在下一輪生成對話的時候,參考這些真實被用戶喜歡的交互風格進行創作。
這個設計挺巧妙的,相當於用少量真實反饋去撬動大量新數據的生成方向。論文裡給出的具體比例很直觀:基礎模型的訓練集裡,100%都是最初的動捕數據。經過第一輪自我進化後,訓練集擴充到2434條樣本,其中原始數據占50%,新合成的離線數據占47%,而真正來自用戶反饋的偏好樣本只占3%。到第二輪,訓練集進一步擴充到3852條,原始數據比例降到33%,合成數據升到62%,偏好數據升到5%。
看到這個比例分布,你可能會想,偏好數據占比這麼低,才3%到5%,真的有用嗎?論文專門做了一個額外的消融實驗來回答這個問題。他們試著去掉偏好在線數據(不管是當訓練監督還是當上下文示例都去掉),結果FGD反而從2.231退步到2.434;再試著只留偏好數據,不做離線合成的放大,結果FGD停留在2.704,提升有限。這說明單靠這一小撮真實反饋數據直接訓練,效果並不夠,但如果讓它去引導大量合成數據的生成方向,就能把這一小撮"金子"的價值放大很多倍。
這就像調味的道理。廚房裡放一點點味精,單獨嘗味精本身沒什麼感覺,但撒到一大鍋湯里,卻能把整鍋湯的味道都提升一個層次。如果不撒進去,只是單獨端著那一小勺味精喝,起不了任何作用;但如果不放這一小勺,只靠湯本身的原料,味道也終究差點意思。用戶反饋數據的作用就類似這一小勺關鍵調味料,它本身分量很小,但決定了整鍋"合成數據湯"的風味走向。
論文裡還特別做了一個對照,把同樣的第二輪自我進化數據餵給LOM模型重新訓練,結果發現LOM確實從數據增量里獲益了,但整體表現依然不如作者提出的方法。這個對比很重要,因為它說明性能提升不完全是數據堆出來的,模型架構本身的設計(那套因果交叉注意力和分部件建模)同樣功不可沒。
實測結果:延遲砍到毫秒級,質量還反超
說了這麼多設計思路,最後還是要看數據說話。
在公開的BEATv2數據集上,嚴格按照在線協議(只能看當前和過去的語音)測試,論文提出的方法FGD達到10.519,是所有對比方法裡最低的,意味著生成的動作最接近真實分布。BC指標(語音動作同步度)達到8.389,同樣是最高的。而最讓人意外的是延遲數字,只要1.623毫秒,相比之下LOM需要22.902毫秒,SynTalker需要3.336毫秒,Semantic Gesticulator乾脆是無窮大,因為它結構上就不支持流式生成。
| 方法 | FGD↓ | BC↑ | Diversity↑ | 延遲(ms)↓ |
|---|---|---|---|---|
| Semantic Gesticulator | 16.105 | 7.246 | 8.149 | +∞ |
| TalkSHOW | 18.761 | 7.167 | 7.935 | 8.844 |
| SynTalker | 16.789 | 7.398 | 8.868 | 3.336 |
| EMAGE | 15.908 | 7.035 | 8.932 | 5.441 |
| LOM | 15.681 | 7.446 | 9.368 | 22.902 |
| **Super Star (base)** | **10.519** | **8.389** | **10.505** | **1.623** |
在更貼近真實虛擬陪伴場景的JIYI數據集上,結果趨勢一致。基礎模型FGD是2.795,已經優於所有對比方法,經過兩輪自我進化後,FGD進一步降到2.231,BC提升到7.738,Diversity也漲到12.509。
| 方法 | FGD↓ | BC↑ | Diversity↑ | 延遲(ms)↓ |
|---|---|---|---|---|
| LOM | 3.240 | 6.991 | 11.130 | 22.902 |
| Super Star (base) | 2.795 | 7.354 | 11.520 | 1.623 |
| Super Star + 自我進化(1輪) | 2.419 | 7.395 | 11.532 | 1.623 |
| **Super Star + 自我進化(2輪)** | **2.231** | **7.738** | **12.509** | 1.623 |
除了這些客觀指標,論文還找了20名志願者做主觀評測,讓他們在不知道方法名稱的情況下,盲測對比生成的手勢影片,從自然度、語音動作同步性、整體偏好三個維度評分。結果顯示,這套方法在所有對比維度上都獲得了更高的用戶偏好率,而且經過兩輪自我進化之後的版本,又進一步超過了沒有經過進化的基礎版本,證明這套持續學習機制確實帶來了實質性的體驗提升。
這條路還沒走完的地方
論文最後也很坦誠地列出了幾個尚未解決的短板。
因為嚴格遵守"只看過去不看未來"的在線約束,遇到話題突然轉折、情緒劇烈起伏的長句子時,生成的動作在全局結構上還是不如離線模型那樣連貫,畢竟離線模型可以提前看到整段話的走向再統一規划動作,在線模型沒有這個奢侈。
另外,合成數據和真實交互數據之間的分布差距,雖然靠動捕數據和自我進化機制在緩解,但沒能完全消除。而且目前這套自我進化機制里的"用戶偏好"其實是比較輕量級的信號,主要靠用戶滿意或不滿意的簡單選擇來篩選樣本,還沒有做成一個真正精細的偏好建模系統或者獎勵模型,面對更細膩、更個性化的長期用戶偏好,可能還捕捉不到位。
論文也提到,當前的框架主要聚焦在身體動作生成上,面部微表情、眼神注視、話輪轉換這些同樣重要的具身交互細節,還沒有被整合進來。未來如果要做出更完整的虛擬陪伴體驗,這些維度都得補上。
寫在後面
讀完這篇論文,最觸動我的其實不是那套因果注意力機制,雖然它確實設計得很紮實,而是那3%到5%的用戶反饋數據能撬動整個訓練分布這件事。
這讓我想起一個不太相關但核心相通的現象:很多產品的用戶增長,靠的不是海量的廣撒網式獲客,而是極小一批核心用戶的真實使用反饋,反過來指導產品往哪個方向長。數據合成也是同一個邏輯,合成的數據可以量大,但如果沒有一小撮真實信號去校正方向,量大反而可能是在錯誤的方向上越走越遠。
論文裡那個"因果掩碼不只是推理時的技巧,訓練階段也必須一致執行"的細節,也值得單獨拿出來想想。很多工程系統的坑,恰恰出在訓練和部署條件不匹配上,訓練時給足資訊,部署時突然抽走一部分,模型的表現自然會失真。這其實是個更普遍的教訓,不只適用於動作生成,任何存在"訓練環境比部署環境更寬鬆"的系統,都值得回頭檢查一下這道題。
那些被自我進化機制篩選出來、反覆被大模型參考的"用戶偏好樣本",經過兩輪疊代之後,它們本身還剩多少"原汁原味"?還是說,它們已經被合成數據的洪流稀釋成了另一種東西?
Q&A
Q1:Super Star是什麼?
A:Super Star是上海科技大學和騰訊LIGHTSPEED團隊提出的一套面向數字人的實時交互框架,核心是讓數字人在說話的同時,能夠實時生成與語音同步的身體手勢,而不需要等整段語音說完再生成動作。
Q2:Super Star和以前的手勢生成方法有什麼區別?
A:以前的方法大多是離線的,需要拿到完整語音才能生成動作,延遲高且無法用於真人實時對話。Super Star設計了因果掩碼交叉注意力機制,讓模型只依賴當前和過去的語音就能預測動作,延遲能壓到1.6毫秒左右,同時質量還超過了離線方法改造後的效果。
Q3:Super Star的訓練數據從哪裡來?
A:論文構建了一套離線數據合成管線,先用大語言模型基於話題和情緒語料生成對話,再合成配套語音和動作,同時請職業演員做動作捕捉建立高質量種子數據集JIYI,並通過用戶反饋驅動的自我進化機制持續用真實交互數據優化訓練集。






