OpenAI的Whisper模型進(jìn)行語音識別使用詳解
正文
語音識別是人工智能中的一個領(lǐng)域,它允許計算機(jī)理解人類語音并將其轉(zhuǎn)換為文本。該技術(shù)用于 Alexa 和各種聊天機(jī)器人應(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ù)集。它們還被擴(kuò)展為使用多達(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ù)增強(qiáng)或正則化技術(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)點符號的輸入。
- 模型是可擴(kuò)展的,允許從音頻信號中提取轉(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)練子集,以平衡語音和方言覆蓋范圍。
安裝:
!pip install git+https://github.com/openai/whisper.git !pip install jiwer !pip install datasets==1.18.3
第一條命令將安裝whisper模型所需的所有依賴項。jiwer是用來下載文字錯誤率包的datasets是hugface提供的數(shù)據(jù)集包,可以下載timit數(shù)據(jù)集。
導(dǎo)入庫
importwhisper frompytubeimportYouTube fromglobimportglob importos importpandasaspd fromtqdm.notebookimporttqdm
加載timit數(shù)據(jù)集
fromdatasetsimportload_dataset, load_metric timit=load_dataset("timit_asr")
計算不同模型尺寸下的Word錯誤率
考慮到過濾英語數(shù)據(jù)和非英語數(shù)據(jù)的需求,我們這里選擇使用多語言模型,而不是專門為英語設(shè)計的模型。
但是TIMIT數(shù)據(jù)集是純英文的,所以我們要應(yīng)用相同的語言檢測和識別過程。另外就是TIMIT數(shù)據(jù)集已經(jīng)分割好訓(xùn)練和驗證集,我們可以直接使用。
要使用Whisper,我們就要先了解不同模型的的參數(shù),大小和速度。
加載模型
model=whisper.load_model('tiny')
tiny可以替換為上面提到的模型名稱。
定義語言檢測器的函數(shù)
deflan_detector(audio_file): print('reading the audio file') audio=whisper.load_audio(audio_file) audio=whisper.pad_or_trim(audio) mel=whisper.log_mel_spectrogram(audio).to(model.device) _, probs=model.detect_language(mel) ifmax(probs, key=probs.get) =='en': returnTrue returnFalse
轉(zhuǎn)換語音到文本的函數(shù)
defspeech2text(audio_file): text=model.transcribe(audio_file) returntext["text"]
在不同模型大小下運(yùn)行上面的函數(shù),timit訓(xùn)練和測試得到的單詞錯誤率如下:
從u2b上轉(zhuǎn)錄語音
與其他語音識別模型相比,Whisper 不僅能識別語音,還能解讀一個人語音中的標(biāo)點語調(diào),并插入適當(dāng)?shù)臉?biāo)點符號,我們下面使用u2b的視頻進(jìn)行測試。
這里就需要一個包pytube,它可以輕松的幫助我們下載和提取音頻
defyoutube_audio(link): youtube_1=YouTube(link) videos=youtube_1.streams.filter(only_audio=True) name=str(link.split('=')[-1]) out_file=videos[0].download(name) link=name.split('=')[-1] new_filename=link+".wav" print(new_filename) os.rename(out_file, new_filename) print(name) returnnew_filename,link
獲得wav文件后,我們就可以應(yīng)用上面的函數(shù)從中提取文本。
總結(jié)
還有許多操作可以用Whisper完成,你可以根據(jù)本文的代碼自行嘗試。
以上就是OpenAI的Whisper模型進(jìn)行語音識別使用詳解的詳細(xì)內(nèi)容,更多關(guān)于OpenAI Whisper語音識別的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Opencv+Python實現(xiàn)圖像運(yùn)動模糊和高斯模糊的示例
今天小編就為大家分享一篇關(guān)于Opencv+Python實現(xiàn)圖像運(yùn)動模糊和高斯模糊的示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04PyInstaller將Python腳本打包為.exe可執(zhí)行文件的步驟詳解
Python是一門強(qiáng)大而靈活的編程語言,為了方便共享和部署,我們可以將 Python 腳本打包為可執(zhí)行文件(.exe),這樣其他用戶就無需安裝 Python環(huán)境,直接運(yùn)行可執(zhí)行文件即可,本文將介紹如何使用PyInstaller 工具實現(xiàn)這一目標(biāo),需要的朋友可以參考下2023-12-12python使用minimize()?函數(shù)替代matlab的fmincon函數(shù)
這篇文章主要介紹了python使用minimize()函數(shù)替代matlab的fmincon函數(shù),在matlab中,fmincon函數(shù)可以用于求解帶約束的非線性多變量函數(shù)的最小值,即可以用來求解非線性規(guī)劃問題2022-09-09python3.7 利用函數(shù)os pandas利用excel對文件名進(jìn)行歸類
這篇文章主要介紹了python3.7 利用函數(shù)os pandas利用excel對文件名進(jìn)行歸類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Python Zipfile模塊進(jìn)行ZIP文件的創(chuàng)建解壓信息獲取和加密等操作
這篇文章主要為大家介紹了Python Zipfile模塊進(jìn)行ZIP文件的創(chuàng)建解壓信息獲取和加密等操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01如何解決requests,已經(jīng)安裝卻無法import問題
這篇文章主要介紹了如何解決requests,已經(jīng)安裝卻無法import問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06使用python Fabric動態(tài)修改遠(yuǎn)程機(jī)器hosts的方法
今天小編就為大家分享一篇使用python Fabric動態(tài)修改遠(yuǎn)程機(jī)器hosts的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10