如何用Wav2Vec 2.0將語(yǔ)音轉(zhuǎn)換成文本
譯文【51CTO.com快譯】我之前解釋了如何借助谷歌語(yǔ)音識(shí)別API,使用Speech Recognition庫(kù)將語(yǔ)音轉(zhuǎn)換成文本。本文介紹如何使用Facebook Wav2Vec 2.0模型將語(yǔ)音轉(zhuǎn)換成文本。
Facebook最近引入并開(kāi)源了新框架:Wav2Vec 2.0,該框架用于自我監(jiān)督學(xué)習(xí)來(lái)自原始音頻數(shù)據(jù)的表示形式。Facebook研究人員聲稱,該框架使用僅10分鐘長(zhǎng)的轉(zhuǎn)錄語(yǔ)音數(shù)據(jù),即可支持自動(dòng)語(yǔ)音識(shí)別模型。
眾所周知,Transformer在自然語(yǔ)言處理中扮演著重要角色。Hugging Face Transformer的最新版本是4.30,它隨帶Wav2Vec 2.0。這是Transformer包含的第一個(gè)自動(dòng)語(yǔ)音識(shí)別語(yǔ)音模型。
模型架構(gòu)不在本文的討論范圍之內(nèi)。有關(guān)Wav2Vec模型架構(gòu)的詳細(xì)信息,請(qǐng)參閱此處。
不妨看看如何使用Hugging Face Transformer將音頻文件轉(zhuǎn)換成文本,附有幾行簡(jiǎn)單的代碼。
安裝Transformer庫(kù)
- # Installing Transformer
- !pip install -q transformers
導(dǎo)入必要的庫(kù)
- # Import necessary library
- # For managing audio file
- import librosa
- #Importing Pytorch
- import torch
- #Importing Wav2Vec
- from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer
Wav2Vec2是一種語(yǔ)音模型,接受與語(yǔ)音信號(hào)的原始波形相對(duì)應(yīng)的浮點(diǎn)數(shù)組。 Wav2Vec2模型使用連接時(shí)序分類(lèi)(CTC)加以訓(xùn)練,因此須使用Wav2Vec2Tokenizer對(duì)模型輸出進(jìn)行解碼(參閱:https://huggingface.co/transformers/model_doc/wav2vec2.html)。
讀取音頻文件
在這個(gè)例子中,我使用了電影《颶風(fēng)營(yíng)救》中主人公的對(duì)話音頻片段“我會(huì)尋找你,我會(huì)找到你,我會(huì)殺了你”。
請(qǐng)注意,Wav2Vec模型已在16 kHz頻率上進(jìn)行了預(yù)訓(xùn)練,因此我們確保將原始音頻文件也重新采樣為16 kHz采樣率。我使用在線音頻工具轉(zhuǎn)換將《颶風(fēng)營(yíng)救》的音頻片段重新采樣為16kHz。
使用librosa庫(kù)加載音頻文件,并提到我的音頻片段大小為16000 Hz。它將音頻片段轉(zhuǎn)換成數(shù)組,并存儲(chǔ)在“audio”變量中。
- # Loading the audio file
- audio, rate = librosa.load("taken_clip.wav", sr = 16000)
- # printing audio
- print(audio)
- array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
- # printing rate
- print(rate)
- 16000
導(dǎo)入預(yù)訓(xùn)練的Wav2Vec模型
- # Importing Wav2Vec pretrained model
- tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
- model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
下一步是獲取輸入值,將音頻(數(shù)組)傳遞到分詞器(tokenizer),我們希望tensor是采用PyTorch格式,而不是Python整數(shù)格式。return_tensors =“pt”,這就是PyTorch格式。
- # Taking an input value
- input_values = tokenizer(audio, return_tensors = "pt").input_values
獲取logit值(非規(guī)范化值)
- # Storing logits (non-normalized prediction values)
- logits = model(input_values).logits
將logit值傳遞給softmax以獲取預(yù)測(cè)值。
- # Storing predicted ids
- prediction = torch.argmax(logits, dim = -1)
將音頻轉(zhuǎn)換成文本
最后一步是將預(yù)測(cè)傳遞給分詞器解碼以獲得轉(zhuǎn)錄。
- # Passing the prediction to the tokenzer decode to get the transcription
- transcription = tokenizer.batch_decode(prediction)[0]
- # Printing the transcription
- print(transcription)
- 'I WILL LOOK FOR YOU I WILL FIND YOU AND I WILL KILL YOU'
它與我們的音頻片段完全匹配。
我們?cè)诒疚闹锌吹搅巳绾问褂肳av2Vec預(yù)訓(xùn)練模型和Transformers將語(yǔ)音轉(zhuǎn)換成文本。這對(duì)于NLP項(xiàng)目特別是處理音頻轉(zhuǎn)錄數(shù)據(jù)非常有幫助。
您可以在我的GitHub代碼庫(kù)中找到整段代碼和數(shù)據(jù)。
原文標(biāo)題:Speech to Text with Wav2Vec 2.0,作者:Dhilip Subramanian
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】