使用OpenAI的Whisper 模型進(jìn)行語音識別
語音識別是人工智能中的一個領(lǐng)域,它允許計算機理解人類語音并將其轉(zhuǎn)換為文本。該技術(shù)用于 Alexa 和各種聊天機器人應(yīng)用程序等設(shè)備。而我們最常見的就是語音轉(zhuǎn)錄,語音轉(zhuǎn)錄可以語音轉(zhuǎn)換為文字記錄或字幕。
wav2vec2、Conformer 和 Hubert 等最先進(jìn)模型的最新發(fā)展極大地推動了語音識別領(lǐng)域的發(fā)展。這些模型采用無需人工標(biāo)記數(shù)據(jù)即可從原始音頻中學(xué)習(xí)的技術(shù),從而使它們能夠有效地使用未標(biāo)記語音的大型數(shù)據(jù)集。它們還被擴展為使用多達(dá) 1,000,000 小時的訓(xùn)練數(shù)據(jù),遠(yuǎn)遠(yuǎn)超過學(xué)術(shù)監(jiān)督數(shù)據(jù)集中使用的傳統(tǒng) 1,000 小時,但是以監(jiān)督方式跨多個數(shù)據(jù)集和領(lǐng)域預(yù)訓(xùn)練的模型已被發(fā)現(xiàn)表現(xiàn)出更好的魯棒性和對持有數(shù)據(jù)集的泛化,所以執(zhí)行語音識別等任務(wù)仍然需要微調(diào),這限制了它們的全部潛力 。為了解決這個問題OpenAI 開發(fā)了 Whisper,一種利用弱監(jiān)督方法的模型。
本文將解釋用于訓(xùn)練的數(shù)據(jù)集的種類以及模型的訓(xùn)練方法,以及如何使用Whisper
Whisper 模型介紹
使用數(shù)據(jù)集:
Whisper模型是在68萬小時標(biāo)記音頻數(shù)據(jù)的數(shù)據(jù)集上訓(xùn)練的,其中包括11.7萬小時96種不同語言的演講和12.5萬小時從”任意語言“到英語的翻譯數(shù)據(jù)。該模型利用了互聯(lián)網(wǎng)生成的文本,這些文本是由其他自動語音識別系統(tǒng)(ASR)生成而不是人類創(chuàng)建的。該數(shù)據(jù)集還包括一個在VoxLingua107上訓(xùn)練的語言檢測器,這是從YouTube視頻中提取的短語音片段的集合,并根據(jù)視頻標(biāo)題和描述的語言進(jìn)行標(biāo)記,并帶有額外的步驟來去除誤報。
模型:
主要采用的結(jié)構(gòu)是編碼器-解碼器結(jié)構(gòu)。
重采樣:16000 Hz
特征提取方法:使用25毫秒的窗口和10毫秒的步幅計算80通道的log Mel譜圖表示。
特征歸一化:輸入在全局內(nèi)縮放到-1到1之間,并且在預(yù)訓(xùn)練數(shù)據(jù)集上具有近似為零的平均值。
編碼器/解碼器:該模型的編碼器和解碼器采用Transformers。
編碼器的過程:
編碼器首先使用一個包含兩個卷積層(濾波器寬度為3)的詞干處理輸入表示,使用GELU激活函數(shù)。
第二個卷積層的步幅為 2。
然后將正弦位置嵌入添加到詞干的輸出中,然后應(yīng)用編碼器 Transformer 塊。
Transformers使用預(yù)激活殘差塊,編碼器的輸出使用歸一化層進(jìn)行歸一化。
模型框圖:
解碼的過程:
在解碼器中,使用了學(xué)習(xí)位置嵌入和綁定輸入輸出標(biāo)記表示。
編碼器和解碼器具有相同的寬度和數(shù)量的Transformers塊。
訓(xùn)練
為了改進(jìn)模型的縮放屬性,它在不同的輸入大小上進(jìn)行了訓(xùn)練。
通過 FP16、動態(tài)損失縮放,并采用數(shù)據(jù)并行來訓(xùn)練模型。
使用AdamW和梯度范數(shù)裁剪,在對前 2048 次更新進(jìn)行預(yù)熱后,線性學(xué)習(xí)率衰減為零。
使用 256 個批大小,并訓(xùn)練模型進(jìn)行 220次更新,這相當(dāng)于對數(shù)據(jù)集進(jìn)行兩到三次前向傳遞。
由于模型只訓(xùn)練了幾個輪次,過擬合不是一個重要問題,并且沒有使用數(shù)據(jù)增強或正則化技術(shù)。這反而可以依靠大型數(shù)據(jù)集內(nèi)的多樣性來促進(jìn)泛化和魯棒性。
Whisper 在之前使用過的數(shù)據(jù)集上展示了良好的準(zhǔn)確性,并且已經(jīng)針對其他最先進(jìn)的模型進(jìn)行了測試。
優(yōu)點:
- Whisper 已經(jīng)在真實數(shù)據(jù)以及其他模型上使用的數(shù)據(jù)以及弱監(jiān)督下進(jìn)行了訓(xùn)練。
- 模型的準(zhǔn)確性針對人類聽眾進(jìn)行了測試并評估其性能。
- 它能夠檢測清音區(qū)域并應(yīng)用 NLP 技術(shù)在轉(zhuǎn)錄本中正確進(jìn)行標(biāo)點符號的輸入。
- 模型是可擴展的,允許從音頻信號中提取轉(zhuǎn)錄本,而無需將視頻分成塊或批次,從而降低了漏音的風(fēng)險。
- 模型在各種數(shù)據(jù)集上取得了更高的準(zhǔn)確率。
Whisper在不同數(shù)據(jù)集上的對比結(jié)果,相比wav2vec取得了目前最低的詞錯誤率
模型沒有在timit數(shù)據(jù)集上進(jìn)行測試,所以為了檢查它的單詞錯誤率,我們將在這里演示如何使用Whisper來自行驗證timit數(shù)據(jù)集,也就是說使用Whisper來搭建我們自己的語音識別應(yīng)用。
使用Whisper 模型進(jìn)行語音識別
TIMIT 閱讀語音語料庫是語音數(shù)據(jù)的集合,它專門用于聲學(xué)語音研究以及自動語音識別系統(tǒng)的開發(fā)和評估。它包括來自美國英語八種主要方言的 630 位演講者的錄音,每人朗讀十個語音豐富的句子。語料庫包括時間對齊的拼字、語音和單詞轉(zhuǎn)錄以及每個語音的 16 位、16kHz 語音波形文件。該語料庫由麻省理工學(xué)院 (MIT)、SRI International (SRI) 和德州儀器 (TI) 共同開發(fā)。TIMIT 語料庫轉(zhuǎn)錄已經(jīng)過手工驗證,并指定了測試和訓(xùn)練子集,以平衡語音和方言覆蓋范圍。
安裝:
第一條命令將安裝whisper模型所需的所有依賴項。jiwer是用來下載文字錯誤率包的datasets是hugface提供的數(shù)據(jù)集包,可以下載timit數(shù)據(jù)集。
導(dǎo)入庫
加載timit數(shù)據(jù)集
計算不同模型尺寸下的Word錯誤率
考慮到過濾英語數(shù)據(jù)和非英語數(shù)據(jù)的需求,我們這里選擇使用多語言模型,而不是專門為英語設(shè)計的模型。
但是TIMIT數(shù)據(jù)集是純英文的,所以我們要應(yīng)用相同的語言檢測和識別過程。另外就是TIMIT數(shù)據(jù)集已經(jīng)分割好訓(xùn)練和驗證集,我們可以直接使用。
要使用Whisper,我們就要先了解不同模型的的參數(shù),大小和速度。
加載模型
tiny可以替換為上面提到的模型名稱。
定義語言檢測器的函數(shù)
轉(zhuǎn)換語音到文本的函數(shù)
在不同模型大小下運行上面的函數(shù),timit訓(xùn)練和測試得到的單詞錯誤率如下:
從u2b上轉(zhuǎn)錄語音
與其他語音識別模型相比,Whisper 不僅能識別語音,還能解讀一個人語音中的標(biāo)點語調(diào),并插入適當(dāng)?shù)臉?biāo)點符號,我們下面使用u2b的視頻進(jìn)行測試。
這里就需要一個包pytube,它可以輕松的幫助我們下載和提取音頻
獲得wav文件后,我們就可以應(yīng)用上面的函數(shù)從中提取文本。
總結(jié)
本文的代碼在這里
https://drive.google.com/file/d/1FejhGseX_S1Ig_Y5nIPn1OcHN8DLFGIO/view
還有許多操作可以用Whisper完成,你可以根據(jù)本文的代碼自行嘗試。