0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

更改CTC規(guī)則以減少訓(xùn)練和解碼中的內(nèi)存消耗

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:Aleksandr Laptev ? 2022-10-11 11:19 ? 次閱讀

訓(xùn)練自動(dòng)語音識別( ASR )模型的損失函數(shù)并不是一成不變的。舊的損失函數(shù)規(guī)則不一定是最優(yōu)的??紤]一下 connectionist temporal classification ( CTC ),看看改變它的一些規(guī)則如何能夠減少 GPU 內(nèi)存,這是訓(xùn)練和推斷基于 CTC 的模型所需的內(nèi)存,等等。

聯(lián)結(jié)主義時(shí)間分類綜述

若你們要訓(xùn)練一個(gè) ASR 模型,無論是卷積神經(jīng)網(wǎng)絡(luò)還是遞歸神經(jīng)網(wǎng)絡(luò)、transformer 還是組合,你們很可能是用 CTC 損失訓(xùn)練它。

CTC 簡單方便,因?yàn)樗恍枰繋P(guān)于“什么聲音何時(shí)發(fā)音”(所謂的音頻文本時(shí)間對齊)的信息。在大多數(shù)情況下,這種知識是不可用的,就像在一個(gè)典型的 ASR 音頻數(shù)據(jù)集中,關(guān)聯(lián)文本沒有時(shí)間標(biāo)記。

真正的時(shí)間校準(zhǔn)并不總是微不足道的。假設(shè)大部分錄音沒有講話,結(jié)尾只有一個(gè)簡短短語。 CTC 損失并不能告訴模型何時(shí)準(zhǔn)確地發(fā)出預(yù)測。相反,它允許每一種可能的對齊,并且只調(diào)整這些對齊的形式。

下面是 CTC 如何管理所有可能的方式來將音頻與文本對齊。

首先,對目標(biāo)文本進(jìn)行標(biāo)記化,即將單詞切成字母或單詞片段。結(jié)果單元的數(shù)量(無論它們是什么)應(yīng)小于音頻“時(shí)間段”的數(shù)量:長度為 0.01 到 0.08 秒的音頻段。

如果時(shí)間段少于單位,則算法失敗。在這種情況下,你應(yīng)該縮短時(shí)間。否則,只有 RNN 傳感器可以挽救您。如果時(shí)間框架與單位一樣多,那么只能有一個(gè)對齊(百萬分之一的情況)。

大多數(shù)時(shí)候,時(shí)間段比單位要長得多,因此一些幀沒有單位。對于這種空幀, CTC 有一個(gè)特殊的 單元。本單元告訴您,在這個(gè)特定的框架下,模型沒有任何內(nèi)容可以提供給您。這可能是因?yàn)闆]有演講,或者模型太懶,無法預(yù)測有意義的東西。 CTC 最重要的規(guī)則 提供了如果模型不想做什么也不能預(yù)測的能力。

其他規(guī)則與單元延續(xù)有關(guān)。假設(shè)您的單元是一個(gè)持續(xù)時(shí)間超過一幀的元音。模型應(yīng)在兩幀中的哪一幀上輸出單元? CTC 允許在多個(gè)連續(xù)幀上進(jìn)行相同的單位發(fā)射。但是,應(yīng)該將相同的連續(xù)單元合并為一個(gè)單元,以將識別結(jié)果轉(zhuǎn)換為一系列類似文本的單元。

現(xiàn)在,如果標(biāo)記化文本本身包含相同的重復(fù)單位,如“ ll ”或“ pp ”,該怎么辦?如果不進(jìn)行處理,這些單元將合并為一個(gè)單元,即使它們不應(yīng)該合并。對于這種特殊情況, CTC 有一條規(guī)則,如果目標(biāo)文本有重復(fù)的單位,那么在推理過程中這些單位必須用 分隔。

綜上所述,在幾乎每一幀中,模型都可以從上一幀 發(fā)射相同的單元,或者如果下一幀與上一幀不同,則可以發(fā)射下一個(gè)單元。這些規(guī)則比 規(guī)則更為復(fù)雜,對于反恐委員會(huì)來說,它們并不完全必要。

反恐委員會(huì)的執(zhí)行

