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