翻譯http://kaldi-asr.org/doc/chain.html 時(shí)間2018年12月13日
基于前人翻譯的結(jié)果,結(jié)合自己的理解進(jìn)行了修改.
lattice翻譯為詞圖
phone 翻譯為音素
學(xué)習(xí)chain model建議參考資料:
- "Purely sequence-trained neural networks for ASR based on lattice-free MMI", Daniel Povey, Vijayaditya Peddinti, Daniel Galvez, Pegah Ghahrmani, Vimal Manohar, Xingyu Na, Yiming Wang and Sanjeev Khudanpur, Interspeech 2016, (pdf)
- Daniel Povey, "Discriminative Training for Large Vocabulary Speech Recognition," PhD thesis, Cambridge University Engineering Dept, 2003 (pdf)
理解chain model你需要具備的知識:
- MMI目標(biāo)函數(shù)
- LF-MMI的計(jì)算
- WFST的計(jì)算
“鏈”模型
“鏈”模型簡介
“鏈”模型是一種使用nnet3實(shí)現(xiàn)的DNN-HMM模型乖仇,它在很多方面都和傳統(tǒng)的模型不同啃奴。你可以將它們看作聲學(xué)模型空間中的不同設(shè)計(jì)點(diǎn)贮泞。
- 我們在神經(jīng)網(wǎng)絡(luò)的輸出端使用了3倍小的幀率,這大大減少了測試時(shí)間所需的計(jì)算量,使實(shí)時(shí)解碼變得更加容易痪蝇。
- 模型從一開始就用序列級目標(biāo)函數(shù) - 即正確序列的對數(shù)概率進(jìn)行訓(xùn)練弱卡。它的本質(zhì)是MMI目標(biāo)函數(shù)實(shí)現(xiàn)的,通過在音素 n-gram 語言模型導(dǎo)出的解碼圖上做一個完全的前向-后向,在GPU上沒有詞圖的實(shí)現(xiàn)诺苹。
- 由于幀速率的降低咕晋,我們需要使用非常規(guī)的HMM拓?fù)洌ㄔ试S在一個狀態(tài)下遍歷HMM)。
- 我們在HMM中使用固定轉(zhuǎn)移概率收奔,并且不訓(xùn)練它們(我們可能決定將來訓(xùn)練它們;但是在大多數(shù)情況下掌呜,神經(jīng)網(wǎng)絡(luò)輸出概率可以與轉(zhuǎn)換概率完成相同的工作,具體取決于拓?fù)洌?坪哄。
- 目前质蕉,僅支持nnet3 DNN(參見“nnet3”設(shè)置),并且尚未實(shí)現(xiàn)在線解碼翩肌。(預(yù)計(jì)2016年4月到6月實(shí)現(xiàn))(譯者注:已實(shí)現(xiàn)在線解碼)
- 目前結(jié)果比傳統(tǒng)DNN-HMM的結(jié)果好一點(diǎn)(約5%相對更好)模暗,但系統(tǒng)解碼速度提高了約3倍; 訓(xùn)練時(shí)間可能也快一些,但我們還沒有完全比較念祭。
在哪里可以找到“鏈”模型的腳本
目前用于'鏈'模型的最佳腳本可以在egs/swbd/s5c中的Switchboard設(shè)置中找到; 腳本local/chain/run_tdnn_2o.sh是當(dāng)前最好的腳本兑宇。目前可在官方github存儲庫(https://github.com/kaldi-asr/kaldi.git)的“chain”分支中找到它,它最終將合并到主分支棒卷。(譯者注:已合并)
該腳本使用TDNN作為神經(jīng)網(wǎng)絡(luò)(我們一直在使用TDNN進(jìn)行開發(fā)顾孽,因?yàn)樗鼈兏菀渍{(diào)整LSTM),并提供比基線TDNN更好的WER(詞錯誤率):11.4%比规,而最佳TDNN基線為12.1% (在Switchboard的eval2000部分)若厚。
鏈模型
The chain model itself is no different from a conventional DNN-HMM, used with a (currently) 3-fold reduced frame rate at the output of the DNN.
鏈模型本身與傳統(tǒng)DNN-HMM模型并無大的差別,(當(dāng)前)使用3倍減少的幀率作為DNN的輸出。DNN的輸入特征是原始幀速率為每秒100幀; 這是有道理的蜒什,因?yàn)槲覀儺?dāng)前使用的所有神經(jīng)網(wǎng)絡(luò)(LSTM测秸,TDNN)都有某種經(jīng)常性的循環(huán)連接或內(nèi)部拼接,即它們不是純粹的前饋網(wǎng)絡(luò)。
與通常模型的不同之處在于用于訓(xùn)練它的目標(biāo)函數(shù):我們使用正確音素序列的對數(shù)概率作為目標(biāo)函數(shù)霎冯,而不是幀級目標(biāo)铃拇。訓(xùn)練過程在原理上與MMI訓(xùn)練非常相似,其中我們計(jì)算分子和分母的“占領(lǐng)概率”沈撞,在導(dǎo)數(shù)計(jì)算中使用兩者之間的差異慷荔。不再需要將DNN輸出歸一化為每幀的總和為1 - 這樣的歸一化沒有什么作用。
由于幀速率降低(每30 ms一幀)缠俺,我們需要使用修改后的HMM拓?fù)湎跃АN覀兿M鸋MM在一次轉(zhuǎn)換中是可遍歷的(而不是模型的3個轉(zhuǎn)換與正常幀速率相對)。當(dāng)前偏好的拓?fù)渚哂兄荒艹霈F(xiàn)一次的狀態(tài)壹士,另一種狀態(tài)可以出現(xiàn)零次或者多次磷雇。使用與基于GMM的模型相同的過程獲得狀態(tài)聚類,盡管具有不同的拓?fù)洌ㄎ覀儗R轉(zhuǎn)換為新的拓?fù)浜蛶俾剩?/p>
“鏈”模型的訓(xùn)練步驟
鏈模型的訓(xùn)練過程是MMI的無詞格版本躏救,其中分母狀態(tài)后驗(yàn)概率是通過由音素級解碼圖形成的HMM上的前向-后向算法獲得的唯笙,并且分子狀態(tài)后驗(yàn)是通過類似的向前-向后算法來獲取的,但限于對應(yīng)于轉(zhuǎn)錄文本的序列盒使。
對于神經(jīng)網(wǎng)絡(luò)的每個輸出索引(即每個pdf-id)崩掘,我們計(jì)算(分子占用概率 減去 分母占用概率)形式的導(dǎo)數(shù), 并將它們傳播回網(wǎng)絡(luò)忠怖。
分母FST
對于計(jì)算的分母部分呢堰,我們在HMM上做向前-向后。實(shí)際上凡泣,因?yàn)槲覀儗⑺硎緸橛邢逘顟B(tài)接受器,所以標(biāo)簽(pdf-id)與弧而不是狀態(tài)相關(guān)聯(lián)皮假,因此在通常的公式中它并不是真正的HMM鞋拟,但是我們更容易將其視為HMM,因?yàn)槲覀兪褂们跋蚯?向后算法來獲得后驗(yàn)惹资。在代碼和腳本中贺纲,我們將其稱為“分母FST”。
分母FST的音素級別的語言模型
構(gòu)建分母FST的第一個階段是創(chuàng)建音素語言模型褪测。該語言模型是從訓(xùn)練數(shù)據(jù)音素對齊中學(xué)習(xí)的猴誊。這是一種不平滑的語言模型,這意味著我們永遠(yuǎn)不會退回到低階n-gram侮措。但是懈叹,某些語言模型狀態(tài)會被完全修剪,因此轉(zhuǎn)換到這些狀態(tài)會改為低階n-gram狀態(tài)分扎。我們避免平滑的原因是減少語音環(huán)境擴(kuò)展后編譯圖中將出現(xiàn)的弧數(shù)澄成。
我們選定的配置是用來估算一個4-gram語言模型和不修剪低于trigram的LM狀態(tài)(因此我們始終保持至少2-phone歷史記錄)。除了由不剪枝的trigram規(guī)則決定的狀態(tài)數(shù)量之外,我們還有一個可指定數(shù)量(例如2000)的4-gram語言模型狀態(tài)墨状,這些狀態(tài)將被保留(所有其余的都用相應(yīng)的trigram狀態(tài)標(biāo)識)卫漫,我們選擇保留的那些是以最大化訓(xùn)練數(shù)據(jù)似然的方式確定的。所有概率是以最大化訓(xùn)練數(shù)據(jù)似然的方式估計(jì)肾砂。不修剪三元組的原因是任何允許三元組的稀疏性將傾向于最小化編譯圖的尺寸列赎。請注意,如果我們的音素LM只是一個簡單的音素循環(huán)(例如:一個unigram)镐确,由于語音的臨近序列效應(yīng)包吝,它會擴(kuò)展為三音素,但它會有所有可能的三元組的弧辫塌。因此漏策,使用未修剪的三元模型得到的任何稀疏性都是一個獎勵。根據(jù)經(jīng)驗(yàn)臼氨,未平滑的trigram LM可擴(kuò)展到盡可能小的FST; 并修剪一些trigrams掺喻,雖然它增加了編譯的FST的大小,導(dǎo)致很少或沒有WER改善(至少300小時(shí)的數(shù)據(jù)擴(kuò)展3倍速度擾動;在較少的數(shù)據(jù)可能有幫助)储矩。
在Switchboard設(shè)置中感耙,我們嘗試的各種模型的phone-LM復(fù)雜度在5到7之間; 我們所選配置的phone-LM復(fù)雜度(4-gram,除了2000個狀態(tài)以外都被修剪為trigram)大約是6個持隧。并不是因?yàn)檩^低的phone-LM復(fù)雜度總是使訓(xùn)練系統(tǒng)有更好的WER; 對于傳統(tǒng)的(基于單詞的)MMI訓(xùn)練即硼,一個中間強(qiáng)度的語言模型似乎效果最好。
分母FST的匯編
將上一節(jié)中描述的音素語言模型擴(kuò)展為FST屡拨,其中把'pdf-id'作為弧只酥,在這個過程中反映了正常Kaldi解碼中的解碼圖編譯過程(參見解碼圖創(chuàng)建配方(測試階段) ),除了沒有涉及詞典呀狼,最后我們將transition-id轉(zhuǎn)換為pdf-id裂允。
一個區(qū)別在于我們?nèi)绾巫钚』瘓D的大小。正常的配方包括確定化和最小化哥艇。我們無法使用此過程減少圖的大小绝编,或者使用消歧符號來減小圖形的大小。相反貌踏,我們的圖形最小化過程可以緊湊地描述如下:“重復(fù)3次:推動十饥,最小化,反向;推動祖乳,最小化反轉(zhuǎn)逗堵。”凡资。'推'指的是權(quán)重推重(weight-pushing); “反向”是指弧的方向反轉(zhuǎn)砸捏,并交換初始和最終狀態(tài)谬运。
初始和最終概率,以及'標(biāo)準(zhǔn)化FST'
上面提到的圖形創(chuàng)建過程自然地給出了一個初始狀態(tài)垦藏,以及每個狀態(tài)的最終概率; 但這些不是我們在向前-向后中使用的那些梆暖。原因是這些概率適用于話語邊界,但我們訓(xùn)練分裂的是固定長度(例如1.5秒)的話語塊掂骏。在這些任意選擇的切割點(diǎn)上限制HMM的初始狀態(tài)和最終狀態(tài)是不合適的轰驳。相反,我們使用從“running the HMM”得到的初始概率進(jìn)行固定次數(shù)的迭代并對概率求平均值; 每個狀態(tài)的最終概率等于1.0弟灼。我們有理由這樣做级解,但現(xiàn)在沒有時(shí)間解釋它。在分母向前-向后過程中田绑,我們將這些初始和最終概率應(yīng)用于初始和最終幀作為計(jì)算的一部分勤哗。但是,我們還寫出了具有這些初始和最終概率的分母FST版本掩驱,我們將其稱為“歸一化FST”芒划。(使用epsilon弧模擬初始概率,因?yàn)镕ST不支持初始概率)欧穴。這種“標(biāo)準(zhǔn)化FST”將用于向分子FST添加概率,使用的方法下面介紹民逼。
分子FST
作為我們準(zhǔn)備訓(xùn)練過程的一部分,我們?yōu)槊總€語料生成一份稱為“分子FST”(“numerator FST ”)的東西涮帘。分子FST編碼了監(jiān)督轉(zhuǎn)錄文本拼苍,并且還編碼該轉(zhuǎn)錄本的對齊(即,它強(qiáng)制與從基線系統(tǒng)獲得的參考對齊相似)调缨,但是它允許稍微的“擺動空間”與該參考不同疮鲫。默認(rèn)情況下,我們允許音素在詞圖對齊中分別在其開始和結(jié)束位置之前或之后0.05秒發(fā)生弦叶。合并對齊信息非常重要棚点,因?yàn)槲覀儾皇菍φ麄€話語進(jìn)行訓(xùn)練,而是對分裂的固定長度的話語進(jìn)行訓(xùn)練(這對于基于GPU的訓(xùn)練很重要):如果我們將話語分成幾部分知道轉(zhuǎn)錄本對齊的位置湾蔓。
譯者注:這段翻譯的不好
我們使用特定于話語的圖解作為解碼圖,通過詞圖生成解碼過程生成訓(xùn)練數(shù)據(jù)的替代發(fā)音的網(wǎng)格砌梆,而不是強(qiáng)制執(zhí)行訓(xùn)練數(shù)據(jù)的特定發(fā)音默责。這會生成發(fā)音的所有對齊, 在最佳得分發(fā)音的束內(nèi)。
拆分分子FST
如上所述咸包,我們訓(xùn)練固定長度的話語片段(例如長度為1.5秒)桃序。這要求我們將分子FST分成固定大小的碎片。這并不難烂瘫,因?yàn)榉肿覨ST(記住媒熊,編碼時(shí)間對齊(time-alignment)信息)自然具有我們可以識別具有特定幀索引的任何FST狀態(tài)的結(jié)構(gòu)奇适。注意:在我們進(jìn)行此拆分的階段,分子FST中沒有損失 - 它只是被視為編碼路徑上的約束 - 因此我們不必決定如何分割路徑上的損失芦鳍。
歸一化分子FST
上圖(分母FST的匯編)提到了如何計(jì)算分母FST的初始和最終概率嚷往,以及我們?nèi)绾卧凇皻w一化FST”( 'normalization FST')中對這些概率進(jìn)行編碼。我們用這個“歸一化FST”組成分子FST的分割部分柠衅,以確保分母FST的損失反映在分子FST中皮仁。這確保了目標(biāo)函數(shù)永遠(yuǎn)不會是正的(這使得它們更容易解釋),并且還防止分子FST可能包含分母FST不允許的狀態(tài)序列的可能性菲宴,這原則上可以允許目標(biāo)函數(shù)在不受約束的條件下增加贷祈。這鐘情況可能發(fā)生的原因是音素LM缺乏平滑,并且從1-best對齊估計(jì)喝峦,因此詞圖可能包含有在訓(xùn)練中看不到的音素n-gram序列势誊。
偶爾(但很少)會發(fā)生這種歸一化過程產(chǎn)生空FST的情況:這種情況可能發(fā)生在當(dāng)詞圖包含用于訓(xùn)練音素語言模型的1-best對齊中不存在的三音素時(shí),并且沒有任何可選路徑的格可以彌補(bǔ)由此產(chǎn)生的“失敗”路徑谣蠢。這是有可能發(fā)生的粟耻,因?yàn)?-bes和詞圖產(chǎn)生對齊選擇了單詞的不同發(fā)音。這些語料就被丟棄了漩怎。
分子FST的格式
分子FST是加權(quán)接受器勋颖,其中標(biāo)簽對應(yīng)于pdf-id加1。我們不能使用pdf-id勋锤,因?yàn)樗鼈兛赡転榱? 并且零是由OpenFST專門處理的(如epsilon)饭玲。當(dāng)我們形成小批量時(shí),我們實(shí)際上將它們放在一起以形成更長的FST叁执,而不是存儲一系列單獨(dú)的分子FST; 這使我們能夠?qū)π∨恐械乃性捳Z進(jìn)行單向向前-向后茄厘,直接計(jì)算總的分子對數(shù)概率。(這不是一個重要的特性谈宛,它只是一個軟件細(xì)節(jié)次哈,我們在這里解釋,以免產(chǎn)生混淆)吆录。
固定長度的塊和微批量處理
為了訓(xùn)練小批量窑滞,我們將我們的話語分成固定長度的語音塊(在我們當(dāng)前的腳本中長度為1.5秒)。比這更短的話語被丟棄; 那些更長的恢筝,被分成塊哀卫,塊之間有重疊,或塊之間有小間隙撬槽。請注意此改,我們的聲學(xué)模型通常需要左或右框架用于聲學(xué)環(huán)境; 我們對其進(jìn)行了補(bǔ)充,但這是一個單獨(dú)的問題; 在確定塊之后添加了環(huán)境侄柔。
我們的小批次(minibatch)大小通常是2的冪共啃,它可能受GPU內(nèi)存因素的限制占调。我們的許多示例腳本每個小批量使用128個塊。GPU內(nèi)存的最大單個使用者是向前-向后計(jì)算中的alpha概率移剪。例如究珊,對于1.5秒的塊,我們在3倍二次抽樣后有50個時(shí)間步長挂滓。在我們的Switchboard設(shè)置中苦银,典型的分母FST中有30,000個狀態(tài)。我們對alpha使用單精度浮點(diǎn)數(shù)赶站,因此以千兆字節(jié)為單位的內(nèi)存為(128 * 50 * 30000 * 4)/ 10 ^ 9 = 0.768G幔虏。
這不會耗盡所有GPU內(nèi)存,但還有其他內(nèi)存來源贝椿,例如我們在內(nèi)存中保留兩個nnet輸出副本想括,這根據(jù)配置需要相當(dāng)多的內(nèi)存 -- 例如,將30000替換為10000烙博,它將為您提供在合理配置中用于一個nnet輸出副本的內(nèi)存量瑟蜈。
對幀移位數(shù)據(jù)進(jìn)行訓(xùn)練
在神經(jīng)網(wǎng)絡(luò)訓(xùn)練中,我們已經(jīng)有了生成擾動數(shù)據(jù)的方法來人為地增加我們訓(xùn)練的數(shù)據(jù)量渣窜。我們的標(biāo)準(zhǔn)nnet3神經(jīng)網(wǎng)絡(luò)訓(xùn)練示例腳本通過0.9, 1.0和1.0的因子對原始音頻進(jìn)行時(shí)間扭曲铺根,以創(chuàng)建3倍的增強(qiáng)數(shù)據(jù)。這與'鏈'模型正交乔宿,我們這樣做(或不這樣做)就像我們對基線一樣位迂。但是,有一種額外的方法可以通過移動幀來增加鏈模型的數(shù)據(jù)详瑞。這些模型的輸出幀速率是常規(guī)幀速率的三分之一(當(dāng)然是可以配置的)掂林,這意味著我們只評估nnet輸出t值為3的倍數(shù),因此我們可以通過將訓(xùn)練樣例移動0,1和2幀來生成不同版本的訓(xùn)練數(shù)據(jù)坝橡。這是在訓(xùn)練腳本中自動完成的泻帮,當(dāng)我們從磁盤讀取訓(xùn)練樣例時(shí),它“即時(shí)”完成 - 程序nnet3-chain-copy-egs有一個由腳本設(shè)置的選項(xiàng)–frame-shift(幀-移位)计寇。這會影響解釋epochs(訓(xùn)練次數(shù))锣杂。如果用戶請求例如4個epochs,那么我們實(shí)際上訓(xùn)練了12個epochs; 我們只是對3個不同移位版本的數(shù)據(jù)這樣做番宁。選項(xiàng)–frame-shift=t選項(xiàng)實(shí)際上做的是將輸入幀t移位并將輸出幀移動最接近的3到t蹲堂。(通常它可能不是3,它是一個名為–frame-subsampling-factor的配置變量)贝淤。
GPU訓(xùn)練中的問題
特定于 “鏈”計(jì)算的計(jì)算部分是分子FST上的向前-向后和分母HMM上的向前-向后。分子部分非痴快播聪。向前-向后分母需要相當(dāng)多的時(shí)間朽基,因?yàn)榉帜窮ST中可能存在很多弧(例如离陶,典型的Switchboard設(shè)置中有200,000個弧和30,000個狀態(tài))稼虎。所花費(fèi)的時(shí)間幾乎與計(jì)算的神經(jīng)網(wǎng)絡(luò)部分所花費(fèi)的時(shí)間一樣多。我們非常小心地確保內(nèi)存的位置招刨。
進(jìn)一步加快這一步驟的下一步可能是實(shí)現(xiàn)向前-向后計(jì)算的修剪版本(如修剪的Viterbi霎俩,但計(jì)算后驗(yàn))。為了獲得加速沉眶,我們必須削減很高比例的狀態(tài)打却,因?yàn)槲覀冃枰獜浹a(bǔ)修剪帶來的內(nèi)存局部性損失。在我們當(dāng)前的實(shí)現(xiàn)中谎倔,我們仔細(xì)地確保一組GPU線程都處理相同的HMM狀態(tài)和時(shí)間柳击,只是來自不同的塊(我們在代碼中調(diào)用這些不同的'序列'); 并且我們確保對應(yīng)于這些不同序列的內(nèi)存為止在內(nèi)存中彼此相鄰,因此GPU可以進(jìn)行“合并內(nèi)存訪問”片习。使用狀態(tài)級修剪捌肴,因?yàn)椴煌蛄械膬?nèi)存訪問將不再“同步”,我們會失去這個優(yōu)勢藕咏。但是状知,獲得向前-向后算法的修剪版本仍然是可行的。
對于速度孽查,我們不在分母圖的alpha-beta計(jì)算中使用對數(shù)值饥悴。為了將所有數(shù)值保持在合適的范圍內(nèi),我們將每一幀上的所有聲學(xué)概率(指數(shù)化nnet輸出)乘以選定的“任意值”卦碾,以確保我們的alpha分?jǐn)?shù)保持在良好的范圍內(nèi)铺坞。我們稱之為“任意值”,因?yàn)樗惴ǖ脑O(shè)計(jì)使得我們可以在這里選擇任何值洲胖,并且它在數(shù)學(xué)仍然上是正確的济榨。我們將一個HMM狀態(tài)指定為“特殊狀態(tài)”,并且選擇“任意常數(shù)”是前一幀上該特殊狀態(tài)的alpha的倒數(shù)绿映。這使特殊狀態(tài)的alpha值保持接近1擒滑。作為“特殊狀態(tài)”,我們選擇一個在HMM限制分布中具有高概率的狀態(tài)叉弦,并且它可以進(jìn)入大部分的HMM狀態(tài)丐一。
使用'鏈'模型解碼
使用'鏈'模型的解碼過程與基于常規(guī)nnet3神經(jīng)網(wǎng)絡(luò)的模型完全相同,實(shí)際上它們使用相同的腳本(steps/nnet3/decode.sh)淹冰。但是也有一些配置差異:
- 首先库车,使用不同且更簡單的拓?fù)錁?gòu)建圖形; 但這不需要用戶采取任何特殊操作,因?yàn)閳D構(gòu)建腳本無論如何都要從“鏈”訓(xùn)練腳本生成的'final.mdl'中獲取拓?fù)溆K撃_本包含正確的拓?fù)洹?/li>
- 默認(rèn)情況下柠衍,當(dāng)我們編譯圖時(shí)洋满,我們使用0.1的“自循環(huán)標(biāo)度”(-self-loop-scale)。這會影響如何處理自循環(huán)的轉(zhuǎn)換概率(通常效果更好)珍坊。但是牺勾,對于“鏈”模型,鑒于它們的訓(xùn)練單方法阵漏,我們需要使用與我們訓(xùn)練過的完全相同的轉(zhuǎn)換概率縮放驻民,為簡單起見,我們將其設(shè)置為1.0履怯。所以我們將utils/mkgraph.sh腳本中的–self-loop-scale 1.0選項(xiàng)設(shè)置為1.0回还。
- 這些模型中沒有“先行分割”的必要條件。所以我們根本就沒有在.mdl文件中設(shè)置先驗(yàn)矢量;我們確保解碼器在沒有設(shè)置先驗(yàn)的前提下虑乖,只省略除法懦趋。。
- 我們通常在解碼中使用的默認(rèn)聲學(xué)標(biāo)度(0.1)不適用于“鏈”模型疹味,最佳聲學(xué)標(biāo)度非常接近1.因此我們提供–acwt 1.0選項(xiàng)給腳本 steps/nnet3/decode.sh仅叫。
- 評分腳本只能以1為增量搜索語言模型比例,這在最佳語言模型比例在10到15之間的典型設(shè)置中很有效糙捺,但在最佳語言模型比例接近1時(shí)則不行诫咱。(注意:出于當(dāng)前目的,您可以將語言模型比例視為聲學(xué)比例的倒數(shù))洪灯。為了解決這個問題而不改變評分腳本(這是特定于數(shù)據(jù)庫的)坎缭,我們提供了一個新的選項(xiàng)–post-decode-acwt 10.0給腳本steps/nnet3/decode.sh,它在轉(zhuǎn)儲詞圖之前將聲學(xué)概率縮放10签钩。在此之后掏呼,最佳語言模型比例將在10左右,如果您不了解此問題铅檩,可能會有點(diǎn)混亂憎夷,但是對于評分腳本的設(shè)置方式來說是很方便的。
一旦使用該–acwt 1.0選項(xiàng)昧旨,默認(rèn)解碼和lattice beams適用于“鏈”模型而無需修改拾给。但是,它們不會顯示完全可能的加速兔沃,并且您可以通過使用稍微緊一點(diǎn)的束(beam)來獲得更快的解碼蒋得。通過在Switchboard設(shè)置中收緊光束,我們能夠?qū)⒔獯a時(shí)間從實(shí)時(shí)的1.5倍降低到實(shí)時(shí)的約0.5倍乒疏,精度降低僅約0.2%(這是CPU上神經(jīng)網(wǎng)絡(luò)評估的結(jié)果;在GPU上會更快)额衙。Dan提供的注意事項(xiàng):在我寫這篇文章的時(shí)候,這是我最好的回憶; 實(shí)際上,退化可能不止于此入偷。請記住追驴,這是在高性能的現(xiàn)代服務(wù)器機(jī)器(單線程)上。
您可能會注意到當(dāng)前的示例腳本中,我們使用的是iVectors疏之。我們這樣做只是因?yàn)樗鼈兺ǔS兴鶐椭乙驗(yàn)槲覀冋谑褂盟鼈冏鳛榛€設(shè)置∠九兀“鏈”模型沒有內(nèi)在聯(lián)系锋爪,也沒有使用它們的基本要求。