以下是如何表示 CTC 損失。與機(jī)器學(xué)習(xí)中的大多數(shù)損失函數(shù)一樣,它通常表示為一個(gè)動(dòng)態(tài)算法,將這些規(guī)則應(yīng)用于訓(xùn)練語句或模型的 softmax 輸出。

在訓(xùn)練中,損失值和梯度由適用于 CTC 規(guī)則的 Baum–Welch algorithm 根據(jù)所有可能路線的條件概率計(jì)算得出。 CTC 實(shí)現(xiàn)通常有數(shù)百到數(shù)千行代碼,很難修改。

幸運(yùn)的是,還有另一種執(zhí)行反恐委員會(huì)的方法。除了其他應(yīng)用領(lǐng)域外,加權(quán)有限狀態(tài)傳感器( WFST )方法允許模型將動(dòng)態(tài)算法表示為一組圖形和相關(guān)圖形操作。這種方法使您能夠通過將 CTC 規(guī)則應(yīng)用于特定的音頻和文本,并通過計(jì)算損失和梯度來解耦 CTC 規(guī)則。

CTC WFST 應(yīng)用程序

有了 WFST ,您可以輕松地采用 CTC 規(guī)則,并使用不同的標(biāo)準(zhǔn),如最大互信息( MMI )。這些模型通常具有比 CTC 模型更低的字錯(cuò)誤率( WER )。 MMI 將先前的語言信息納入培訓(xùn)過程。

與 CTC 相比, MMI 不僅最大化了最可行路徑的概率,而且最小化了其他路徑的概率。為此, MMI 有一個(gè)所謂的分母圖,它可以在訓(xùn)練期間占用大量 GPU 內(nèi)存。幸運(yùn)的是,可以修改一些 CTC 規(guī)則以減少分母內(nèi)存消耗,而不會(huì)影響語音識別的準(zhǔn)確性。

此外, CTC 規(guī)則的 WFST 表示,或所謂的 topology ,可用于對 CTC 模型進(jìn)行 WFST 解碼。為此,您可以將 N -gram 語言模型轉(zhuǎn)換為 WFST 圖,并將其與拓?fù)鋱D組合在一起。生成的解碼圖可以傳遞給,例如, Riva CUDA WFST Decoder 。

解碼圖可能很大,以至于無法放入 GPU 內(nèi)存。但通過一些 CTC 拓?fù)湫薷?,您可以減少 CTC 的解碼圖形大小。

CTC 拓?fù)?/p>

圖 1 顯示了 CTC 拓?fù)洌?Correct CTC 。這是一個(gè)帶自循環(huán)的有向完整圖,因此對于 N 單元(包括空白),有 N 狀態(tài)和弧的平方數(shù)。

正確的反恐委員會(huì)是最常用的反恐委員會(huì)代表??纯催@個(gè)拓?fù)洚a(chǎn)生的典型大小。對于 LibriSpeech 4 字語言模型和 256 個(gè)模型詞匯單元,解碼圖大小為~ 16Gb 。對于型號詞匯表大小為 2048 的 32Gb GPU ,僅當(dāng)批次大小為 1 時(shí),才可以進(jìn)行冷啟動(dòng) MMI 培訓(xùn)。

pYYBAGNE4KeAIR2SAABkOZo58fQ220.png

圖 1.三單元詞匯表的正確 CTC 示例:《 blank 》、 a 和 B

通過刪除一些 CTC 規(guī)則來減少 Correct CTC 引起的內(nèi)存消耗。首先,使用 刪除重復(fù)單元的強(qiáng)制分隔。如果沒有這個(gè)規(guī)則,您最終會(huì)得到一個(gè)名為 CompactCTC 的拓?fù)洌▓D 2 )。它有 3 個(gè) N – 2 個(gè)弧用于 N 單元。

poYBAGNE4KiAVCoDAABMwGpmxHU560.png

圖 2.緊湊型 CTC 示例

盡管有純

latex.php?latex=%5Cepsilon&bg=ffffff&fg=000&s=0&c=20201002

(虛擬)弧,但這種拓?fù)浣Y(jié)構(gòu)可用于訓(xùn)練和解碼,不會(huì)對識別質(zhì)量產(chǎn)生負(fù)面影響。如果您想知道這是如何工作的,請參閱 CTC Variations Through New WFST Topologies 或 執(zhí)行 NVIDIA NeMo 。

