魏娜娣,段再超
(河北師范大學(xué)匯華學(xué)院,河北 石家莊 050091)
隨著數(shù)字孿生、元宇宙等新概念的不斷完善和普及,數(shù)字人或者虛擬人技術(shù)逐漸成為動(dòng)畫、影視行業(yè)研究的一個(gè)熱點(diǎn)[1]。普遍認(rèn)為:一個(gè)體態(tài)、面容、行為、語言等各方面都與真人真假難辨的虛擬人形象,會(huì)極大的提升電視節(jié)目、電影和電子游戲的臨場體驗(yàn)感,以及內(nèi)容的互動(dòng)性和娛樂性。因此,如何創(chuàng)建逼真的虛擬角色形象,以及如何利用圖形學(xué)、計(jì)算機(jī)視覺、人工智能等技術(shù),為虛擬人賦予視覺、聽覺、語音和行動(dòng)上的獨(dú)立特色,成為開發(fā)者和研究者的主要課題。如何針對不同用戶的語言或者文字輸入,為虛擬人生成合適的應(yīng)答語音,并通過面部和口型動(dòng)畫呈現(xiàn)出來,這也是重要研究內(nèi)容[2]。
傳統(tǒng)的語音生成和口型動(dòng)畫制作[2],需要大量的人工介入。熟練的美術(shù)人員為虛擬角色制作面部模型,并設(shè)置多個(gè)不同的面部變形體(Blendshape)。每個(gè)Blendshape對應(yīng)了角色的某個(gè)標(biāo)準(zhǔn)發(fā)音口型,例如:漢語拼音的元音a,o,e,i,u,ü,輔音b,p,m等。在實(shí)際應(yīng)用中,美術(shù)或者動(dòng)畫制作人員根據(jù)當(dāng)前配音的時(shí)間線,將多個(gè)Blendshape按照權(quán)重混合在一起,產(chǎn)生一個(gè)混合了多種口型的新面部模型,即角色在當(dāng)前的面部動(dòng)畫狀態(tài)。該方法可以制作非常準(zhǔn)確的虛擬人面部表情和口型動(dòng)畫[2],但是,其制作過程非常繁瑣,需要多名美術(shù)人員配合,并且很容易人為出錯(cuò)。
提出一種新的方法:首先,由用戶交互式地輸入文字或者語音;系統(tǒng)自動(dòng)將它轉(zhuǎn)換到統(tǒng)一的文字并進(jìn)行自然語言處理(Natural Language, Processing,即NLP)[6];經(jīng)過NLP分詞之后的文字被輸入到人工智能處理系統(tǒng),轉(zhuǎn)換得到合適的回答語;然后,該回答語言文字被同步轉(zhuǎn)換到語音和拼音,和預(yù)置口型匹配;最后,接入到圖形前端,構(gòu)成虛擬人的回答語和口型動(dòng)畫。整個(gè)過程不需要他人操作,整個(gè)系統(tǒng)的響應(yīng)速度可以維持在2-3秒內(nèi),與正常人說話的頻率相當(dāng)。
1)虛擬角色管理和渲染:建立虛擬角色模型,綁定骨骼蒙皮以及口型變形體(Blendshape),輸入到實(shí)時(shí)系統(tǒng)中顯示和交互控制。
2)真人語音輸入和識別:識別用戶從麥克風(fēng)等設(shè)備的音頻輸入,嘗試將它轉(zhuǎn)換為中文文字的形式。
3)語音轉(zhuǎn)換為文字并分詞處理:將轉(zhuǎn)換后的文字進(jìn)行分詞處理,區(qū)分出主語、謂語、賓語,從句結(jié)構(gòu)等,并輸入到后續(xù)的智能回復(fù)模塊處理。
4)識別分詞結(jié)果并智能回復(fù):根據(jù)訓(xùn)練模型以及分詞的結(jié)果數(shù)據(jù),自動(dòng)生成文字并進(jìn)行恰當(dāng)?shù)幕貜?fù)。
5)將回復(fù)的文字轉(zhuǎn)換為口型:將回復(fù)的漢語文字轉(zhuǎn)換為拼音的形式,并從中獲取適當(dāng)?shù)脑艉洼o音,映射到對應(yīng)的Blendshape口型變形體,從而形成連續(xù)的口型動(dòng)畫。
6)將回復(fù)的文字轉(zhuǎn)換為語音:將回復(fù)的漢語文字轉(zhuǎn)換為語音的形式,并保存為音頻數(shù)據(jù),音頻時(shí)間線需要和口型動(dòng)畫時(shí)間線同步。
7)將口型和語音與虛擬角色結(jié)合:將口型動(dòng)畫賦予角色模型,同步播放語音音頻,從而形成虛擬角色開口說話的效果。
根據(jù)用戶的具體需求不同,系統(tǒng)還可能存在運(yùn)動(dòng)捕捉和回放,或者靜態(tài)場景渲染等功能需求。不過這些已并非自動(dòng)對話系統(tǒng)的核心組成部分,因此,不再贅述。
基于虛擬人的自動(dòng)對話系統(tǒng)主要執(zhí)行流程是:用戶外部語音輸入,識別語音并輸出文字,將文字進(jìn)行NLP分詞處理,根據(jù)分詞結(jié)果輸出應(yīng)答文字,將應(yīng)答文字輸出為語音,將應(yīng)答文字輸出位拼音,根據(jù)拼音產(chǎn)生口型變形動(dòng)畫序列,匹配口型到虛擬角色并播放語音。如圖1所示。
圖1 自動(dòng)對話系統(tǒng)執(zhí)行流程
自動(dòng)對話系統(tǒng)的虛擬角色可以采用3dsmax,blender等多種建模軟件進(jìn)行開發(fā),在設(shè)置角色模型、紋理、骨骼、蒙皮等屬性的同時(shí),為角色添加多個(gè)不同的面部變形體模型,分別對應(yīng)角色不同的口型設(shè)置。漢語口型的變形體,可以考慮元音口型,例如:元音a對應(yīng)張大嘴發(fā)音,元音i則是扁嘴發(fā)音,元音u發(fā)音的時(shí)候嘴唇向外鼓起。在美術(shù)人員制作變形體時(shí),根據(jù)常識口型形狀來修改模型即可,如圖2所示。
圖2 元音a對應(yīng)的口型變形體
但是,漢語中并非所有的口型都是來自元音發(fā)音的結(jié)果,一些典型的輔音也會(huì)產(chǎn)生強(qiáng)烈的口型變化,例如:p,m發(fā)音時(shí)有明顯的上下嘴唇觸碰和摩擦,而d,t會(huì)產(chǎn)生舌頭與上排牙齒的彈擊。此外,漢語元音是可以進(jìn)行組合擴(kuò)展的,例如:ai,ao,ang等,雖然都是從元音a衍生而來,但其發(fā)音特點(diǎn)與a有著明顯的不同。如果全部忽視這些因素,則口型模擬的結(jié)果也會(huì)不理想;但是,全部包含的話,需要制作的Blendshape數(shù)量過多,對美術(shù)人員又是繁重的工作。
為此,設(shè)計(jì)了一個(gè)能夠囊括大部分口型情況的Blendshape列表,經(jīng)測試表明,它對漢語語言的模擬有較好的效果,見表1。
表1 口型變形體類型
當(dāng)多個(gè)Blendshape同時(shí)起作用時(shí),可以表達(dá)更為復(fù)雜的拼音口型動(dòng)畫。對于不在表1中的元音/輔音,選擇相近的發(fā)音口型即可。
實(shí)現(xiàn)中文和英文等語言的語音輸入和文字識別的基本工作原理是通過高斯混合模型(GMM)-隱馬爾可夫模型(HMM)的方式,將聲音特征序列識別為另一類序列(例如語言文本序列)。通過音素(Phoneme)來表達(dá)某一種語言中的基本音節(jié)符號,每個(gè)音素都可以用一個(gè)HMM的狀態(tài)來描述。因?yàn)?正常人說話時(shí)經(jīng)常會(huì)把多個(gè)音節(jié)連接到一起,因此,HMM狀態(tài)可能不止是常見的一些拼音符號,而是多種不同符號組合的形態(tài)。對于這些狀態(tài)數(shù)據(jù)的管理和控制,也就是針對某種語言訓(xùn)練得到的聲學(xué)模型。
在實(shí)際計(jì)算過程中,通過計(jì)算聲音當(dāng)前幀的梅爾頻率倒譜系數(shù)(即MFCC系數(shù))和GMM混合模型分類器,得到當(dāng)前幀對應(yīng)的HMM狀態(tài),進(jìn)而得到整個(gè)狀態(tài)數(shù)據(jù)序列。這一過程也可以通過基于神經(jīng)網(wǎng)絡(luò)的分類器來完成。得到HMM狀態(tài)序列之后,將它與已知的聲學(xué)模型進(jìn)行比對,判斷某個(gè)音節(jié)與序列中某一幀的匹配概率情況。如果概率超過閾值,則將音節(jié)與序列幀進(jìn)行匹配。最終得到該序列對應(yīng)的音節(jié)數(shù)據(jù),如圖3所示。
圖3 HMM序列的生成和匹配過程
音節(jié)數(shù)據(jù)通過類似于聲學(xué)模型的文字模型來進(jìn)行比對,得到的就是文字結(jié)果,該過程與上述匹配過程類似。
自動(dòng)對話系統(tǒng)并不希望能夠接收用戶的任意語句輸入并進(jìn)行反饋,并且已經(jīng)有科大訊飛等公司做了大量相關(guān)的工作,以實(shí)現(xiàn)類似自動(dòng)聊天機(jī)器人的功能。本系統(tǒng)的研究目的,更多的時(shí)候是為了響應(yīng)用戶的特定需求,并且形成自動(dòng)化的虛擬角色響應(yīng)流程。因此,本系統(tǒng)的關(guān)鍵功能在于:分解用戶輸入的文字內(nèi)容,然后與系統(tǒng)內(nèi)置的功能組件關(guān)鍵字進(jìn)行匹配,最后輸出響應(yīng)結(jié)果。
自然語言識別(NLP)分詞的關(guān)鍵技術(shù)在于,如何對一個(gè)完整的句子進(jìn)行切分,并給切分結(jié)果序列的每一項(xiàng)賦予不同的標(biāo)簽。為此,定義了一套可以適用于大部分中文語境的分詞標(biāo)簽,并且根據(jù)該標(biāo)簽實(shí)現(xiàn)了對應(yīng)的分詞詞典,如表2所示。
表2 NLP分詞標(biāo)簽表
通過HMM特征的提取和比對,可以得到一個(gè)句子中每個(gè)字或者詞語對應(yīng)的標(biāo)簽類型,如果發(fā)現(xiàn)了某個(gè)新出現(xiàn)的名詞無法被正確切分的時(shí)候,也可以直接在詞典當(dāng)中進(jìn)行添加來補(bǔ)全數(shù)據(jù)。
目前,使用了較為簡單的詞典來做自動(dòng)回復(fù)的規(guī)則。例如,如果分詞結(jié)果中存在“什么(r)是(v)xxx(n)”或者“查找(v)xxx(n)”的句式,則回復(fù)“我來查找”并隨后返回在線查找結(jié)果;如果無法理解分詞后的結(jié)果或者識別到的文本內(nèi)容,則回復(fù)“我不知道”。該規(guī)則可以不斷擴(kuò)展和完善,以便用在更多復(fù)雜的環(huán)境中。
文字到語音的合成(Text To Speech,TTS)過程與語音識別和輸出文字的過程類似。首先,對回復(fù)文字同樣進(jìn)行NLP分詞,將結(jié)果字詞序列與之前的聲學(xué)模型庫中的數(shù)據(jù)進(jìn)行比對,得到對應(yīng)的HMM特征,并反向輸出梅爾頻率系數(shù)。最后,通過聲碼器的步驟,將低維的聲學(xué)特征數(shù)據(jù)映射到高維的語音波形。這一過程通過已有的開源TTS引擎ekho進(jìn)行實(shí)現(xiàn)。
回復(fù)文字同樣需要輸出到角色模型和BLendshape,轉(zhuǎn)換為對應(yīng)的口型動(dòng)畫數(shù)據(jù)并且和合成后的語音同步播放。通過之前的聲學(xué)模型數(shù)據(jù),已經(jīng)可以將文字和音素?cái)?shù)據(jù)一一對應(yīng)起來。并且可以將輸出的語音按照每一幀的音素來切分,從而得到每幀音頻對應(yīng)的口型形狀。在播放音頻的同時(shí),將口型Blendshape的數(shù)值傳遞給虛擬角色,從而實(shí)現(xiàn)同時(shí)開口說話和聲音播放,就如同是虛擬角色和用戶進(jìn)行實(shí)際的交流一樣。整個(gè)過程不需要程序和美術(shù)人員再介入,可以完全自動(dòng)完成,互動(dòng)性和實(shí)時(shí)性都比較理想,并且可以根據(jù)具體行業(yè)需求做深度的功能擴(kuò)展。
使用Unity引擎作為主要的應(yīng)用測試平臺;所用的虛擬角色使用Blender引擎制作,并按照之前表1制作了大部分的口型變形體。變形體數(shù)據(jù)可以自動(dòng)導(dǎo)入到Unity中,并實(shí)時(shí)進(jìn)行手動(dòng)或者程序調(diào)節(jié),如圖4所示。
圖4 Unity中的口型變形體設(shè)置
當(dāng)用戶通過麥克風(fēng)與角色交流,并說出類似“什么是自動(dòng)對話系統(tǒng)”的句式時(shí),本系統(tǒng)經(jīng)過短暫的計(jì)算后即通過虛擬人的口型動(dòng)畫回答“好的,我來查找”。之后“自動(dòng)對話系統(tǒng)”作為關(guān)鍵字傳遞給系統(tǒng)后臺,可以通過其它搜索引擎進(jìn)行搜索并進(jìn)一步反饋,如圖5所示。
圖5 虛擬角色回答用戶問題
如果用戶的語音識別結(jié)果經(jīng)過分詞后無法匹配現(xiàn)有詞典,或者無法正確識別或者分詞,則系統(tǒng)自動(dòng)調(diào)用內(nèi)部的默認(rèn)回答語,即“我不知道”,并傳遞給虛擬角色通過語音合成進(jìn)行表達(dá),如圖6所示。
圖6 虛擬角色的默認(rèn)回答
經(jīng)過多次測試,本系統(tǒng)可以識別多種類型的用戶提問,并自動(dòng)進(jìn)行分析和語音回答,同時(shí)伴有虛擬角色的口型動(dòng)畫。系統(tǒng)執(zhí)行過程中,具體的識別情況和運(yùn)行速度如表3所示。
表3 系統(tǒng)運(yùn)行時(shí)的對話情況
本文提出了一種虛擬角色交互對話系統(tǒng),并研究了其中涉及的關(guān)鍵技術(shù),包括語音輸入的識別的文字轉(zhuǎn)換,自然語言分詞和結(jié)果輸出[6],文字轉(zhuǎn)換為語音,以及將語音轉(zhuǎn)換到虛擬角色口型變形體的方法。通過GMM-HMM系統(tǒng)將輸入的聲音波形進(jìn)行分割,再提取每個(gè)分段中的特征信息,轉(zhuǎn)換為HMM狀態(tài)數(shù)據(jù),
與聲學(xué)模型庫進(jìn)行比對,得到對應(yīng)的文字序列[3]。之后,將文字序列合成為整段自然句,并進(jìn)行NLP分詞識別,根據(jù)分詞的結(jié)果生成回應(yīng)文字;然后,再通過同一個(gè)聲學(xué)模型庫的逆比對,得到新的文字段對應(yīng)的聲音HMM狀態(tài),最終輸出新的波形數(shù)據(jù),并同步將文字輸出為虛擬角色的口型動(dòng)畫。整個(gè)流程可以通過程序自動(dòng)完成,不需要人工干預(yù)操作,因此,大大簡化了虛擬人角色和內(nèi)容的制作周期,可以用于電視電影,游戲娛樂,直播和VR等領(lǐng)域的需求,具有較高的實(shí)用價(jià)值[1]。
所提出的方法還有較大的完善空間,尤其是自動(dòng)產(chǎn)生回應(yīng)文字的部分,目前采用了較為原始的從詞典中匹配和提取的手段,因此,較多的用戶提問都會(huì)被轉(zhuǎn)換到“我不知道”這一默認(rèn)答案。后續(xù)的研究過程中,會(huì)嘗試引入神經(jīng)網(wǎng)絡(luò)的方法,來完善虛擬角色的回應(yīng)機(jī)制,從而進(jìn)一步提升整個(gè)系統(tǒng)的實(shí)用價(jià)值。