馮 偉,易綿竹,馬延周
發(fā)音詞典是語音信息處理研究中的重要基礎(chǔ)資源,在語音合成和語音識別系統(tǒng)中發(fā)揮了關(guān)鍵作用。俄語作為一種拼音文字,在語言發(fā)展中不斷有新詞和外來詞產(chǎn)生,發(fā)音詞典必然難以包括所有俄語單詞的發(fā)音。字音轉(zhuǎn)換(Grapheme-to-Phoneme conversion, G2P)技術(shù)可以對俄語單詞及其變化形式進行自動注音,有效解決集外詞(Out-Of-Vocabulary,OOV)的注音問題,為俄語發(fā)音詞典的構(gòu)建提供支持。
字音轉(zhuǎn)換可分為兩類:
1)基于規(guī)則的方法,即通過對俄語正字法和發(fā)音規(guī)律的總結(jié),人工制定出俄語的字音轉(zhuǎn)換規(guī)則, 然后根據(jù)規(guī)則實現(xiàn)對單詞發(fā)音的預(yù)測。俄羅斯圣彼得堡大學(xué)的Karpov等[1-2]在俄語語音識別系統(tǒng)的開發(fā)過程中對基于規(guī)則的俄語字音轉(zhuǎn)換算法進行了研究。該算法利用俄語輔音變化和元音弱化等規(guī)則,借助大規(guī)模俄語重音詞典、形態(tài)詞典以及同形詞詞典,經(jīng)過7個步驟、2次循環(huán)完成。Karpov等[1-2]利用該算法構(gòu)建了俄語語音識別系統(tǒng)需要的發(fā)音詞典,但并沒有對算法性能進行嚴格的測試。由于俄語發(fā)音特征復(fù)雜多變,正字法的約束也在逐漸減弱,規(guī)則中難免會出現(xiàn)無法覆蓋到的例外情況,這些都會對字音轉(zhuǎn)換的準確率造成影響。
2)數(shù)據(jù)驅(qū)動的方法,是目前主流的字音轉(zhuǎn)換方法。典型的數(shù)據(jù)驅(qū)動方法基于如下思想:首先對訓(xùn)練集中的字素和音素建立對齊關(guān)系,然后利用概率統(tǒng)計算法建立發(fā)音模型,最后通過解碼算法計算概率最大的標音結(jié)果。例如,Jiampojamarn等[3]提出了多對多的對齊方法,并將隱馬爾可夫模型(Hidden Markov Model, HMM)應(yīng)用于發(fā)音模型建模;Bisani等[4]提出了聯(lián)合序列的建模方法,并在英語、德語和法語測試集上進行了測試;Novak等[5]將加權(quán)有限狀態(tài)轉(zhuǎn)化器(Weighted Finaite-State Transducer, WFST)運用于算法的對齊、建模、解碼過程,提出了基于循環(huán)神經(jīng)網(wǎng)絡(luò)語言模型(Recurrent Neural Network Language Model, RNNLM)的N-best解碼算法,以及最小貝葉斯風(fēng)險(Lattice Minimum Bayes-Risk, LMBR)詞圖解碼算法,并在三個英語測試集上進行了對比測試。
神經(jīng)網(wǎng)絡(luò)近年來被廣泛應(yīng)用于深度學(xué)習(xí)的相關(guān)問題。Graves[6]提出了基于長短時記憶(Long Short-Term Memory, LSTM)網(wǎng)絡(luò)的序列到序列(sequence-to-sequence)模型,該模型可以將一個長度可變的輸入序列翻譯為目標輸出序列,突破了傳統(tǒng)的固定長度輸入問題的限制,成功地將神經(jīng)網(wǎng)絡(luò)運用于序列型任務(wù)。目前該模型已在谷歌翻譯、人機對話、計算機視覺等系統(tǒng)上得到了廣泛的應(yīng)用,并表現(xiàn)出了出色的效果[7-8]。Yao等[9]將該方法應(yīng)用于解決英語字音轉(zhuǎn)換問題,并在卡內(nèi)基梅隆大學(xué)(Carnegie Mellon University, CMU)、NetTalk、Pronlex數(shù)據(jù)集上進行了測試,音素正確率達到了92%以上,詞形正確率達到了70%以上。
綜上所述,俄羅斯學(xué)者已經(jīng)對基于規(guī)則的俄語詞匯標音方法進行了一些研究,但基于規(guī)則的方法對語言學(xué)知識要求較高,規(guī)則的撰寫和維護難度較大,實現(xiàn)起來有一定的困難。數(shù)據(jù)驅(qū)動的方法是目前自然語言處理領(lǐng)域的主流方法,但已有研究都以英語為主要目標,還沒有俄語方面的有關(guān)研究和實驗。不同的語種在模型訓(xùn)練過程中難免存在差異,且國內(nèi)針對俄語語音處理的研究尚處于探索階段,基礎(chǔ)資源相對匱乏,有必要以俄語語音學(xué)知識為基礎(chǔ),完善俄語語料資源,對俄語字音轉(zhuǎn)換算法的實現(xiàn)與應(yīng)用作進一步研究。本文對數(shù)據(jù)驅(qū)動的俄語詞匯標音方法進行探索,嘗試運用基于TensorFlow的LSTM序列到序列模型算法,利用端到端(end-to-end)的思想實現(xiàn)單詞到發(fā)音的轉(zhuǎn)換。相對于傳統(tǒng)算法,該算法不需要預(yù)先創(chuàng)造字素音素的對齊關(guān)系,可以直接對任意長度的序列進行處理,避免了對齊過程出現(xiàn)錯誤的可能性。
音素集就是音素的集合。由于國際音標書寫復(fù)雜、機讀性差,在俄語語音處理系統(tǒng)中,需要依據(jù)計算機可讀的SAMPA(Speech Assessment Methods Phonetic Alphabet)符號設(shè)計俄語音素集,從而構(gòu)建俄語發(fā)音詞典并訓(xùn)練俄語聲學(xué)模型。俄語音素集中應(yīng)盡可能包括俄語全部的音素,但如果音素集過大,單詞注音結(jié)果的不確定性將會顯著增加,大大提高解碼過程的計算復(fù)雜度;若音素集太小,則會降低單詞標音的精確度,影響語音處理系統(tǒng)的性能。為了體現(xiàn)俄語重音變化和元音弱化現(xiàn)象,本文對原始SAMPA俄語音素集進行了改進,設(shè)計了新的俄語音素集。
目前國際上俄語音素集的設(shè)計有多種方案。IPA(International Phonetic Alphabet)俄語音素集共包含55個音素和1個重音符號(音素分為38個輔音和17個元音,元音包括11個重讀元音和6個非重讀元音)[10]。SAMPA俄語音素集共包含42個音素,分為36個輔音和6個元音,其元音音素沒有重讀與弱化之分,僅僅將弱化的元音[e]和[o]分別用[i]和[a]表示[11];卡內(nèi)基梅隆大學(xué)(CMU)設(shè)計的俄語音素集共包含50個音素和1個無音符號(音素分為36個輔音和14個元音,并將元音分為6個重讀元音和8個非重讀元音)[12]。
通過對以上三個俄語音素集的研究,結(jié)合俄語音素的發(fā)音規(guī)則,重點對元音音素從一級弱化和二級弱化的角度進行區(qū)分[13],本文在原有俄語SAMPA音素集的基礎(chǔ)上,增加了4個弱化后的元音和一個重音符號“!”,設(shè)計了共包含46個音素的俄語音素集。音素包括36個輔音和10個元音,元音又細分為6個重讀元音和4個非重讀元音。新增的4個元音如表1所示。
表1 俄語弱化元音表
為了驗證新音素集的有效性,本文從發(fā)音詞典中隨機抽取了200個俄語單詞,分別用原始SAMPA音素集和新音素集進行標音,交由俄語語音學(xué)專家進行人工比對驗證。
驗證結(jié)果表明,本文設(shè)計的新音素集能夠清晰地標明俄語單詞的重音位置,有效地區(qū)分元音一級弱化和二級弱化后的讀音區(qū)別,相對于原始的SAMPA音素集標音更加準確,可讀性更強。表2以部分單詞為例,對改進的音素集與原始音素集的標音結(jié)果進行了對比。
表2 改進的音素集標音示例
自然語言處理中的大部分問題本質(zhì)上都是序列化的。例如,段落是由句子構(gòu)成的序列,句子是由單詞構(gòu)成的序列,在機器翻譯、人機對話、語音識別等應(yīng)用中,模型的輸入和輸出都是序列數(shù)據(jù)。類似地,單詞和發(fā)音也可以看作是由字素和音素構(gòu)成的序列。循環(huán)神經(jīng)網(wǎng)絡(luò)就是專門用于處理序列數(shù)據(jù)的深度學(xué)習(xí)模型。循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)出現(xiàn)于20世紀80年代,因為實現(xiàn)困難,其發(fā)展早期并沒有得到合適的應(yīng)用。最近幾年,由于神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的進步和GPU上深度學(xué)習(xí)訓(xùn)練效率的突破,RNN變得越來越流行,在人工智能的多個領(lǐng)域中得到應(yīng)用。
RNN的前向傳播過程可用公式[14]表示為:
at=b+Wht-1+Uxt
(1)
ht=tanh(at)
(2)
ot=d+Vht
(3)
yt=softmax(ot)
(4)
其中:輸入層與隱藏層之間通過參數(shù)矩陣U連接;不同時刻的隱藏層之間以參數(shù)矩陣W連接;隱藏層與輸出層之間以參數(shù)矩陣V連接。b、d為偏置向量;xt為t時刻的輸入;at為決定t時刻隱藏層狀態(tài)的參數(shù),包括現(xiàn)有的輸入和對過去記憶的總結(jié);ht表示隱藏層狀態(tài);ot表示t時刻的輸出;yt為經(jīng)過歸一化后的預(yù)測概率。
循環(huán)神經(jīng)網(wǎng)絡(luò)雖然可以記憶整個時間序列中的信息,但記憶中影響最大的還是最后輸入的一些信號,而較早的信號強度將越來越弱,即決定循環(huán)神經(jīng)網(wǎng)絡(luò)輸出的還是最后輸入的信號。這就造成了RNN的長時依賴(Long-term Dependencies)問題。
長短時記憶模型就是專門為解決長時依賴問題而對循環(huán)神經(jīng)網(wǎng)絡(luò)的改進。通過將RNN中的普通神經(jīng)元替換為可以存儲記憶的LSTM單元(Cell),可以有效利用數(shù)據(jù)中的長距離依賴信息,由Hochreiter等[15]在1997年提出。不同于原始RNN單一的tanh循環(huán)體結(jié)構(gòu),LSTM模型在短期記憶單元ht的基礎(chǔ)上,增加了記憶單元Ct用來保留長時記憶,以及三個門控制器,分別是:輸入門(input gate)、輸出門(output gate)和遺忘門(forget gate)。標準循環(huán)神經(jīng)網(wǎng)絡(luò)與LSTM模型的結(jié)構(gòu)對比如圖1所示。
圖1 RNN與LSTM模型結(jié)構(gòu)對比示意圖
門結(jié)構(gòu)運算由非線性激活函數(shù)Sigmoid和點乘運算控制。Sigmoid函數(shù)的取值范圍為[0,1],描述了信息傳遞的比例。取值為0時表示不允許所有信息傳遞,即刪除之前的記憶;取值為1時表示所有信息可以通過,完全保留這一分支的記憶。
在每一個時刻,遺忘門會根據(jù)當前輸入xt、上一時刻輸出ht-1和上一時刻狀態(tài)ct-1控制上一時刻長期記憶的保留程度[14]:
ft=σ(Txfxt+Thfht-1+Tcfct-1+bf)
(5)
輸入門會根據(jù)xt、ct-1和ht-1控制新記憶寫入長期記憶的程度,決定當前狀態(tài)ct:
it=σ(Txixt+Thiht-1+Tcict-1+bi)
(6)
ct=ftct-1+ittanh(Txcxt+Thcht-1+bc)
(7)
輸出門則會根據(jù)最新狀態(tài)ct,以及ht-1和xt,基于長時記憶和短期記憶綜合決定該時刻的輸出ht:
ot=σ(Txoxt+Thoht-1+Tcoct+bo)
(8)
ht=ottanh(ct)
(9)
其中:σ表示Sigmoid函數(shù);i、f、o和c分別表示輸入門、遺忘門、輸出門和記憶單元,其向量維數(shù)與隱藏層中向量相同。權(quán)值矩陣T的下標描述了其含義,例如Thi為隱藏-輸入門權(quán)值矩陣,Txo為輸入-輸出門權(quán)值矩陣。
LSTM通過門結(jié)構(gòu)維護和控制神經(jīng)網(wǎng)絡(luò)中每個時刻的狀態(tài)信息,憑借對狀態(tài)信息的存儲和修改,從而解決了長時依賴的難題。基于以上運算機制,LSTM對于長序列問題的理解分析能力相對于RNN得到了大幅提高,因此可以有效應(yīng)用于俄語單詞序列到發(fā)音序列的預(yù)測問題。
LSTM神經(jīng)網(wǎng)絡(luò)因其出色的長距離序列化信息處理能力,可以有效應(yīng)用于序列到序列的問題。在詞匯標音過程中,LSTM序列到序列模型不需要預(yù)先創(chuàng)造字素音素的對齊關(guān)系,可以直接對任意長度的序列進行處理,避免了對齊過程出現(xiàn)錯誤的可能性。
基于LSTM的序列生成過程可以概括性地描述為條件概率p(y1,y2,…,yn|x1,x2,…,xm)最大值的估算過程。(x1,x2,…,xm)表示輸入的字素序列,(y1,y2,…,yn)表示對應(yīng)的輸出序列,兩個序列的長度n和m不一定相等。LSTM在計算條件概率時,首先對不定長序列(x1,x2,…,xm)進行學(xué)習(xí),根據(jù)最后一個隱藏層的狀態(tài),將序列表示為固定維數(shù)的向量s,然后將標準LSTM語言模型的初始隱藏層狀態(tài)設(shè)置為向量s,根據(jù)語言模型利用2.2節(jié)描述的LSTM公式(5)~(9)計算序列(y1,y2,…,yn)的概率。用公式表示為:
p(y1,y2,…,yn|x1,x2,…,xm)=
(10)
其中:每個輸出的概率分布p(yt│s,y1,y2,…,yt-1)通過激活函數(shù)softmax映射到音素集中的音素。
在數(shù)學(xué)定義中,softmax指一種歸一化指數(shù)函數(shù),它將一個k維向量z中的每個元素轉(zhuǎn)換為(0,1)的區(qū)間,計算公式如下:
(11)
機器學(xué)習(xí)中常用這種方法將類似判別函數(shù)的置信度值轉(zhuǎn)換為概率形式。softmax函數(shù)常用于輸出層,用于指定唯一的分類輸出[16]。
基礎(chǔ)的序列到序列模型由編碼器-解碼器(Encoder-Decoder)結(jié)構(gòu)組成,該結(jié)構(gòu)的特點是:輸入序列經(jīng)過編碼器網(wǎng)絡(luò)得到向量表示后,解碼器網(wǎng)絡(luò)基于這個向量生成新的序列。LSTM編碼-解碼模型兩個LSTM網(wǎng)絡(luò),分別是處理輸入的編碼器網(wǎng)絡(luò)和生成輸出的解碼器網(wǎng)絡(luò)。編碼-解碼過程如圖2所示[17]。
圖2 編碼-解碼過程示意圖
3.2.1 編碼器
編碼器網(wǎng)絡(luò)按照LSTM單元結(jié)構(gòu)進行運算。每個時間步,編碼器的輸入為單詞的一個字素(在機器翻譯等任務(wù)中,也可以是一個字或單詞),當遇到終止符時輸入結(jié)束,編碼器根據(jù)最后一個隱藏層的狀態(tài),將該單詞序列表示為固定長度的向量v。依賴于LSTM對長距離信息處理的能力,向量v能夠包含整個單詞序列的字素信息。在每個時間t,隱藏層的狀態(tài)ht可用公式表示為:
ht=f(xt,ht-1)
(12)
其中:f表示非線性激活函數(shù),為編碼LSTM單元結(jié)構(gòu);ht-1表示上一時刻隱藏層狀態(tài);xt為當前時刻的輸入。向量v為最后一個隱藏層或多個隱藏層的加權(quán)和,運算符號用φ表示:
v=φ(h1,h2,…,ht)
(13)
3.2.2 解碼器
在解碼過程,向量v將作為隱藏層的初始狀態(tài)輸入解碼LSTM網(wǎng)絡(luò)。解碼器通過t時刻的隱藏層狀態(tài)ht、前一個音素yt-1以及向量v,逐步計算當前時刻音素yt的概率分布,當遇到終止符時結(jié)束預(yù)測,得到整個輸出序列。這一過程用公式表示如下:
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ù)。解碼過程,解碼器使用啟發(fā)式集束搜索(beam search)算法[18]在序列輸出前檢索大量詞匯,選擇后驗概率最高的候選序列為最優(yōu)解,作為解碼器最終輸出的音素序列。LSTM編碼-解碼模型的訓(xùn)練使用隨時間反向傳播(Backpropagation Through Time, BPTT)算法,利用解碼過程中產(chǎn)生的誤差更新網(wǎng)絡(luò)的權(quán)值參數(shù)[19]。
3.2.3 俄語單詞編碼-解碼過程
俄語單詞序列轉(zhuǎn)換到發(fā)音序列的基本思想為:編碼LSTM逐步讀取俄語單詞的每個字素,將序列映射為一個固定維數(shù)表示的向量,解碼LSTM本質(zhì)上是一個基于輸入序列的LSTM語言模型,結(jié)合向量、隱藏層狀態(tài)和上一時刻的音素,逐個預(yù)測音素,輸出發(fā)音序列。
以俄語單詞“рай”(天堂)的第二格形式“рая” [r !a j 6]為例,LSTM編碼-解碼模型的示例如圖3所示。圖3中神經(jīng)網(wǎng)絡(luò)由兩層組成,虛線左側(cè)為編碼LSTM,右側(cè)為解碼LSTM。編碼LSTM按照時間逆序讀取輸入序列“ яар”,根據(jù)最后一個隱藏層的狀態(tài),將序列“рая”表示為固定維數(shù)的向量v。解碼LSTM在遇到起始符表示輸入序列的起始符,分別表示輸出音素的起始符和終止符,起始符與終止符使模型可以對任意長度的序列進行編碼和解碼,解碼LSTM在后終止預(yù)測。另外,編碼器按照逆序讀取字素,可以在數(shù)據(jù)中引入短期依賴關(guān)系,簡化了訓(xùn)練優(yōu)化的過程[9]。
圖3 LSTM編碼-解碼網(wǎng)絡(luò)示意圖
Google經(jīng)過長期的研究,在內(nèi)部使用了第一代分布式機器學(xué)習(xí)框架DistBelief之后,于2015年11月推出了目前最優(yōu)秀的深度學(xué)習(xí)框架之一TensorFlow,并在GitHub上開源。TensorFlow的官方定義為:TensorFlow是一個基于數(shù)據(jù)流圖(data flow graph)的數(shù)值計算開源軟件庫,其靈活的架構(gòu)設(shè)計可以讓用戶以單機或分布式的方式將計算部署在臺式機、服務(wù)器甚至是手機上。Tensorflow廣泛支持包括計算機視覺、語音識別、人機對弈和自然語言處理等大量功能[20]。
TensorFlow的數(shù)據(jù)計算過程可以表示為數(shù)據(jù)流圖,也稱計算圖(Computational Graph)。計算圖是一個有向圖,其中每一個運算操作(operation)作為一個節(jié)點(node),節(jié)點與節(jié)點之間的連接稱為邊(edge),在邊中流動(flow)的多維數(shù)組數(shù)據(jù)稱為張量(tensor)。計算圖的執(zhí)行可以看作張量按照圖的拓撲順序,從輸入節(jié)點逐步流過所有中間節(jié)點,最后流到輸出節(jié)點的過程。
該系統(tǒng)的開發(fā)基于Ubuntu操作系統(tǒng),使用Python程序語言,在TensorFlow深度學(xué)習(xí)框架的支持下進行。具體的開發(fā)環(huán)境如下:
操作系統(tǒng):Ubuntu 14.04-amd64-LTS。
開發(fā)語言:Python 2.7。
深度學(xué)習(xí)框架:TensorFlow 1.0.0。
Python開發(fā)平臺:Qt 4.8.4+PyQt 4.12+SIP 4.19+QScintilla 2.8+Eric 6.1.11。
基于TensorFlow框架的俄語詞匯標音系統(tǒng)整體框架如圖4所示。
圖4 系統(tǒng)框架
系統(tǒng)的設(shè)計基于PyQt工具集、QtDesigner界面設(shè)計器,以及Eric開發(fā)環(huán)境,并利用QSS(Qt Style Sheets)語言進行GUI界面美化。系統(tǒng)主要包括模型訓(xùn)練和單詞標音功能,其實現(xiàn)方法如下:
1)發(fā)音模型訓(xùn)練功能。
模型訓(xùn)練功能以發(fā)音詞典為訓(xùn)練語料,通過調(diào)用TensorFlow的tf.contrib.rnn接口實現(xiàn)LSTM網(wǎng)絡(luò)的定義,調(diào)用tf.contrib.legacy_seq2seq接口的model_with_buckets方法進行模型訓(xùn)練。優(yōu)化參數(shù)使用sgd算法,通過調(diào)用tf.train接口的GradientDescentOptimizer方法實現(xiàn),并通過tf.nn.sampled_softmax_loss方法降低梯度更新時的計算復(fù)雜度。
模型訓(xùn)練時的主要參數(shù)包括:
source_vocab_size:輸入序列詞表大小。
target_vocab_size:目標序列詞表大小。
buckets:處理不同長度的序列的方法,由一對(I,O)表示,I、O分別表示該bucket處理的最大輸入和輸出序列的長度,一般為(2,4)、(4,8)、(8,16)。
size:模型每一層的單元數(shù)。
num_layers:模型的網(wǎng)絡(luò)層數(shù)。
max_gradient_norm:梯度最大修剪規(guī)范。
batch_size:訓(xùn)練時批處理的大小。
learning_rate:初始的學(xué)習(xí)率。
learning_rate_decay_factor:學(xué)習(xí)率衰減因子。一定的階段之后,學(xué)習(xí)率按照衰減因子進行衰減。
use_lstm=True:是否使用LSTM單元。True表示使用LSTM,False表示使用GRU單元。
num_samples=512:執(zhí)行采樣softmax函數(shù)的臨界值。使用softmax函數(shù)處理輸出序列時,若輸出詞表較大會影響計算效率。因此,當輸出詞表大于512時使用采樣softmax函數(shù);當輸出輸出詞表小于512時使用softmax函數(shù)。
optimizer="sgd":自適應(yīng)梯度調(diào)節(jié)器,使用sgd算法。
dtype=tf.float32:存儲內(nèi)部變量的數(shù)據(jù)類型為float32。
2)單詞標音功能。
系統(tǒng)的標音功能為交互式,根據(jù)載入的發(fā)音模型對輸入的單詞進行編碼-解碼操作,將單詞序列轉(zhuǎn)換為發(fā)音序列。這一過程將系統(tǒng)將調(diào)用tf.contrib.legacy_seq2seq接口的basic_rnn_seq2seq方法。首先通過編碼LSTM將輸入序列轉(zhuǎn)換為向量表示,然后將編碼器最后一個隱藏層的狀態(tài)作為輸入,激活解碼LSTM。方法的主要參數(shù)包括:
encoder_inputs:[batch_size x input_size]表示的二維張量列表,每一個二維張量代表某一時刻的輸入,batch_size具體指某一時刻輸入的字素個數(shù),input_size指編碼器的長度。
decoder_inputs:[batch_size x output_size]表示的二維張量列表。
cell:類tf.contrib.rnn.LSTMCell的實例,表示使用LSTM單元。
dtype=tf.float32:LSTM單元的數(shù)據(jù)類型為float32。
basic_rnn_seq2seq方法的返回值為二維張量表示的二元組(outputs,state)。outputs對應(yīng)每個時間步中解碼器的輸出,形式為[batch_size x output_size];states表示每個時間步中解碼器的內(nèi)部狀態(tài),形式為[batch_size x cell.state_size]。
解碼完成后,調(diào)用tf.nn接口的softmax方法將張量轉(zhuǎn)換為對應(yīng)的音素,輸出音素序列。
系統(tǒng)的實驗準備工作包括以下內(nèi)容:發(fā)音詞典語料準備、實驗環(huán)境搭建以及評測指標制定。
5.1.1 詞典語料準備
在實驗階段,本文首先完成了俄語發(fā)音詞典的構(gòu)建工作。原始語料的主要來源包括維基百科、CMU資源庫以及一些開源的俄語語料庫。數(shù)據(jù)的獲取通過編寫爬蟲程序?qū)崿F(xiàn),并人工進行適當?shù)呐袆e和整理。詞典的整理過程主要包括:
1)過濾和篩選操作。去除原始語料中存在亂碼、格式錯誤等問題的數(shù)據(jù),刪除詞組、句子或不構(gòu)成單詞的樣例。
2)音素集歸一操作。將原始語料中的IPA和CMU音素全部用對應(yīng)的改進SAMPA音素集替換,實現(xiàn)發(fā)音詞典音素集的統(tǒng)一。
3)音素分隔操作。對改寫后音標中的每個音素進行識別,并以空格符為分隔標志將其隔開。
4)去重操作。去除詞形和發(fā)音都相同的重復(fù)樣例,保留詞形相同但發(fā)音不同的樣例。
5)排序操作。按照單詞的字母順序?qū)Πl(fā)音詞典進行排序。
經(jīng)過以上整理過濾,最終形成了使用改進的SAMPA音素集標注并包含重音信息的俄語發(fā)音詞典,詞典共包含20 000詞條樣例。
5.1.2 實驗環(huán)境
實驗的模型訓(xùn)練和測試工作在服務(wù)器上進行,服務(wù)器的硬件配置為:曙光云圖W760-G20高性能服務(wù)器,16核i7至強CPU,128 GB內(nèi)存,4×600 GB硬盤。
5.1.3 評測指標
衡量字音轉(zhuǎn)換算法的評測指標分別是音素正確率和詞形正確率[21]。音素錯誤一般存在三類,分別是插入錯誤、刪除錯誤,以及替換錯誤。音素正確率的計算公式如下:
(16)
正確轉(zhuǎn)換的音素數(shù)=音素總數(shù)-(插入錯誤數(shù)+刪除錯誤數(shù)+替換錯誤數(shù))
(17)
詞形正確率的計算公式如下:
(18)
本文將20 000詞發(fā)音詞典分為兩部分,90%作為訓(xùn)練數(shù)據(jù),10%作為測試數(shù)據(jù)。在模型訓(xùn)練階段,通過對LSTM網(wǎng)絡(luò)的層數(shù)(layers)和單元數(shù)(units)進行調(diào)整,觀察模型參數(shù)對系統(tǒng)性能的影響。測試階段,本文使用了對比驗證的方法,將訓(xùn)練得到的4個發(fā)音模型與文獻[6]方法提出的Phonetisaurus工具進行了對比測試。此外,為了衡量數(shù)據(jù)來源對系統(tǒng)性能的影響,分別使用了訓(xùn)練集語料(集內(nèi)詞)和測試集語料(集外詞)作為測試數(shù)據(jù)。
從表3的實驗結(jié)果可以看出, LSTM模型的層數(shù)和單元數(shù)會對系統(tǒng)性能造成顯著影響。當層數(shù)為3,單元數(shù)為512時系統(tǒng)的性能最佳,在集內(nèi)詞測試的音素正確率達到了99.2%,詞形正確率達到了95.8%;在集外詞測試的音素正確率達到了94.5%,詞形正確率達到了74.8%,均高于Phonetisaurus方法。
表3 Phonetisaurus與LSTM模型的正確率對比
表4顯示了4種不同模型的運行效率對比。模型的層數(shù)和單元數(shù)會對訓(xùn)練時間、模型大小和解碼速度造成影響。盡管當LSTM模型的層數(shù)為3,單元數(shù)為512時系統(tǒng)性能最優(yōu),但訓(xùn)練時間的提高和解碼速度的變慢導(dǎo)致系統(tǒng)效率發(fā)生了顯著下降。
表4 不同參數(shù)的LSTM模型效率對比
為了分析訓(xùn)練數(shù)據(jù)規(guī)模對系統(tǒng)性能的影響,本文通過改變訓(xùn)練集的規(guī)模,使用3層512單元的LSTM網(wǎng)絡(luò)對發(fā)音模型進行訓(xùn)練,并分別在集內(nèi)詞和集外詞測試集上驗證詞形正確率,結(jié)果如圖5所示。隨著訓(xùn)練數(shù)據(jù)規(guī)模的逐漸增大,詞形正確率逐漸提高;在相同訓(xùn)練規(guī)模的情況下,集內(nèi)詞的標音正確率高于集外詞的標音正確率。
圖5 訓(xùn)練規(guī)模與系統(tǒng)性能的關(guān)系
實驗結(jié)果表明,增加LSTM模型的層數(shù)和單元數(shù)能夠提升系統(tǒng)性能,當網(wǎng)絡(luò)層數(shù)由2層增加至3層時對模型的影響較小;當單元數(shù)由64增加至512時,模型的大小、訓(xùn)練時間、系統(tǒng)性能都會大幅提高,但同樣會導(dǎo)致系統(tǒng)效率大幅下降。當LSTM模型的層數(shù)為3,單元數(shù)為512時系統(tǒng)性能最佳,與Phonetisaurus方法相比,音素正確率提升了2.3個百分點,詞形正確率提升了9.5個百分點。此外,訓(xùn)練語料的規(guī)模也會對系統(tǒng)性能造成影響,隨著訓(xùn)練規(guī)模的增大,系統(tǒng)性能會逐漸提升。但同時可以發(fā)現(xiàn),在訓(xùn)練語料有限的情況下,集外詞的標音正確率始終和集內(nèi)詞存在10%個百分點的差距。因此,為了提升標音系統(tǒng)的總體性能,還需進一步擴充俄語發(fā)音詞典,提高模型準確率,擴大集內(nèi)詞的覆蓋范圍。
本系統(tǒng)基于TensorFlow框架,實現(xiàn)了基于LSTM序列到序列模型的交互式俄語詞匯自動標音功能。本系統(tǒng)的開發(fā)是理論方法到工程應(yīng)用的實踐過程,可在諸多實際問題上得到應(yīng)用:
1)我國與俄羅斯等地區(qū)在軍政、外交、文化等領(lǐng)域的溝通交流日益密切,本系統(tǒng)可以為不懂俄語的使用者提供語言幫助。
2)本系統(tǒng)可以幫助俄語學(xué)習(xí)者拼讀單詞,判斷單詞的重音位置,掌握輔音軟硬、元音強弱等變化規(guī)律,在俄語學(xué)習(xí)中起到輔助支持的作用。
3)本系統(tǒng)可以嵌入俄語語音識別和語音合成系統(tǒng),通過快速、準確、實時的俄語字音轉(zhuǎn)換,擺脫對發(fā)音詞典的依賴,降低內(nèi)存空間的占用率。
此外,本系統(tǒng)還具有以下特點:
1)系統(tǒng)基于TensorFlow框架和Python語言開發(fā),具有操作系統(tǒng)的移植性,可以在Linux、Windows、Android、IOS系統(tǒng)間實現(xiàn)移植。
2)系統(tǒng)基于序列到序列模型算法,可根據(jù)訓(xùn)練數(shù)據(jù)進行語種間的移植,實現(xiàn)多語種詞匯標音的功能。
3)系統(tǒng)可根據(jù)訓(xùn)練數(shù)據(jù)的質(zhì)量優(yōu)化發(fā)音模型,為標音準確率的提升提供可能性;并且能夠根據(jù)音素集的選擇,改變發(fā)音的標注形式。
詞匯標音技術(shù)能夠為俄語語音合成和語音識別系統(tǒng)的構(gòu)建提供關(guān)鍵支持。本文首先設(shè)計了基于SAMPA的俄語音素集,在原音素集的基礎(chǔ)上增加了重音符號及4個弱化元音,并基于此音素集構(gòu)建了包含20 000詞的俄語發(fā)音詞典。在此基礎(chǔ)上,本文設(shè)計并實現(xiàn)了基于TensorFlow的俄語詞匯標音系統(tǒng),系統(tǒng)使用了基于LSTM序列到序列的模型算法。在實驗測試中,集內(nèi)詞和集外詞的音素正確率分別達到了99.2%和94.5%,詞形正確率分別達到了95.8%和74.8%,均高于Phonetisaurus方法。實驗結(jié)果表明,基于LSTM的序列到序列模型在俄語字音轉(zhuǎn)換問題上取得了出色的表現(xiàn),該系統(tǒng)能夠有效應(yīng)用為俄語發(fā)音詞典的建設(shè)提供支持。但在訓(xùn)練語料有限的情況下,系統(tǒng)對集外詞的標音正確率與集內(nèi)詞存在一定差距,還有待進一步提高。因此在以后的工作中,需要進一步擴充俄語發(fā)音詞典,擴大訓(xùn)練語料的規(guī)模,為模型準確率的提高探尋途徑。
參考文獻(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] 信德麟,張會森,華劭.俄語語法[M].2版.北京:外語教學(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實踐[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] 滕飛,鄭超美,李文.基于長短期記憶多維主題情感傾向性分析模型[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).