使用 Compact CTC 的解碼圖形大小比使用 Correct CTC 的小四分之一。它還需要 2x 更少的 GPU 內(nèi)存用于 MMI 訓(xùn)練。

現(xiàn)在在多個(gè)連續(xù)幀上丟棄相同的單位發(fā)射,只保留 規(guī)則。這樣,您得到的拓?fù)渲挥幸粋€(gè)狀態(tài)和 N 單元的 N 弧。

這是可能的最小 CTC 拓?fù)洌晕覀兎Q之為最小 CTC (圖 3 )。它需要更少的 GPU 內(nèi)存用于 MMI 訓(xùn)練(與 Correct CTC 相比減少了 4 倍),但與基線相比,使用 Minimal CTC 拓?fù)涞?MMI 訓(xùn)練模型的精度會(huì)降低。

最小的拓?fù)溥€產(chǎn)生最小的解碼 WFST ,其大小為基線圖的一半。用 Minimal CTC 編譯的解碼圖與用 Correct CTC 或 Compact CTC 構(gòu)建的模型不兼容。

pYYBAGNE4KiARRqzAAAyO9aVCPM137.png

圖 3.最小 CTC 示例

最后,我回到了 Correct CTC ,但這次離開了強(qiáng)制分離重復(fù)單元,并放棄了單元繼續(xù)。名為 Selfless CTC 的拓?fù)浣Y(jié)構(gòu)旨在彌補(bǔ) Minimal CTC 的缺點(diǎn)。

圖 1 和圖 4 顯示, Correct CTC 和 Selfles CTC 僅在非 自我循環(huán)中有所不同。這兩種拓?fù)浣Y(jié)構(gòu)還提供了相同的 MMI 模型精度,如果模型具有較長的上下文窗口,則可以提供更好的精度。然而, Selfless CTC 在解碼時(shí)也與 Minimal CTC 兼容。通過 Minimal CTC ,您只需增加 0.2% 的 WER ,即可將圖形大小減少 2 倍。

poYBAGNE4KmAB21gAAEQ9NSYTg8888.png

圖 4.Selfless CTC 示例;基于正確的 CTC

結(jié)論

有幾個(gè)技巧可以提高性能:

在解碼圖構(gòu)造和 MMI 訓(xùn)練中,使用 Compact CTC 代替 Correct CTC 。

為了最大程度地減小解碼圖形的大小,請使用 Selfles CTC 訓(xùn)練您的模型,并使用 Minimal CTC 解碼。

損失函數(shù)不是一成不變的:嘗試使用現(xiàn)有損失函數(shù)的 WFST 表示法并創(chuàng)建新的表示法。這很有趣!

關(guān)于作者

Aleksandr Laptev 是 ITMO 大學(xué)的博士生,也是 NVIDIA 的高級研究科學(xué)家。他的科學(xué)興趣是自動(dòng)語音識別、語音合成( TTS )和自然語言處理。他撰寫開放獲取科學(xué)文章,為開放源代碼軟件做出貢獻(xiàn),并參加國際語音識別比賽。他目前的研究領(lǐng)域是可微加權(quán)有限狀態(tài)傳感器。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    4814

    瀏覽量

    102632
  • 語音識別
    +關(guān)注

    關(guān)注

    38

    文章

    1703

    瀏覽量

    112412
