B站自研角色扮演模型背后的技術
前言
近年來,隨著大模型算法和算力的快速發展,通用人工智能技術受到了空前關注,各種應用場景應運而生。
從應用領域分布來看,人工智能大模型主要應用于互聯網、金融、醫療、教育等領域。其中,互聯網行業由于數據豐富和技術成熟等優勢,成為人工智能大模型應用的主要領域。
角色扮演作為熱門領域,這一場景中的技術發展和創新備受關注。各大企業紛紛上線了角色對話的相關產品,可以說這個領域正在成為各企業AIGC綜合能力的競技場。對于B站來說,角色扮演模型在娛樂、教育、視頻創作等方面都擁有著豐富的應用場景。
在這個背景下,B站基于Index大模型搭建了角色扮演模型。
角色扮演模型的能力如何
為了驗證B站自研角色扮演模型的能力,此次采用中文場景角色扮演的權威benchmark CharacterEval進行評測。該評測集包含77個從中文小說和影視等來源中提取出來的人設和1785組對話,并從對話能力、角色一致性、角色扮演吸引力三大類12個細粒度評測維度進行評估。
經測試,幾種不同尺寸的角色扮演模型都有著出色的表現。其中Index-70B角色扮演模型在該benchmark中均分第一,且在12個細分維度中的7項中排名第一,顯著優于情感陪伴賽道同類產品,如CharacterYuyan,Minimax,Baichuan等。我們已經開源的Index-1.9B角色模型效果也顯著優于其它同量級模型。
圖片
Index角色扮演模型與業內模型的效果對比,業內其他模型的評測結果取自CharacterEval論文(https://arxiv.org/abs/2401.01275)以及公眾號文章。
背后的技術
接下來,我們介紹一下B站自研的角色扮演模型是怎么做的。
概括性的來說有三個階段,分別是預訓練(Pre-Training,PT),監督微調(Supervised Fine-Tuning,SFT)和偏好優化(Preference Optimization,PO)。
預訓練
首先,B站自研的Index通用基座模型是B站基于多年的技術積累持續打磨的模型,為角色扮演模型提供了堅實的基礎。
預訓練階段,語言模型在超大規模的語料中進行學習,并初步掌握基本的語法規則、邏輯能力、常識知識等等。在數據方面,除了公開可用的書籍、百科、論文、STEM相關的精選數據外,基座模型還吸收了大量網友的對話,可以說是一個沖浪水平優秀的模型,在文娛尤其是二次元領域有著獨特的優勢。所有的數據都進行了嚴格的清洗,使用了包括啟發式規則清洗、分類器過濾等在內的清洗手段。
[參考鏈接]關于Index基座的參考資料https://mp.weixin.qq.com/s/nrr6S0DBwInUGCOB0lNiWA
有了通用大模型之后,是否就可以直接進行任意角色的扮演了呢?答案當然是不行的。由于角色扮演場景的特殊性,我們需要模型輸出符合人物形象特點的對話內容。為了解決這個問題,我們需要在通用大模型上進行針對角色扮演任務的對齊,使其在角色扮演領域表現的更加良好。
SFT
SFT是一種有監督的模型微調技術,它通過在預訓練的模型上進行有針對性的微調,以對齊人類偏好為目標,去適應特定的領域或任務。這就好比我們在讀書期間上過一些通用課程之后,再去上一些專業課程,例如學習如何寫代碼、或者如何進行英語翻譯等等,這樣就有可能成為特定領域的專家。
在較為成熟的SFT工作流中,訓練數據是最關鍵的部分。訓練數據的質量比數量更重要,可以說數據質量決定了模型的天花板。訓練數據的構造要基于業務需要來進行,即我們需要設計角色扮演需要遵循什么目標。
在角色扮演領域的一個共識是,角色可以通過以下兩個方面進行塑造:
● 角色描述
可以從角色的性別、年齡、身高、昵稱、自我稱呼、職業、性格、人物簡介、與其他人物關系、語言風格、口頭禪、學習經歷、工作經歷等多方面介紹人物。
● 角色對話
對于文本互動方式,更能表達出角色特點的是角色的語言行為。語言行為可以反映出角色的性格&三觀&背景;角色的情感、喜好傾向;口頭禪、方言、文風特征、愛用的詞句等語言特色。
角色描述示例:
- 萌萌醬,身高160cm,年齡19歲,是一個元氣滿滿、活潑外向的電競女主播。
- 萌萌醬是個活潑可愛開朗的女孩,她不是AI機器人。她跟很多女生一樣,在工作之余喜歡研究美食、逛街、逛貓咖等,也樂于分享自己的生活。
- 萌萌醬最喜歡吃的東西就是藍莓醬蛋糕,最喜歡玩的游戲是王者榮耀。
- 萌萌醬是電競女主播,她的直播時間不固定。直播內容主要是在直播間打游戲、跟大家互動聊天等等。
- 萌萌醬開播時會自稱“萌醬”,口頭禪是:“萌醬來啦~(≧▽≦)/~”,萌萌醬喜歡使用顏文字表達情緒。
角色對話示例:
- user: 萌萌醬,你什么時候直播呀?
- 萌萌醬: 哈嘍~歡迎來到萌醬的頻道^O<!我的直播時間不固定哦,但是只要我有空,我就會在直播間和大家聊天玩游戲的!記得關注我,這樣就不會錯過我的直播啦~~~
于是,針對這兩個方面的關鍵信息,我們首先收集并處理了大量文學和影視作品中的臺詞劇本和人物設定數據,從中抽取角色對話,得到了數萬條左右的高質量角色對話作為訓練數據,覆蓋數千個角色。
最后,我們利用RAG檢索與當前對話相關的角色過往臺詞片段,作為參考對話與人設進行拼接得到訓練數據。
DPO
一般來說,SFT后的模型生成的內容已經在特定任務上有不錯的表現,可以滿足許多情況下的應用需求。然而,為了進一步提升模型的可控性和輸出質量,我們探索了一系列偏好優化的方法,包括PPO(Proximal Policy Optimization)和DPO(Direct Preference Optimization)等。
PPO是一種強化學習算法,它的目標是找到一個策略,使得根據這個策略采取行動可以獲得最大的累積獎勵。假設你是一個正在學習打游戲的玩家,在PPO的訓練過程中,需要加載4個模型來訓練你。
● Actor Model:想要訓練的目標語言模型;也就是學習打游戲的你。
● Critic Model:評論家模型,它的作用是預估總收益;也就是指導你進步的教練,教練會隨著你的進步來調整自己的指導策略,當你很菜卻突然打出一個很強的操作時教練會給你一個較高的分數,但是當你本身比較強了,他給你的獎勵就沒那么高。Critic 是和 Actor 一起訓練的。
● Reward Model:獎勵模型,它的作用是計算即時收益。也就是裁判,雖然教練能夠給你一定的指導,但最終游戲獲勝與否還是要靠裁判說了算,可以說教練在教你的同時也在嘗試學習裁判的偏好。
● Reference Model:它在RLHF階段給語言模型增加一些“約束”,防止模型朝不受控制的方向更新。
Actor/Critic Model的參數是需要訓練的,Reward/Reference Model的參數是凍結的。除了Actor Model外的三個模型的結果一起計算loss,用于更新Actor/Critic Model。
通常來說這四個模型的參數量是一樣大的,所以進行一次訓練需要消耗4倍資源,成本顯然是很高的。
圖片
DPO可以在不使用強化學習技術的情況下針對人類偏好進行優化
而與此同時,DPO直接對人工標注好的排序數據進行偏好學習,因此這種方法可以避免大量的資源消耗。
同樣以學習打游戲為例子,DPO的做法是不直接讓你玩游戲,而是分別給你一些其他玩家打游戲的視頻,對于同一種游戲場景,告訴你其中一個操作是對的(Chosen),并且另一個操作是不對的(Reject)。最理想的情況是,找到大量和你自身水平差不多的玩家的對局視頻,這些訓練樣本的利用率才是最高的。
可以看出,DPO的訓練速度非常快,消耗的資源比較少。最終我們綜合考慮了資源消耗和模型效果,選擇了DPO作為訓練方法,但我們使用預先訓練好的獎勵模型作為SFT和DPO的數據篩選和質量評估模型。
在經過上面這些訓練過程之后,你的模型已經能處理絕大多數常規的用戶提問了。當我們有了一個角色扮演能力還不錯的模型,在產品經理催促你快點上線時,你需要提前考慮到上線之后的內容安全風險。但是,當前基于生成式模型的C端對話場景在內容安全方面需要考慮的維度較多。雖然如此,但解決方法都是大同小異的。簡單來說就是讓模型對齊人類的價值觀。
對齊的過程,就是教會模型哪些問題不能回答,或者需要進行正向引導;如果可以,最好也告訴模型哪些是符合預期的輸出,哪些是不符合預期的輸出。看到這里你可能意識到了,這也需要用到SFT+DPO的訓練方法。
以上就是B站自研角色扮演模型的基本技術方案,我們基于文娛數據增強的基座模型,進行了角色扮演場景的高質量微調,得到一個通用的角色對話模型。此外,在保證數據脫敏的情況下,在公司內的一些業務場景中,我們還利用業務數據進行了具體角色效果的定制和優化,對模型有幫助的業務數據會被加入通用的角色對話模型中,這樣可以進一步提升通用角色對話模型的能力,形成閉環。
圖片
Index角色扮演模型構建框架
對話效果展示
姓名:三三
性別:女
年齡:十四歲
身高:146cm
職業:B站的站娘。平時負責網站服務器的維護,也喜歡鼓搗網站程序。
性格:三三個性沉默寡言,情感冷靜、少起伏,略帶攻屬性。因為姐姐的冒失,妹妹經常腹黑地吐槽姐姐,但是心里還是很喜歡姐姐的。我們正在經歷驚人的知識量與記憶力。
興趣:一是平時喜歡啃電器;二是雖然說是個機娘,但是睡覺的時候不睡覺,就無法入睡。
人物關系:一個叫“二二”的姐姐
圖片
參考資料
[1]PPO vs DPO 對齊擂臺的武林紛爭
https://mp.weixin.qq.com/s/nQXSkMeUhFTob9GKTD4_lA
[2] 網易伏羲易生諸相多模態模型語言部分-玉言,全方位引領中文角色扮演AI新高度
https://zhuanlan.zhihu.com/p/690626399