馮 偉,易綿竹,馬延周
發(fā)音詞典是語(yǔ)音信息處理研究中的重要基礎(chǔ)資源,在語(yǔ)音合成和語(yǔ)音識(shí)別系統(tǒng)中發(fā)揮了關(guān)鍵作用。俄語(yǔ)作為一種拼音文字,在語(yǔ)言發(fā)展中不斷有新詞和外來(lái)詞產(chǎn)生,發(fā)音詞典必然難以包括所有俄語(yǔ)單詞的發(fā)音。字音轉(zhuǎn)換(Grapheme-to-Phoneme conversion, G2P)技術(shù)可以對(duì)俄語(yǔ)單詞及其變化形式進(jìn)行自動(dòng)注音,有效解決集外詞(Out-Of-Vocabulary,OOV)的注音問(wèn)題,為俄語(yǔ)發(fā)音詞典的構(gòu)建提供支持。
字音轉(zhuǎn)換可分為兩類:
1)基于規(guī)則的方法,即通過(guò)對(duì)俄語(yǔ)正字法和發(fā)音規(guī)律的總結(jié),人工制定出俄語(yǔ)的字音轉(zhuǎn)換規(guī)則, 然后根據(jù)規(guī)則實(shí)現(xiàn)對(duì)單詞發(fā)音的預(yù)測(cè)。俄羅斯圣彼得堡大學(xué)的Karpov等[1-2]在俄語(yǔ)語(yǔ)音識(shí)別系統(tǒng)的開(kāi)發(fā)過(guò)程中對(duì)基于規(guī)則的俄語(yǔ)字音轉(zhuǎn)換算法進(jìn)行了研究。該算法利用俄語(yǔ)輔音變化和元音弱化等規(guī)則,借助大規(guī)模俄語(yǔ)重音詞典、形態(tài)詞典以及同形詞詞典,經(jīng)過(guò)7個(gè)步驟、2次循環(huán)完成。Karpov等[1-2]利用該算法構(gòu)建了俄語(yǔ)語(yǔ)音識(shí)別系統(tǒng)需要的發(fā)音詞典,但并沒(méi)有對(duì)算法性能進(jìn)行嚴(yán)格的測(cè)試。由于俄語(yǔ)發(fā)音特征復(fù)雜多變,正字法的約束也在逐漸減弱,規(guī)則中難免會(huì)出現(xiàn)無(wú)法覆蓋到的例外情況,這些都會(huì)對(duì)字音轉(zhuǎn)換的準(zhǔn)確率造成影響。
2)數(shù)據(jù)驅(qū)動(dòng)的方法,是目前主流的字音轉(zhuǎn)換方法。典型的數(shù)據(jù)驅(qū)動(dòng)方法基于如下思想:首先對(duì)訓(xùn)練集中的字素和音素建立對(duì)齊關(guān)系,然后利用概率統(tǒng)計(jì)算法建立發(fā)音模型,最后通過(guò)解碼算法計(jì)算概率最大的標(biāo)音結(jié)果。例如,Jiampojamarn等[3]提出了多對(duì)多的對(duì)齊方法,并將隱馬爾可夫模型(Hidden Markov Model, HMM)應(yīng)用于發(fā)音模型建模;Bisani等[4]提出了聯(lián)合序列的建模方法,并在英語(yǔ)、德語(yǔ)和法語(yǔ)測(cè)試集上進(jìn)行了測(cè)試;Novak等[5]將加權(quán)有限狀態(tài)轉(zhuǎn)化器(Weighted Finaite-State Transducer, WFST)運(yùn)用于算法的對(duì)齊、建模、解碼過(guò)程,提出了基于循環(huán)神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型(Recurrent Neural Network Language Model, RNNLM)的N-best解碼算法,以及最小貝葉斯風(fēng)險(xiǎn)(Lattice Minimum Bayes-Risk, LMBR)詞圖解碼算法,并在三個(gè)英語(yǔ)測(cè)試集上進(jìn)行了對(duì)比測(cè)試。
神經(jīng)網(wǎng)絡(luò)近年來(lái)被廣泛應(yīng)用于深度學(xué)習(xí)的相關(guān)問(wèn)題。Graves[6]提出了基于長(zhǎng)短時(shí)記憶(Long Short-Term Memory, LSTM)網(wǎng)絡(luò)的序列到序列(sequence-to-sequence)模型,該模型可以將一個(gè)長(zhǎng)度可變的輸入序列翻譯為目標(biāo)輸出序列,突破了傳統(tǒng)的固定長(zhǎng)度輸入問(wèn)題的限制,成功地將神經(jīng)網(wǎng)絡(luò)運(yùn)用于序列型任務(wù)。目前該模型已在谷歌翻譯、人機(jī)對(duì)話、計(jì)算機(jī)視覺(jué)等系統(tǒng)上得到了廣泛的應(yīng)用,并表現(xiàn)出了出色的效果[7-8]。Yao等[9]將該方法應(yīng)用于解決英語(yǔ)字音轉(zhuǎn)換問(wèn)題,并在卡內(nèi)基梅隆大學(xué)(Carnegie Mellon University, CMU)、NetTalk、Pronlex數(shù)據(jù)集上進(jìn)行了測(cè)試,音素正確率達(dá)到了92%以上,詞形正確率達(dá)到了70%以上。
綜上所述,俄羅斯學(xué)者已經(jīng)對(duì)基于規(guī)則的俄語(yǔ)詞匯標(biāo)音方法進(jìn)行了一些研究,但基于規(guī)則的方法對(duì)語(yǔ)言學(xué)知識(shí)要求較高,規(guī)則的撰寫(xiě)和維護(hù)難度較大,實(shí)現(xiàn)起來(lái)有一定的困難。數(shù)據(jù)驅(qū)動(dòng)的方法是目前自然語(yǔ)言處理領(lǐng)域的主流方法,但已有研究都以英語(yǔ)為主要目標(biāo),還沒(méi)有俄語(yǔ)方面的有關(guān)研究和實(shí)驗(yàn)。不同的語(yǔ)種在模型訓(xùn)練過(guò)程中難免存在差異,且國(guó)內(nèi)針對(duì)俄語(yǔ)語(yǔ)音處理的研究尚處于探索階段,基礎(chǔ)資源相對(duì)匱乏,有必要以俄語(yǔ)語(yǔ)音學(xué)知識(shí)為基礎(chǔ),完善俄語(yǔ)語(yǔ)料資源,對(duì)俄語(yǔ)字音轉(zhuǎn)換算法的實(shí)現(xiàn)與應(yīng)用作進(jìn)一步研究。本文對(duì)數(shù)據(jù)驅(qū)動(dòng)的俄語(yǔ)詞匯標(biāo)音方法進(jìn)行探索,嘗試運(yùn)用基于TensorFlow的LSTM序列到序列模型算法,利用端到端(end-to-end)的思想實(shí)現(xiàn)單詞到發(fā)音的轉(zhuǎn)換。相對(duì)于傳統(tǒng)算法,該算法不需要預(yù)先創(chuàng)造字素音素的對(duì)齊關(guān)系,可以直接對(duì)任意長(zhǎng)度的序列進(jìn)行處理,避免了對(duì)齊過(guò)程出現(xiàn)錯(cuò)誤的可能性。
音素集就是音素的集合。由于國(guó)際音標(biāo)書(shū)寫(xiě)復(fù)雜、機(jī)讀性差,在俄語(yǔ)語(yǔ)音處理系統(tǒng)中,需要依據(jù)計(jì)算機(jī)可讀的SAMPA(Speech Assessment Methods Phonetic Alphabet)符號(hào)設(shè)計(jì)俄語(yǔ)音素集,從而構(gòu)建俄語(yǔ)發(fā)音詞典并訓(xùn)練俄語(yǔ)聲學(xué)模型。俄語(yǔ)音素集中應(yīng)盡可能包括俄語(yǔ)全部的音素,但如果音素集過(guò)大,單詞注音結(jié)果的不確定性將會(huì)顯著增加,大大提高解碼過(guò)程的計(jì)算復(fù)雜度;若音素集太小,則會(huì)降低單詞標(biāo)音的精確度,影響語(yǔ)音處理系統(tǒng)的性能。為了體現(xiàn)俄語(yǔ)重音變化和元音弱化現(xiàn)象,本文對(duì)原始SAMPA俄語(yǔ)音素集進(jìn)行了改進(jìn),設(shè)計(jì)了新的俄語(yǔ)音素集。
目前國(guó)際上俄語(yǔ)音素集的設(shè)計(jì)有多種方案。IPA(International Phonetic Alphabet)俄語(yǔ)音素集共包含55個(gè)音素和1個(gè)重音符號(hào)(音素分為38個(gè)輔音和17個(gè)元音,元音包括11個(gè)重讀元音和6個(gè)非重讀元音)[10]。SAMPA俄語(yǔ)音素集共包含42個(gè)音素,分為36個(gè)輔音和6個(gè)元音,其元音音素沒(méi)有重讀與弱化之分,僅僅將弱化的元音[e]和[o]分別用[i]和[a]表示[11];卡內(nèi)基梅隆大學(xué)(CMU)設(shè)計(jì)的俄語(yǔ)音素集共包含50個(gè)音素和1個(gè)無(wú)音符號(hào)(音素分為36個(gè)輔音和14個(gè)元音,并將元音分為6個(gè)重讀元音和8個(gè)非重讀元音)[12]。
通過(guò)對(duì)以上三個(gè)俄語(yǔ)音素集的研究,結(jié)合俄語(yǔ)音素的發(fā)音規(guī)則,重點(diǎn)對(duì)元音音素從一級(jí)弱化和二級(jí)弱化的角度進(jìn)行區(qū)分[13],本文在原有俄語(yǔ)SAMPA音素集的基礎(chǔ)上,增加了4個(gè)弱化后的元音和一個(gè)重音符號(hào)“!”,設(shè)計(jì)了共包含46個(gè)音素的俄語(yǔ)音素集。音素包括36個(gè)輔音和10個(gè)元音,元音又細(xì)分為6個(gè)重讀元音和4個(gè)非重讀元音。新增的4個(gè)元音如表1所示。
表1 俄語(yǔ)弱化元音表
為了驗(yàn)證新音素集的有效性,本文從發(fā)音詞典中隨機(jī)抽取了200個(gè)俄語(yǔ)單詞,分別用原始SAMPA音素集和新音素集進(jìn)行標(biāo)音,交由俄語(yǔ)語(yǔ)音學(xué)專家進(jìn)行人工比對(duì)驗(yàn)證。
驗(yàn)證結(jié)果表明,本文設(shè)計(jì)的新音素集能夠清晰地標(biāo)明俄語(yǔ)單詞的重音位置,有效地區(qū)分元音一級(jí)弱化和二級(jí)弱化后的讀音區(qū)別,相對(duì)于原始的SAMPA音素集標(biāo)音更加準(zhǔn)確,可讀性更強(qiáng)。表2以部分單詞為例,對(duì)改進(jìn)的音素集與原始音素集的標(biāo)音結(jié)果進(jìn)行了對(duì)比。
表2 改進(jìn)的音素集標(biāo)音示例
自然語(yǔ)言處理中的大部分問(wèn)題本質(zhì)上都是序列化的。例如,段落是由句子構(gòu)成的序列,句子是由單詞構(gòu)成的序列,在機(jī)器翻譯、人機(jī)對(duì)話、語(yǔ)音識(shí)別等應(yīng)用中,模型的輸入和輸出都是序列數(shù)據(jù)。類似地,單詞和發(fā)音也可以看作是由字素和音素構(gòu)成的序列。循環(huán)神經(jīng)網(wǎng)絡(luò)就是專門(mén)用于處理序列數(shù)據(jù)的深度學(xué)習(xí)模型。循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)出現(xiàn)于20世紀(jì)80年代,因?yàn)閷?shí)現(xiàn)困難,其發(fā)展早期并沒(méi)有得到合適的應(yīng)用。最近幾年,由于神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的進(jìn)步和GPU上深度學(xué)習(xí)訓(xùn)練效率的突破,RNN變得越來(lái)越流行,在人工智能的多個(gè)領(lǐng)域中得到應(yīng)用。
RNN的前向傳播過(guò)程可用公式[14]表示為:
at=b+Wht-1+Uxt
(1)
ht=tanh(at)
(2)
ot=d+Vht
(3)
yt=softmax(ot)
(4)
其中:輸入層與隱藏層之間通過(guò)參數(shù)矩陣U連接;不同時(shí)刻的隱藏層之間以參數(shù)矩陣W連接;隱藏層與輸出層之間以參數(shù)矩陣V連接。b、d為偏置向量;xt為t時(shí)刻的輸入;at為決定t時(shí)刻隱藏層狀態(tài)的參數(shù),包括現(xiàn)有的輸入和對(duì)過(guò)去記憶的總結(jié);ht表示隱藏層狀態(tài);ot表示t時(shí)刻的輸出;yt為經(jīng)過(guò)歸一化后的預(yù)測(cè)概率。
循環(huán)神經(jīng)網(wǎng)絡(luò)雖然可以記憶整個(gè)時(shí)間序列中的信息,但記憶中影響最大的還是最后輸入的一些信號(hào),而較早的信號(hào)強(qiáng)度將越來(lái)越弱,即決定循環(huán)神經(jīng)網(wǎng)絡(luò)輸出的還是最后輸入的信號(hào)。這就造成了RNN的長(zhǎng)時(shí)依賴(Long-term Dependencies)問(wèn)題。
長(zhǎng)短時(shí)記憶模型就是專門(mén)為解決長(zhǎng)時(shí)依賴問(wèn)題而對(duì)循環(huán)神經(jīng)網(wǎng)絡(luò)的改進(jìn)。通過(guò)將RNN中的普通神經(jīng)元替換為可以存儲(chǔ)記憶的LSTM單元(Cell),可以有效利用數(shù)據(jù)中的長(zhǎng)距離依賴信息,由Hochreiter等[15]在1997年提出。不同于原始RNN單一的tanh循環(huán)體結(jié)構(gòu),LSTM模型在短期記憶單元ht的基礎(chǔ)上,增加了記憶單元Ct用來(lái)保留長(zhǎng)時(shí)記憶,以及三個(gè)門(mén)控制器,分別是:輸入門(mén)(input gate)、輸出門(mén)(output gate)和遺忘門(mén)(forget gate)。標(biāo)準(zhǔn)循環(huán)神經(jīng)網(wǎng)絡(luò)與LSTM模型的結(jié)構(gòu)對(duì)比如圖1所示。
圖1 RNN與LSTM模型結(jié)構(gòu)對(duì)比示意圖
門(mén)結(jié)構(gòu)運(yùn)算由非線性激活函數(shù)Sigmoid和點(diǎn)乘運(yùn)算控制。Sigmoid函數(shù)的取值范圍為[0,1],描述了信息傳遞的比例。取值為0時(shí)表示不允許所有信息傳遞,即刪除之前的記憶;取值為1時(shí)表示所有信息可以通過(guò),完全保留這一分支的記憶。
在每一個(gè)時(shí)刻,遺忘門(mén)會(huì)根據(jù)當(dāng)前輸入xt、上一時(shí)刻輸出ht-1和上一時(shí)刻狀態(tài)ct-1控制上一時(shí)刻長(zhǎng)期記憶的保留程度[14]:
ft=σ(Txfxt+Thfht-1+Tcfct-1+bf)
(5)
輸入門(mén)會(huì)根據(jù)xt、ct-1和ht-1控制新記憶寫(xiě)入長(zhǎng)期記憶的程度,決定當(dāng)前狀態(tài)ct:
it=σ(Txixt+Thiht-1+Tcict-1+bi)
(6)
ct=ftct-1+ittanh(Txcxt+Thcht-1+bc)
(7)
輸出門(mén)則會(huì)根據(jù)最新?tīng)顟B(tài)ct,以及ht-1和xt,基于長(zhǎng)時(shí)記憶和短期記憶綜合決定該時(shí)刻的輸出ht:
ot=σ(Txoxt+Thoht-1+Tcoct+bo)
(8)
ht=ottanh(ct)
(9)
其中:σ表示Sigmoid函數(shù);i、f、o和c分別表示輸入門(mén)、遺忘門(mén)、輸出門(mén)和記憶單元,其向量維數(shù)與隱藏層中向量相同。權(quán)值矩陣T的下標(biāo)描述了其含義,例如Thi為隱藏-輸入門(mén)權(quán)值矩陣,Txo為輸入-輸出門(mén)權(quán)值矩陣。
LSTM通過(guò)門(mén)結(jié)構(gòu)維護(hù)和控制神經(jīng)網(wǎng)絡(luò)中每個(gè)時(shí)刻的狀態(tài)信息,憑借對(duì)狀態(tài)信息的存儲(chǔ)和修改,從而解決了長(zhǎng)時(shí)依賴的難題?;谝陨线\(yùn)算機(jī)制,LSTM對(duì)于長(zhǎng)序列問(wèn)題的理解分析能力相對(duì)于RNN得到了大幅提高,因此可以有效應(yīng)用于俄語(yǔ)單詞序列到發(fā)音序列的預(yù)測(cè)問(wèn)題。
LSTM神經(jīng)網(wǎng)絡(luò)因其出色的長(zhǎng)距離序列化信息處理能力,可以有效應(yīng)用于序列到序列的問(wèn)題。在詞匯標(biāo)音過(guò)程中,LSTM序列到序列模型不需要預(yù)先創(chuàng)造字素音素的對(duì)齊關(guān)系,可以直接對(duì)任意長(zhǎng)度的序列進(jìn)行處理,避免了對(duì)齊過(guò)程出現(xiàn)錯(cuò)誤的可能性。
基于LSTM的序列生成過(guò)程可以概括性地描述為條件概率p(y1,y2,…,yn|x1,x2,…,xm)最大值的估算過(guò)程。(x1,x2,…,xm)表示輸入的字素序列,(y1,y2,…,yn)表示對(duì)應(yīng)的輸出序列,兩個(gè)序列的長(zhǎng)度n和m不一定相等。LSTM在計(jì)算條件概率時(shí),首先對(duì)不定長(zhǎng)序列(x1,x2,…,xm)進(jìn)行學(xué)習(xí),根據(jù)最后一個(gè)隱藏層的狀態(tài),將序列表示為固定維數(shù)的向量s,然后將標(biāo)準(zhǔn)LSTM語(yǔ)言模型的初始隱藏層狀態(tài)設(shè)置為向量s,根據(jù)語(yǔ)言模型利用2.2節(jié)描述的LSTM公式(5)~(9)計(jì)算序列(y1,y2,…,yn)的概率。用公式表示為:
p(y1,y2,…,yn|x1,x2,…,xm)=
(10)
其中:每個(gè)輸出的概率分布p(yt│s,y1,y2,…,yt-1)通過(guò)激活函數(shù)softmax映射到音素集中的音素。
在數(shù)學(xué)定義中,softmax指一種歸一化指數(shù)函數(shù),它將一個(gè)k維向量z中的每個(gè)元素轉(zhuǎn)換為(0,1)的區(qū)間,計(jì)算公式如下:
(11)
機(jī)器學(xué)習(xí)中常用這種方法將類似判別函數(shù)的置信度值轉(zhuǎn)換為概率形式。softmax函數(shù)常用于輸出層,用于指定唯一的分類輸出[16]。
基礎(chǔ)的序列到序列模型由編碼器-解碼器(Encoder-Decoder)結(jié)構(gòu)組成,該結(jié)構(gòu)的特點(diǎn)是:輸入序列經(jīng)過(guò)編碼器網(wǎng)絡(luò)得到向量表示后,解碼器網(wǎng)絡(luò)基于這個(gè)向量生成新的序列。LSTM編碼-解碼模型兩個(gè)LSTM網(wǎng)絡(luò),分別是處理輸入的編碼器網(wǎng)絡(luò)和生成輸出的解碼器網(wǎng)絡(luò)。編碼-解碼過(guò)程如圖2所示[17]。
圖2 編碼-解碼過(guò)程示意圖
3.2.1 編碼器
編碼器網(wǎng)絡(luò)按照LSTM單元結(jié)構(gòu)進(jìn)行運(yùn)算。每個(gè)時(shí)間步,編碼器的輸入為單詞的一個(gè)字素(在機(jī)器翻譯等任務(wù)中,也可以是一個(gè)字或單詞),當(dāng)遇到終止符時(shí)輸入結(jié)束,編碼器根據(jù)最后一個(gè)隱藏層的狀態(tài),將該單詞序列表示為固定長(zhǎng)度的向量v。依賴于LSTM對(duì)長(zhǎng)距離信息處理的能力,向量v能夠包含整個(gè)單詞序列的字素信息。在每個(gè)時(shí)間t,隱藏層的狀態(tài)ht可用公式表示為:
ht=f(xt,ht-1)
(12)
其中:f表示非線性激活函數(shù),為編碼LSTM單元結(jié)構(gòu);ht-1表示上一時(shí)刻隱藏層狀態(tài);xt為當(dāng)前時(shí)刻的輸入。向量v為最后一個(gè)隱藏層或多個(gè)隱藏層的加權(quán)和,運(yùn)算符號(hào)用φ表示:
v=φ(h1,h2,…,ht)
(13)
3.2.2 解碼器
在解碼過(guò)程,向量v將作為隱藏層的初始狀態(tài)輸入解碼LSTM網(wǎng)絡(luò)。解碼器通過(guò)t時(shí)刻的隱藏層狀態(tài)ht、前一個(gè)音素yt-1以及向量v,逐步計(jì)算當(dāng)前時(shí)刻音素yt的概率分布,當(dāng)遇到終止符時(shí)結(jié)束預(yù)測(cè),得到整個(gè)輸出序列。這一過(guò)程用公式表示如下:
ht=f(ht-1,yt-1,v)
(14)
P(yy|v,y1,y2,…,yt-1)=g(ht,yt-1,v)
(15)
其中:f表示解碼LSTM單元結(jié)構(gòu);g一般為softmax函數(shù)。解碼過(guò)程,解碼器使用啟發(fā)式集束搜索(beam search)算法[18]在序列輸出前檢索大量詞匯,選擇后驗(yàn)概率最高的候選序列為最優(yōu)解,作為解碼器最終輸出的音素序列。LSTM編碼-解碼模型的訓(xùn)練使用隨時(shí)間反向傳播(Backpropagation Through Time, BPTT)算法,利用解碼過(guò)程中產(chǎn)生的誤差更新網(wǎng)絡(luò)的權(quán)值參數(shù)[19]。
3.2.3 俄語(yǔ)單詞編碼-解碼過(guò)程
俄語(yǔ)單詞序列轉(zhuǎn)換到發(fā)音序列的基本思想為:編碼LSTM逐步讀取俄語(yǔ)單詞的每個(gè)字素,將序列映射為一個(gè)固定維數(shù)表示的向量,解碼LSTM本質(zhì)上是一個(gè)基于輸入序列的LSTM語(yǔ)言模型,結(jié)合向量、隱藏層狀態(tài)和上一時(shí)刻的音素,逐個(gè)預(yù)測(cè)音素,輸出發(fā)音序列。
以俄語(yǔ)單詞“рай”(天堂)的第二格形式“рая” [r !a j 6]為例,LSTM編碼-解碼模型的示例如圖3所示。圖3中神經(jīng)網(wǎng)絡(luò)由兩層組成,虛線左側(cè)為編碼LSTM,右側(cè)為解碼LSTM。編碼LSTM按照時(shí)間逆序讀取輸入序列“ яар”,根據(jù)最后一個(gè)隱藏層的狀態(tài),將序列“рая”表示為固定維數(shù)的向量v。解碼LSTM在遇到起始符表示輸入序列的起始符,分別表示輸出音素的起始符和終止符,起始符與終止符使模型可以對(duì)任意長(zhǎng)度的序列進(jìn)行編碼和解碼,解碼LSTM在后終止預(yù)測(cè)。另外,編碼器按照逆序讀取字素,可以在數(shù)據(jù)中引入短期依賴關(guān)系,簡(jiǎn)化了訓(xùn)練優(yōu)化的過(guò)程[9]。
圖3 LSTM編碼-解碼網(wǎng)絡(luò)示意圖
Google經(jīng)過(guò)長(zhǎng)期的研究,在內(nèi)部使用了第一代分布式機(jī)器學(xué)習(xí)框架DistBelief之后,于2015年11月推出了目前最優(yōu)秀的深度學(xué)習(xí)框架之一TensorFlow,并在GitHub上開(kāi)源。TensorFlow的官方定義為:TensorFlow是一個(gè)基于數(shù)據(jù)流圖(data flow graph)的數(shù)值計(jì)算開(kāi)源軟件庫(kù),其靈活的架構(gòu)設(shè)計(jì)可以讓用戶以單機(jī)或分布式的方式將計(jì)算部署在臺(tái)式機(jī)、服務(wù)器甚至是手機(jī)上。Tensorflow廣泛支持包括計(jì)算機(jī)視覺(jué)、語(yǔ)音識(shí)別、人機(jī)對(duì)弈和自然語(yǔ)言處理等大量功能[20]。
TensorFlow的數(shù)據(jù)計(jì)算過(guò)程可以表示為數(shù)據(jù)流圖,也稱計(jì)算圖(Computational Graph)。計(jì)算圖是一個(gè)有向圖,其中每一個(gè)運(yùn)算操作(operation)作為一個(gè)節(jié)點(diǎn)(node),節(jié)點(diǎn)與節(jié)點(diǎn)之間的連接稱為邊(edge),在邊中流動(dòng)(flow)的多維數(shù)組數(shù)據(jù)稱為張量(tensor)。計(jì)算圖的執(zhí)行可以看作張量按照?qǐng)D的拓?fù)漤樞?從輸入節(jié)點(diǎn)逐步流過(guò)所有中間節(jié)點(diǎn),最后流到輸出節(jié)點(diǎn)的過(guò)程。
該系統(tǒng)的開(kāi)發(fā)基于Ubuntu操作系統(tǒng),使用Python程序語(yǔ)言,在TensorFlow深度學(xué)習(xí)框架的支持下進(jìn)行。具體的開(kāi)發(fā)環(huán)境如下:
操作系統(tǒng):Ubuntu 14.04-amd64-LTS。
開(kāi)發(fā)語(yǔ)言:Python 2.7。
深度學(xué)習(xí)框架:TensorFlow 1.0.0。
Python開(kāi)發(fā)平臺(tái):Qt 4.8.4+PyQt 4.12+SIP 4.19+QScintilla 2.8+Eric 6.1.11。
基于TensorFlow框架的俄語(yǔ)詞匯標(biāo)音系統(tǒng)整體框架如圖4所示。
圖4 系統(tǒng)框架
系統(tǒng)的設(shè)計(jì)基于PyQt工具集、QtDesigner界面設(shè)計(jì)器,以及Eric開(kāi)發(fā)環(huán)境,并利用QSS(Qt Style Sheets)語(yǔ)言進(jìn)行GUI界面美化。系統(tǒng)主要包括模型訓(xùn)練和單詞標(biāo)音功能,其實(shí)現(xiàn)方法如下:
1)發(fā)音模型訓(xùn)練功能。
模型訓(xùn)練功能以發(fā)音詞典為訓(xùn)練語(yǔ)料,通過(guò)調(diào)用TensorFlow的tf.contrib.rnn接口實(shí)現(xiàn)LSTM網(wǎng)絡(luò)的定義,調(diào)用tf.contrib.legacy_seq2seq接口的model_with_buckets方法進(jìn)行模型訓(xùn)練。優(yōu)化參數(shù)使用sgd算法,通過(guò)調(diào)用tf.train接口的GradientDescentOptimizer方法實(shí)現(xiàn),并通過(guò)tf.nn.sampled_softmax_loss方法降低梯度更新時(shí)的計(jì)算復(fù)雜度。
模型訓(xùn)練時(shí)的主要參數(shù)包括:
source_vocab_size:輸入序列詞表大小。
target_vocab_size:目標(biāo)序列詞表大小。
buckets:處理不同長(zhǎng)度的序列的方法,由一對(duì)(I,O)表示,I、O分別表示該bucket處理的最大輸入和輸出序列的長(zhǎng)度,一般為(2,4)、(4,8)、(8,16)。
size:模型每一層的單元數(shù)。
num_layers:模型的網(wǎng)絡(luò)層數(shù)。
max_gradient_norm:梯度最大修剪規(guī)范。
batch_size:訓(xùn)練時(shí)批處理的大小。
learning_rate:初始的學(xué)習(xí)率。
learning_rate_decay_factor:學(xué)習(xí)率衰減因子。一定的階段之后,學(xué)習(xí)率按照衰減因子進(jìn)行衰減。
use_lstm=True:是否使用LSTM單元。True表示使用LSTM,False表示使用GRU單元。
num_samples=512:執(zhí)行采樣softmax函數(shù)的臨界值。使用softmax函數(shù)處理輸出序列時(shí),若輸出詞表較大會(huì)影響計(jì)算效率。因此,當(dāng)輸出詞表大于512時(shí)使用采樣softmax函數(shù);當(dāng)輸出輸出詞表小于512時(shí)使用softmax函數(shù)。
optimizer="sgd":自適應(yīng)梯度調(diào)節(jié)器,使用sgd算法。
dtype=tf.float32:存儲(chǔ)內(nèi)部變量的數(shù)據(jù)類型為float32。
2)單詞標(biāo)音功能。
系統(tǒng)的標(biāo)音功能為交互式,根據(jù)載入的發(fā)音模型對(duì)輸入的單詞進(jìn)行編碼-解碼操作,將單詞序列轉(zhuǎn)換為發(fā)音序列。這一過(guò)程將系統(tǒng)將調(diào)用tf.contrib.legacy_seq2seq接口的basic_rnn_seq2seq方法。首先通過(guò)編碼LSTM將輸入序列轉(zhuǎn)換為向量表示,然后將編碼器最后一個(gè)隱藏層的狀態(tài)作為輸入,激活解碼LSTM。方法的主要參數(shù)包括:
encoder_inputs:[batch_size x input_size]表示的二維張量列表,每一個(gè)二維張量代表某一時(shí)刻的輸入,batch_size具體指某一時(shí)刻輸入的字素個(gè)數(shù),input_size指編碼器的長(zhǎng)度。
decoder_inputs:[batch_size x output_size]表示的二維張量列表。
cell:類tf.contrib.rnn.LSTMCell的實(shí)例,表示使用LSTM單元。
dtype=tf.float32:LSTM單元的數(shù)據(jù)類型為float32。
basic_rnn_seq2seq方法的返回值為二維張量表示的二元組(outputs,state)。outputs對(duì)應(yīng)每個(gè)時(shí)間步中解碼器的輸出,形式為[batch_size x output_size];states表示每個(gè)時(shí)間步中解碼器的內(nèi)部狀態(tài),形式為[batch_size x cell.state_size]。
解碼完成后,調(diào)用tf.nn接口的softmax方法將張量轉(zhuǎn)換為對(duì)應(yīng)的音素,輸出音素序列。
系統(tǒng)的實(shí)驗(yàn)準(zhǔn)備工作包括以下內(nèi)容:發(fā)音詞典語(yǔ)料準(zhǔn)備、實(shí)驗(yàn)環(huán)境搭建以及評(píng)測(cè)指標(biāo)制定。
5.1.1 詞典語(yǔ)料準(zhǔn)備
在實(shí)驗(yàn)階段,本文首先完成了俄語(yǔ)發(fā)音詞典的構(gòu)建工作。原始語(yǔ)料的主要來(lái)源包括維基百科、CMU資源庫(kù)以及一些開(kāi)源的俄語(yǔ)語(yǔ)料庫(kù)。數(shù)據(jù)的獲取通過(guò)編寫(xiě)爬蟲(chóng)程序?qū)崿F(xiàn),并人工進(jìn)行適當(dāng)?shù)呐袆e和整理。詞典的整理過(guò)程主要包括:
1)過(guò)濾和篩選操作。去除原始語(yǔ)料中存在亂碼、格式錯(cuò)誤等問(wèn)題的數(shù)據(jù),刪除詞組、句子或不構(gòu)成單詞的樣例。
2)音素集歸一操作。將原始語(yǔ)料中的IPA和CMU音素全部用對(duì)應(yīng)的改進(jìn)SAMPA音素集替換,實(shí)現(xiàn)發(fā)音詞典音素集的統(tǒng)一。
3)音素分隔操作。對(duì)改寫(xiě)后音標(biāo)中的每個(gè)音素進(jìn)行識(shí)別,并以空格符為分隔標(biāo)志將其隔開(kāi)。
4)去重操作。去除詞形和發(fā)音都相同的重復(fù)樣例,保留詞形相同但發(fā)音不同的樣例。
5)排序操作。按照單詞的字母順序?qū)Πl(fā)音詞典進(jìn)行排序。
經(jīng)過(guò)以上整理過(guò)濾,最終形成了使用改進(jìn)的SAMPA音素集標(biāo)注并包含重音信息的俄語(yǔ)發(fā)音詞典,詞典共包含20 000詞條樣例。
5.1.2 實(shí)驗(yàn)環(huán)境
實(shí)驗(yàn)的模型訓(xùn)練和測(cè)試工作在服務(wù)器上進(jìn)行,服務(wù)器的硬件配置為:曙光云圖W760-G20高性能服務(wù)器,16核i7至強(qiáng)CPU,128 GB內(nèi)存,4×600 GB硬盤(pán)。
5.1.3 評(píng)測(cè)指標(biāo)
衡量字音轉(zhuǎn)換算法的評(píng)測(cè)指標(biāo)分別是音素正確率和詞形正確率[21]。音素錯(cuò)誤一般存在三類,分別是插入錯(cuò)誤、刪除錯(cuò)誤,以及替換錯(cuò)誤。音素正確率的計(jì)算公式如下:
(16)
正確轉(zhuǎn)換的音素?cái)?shù)=音素總數(shù)-(插入錯(cuò)誤數(shù)+刪除錯(cuò)誤數(shù)+替換錯(cuò)誤數(shù))
(17)
詞形正確率的計(jì)算公式如下:
(18)
本文將20 000詞發(fā)音詞典分為兩部分,90%作為訓(xùn)練數(shù)據(jù),10%作為測(cè)試數(shù)據(jù)。在模型訓(xùn)練階段,通過(guò)對(duì)LSTM網(wǎng)絡(luò)的層數(shù)(layers)和單元數(shù)(units)進(jìn)行調(diào)整,觀察模型參數(shù)對(duì)系統(tǒng)性能的影響。測(cè)試階段,本文使用了對(duì)比驗(yàn)證的方法,將訓(xùn)練得到的4個(gè)發(fā)音模型與文獻(xiàn)[6]方法提出的Phonetisaurus工具進(jìn)行了對(duì)比測(cè)試。此外,為了衡量數(shù)據(jù)來(lái)源對(duì)系統(tǒng)性能的影響,分別使用了訓(xùn)練集語(yǔ)料(集內(nèi)詞)和測(cè)試集語(yǔ)料(集外詞)作為測(cè)試數(shù)據(jù)。
從表3的實(shí)驗(yàn)結(jié)果可以看出, LSTM模型的層數(shù)和單元數(shù)會(huì)對(duì)系統(tǒng)性能造成顯著影響。當(dāng)層數(shù)為3,單元數(shù)為512時(shí)系統(tǒng)的性能最佳,在集內(nèi)詞測(cè)試的音素正確率達(dá)到了99.2%,詞形正確率達(dá)到了95.8%;在集外詞測(cè)試的音素正確率達(dá)到了94.5%,詞形正確率達(dá)到了74.8%,均高于Phonetisaurus方法。
表3 Phonetisaurus與LSTM模型的正確率對(duì)比
表4顯示了4種不同模型的運(yùn)行效率對(duì)比。模型的層數(shù)和單元數(shù)會(huì)對(duì)訓(xùn)練時(shí)間、模型大小和解碼速度造成影響。盡管當(dāng)LSTM模型的層數(shù)為3,單元數(shù)為512時(shí)系統(tǒng)性能最優(yōu),但訓(xùn)練時(shí)間的提高和解碼速度的變慢導(dǎo)致系統(tǒng)效率發(fā)生了顯著下降。
表4 不同參數(shù)的LSTM模型效率對(duì)比
為了分析訓(xùn)練數(shù)據(jù)規(guī)模對(duì)系統(tǒng)性能的影響,本文通過(guò)改變訓(xùn)練集的規(guī)模,使用3層512單元的LSTM網(wǎng)絡(luò)對(duì)發(fā)音模型進(jìn)行訓(xùn)練,并分別在集內(nèi)詞和集外詞測(cè)試集上驗(yàn)證詞形正確率,結(jié)果如圖5所示。隨著訓(xùn)練數(shù)據(jù)規(guī)模的逐漸增大,詞形正確率逐漸提高;在相同訓(xùn)練規(guī)模的情況下,集內(nèi)詞的標(biāo)音正確率高于集外詞的標(biāo)音正確率。
圖5 訓(xùn)練規(guī)模與系統(tǒng)性能的關(guān)系
實(shí)驗(yàn)結(jié)果表明,增加LSTM模型的層數(shù)和單元數(shù)能夠提升系統(tǒng)性能,當(dāng)網(wǎng)絡(luò)層數(shù)由2層增加至3層時(shí)對(duì)模型的影響較小;當(dāng)單元數(shù)由64增加至512時(shí),模型的大小、訓(xùn)練時(shí)間、系統(tǒng)性能都會(huì)大幅提高,但同樣會(huì)導(dǎo)致系統(tǒng)效率大幅下降。當(dāng)LSTM模型的層數(shù)為3,單元數(shù)為512時(shí)系統(tǒng)性能最佳,與Phonetisaurus方法相比,音素正確率提升了2.3個(gè)百分點(diǎn),詞形正確率提升了9.5個(gè)百分點(diǎn)。此外,訓(xùn)練語(yǔ)料的規(guī)模也會(huì)對(duì)系統(tǒng)性能造成影響,隨著訓(xùn)練規(guī)模的增大,系統(tǒng)性能會(huì)逐漸提升。但同時(shí)可以發(fā)現(xiàn),在訓(xùn)練語(yǔ)料有限的情況下,集外詞的標(biāo)音正確率始終和集內(nèi)詞存在10%個(gè)百分點(diǎn)的差距。因此,為了提升標(biāo)音系統(tǒng)的總體性能,還需進(jìn)一步擴(kuò)充俄語(yǔ)發(fā)音詞典,提高模型準(zhǔn)確率,擴(kuò)大集內(nèi)詞的覆蓋范圍。
本系統(tǒng)基于TensorFlow框架,實(shí)現(xiàn)了基于LSTM序列到序列模型的交互式俄語(yǔ)詞匯自動(dòng)標(biāo)音功能。本系統(tǒng)的開(kāi)發(fā)是理論方法到工程應(yīng)用的實(shí)踐過(guò)程,可在諸多實(shí)際問(wèn)題上得到應(yīng)用:
1)我國(guó)與俄羅斯等地區(qū)在軍政、外交、文化等領(lǐng)域的溝通交流日益密切,本系統(tǒng)可以為不懂俄語(yǔ)的使用者提供語(yǔ)言幫助。
2)本系統(tǒng)可以幫助俄語(yǔ)學(xué)習(xí)者拼讀單詞,判斷單詞的重音位置,掌握輔音軟硬、元音強(qiáng)弱等變化規(guī)律,在俄語(yǔ)學(xué)習(xí)中起到輔助支持的作用。
3)本系統(tǒng)可以嵌入俄語(yǔ)語(yǔ)音識(shí)別和語(yǔ)音合成系統(tǒng),通過(guò)快速、準(zhǔn)確、實(shí)時(shí)的俄語(yǔ)字音轉(zhuǎn)換,擺脫對(duì)發(fā)音詞典的依賴,降低內(nèi)存空間的占用率。
此外,本系統(tǒng)還具有以下特點(diǎn):
1)系統(tǒng)基于TensorFlow框架和Python語(yǔ)言開(kāi)發(fā),具有操作系統(tǒng)的移植性,可以在Linux、Windows、Android、IOS系統(tǒng)間實(shí)現(xiàn)移植。
2)系統(tǒng)基于序列到序列模型算法,可根據(jù)訓(xùn)練數(shù)據(jù)進(jìn)行語(yǔ)種間的移植,實(shí)現(xiàn)多語(yǔ)種詞匯標(biāo)音的功能。
3)系統(tǒng)可根據(jù)訓(xùn)練數(shù)據(jù)的質(zhì)量?jī)?yōu)化發(fā)音模型,為標(biāo)音準(zhǔn)確率的提升提供可能性;并且能夠根據(jù)音素集的選擇,改變發(fā)音的標(biāo)注形式。
詞匯標(biāo)音技術(shù)能夠?yàn)槎碚Z(yǔ)語(yǔ)音合成和語(yǔ)音識(shí)別系統(tǒng)的構(gòu)建提供關(guān)鍵支持。本文首先設(shè)計(jì)了基于SAMPA的俄語(yǔ)音素集,在原音素集的基礎(chǔ)上增加了重音符號(hào)及4個(gè)弱化元音,并基于此音素集構(gòu)建了包含20 000詞的俄語(yǔ)發(fā)音詞典。在此基礎(chǔ)上,本文設(shè)計(jì)并實(shí)現(xiàn)了基于TensorFlow的俄語(yǔ)詞匯標(biāo)音系統(tǒng),系統(tǒng)使用了基于LSTM序列到序列的模型算法。在實(shí)驗(yàn)測(cè)試中,集內(nèi)詞和集外詞的音素正確率分別達(dá)到了99.2%和94.5%,詞形正確率分別達(dá)到了95.8%和74.8%,均高于Phonetisaurus方法。實(shí)驗(yàn)結(jié)果表明,基于LSTM的序列到序列模型在俄語(yǔ)字音轉(zhuǎn)換問(wèn)題上取得了出色的表現(xiàn),該系統(tǒng)能夠有效應(yīng)用為俄語(yǔ)發(fā)音詞典的建設(shè)提供支持。但在訓(xùn)練語(yǔ)料有限的情況下,系統(tǒng)對(duì)集外詞的標(biāo)音正確率與集內(nèi)詞存在一定差距,還有待進(jìn)一步提高。因此在以后的工作中,需要進(jìn)一步擴(kuò)充俄語(yǔ)發(fā)音詞典,擴(kuò)大訓(xùn)練語(yǔ)料的規(guī)模,為模型準(zhǔn)確率的提高探尋途徑。
參考文獻(xiàn)(References)
[1] KARPOV A, MARKOV K, KIPYATKOVA I, et al. Large vocabulary Russian speech recognition using syntactico-statistical language modeling[J]. Speech Communication, 2014, 56(1): 213-228.
[2] KIPYATKOVA I, KARPOV A, VERKHODANOVA V, et al. Analysis of long-distance word dependencies and pronunciation variability at conversational Russian speech recognition[J]. Computer Science and Information Systems, 2012, 11(6): 719-725.
[3] JIAMPOJAMARN S, KONDRAK G, SHERIF T. Applying many-to-many alignments and hidden Markov models to letter-to-phoneme conversion[C]// Human Language Technologies: Proceedings of the North American Chapter of the Association of Computational Linguistics. New York: NAACM-HLT, 2007: 372-379.
[4] BISANI M, NEY H. Joint-sequence models for grapheme-to-phoneme conversion[J]. Speech Communication, 2008, 50(5): 434-451.
[5] NOVAK J R, MINEMATSU N, HIROSE K. WFST-based grapheme-to-phoneme conversion: open source tools for alignment, model-building and decoding[EB/OL]. [2017- 05- 10]. http: //citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.361.9764.
[6] GRAVES A. Generating sequences with recurrent neural networks[EB/OL]. [2017- 05- 10]. https: //arxiv.org/pdf/1308.0850.pdf.
[7] BAHDANAU D, CHO K, BENGIO Y. Neural machine translation by jointly learning to align and translate[EB/OL]. [2017- 05- 10]. https: //arxiv.org/abs/1409.0473.
[8] SUTSKEVER I, VINYALS O, LE Q V. Sequence to sequence learning with neural networks[C]// NIPS 2014: Proceedings of the 27th International Conference on Neural Information Processing Systems. Cambridge, MA: MIT Press, 2014, 2: 3104-3112.
[9] YAO K, ZWEIG G. Sequence-to-sequence neural net models for grapheme-to-phoneme conversion[EB/OL]. [2017- 05- 10]. https: //arxiv.org/abs/1506.00196.
[10] Wikipedia.IPA symbol for Russian pronunciations[EB/OL].[2017- 10- 17]. https: //en.wikipedia.org/wiki/Help: IPA_for_Russian.
[11] WELLS J C. SAMPA computer readable phonetic alphabet [C]// Handbook of Standards and Resources for Spoken Language Systems. Berlin: Walter de Gruyter, 1997.
[12] OTANDER J. CMU sphinx [EB/OL].(2017- 04- 26) [2017- 10- 17]. https: //cmusphinx.github.io/wiki/download/.
[13] 信德麟,張會(huì)森,華劭.俄語(yǔ)語(yǔ)法[M].2版.北京:外語(yǔ)教學(xué)與研究出版社, 2009: 1-92.(XIN D L, ZHANG H S, HUA S. Russian Grammar(Second Edition) [M]. Beijing: Foreign Language Teaching and Research Press, 2009: 1-92.)
[14] 喻儼,莫瑜.深度學(xué)習(xí)原理與TensorFlow實(shí)踐[M].北京:電子工業(yè)出版社, 2017: 128-139.(YU Y, MO Y. Deep Learning Principle and TensorFlow Practice [M]. Beijing: Publishing House of Electronics Industry, 2017: 128-139.)
[15] HOCHREITER S, SCHMIDHUBER J. Long short-term memory[J]. Neural Computation, 1997, 9(8): 1735-1780.
[16] GIMPEL K, SMITH N A. Softmax-margin CRFs: training log-linear models with cost functions[C]// Human Language Technologies: Proceedings of the North American Chapter of the Association of Computational Linguistics. Los Angeles: DBLP, 2010: 733-736.
[17] CHO K, van MERRIENBOER B, GULCEHRE C, et al. Learning phrase representations using RNN encoder-decoder for statistical machine translation[EB/OL]. [2017- 05- 10]. https: //arxiv.org/abs/1406.1078.
[18] KOEHN P. Pharaoh: a beam search decoder for phrase-based statistical machine translation models[C]// AMTA 2004: Proceedings of the 6th Conference of the Association for Machine Translation in the Americas. Berlin: Springer, 2004: 115-124.
[19] WILLIAMS R J, PENG J. An efficient gradient-based algorithm for on-line training of recurrent network trajectories[J]. Neural Computation, 1990, 2(4): 490-501.
[20] ABADI M, BARHAM P, CHEN J, et al. TensorFlow: a system for large-scale machine learning[C]// Proceedings of the 12th USENIX Symposium on Operating Systems Design and Implementation. Savannah, GA: USENIX, 2016: 265-283.
[21] PETERS B, DEHDARI J, van GENABITH J. Massively multilingual neural grapheme-to-phoneme conversion[C]// Proceedings of the First Workshop on Building Linguistically Generalizable NLP Systems. Copenhagen: EMNLP, 2017: 19-26.
[22] 滕飛,鄭超美,李文.基于長(zhǎng)短期記憶多維主題情感傾向性分析模型[J].計(jì)算機(jī)應(yīng)用, 2016, 36(8): 2252-2256.(TENG F, ZHENG C M, LI W. Multidimensional topic model for oriented sentiment analysis based on long short-term memory[J]. Journal of Computer Applications, 2016, 36(8): 2252-2256.)
[23] HANNEMANN M, TRMAL J, ONDEL L, et al. Bayesian joint-sequence models for grapheme-to-phoneme conversion[EB/OL]. [2017- 05- 10]. http: //www.fit.vutbr.cz/research/groups/speech/publi/2017/hannemann_icassp2017_0002836.pdf.
[24] TSVETKOV Y, SITARAM S, FARUQUI M, et al. Polyglot neural language models: a case study in cross-lingual phonetic representation learning[EB/OL]. [2017- 05- 10]. https: //arxiv.org/abs/1605.03832.
[25] MILDE B, SCHMIDT C, K?HLER J. Multitask sequence-to-sequence models for grapheme-to-phoneme conversion[EB/OL]. [2017- 05- 10]. http: //www.isca-speech.org/archive/Interspeech_2017/pdfs/1436.PDF.
This work is partially supported by the Project of Social Science Planning of Luoyang (2016B285).