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