網站開發(fā)與維護算什么職位公司培訓
摘要
最近,我們提供了 WeNet [1],這是一個面向生產(=工業(yè)生產環(huán)境需求)的端到端語音識別工具包,在單個模型中,它引入了統一的兩次two-pass (U2) 框架和內置運行時(built-in runtime)來處理流式和非流式解碼模式。
為了進一步提高 ASR 性能并滿足各種生產需求,在本文中,我們介紹了 WeNet 2.0 的四個重要更新。
-
我們提出了 U2++,這是一個具有雙向注意力解碼器的統一雙通道框架(two-pass framework with bidirectional attention decoders),其中包括從右到左注意力解碼器(注意,是right-to-left方向!)的未來上下文信息,以提高共享編碼器的表示能力(representative ability)和重新評分階段(rescoring stage)的性能。
-
我們在 WeNet 2.0 中引入了基于 n-gram 的語言模型和基于 WFST 的解碼器,促進了富文本數據(rich text data)在生產場景中的使用。 【這個好!可以說,上一代的代表kaldi的重要的功能,目前在WeNet2.0中進行很好的idea和方法論的繼承和實現】
-
我們設計了一個統一的上下文偏置框架(unified contextual biasing framework),該框架利用用戶特定的上下文(例如聯系人列表-contact lists)為生產提供快速適應能力,并在“有 LM” 和“無 LM”兩大場景中提高 ASR 準確性。
-
我們設計了一個統一的 IO 來支持大規(guī)模數據進行有效的模型訓練。
綜上所述,全新的 WeNet 2.0 在各種語料庫上比原來的 WeNet 實現了高達 10% 的相對識別性能提升,并提供了幾個面向生產的重要特性。
索引詞:U2++,語言模型,上下文偏置(contextual biasing),UIO
論文地址:https://arxiv.org/pdf/2203.15455.pdf
github地址:https://github.com/wenet-e2e/wenet
1 簡介
端到端 (end-to-end, E2E) 方法,例如連接主義時間分類 (connectionist temporal classification - CTC) [2, 3]、循環(huán)神經網絡轉換器 (RNN-T) [4, 5, 6, 7] 和基于注意力的編碼器-解碼器 ( attention-based encoder-decoder: AED) [8, 9, 10, 11, 12],在過去幾年中引起了對自動語音識別 (ASR) 的極大興趣。
最近的工作 [13, 14, 15] 表明 E2E 系統不僅極大地簡化了語音識別管道,而且在準確性上也超過了傳統的混合 ASR 系統(hybrid ASR systems)。
考慮到 E2E 模型的優(yōu)勢 [16],將新興的 E2E ASR 框架部署到具有穩(wěn)定和高效特性的實際生產中變得很有必要。然而,幾乎所有著名的 E2E 語音識別工具包,例如 ESPnet [17] 和 SpeechBrain [18],都是面向研究而非面向生產的?!捐b于ESPnet是幾位日本人研究者開發(fā)的,所以,對于日文的支持,有一定的優(yōu)勢。一些日本的企業(yè),也仍然在使用ESPnet來訓練他們的ASR模型?!?/p>
在 [1] 中,我們提出了一個生產優(yōu)先和生產就緒(production first and production ready = PFPR,這個詞好!)的 E2E 語音識別工具包 WeNet1,它專注于解決實際生產中基于 Transformer [19] 或 Conformer [20] 的 E2E 模型的棘手問題。
具體來說,WeNet 采用聯合 CTC/AED (例如,主要是指綜合ctc loss和attention loss)結構作為基本模型結構。然后,提出了一個統一的兩通(two-pass,U2)框架來解決流式傳輸問題,其中在訓練過程中應用動態(tài)塊掩碼策略(dynamic chunk masking)將流式和非流式模式統一在一個統一的神經模型中,并提供“構建運行時”(built-in runtime),開發(fā)人員可以在其中運行 x86 和 android E2E 系統以進行開箱即用的語音識別。
WeNet 極大地減少了在實際應用中部署 E2E 模型的工作量,因此被研究人員和開發(fā)人員廣泛采用,用于在實際生產中實現語音識別。
在本文中,我們介紹了 WeNet 2.0,它介紹了 WeNet 中最新的發(fā)展和更新的解決方案,用于面向生產的語音識別。 WeNet 2.0 的主要更新如下。
- U2++:我們將原來的U2框架升級為U2++(嗯!估計下次再升級,就是U2#了,++++),同時利用標注序列的從左到右和從右到左的雙向上下文信息,在訓練階段學習更豐富的上下文信息,結合前向和反向預測,以在解碼階段獲得更準確的結果。實驗表明,與原始 U2 框架相比,U2++ 實現了高達 10% 的相對改進(細節(jié)代碼學習,后續(xù)安排上!TODO)。
- 生產(產品-production)語言模型解決方案:我們支持一個可選的 n-gram LM,在流式 CTC 解碼階段,它將與基于加權有限狀態(tài)自動機 (WFST) [21] 的解碼圖中的 E2E 建模單元組成。
n-gram LM 可以在豐富的生產積累文本數據上快速訓練,這是面向生產的重要特征。實驗表明,n-gram 語言模型可以提供高達 8% 的相對性能提升(這也凸顯了基于更大規(guī)模文本語料,訓練出來的語言模型,的有效性!)。
- 上下文偏置(contextual biasing):我們設計了一個統一的上下文偏置框架,它提供了在流解碼階段利用或不使用 LM 的用戶特定上下文信息的機會。利用用戶特定的上下文信息(例如,聯系人列表、特定對話狀態(tài)、呈現給用戶的選項、對話主題、位置等)在提高 ASR 準確性和在語音生成中提供快速適應能力方面發(fā)揮著重要作用?!具@個對于很多場景有用:例如長時間的電話會議的會議內容轉錄,長時間的視頻的語音理解,等等!】實驗表明,我們的上下文偏差解決方案可以為有 LM 和沒有 LM 的情況帶來顯著的改進。
- 統一IO(UIO):我們設計了一個統一的IO系統來支持大規(guī)模數據集進行有效的模型訓練。 UIO 系統為不同的存儲(即本地磁盤或云)和不同規(guī)模的數據集(即小型或大型數據集)提供統一的接口。
對于小型數據集,UIO 保持樣本級隨機訪問能力。而對于大型數據集,UIO 將數據樣本聚合到分片shard(有關詳細信息,請參閱圖 4)并提供分片級隨機訪問能力。
多虧有了 UIO,WeNet 2.0 可以彈性地支持幾小時到數百萬小時數據的訓練。
總而言之,我們全新的 WeNet 2.0 提供了幾個重要的面向生產的功能,與原始 WeNet 相比,它實現了顯著的 ASR 改進,并使其自身成為更高效的 E2E 語音識別工具包。
2 WeNet 2.0
在本節(jié)中,我們將分別詳細描述面向生產的關鍵更新:U2++ 框架、生產語言模型解決方案、上下文偏置和統一 IO。
2.1 U2++
U2++ 是一個統一的兩通(two-pass)聯合 CTC/AED 框架,帶有雙向注意力解碼器,為統一流式和非流式模式提供了理想的解決方案。
U2++框架;左邊一路是ctc loss;右邊是attention decoder/loss(而且右邊又包括了,從左到右,從右到左的兩個方向)
如圖1所示,U2++由四部分組成。
1) 對聲學特征信息進行建模的共享編碼器(shared encoder)。
共享編碼器由多個 Transformer [19] 或 Conformer [20] 層組成,它們只考慮有限的右側上下文(limited right contexts)以保持平衡的延遲(balanced latency)。
2) 一個 CTC 解碼器,它對聲學特征(acoustic features)和token單元(token units)之間的幀級對齊信息(frame-level alignment information)進行建模。
CTC 解碼器由一個線性層組成,它將共享編碼器輸出轉換為 CTC 激活。
3)一個從左到右的注意力解碼器(L2R),它對從左到右的有序標記序列進行建模,以表示過去的上下文信息。
4)一個從右到左的注意力解碼器(R2L),它對從右到左的反向標記序列進行建模,以表示未來的上下文信息。
L2R 和 R2L 注意力解碼器由多個 Transformer 解碼器層組成。
在解碼階段,CTC 解碼器在第一遍以流模式運行,L2R 和 R2L 注意力解碼器在非流模式下重新評分,以提高第二遍的性能。
與 U2 [1] 相比,我們增加了一個額外的從右到左注意力解碼器來增強我們模型的上下文建模能力,使得上下文信息不僅來自過去(從左到右解碼器),而且來自未來(從右到左的解碼器)。
這提高了共享編碼器的代表能力、整個系統的泛化能力以及重新評分階段的性能。
組合 CTC 和 AED 損失Losses,用于訓練 U2++:
與U2類似,采用動態(tài)塊掩碼策略(dynamic chunk masking strategy)來統一流式(streaming)和非流式(non-streaming)模式。
在訓練階段,我們首先從均勻分布 :
C ~ U(1, max batch length T)
中采樣一個隨機塊大小 C。
然后,輸入被分成幾個具有所選塊大小的塊。
最后,當前塊在訓練中分別對自身和 L2R/R2L 注意力解碼器中的前/后塊進行雙向塊級注意(注意力的計算)。
在解碼階段,從第一遍 CTC 解碼器獲得的 n-best 結果由 L2R 和 R2L 注意力解碼器重新評分,其相應的聲學信息由共享編碼器生成。
根據經驗,更大的塊大小會導致更好的結果和更高的延遲。
由于采用了動態(tài)策略,U2++ 學會了使用任意塊大小進行預測,從而可以通過“在解碼中調整塊大小”來簡化準確性和延遲的平衡。
2.2.語言模型
為了促進富文本數據在生產場景中的使用,我們在 WeNet 2.0 中提供了統一的 LM 集成框架,如圖 2 所示。
通過 n-best 結果。
其一,當沒有提供 LM 時,應用 CTC 前綴波束搜索(CTC prefix beam search)來獲得 n 個最佳候選。
其二,當提供了 LM 時,WeNet 2.0 將 n-gram LM (G)、詞典 (L) 和端到端建模 CTC 拓撲 (topology-T) 編譯成基于 WFST 的解碼圖 (TLG) :
TLG = T ? min(det(L ? G)), (3)
然后應用 CTC WFST 波束搜索來獲得 n 個最佳候選。
最后,通過 Attenion Rescoring 模塊對 n 個最佳候選者進行重新評分,以找到最佳候選者。
我們重用 Kaldi[22] 中的算法和代碼進行解碼,在 WeNet 2.0 框架中表示為 CTC WFST 波束搜索。
為了加快解碼速度,采用了空白幀跳過(blank frame skipping)[23]技術。
2.3.上下文偏置
利用用戶特定(user-specific)的上下文信息(例如,聯系人列表、駕駛員導航)在語音生成中起著至關重要的作用,它始終顯著提高準確性并提供快速適應能力。
在 [24, 25, 26] 中研究了傳統和 E2E 系統的上下文偏置(contextual biasing)技術。
在 WeNet 2.0 中,為了在流解碼階段利用 LM 和無 LM 情況下的用戶特定上下文信息,受 [25] 的啟發(fā),我們在已知一組偏置短語時,動態(tài)構建“上下文相關的 WFST 解碼圖”。
we construct a contextual WFST graph on the fly when a set of biasing phrases are known in advance.
首先,根據 LM-free 情況下的 E2E 建模單元(E2E modeling units)或 with-LM 情況下的詞匯詞(vocabulary words),將偏置短語拆分為偏置單元(biasing units)。
然后,“上下文相關 WFST 圖”,按如下方式動態(tài)構建:
(1)每個具有提升分數(boosted score)的偏置單元(biasing unit)按順序放置在相應的弧上,以生成可接受的鏈(acceptable chain)。
(2) 對于可接受鏈的每個中間狀態(tài)(intermediate state),添加一個具有負累積提升分數(negative accumulated boosted score)的特殊失敗弧(special failure arc)。
當僅匹配部分偏置單元而不是整個短語時,失敗弧(failure arc)用于移動提升的分數(move the boosted scores)。
在上面的圖 3 中,分別顯示了:
LM-free 情況下的 char(E2E 建模單元)級【單個文字】上下文圖,和,
with-LM 情況下的單詞級【不忘+初心】上下文圖。
最后,在流式(streaming)解碼階段,當波束搜索結果,通過“上下文相關的 WFST 圖”與偏置單元匹配時,立即添加一個 boosted score,如
其中 P_C (y) 是偏置分數,λ 是一個可調超參數,用于控制上下文 LM 對整體模型分數的影響程度。
特別是當一些有偏見的短語共享相同的前綴時,我們會進行貪婪匹配以簡化實現。
2.4. UIO
通常,生產規(guī)模的語音數據集包含數萬小時的標記語音,其中始終包含大量小文件。
海量的小文件會導致以下問題:
? 內存不足(OOM):我們必須保留所有小文件的索引信息,這對于大型數據集來說非常消耗內存。
? 訓練速度慢:隨機訪問海量小文件時,讀取數據的時間非常長,成為訓練的瓶頸。
針對上述大規(guī)模生產數據集的問題,同時保持小數據集的高效率,我們設計了一個統一的IO系統,為不同的存儲(即本地磁盤或云)和不同的規(guī)模提供統一的接口數據集(即小型或大型數據集)。
整個框架如圖 4 所示。
對于大型數據集,受 TFReord (Tensorflow) [27] 和 AIStore [28] 的啟發(fā),我們將每個批處理的較小樣本(例如 1000 個樣本)及其相關元數據信息打包到相應的更大分片中,這是由 GNU tar 完成的,它是一種開源、開放格式、無處不在且得到廣泛支持的存檔工具。
Tar 文件顯著節(jié)省內存并有效克服 OOM 問題。在訓練階段,在內存中進行on-the-fly(在線,動態(tài))解壓,順序讀取同一個壓縮分片中的數據,解決了隨機數據訪問的耗時問題,加快了訓練過程。
同時可以隨機讀取不同的分片,保證數據的全局隨機性。對于小數據集,我們也可以直接加載訓練樣本。特別是在大數據集使用分片時,我們支持從本地磁盤和分布式存儲(例如 S3、OSS、HDFS 等)加載分片。與TFRecord類似,設計了即時處理數據的鏈式操作,使統一IO可擴展且易于調試。
3 實驗
在本節(jié)中,我們將描述我們的實驗設置、測試集并分析實驗結果。 WeNet recipes 中提供了大多數實驗設置。
實驗在以下全部或部分語料庫上進行:
- AISHELL-1 [29]、
- AISHELL-2 [30]、
- LibriSpeech [31]、
- GigaSpeech [32] 和最近發(fā)布的
- WenetSpeech [33]。
這五個語料庫包括不同的語言(英語和普通話)、錄制環(huán)境(干凈和嘈雜)和大小(100 - 10000 小時)。
3.1 U2++
為了評估我們的 U2++ 模型的有效性,我們對上面列出的所有 5 個 ASR 語料庫進行了實驗。對于大多數實驗,具有 25ms 窗口和 10ms 偏移的 80 維 log Mel 濾波器組 (FBANK) 用作聲學特征。
SpecAugment [34] 即時應用于數據增強。
在編碼器的前面使用了兩個內核大小為 3*3 和步幅為 2 的卷積子采樣層。
我們的編碼器中,使用 12 個conformer layers。
為了保持 U2/U2++ 的可比參數,我們?yōu)?U2 使用 6 個transformer 解碼器層,為 U2++ 使用 3 個從左到右和 3 個從右到左的解碼器層。
此外,我們通過模型平均(model averaging)獲得最終模型。
在 AISHELL-1 和 AISHELL-2 中,注意力層使用注意力維度 256、前饋 2048 和 4-head attention。
在 LibriSpeech、GigaSpeech 和 WenetSpeech 中,注意力層使用注意力維度 512、前饋 2048 和 8-head attention。
五個語料庫的卷積模塊的內核大小分別為 8/8/31/31/15。累積梯度用于穩(wěn)定訓練(accumulated gradient,例如如果batch=16,累計梯度=2,那么其實是32個樣本,更新一次梯度的adam等優(yōu)化搜索)。
在表 1 中,我們報告了每個語料庫的:
字符錯誤率 (CER)、單詞錯誤率 (WER) 或混合錯誤率 (MER)。
它表明 U2++ 在大多數語料庫上都優(yōu)于 U2,并且相對于 U2 實現了高達 10% 的相對改進。
從結果來看,我們認為 U2++ 在各種類型和大小的 ASR 語料庫中始終表現出優(yōu)異的性能。
3.2. N-gram 語言模型
語言模型解決方案在 AISHELL-1、AISHELL-2 和 LibriSpeech 上對第 3.1 節(jié)中列出的模型進行評估。對于 AISHELL-1 和 AISHELL-2,使用在其自己的訓練語料庫上訓練的 tri-gram。
對于 LibriSpeech,使用了官方預訓練的4-gram大語言模型(fglarge)。
為了加快解碼速度,當一幀“空白”符號的概率大于 0.98 時,將跳過該幀。
表 2 展示了三個語料庫在有 LM 和無 LM 場景中的比較結果。 with-LM 解決方案在 AISHELL-1 上顯示 5% 的增益,在 AISHELL-2 上的可比結果,在 LibriSpeech 上測試清潔的可比結果,以及在 LibriSpeech 上的其他測試中的卓越改進 (8.42%)。
總之,我們的生產 LM 解決方案在三個語料庫上顯示出一致的增益,這說明 n-gram 語言模型在集成到 E2E 語音識別系統時效果很好。
得益于該方案,生產系統(production system)可以享受到豐富的生產積累文本數據。
3.3.上下文偏置
我們評估接觸場景中的上下文偏置,我們設計了兩個從 AISHELL-2 測試集中選擇的測試集。
? test_p:帶有相關上下文的正測試集(positive test set)。我們選擇了 107 個帶有人名的話語,所有的人名在解碼時都作為上下文偏置短語附加。
? test_n:在正測試集中沒有任何上下文偏置短語(即名稱)的負測試集(negative test set)。
我們隨機選擇 107 個符合條件的話語作為負測試集()。我們在有和沒有 LM 的 AISHELL-1 U2++ 模型上進行了測試。我們表明,可以通過切換提升分數來控制上下文偏差的強度。在我們的實驗中,提升分數從 0 到 10 不等,其中 0 表示未應用上下文偏差。
如表 3 所示,我們的解決方案降低了正測試集的錯誤率,并且更大的提升分數通常會帶來更好的改進。
此外,當設置適當的提升分數時,我們可以提高正測試集的性能,同時避免負測試集的性能下降。
3.4. UIO
我們評估了 UIO 在 AISHELL-1 [29] 和 WenetSpeech [33] 上的性能,包括準確性、可擴展性和訓練速度。
具體來說,我們在一臺機器上為 AISHELL-1 使用 8 個 GPU,在三臺機器上為 WenetSpeech 使用 24 個 GPU。
如表 4 所示,UIO 在 AISHELL-1 上的 raw 和 shard 模式下顯示出接近的準確性,而 shard 模式在訓練速度方面得到了大約 9.27% 的加速。
對于 WenetSpeech,由于只使用 raw 模式進行訓練太慢,所以沒有顯示訓練速度。我們采用 ESPnet 的結果(標有?)作為我們的基線,它與我們的模型具有相同的配置。
通過分片模式在 WenetSpeech 上訓練的模型的結果與 ESPnet 相當,這進一步說明了 UIO 的有效性。
4 結論和未來工作
在本文中,我們提出了更具生產力的 E2E 語音識別工具包 WeNet 2.0,它引入了幾個重要的面向生產的特性并實現了顯著的 ASR 性能改進。
我們正在開發(fā) WeNet 3.0,主要專注于無監(jiān)督自學習、設備端模型探索和優(yōu)化以及其他生產工作。