訓練自動語音識別( ASR )模型的損失函數(shù)并不是一成不變的。舊的損失函數(shù)規(guī)則不一定是最優(yōu)的??紤]一下 connectionist temporal classification ( CTC ),看看改變它的一些規(guī)則如何能夠減少 GPU 內(nèi)存,這是訓練和推斷基于 CTC 的模型所需的內(nèi)存,等等。
聯(lián)結(jié)主義時間分類綜述
若你們要訓練一個 ASR 模型,無論是卷積神經(jīng)網(wǎng)絡還是遞歸神經(jīng)網(wǎng)絡、transformer 還是組合,你們很可能是用 CTC 損失訓練它。
CTC 簡單方便,因為它不需要每幀關于“什么聲音何時發(fā)音”(所謂的音頻文本時間對齊)的信息。在大多數(shù)情況下,這種知識是不可用的,就像在一個典型的 ASR 音頻數(shù)據(jù)集中,關聯(lián)文本沒有時間標記。
真正的時間校準并不總是微不足道的。假設大部分錄音沒有講話,結(jié)尾只有一個簡短短語。 CTC 損失并不能告訴模型何時準確地發(fā)出預測。相反,它允許每一種可能的對齊,并且只調(diào)整這些對齊的形式。
下面是 CTC 如何管理所有可能的方式來將音頻與文本對齊。
首先,對目標文本進行標記化,即將單詞切成字母或單詞片段。結(jié)果單元的數(shù)量(無論它們是什么)應小于音頻“時間段”的數(shù)量:長度為 0.01 到 0.08 秒的音頻段。
如果時間段少于單位,則算法失敗。在這種情況下,你應該縮短時間。否則,只有 RNN 傳感器可以挽救您。如果時間框架與單位一樣多,那么只能有一個對齊(百萬分之一的情況)。
大多數(shù)時候,時間段比單位要長得多,因此一些幀沒有單位。對于這種空幀, CTC 有一個特殊的 單元。本單元告訴您,在這個特定的框架下,模型沒有任何內(nèi)容可以提供給您。這可能是因為沒有演講,或者模型太懶,無法預測有意義的東西。 CTC 最重要的規(guī)則 提供了如果模型不想做什么也不能預測的能力。
其他規(guī)則與單元延續(xù)有關。假設您的單元是一個持續(xù)時間超過一幀的元音。模型應在兩幀中的哪一幀上輸出單元? CTC 允許在多個連續(xù)幀上進行相同的單位發(fā)射。但是,應該將相同的連續(xù)單元合并為一個單元,以將識別結(jié)果轉(zhuǎn)換為一系列類似文本的單元。
現(xiàn)在,如果標記化文本本身包含相同的重復單位,如“ ll ”或“ pp ”,該怎么辦?如果不進行處理,這些單元將合并為一個單元,即使它們不應該合并。對于這種特殊情況, CTC 有一條規(guī)則,如果目標文本有重復的單位,那么在推理過程中這些單位必須用 分隔。
綜上所述,在幾乎每一幀中,模型都可以從上一幀 發(fā)射相同的單元,或者如果下一幀與上一幀不同,則可以發(fā)射下一個單元。這些規(guī)則比 規(guī)則更為復雜,對于反恐委員會來說,它們并不完全必要。
反恐委員會的執(zhí)行
以下是如何表示 CTC 損失。與機器學習中的大多數(shù)損失函數(shù)一樣,它通常表示為一個動態(tài)算法,將這些規(guī)則應用于訓練語句或模型的 softmax 輸出。
在訓練中,損失值和梯度由適用于 CTC 規(guī)則的 Baum–Welch algorithm 根據(jù)所有可能路線的條件概率計算得出。 CTC 實現(xiàn)通常有數(shù)百到數(shù)千行代碼,很難修改。
幸運的是,還有另一種執(zhí)行反恐委員會的方法。除了其他應用領域外,加權(quán)有限狀態(tài)傳感器( WFST )方法允許模型將動態(tài)算法表示為一組圖形和相關圖形操作。這種方法使您能夠通過將 CTC 規(guī)則應用于特定的音頻和文本,并通過計算損失和梯度來解耦 CTC 規(guī)則。
CTC WFST 應用程序
有了 WFST ,您可以輕松地采用 CTC 規(guī)則,并使用不同的標準,如最大互信息( MMI )。這些模型通常具有比 CTC 模型更低的字錯誤率( WER )。 MMI 將先前的語言信息納入培訓過程。
與 CTC 相比, MMI 不僅最大化了最可行路徑的概率,而且最小化了其他路徑的概率。為此, MMI 有一個所謂的分母圖,它可以在訓練期間占用大量 GPU 內(nèi)存。幸運的是,可以修改一些 CTC 規(guī)則以減少分母內(nèi)存消耗,而不會影響語音識別的準確性。
此外, CTC 規(guī)則的 WFST 表示,或所謂的 topology ,可用于對 CTC 模型進行 WFST 解碼。為此,您可以將 N -gram 語言模型轉(zhuǎn)換為 WFST 圖,并將其與拓撲圖組合在一起。生成的解碼圖可以傳遞給,例如, Riva CUDA WFST Decoder 。
解碼圖可能很大,以至于無法放入 GPU 內(nèi)存。但通過一些 CTC 拓撲修改,您可以減少 CTC 的解碼圖形大小。
CTC 拓撲
圖 1 顯示了 CTC 拓撲, Correct CTC 。這是一個帶自循環(huán)的有向完整圖,因此對于 N 單元(包括空白),有 N 狀態(tài)和弧的平方數(shù)。
正確的反恐委員會是最常用的反恐委員會代表。看看這個拓撲產(chǎn)生的典型大小。對于 LibriSpeech 4 字語言模型和 256 個模型詞匯單元,解碼圖大小為~ 16Gb 。對于型號詞匯表大小為 2048 的 32Gb GPU ,僅當批次大小為 1 時,才可以進行冷啟動 MMI 培訓。
圖 1.三單元詞匯表的正確 CTC 示例:《 blank 》、 a 和 B
通過刪除一些 CTC 規(guī)則來減少 Correct CTC 引起的內(nèi)存消耗。首先,使用 刪除重復單元的強制分隔。如果沒有這個規(guī)則,您最終會得到一個名為 CompactCTC 的拓撲(圖 2 )。它有 3 個 N – 2 個弧用于 N 單元。
圖 2.緊湊型 CTC 示例
盡管有純
(虛擬)弧,但這種拓撲結(jié)構(gòu)可用于訓練和解碼,不會對識別質(zhì)量產(chǎn)生負面影響。如果您想知道這是如何工作的,請參閱 CTC Variations Through New WFST Topologies 或 執(zhí)行 NVIDIA NeMo 。
使用 Compact CTC 的解碼圖形大小比使用 Correct CTC 的小四分之一。它還需要 2x 更少的 GPU 內(nèi)存用于 MMI 訓練。
現(xiàn)在在多個連續(xù)幀上丟棄相同的單位發(fā)射,只保留 規(guī)則。這樣,您得到的拓撲只有一個狀態(tài)和 N 單元的 N 弧。
這是可能的最小 CTC 拓撲,所以我們稱之為最小 CTC (圖 3 )。它需要更少的 GPU 內(nèi)存用于 MMI 訓練(與 Correct CTC 相比減少了 4 倍),但與基線相比,使用 Minimal CTC 拓撲的 MMI 訓練模型的精度會降低。
最小的拓撲還產(chǎn)生最小的解碼 WFST ,其大小為基線圖的一半。用 Minimal CTC 編譯的解碼圖與用 Correct CTC 或 Compact CTC 構(gòu)建的模型不兼容。
圖 3.最小 CTC 示例
最后,我回到了 Correct CTC ,但這次離開了強制分離重復單元,并放棄了單元繼續(xù)。名為 Selfless CTC 的拓撲結(jié)構(gòu)旨在彌補 Minimal CTC 的缺點。
圖 1 和圖 4 顯示, Correct CTC 和 Selfles CTC 僅在非 自我循環(huán)中有所不同。這兩種拓撲結(jié)構(gòu)還提供了相同的 MMI 模型精度,如果模型具有較長的上下文窗口,則可以提供更好的精度。然而, Selfless CTC 在解碼時也與 Minimal CTC 兼容。通過 Minimal CTC ,您只需增加 0.2% 的 WER ,即可將圖形大小減少 2 倍。
圖 4.Selfless CTC 示例;基于正確的 CTC
結(jié)論
有幾個技巧可以提高性能:
在解碼圖構(gòu)造和 MMI 訓練中,使用 Compact CTC 代替 Correct CTC 。
為了最大程度地減小解碼圖形的大小,請使用 Selfles CTC 訓練您的模型,并使用 Minimal CTC 解碼。
損失函數(shù)不是一成不變的:嘗試使用現(xiàn)有損失函數(shù)的 WFST 表示法并創(chuàng)建新的表示法。這很有趣!
關于作者
Aleksandr Laptev 是 ITMO 大學的博士生,也是 NVIDIA 的高級研究科學家。他的科學興趣是自動語音識別、語音合成( TTS )和自然語言處理。他撰寫開放獲取科學文章,為開放源代碼軟件做出貢獻,并參加國際語音識別比賽。他目前的研究領域是可微加權(quán)有限狀態(tài)傳感器。
審核編輯:郭婷
-
NVIDIA
+關注
關注
14文章
5309瀏覽量
106412 -
語音識別
+關注
關注
39文章
1782瀏覽量
114243
發(fā)布評論請先 登錄
示波器全內(nèi)存解碼的奧秘
如何在CubeIDE中更改內(nèi)存區(qū)域?
減少電流消耗的技巧和竅門有哪些?
解碼會占用多少內(nèi)存?使用vpp進行圖像處理最大可能會消耗多少內(nèi)存?
LC7461紅外遙控器和解碼程序
什么是音頻的編碼和解碼/HZ(赫茲)
基于STM32的BMP圖片解碼系統(tǒng)

Linux進程的內(nèi)存消耗和泄漏詳解

解決USB音頻DAC和解碼器設計中的計數(shù)錯誤

評論