收藏 人收藏

    評論

    相關(guān)推薦

    示波器全內(nèi)存解碼的奧秘

    應(yīng)該減少時(shí)基),就能回歸最佳解碼狀態(tài)。這也是第二點(diǎn)描述的全內(nèi)存解碼約束?! ∥覀兪窃趺醋龅郊缺е~又把熊掌吃到的?  保持
    發(fā)表于 11-27 22:31

    PCB規(guī)則以及異形板拼板教材

    PCB規(guī)則以及異形板拼板教材
    發(fā)表于 07-25 10:06

    語音編碼和解碼免費(fèi)Speex音頻編解碼器的微控制器

    良好的聲音質(zhì)量,語音編碼和解碼免費(fèi)Speex音頻編解碼器的微控制器
    發(fā)表于 05-29 11:52

    如何去減少語音解碼設(shè)計(jì)的動(dòng)態(tài)功耗?

    如何去減少語音解碼設(shè)計(jì)的動(dòng)態(tài)功耗?
    發(fā)表于 06-04 06:27

    如何在CubeIDE更改內(nèi)存區(qū)域?

    如果我需要更改項(xiàng)目中的內(nèi)存區(qū)域(例如,對于只讀內(nèi)存,我需要 0x8080000 開始,0x40000 大?。?,我該如何在 CubeIDE 執(zhí)行?(補(bǔ)充)我找到了構(gòu)建分析器,但字段不可
    發(fā)表于 01-16 07:09

    減少電流消耗的技巧和竅門有哪些?

    據(jù)我所知,CPU 在使用 I2C 時(shí)在空閑和活動(dòng)之間切換(如果我錯(cuò)了請糾正我),這反過來會(huì)消耗相當(dāng)大的功率(大約為 20-30 mA,具體取決于模塊)。就我而言,在 I2C 通信期間實(shí)現(xiàn)低電流消耗的唯一方法是使用 ULP。除了使用 ULP 之外,還有其他
    發(fā)表于 04-12 06:34

    解碼會(huì)占用多少內(nèi)存?使用vpp進(jìn)行圖像處理最大可能會(huì)消耗多少內(nèi)存?

    解碼會(huì)占用多少內(nèi)存?使用vpp進(jìn)行圖像處理,最大可能會(huì)消耗多少內(nèi)存?
    發(fā)表于 09-19 07:24

    LC7461紅外遙控器和解碼程序

    LC7461紅外遙控器和解碼程序 //遙控解碼子程序,LC7461,用戶碼為11C//external interrupt0
    發(fā)表于 11-28 10:59 ?1822次閱讀

    什么是音頻的編碼和解碼/HZ(赫茲)

    什么是音頻的編碼和解碼/HZ(赫茲)    編碼和解碼:在數(shù)字音頻技術(shù),用數(shù)字大小來代替聲音強(qiáng)弱高低的模擬電壓,并對音頻
    發(fā)表于 02-05 11:28 ?1569次閱讀

    圖像壓縮編碼和解碼原理

    圖像壓縮編碼和解碼原理 本節(jié)介紹圖像壓縮
    發(fā)表于 09-27 08:45 ?4313次閱讀
    圖像壓縮編碼<b class='flag-5'>和解碼</b>原理

    音頻編碼和解碼原理

    音頻編碼和解碼原理 每張CD光盤重放雙聲道立體聲信號可達(dá)74分鐘。VCD視盤機(jī)要
    發(fā)表于 09-27 08:52 ?6752次閱讀
    音頻編碼<b class='flag-5'>和解碼</b>原理

    基于STM32的BMP圖片解碼系統(tǒng)

    設(shè)計(jì)了一種基于 STM32 處理器的便攜式 BMP 圖片解碼系統(tǒng)。在設(shè)計(jì)過程采用了從SD卡讀取編碼的同時(shí)同步解碼的方法,有效地減少了系統(tǒng)
    發(fā)表于 05-30 16:06 ?263次下載
    基于STM32的BMP圖片<b class='flag-5'>解碼</b>系統(tǒng)

    如何改進(jìn)光耦電路 減少電流消耗

    本設(shè)計(jì)方案闡述了一個(gè)簡單改進(jìn)光耦電路的方法。減少電流消耗
    發(fā)表于 03-15 11:23 ?3325次閱讀
    如何改進(jìn)光耦電路 <b class='flag-5'>減少</b>電流<b class='flag-5'>消耗</b>

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

    當(dāng)我們評估進(jìn)程消耗多少內(nèi)存時(shí),就是指在用戶空間消耗內(nèi)存,即虛擬地址在0~3G的部分,對應(yīng)的物理地址內(nèi)存。內(nèi)核空間的
    的頭像 發(fā)表于 05-14 10:07 ?2633次閱讀
    Linux進(jìn)程的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>消耗</b>和泄漏詳解

    解決USB音頻DAC和解碼器設(shè)計(jì)的計(jì)數(shù)錯(cuò)誤

    電子發(fā)燒友網(wǎng)站提供《解決USB音頻DAC和解碼器設(shè)計(jì)的計(jì)數(shù)錯(cuò)誤.pdf》資料免費(fèi)下載
    發(fā)表于 10-21 10:03 ?0次下載
    解決USB音頻DAC<b class='flag-5'>和解碼</b>器設(shè)計(jì)<b class='flag-5'>中</b>的計(jì)數(shù)錯(cuò)誤