如何用Wav2Vec 2.0將語音轉換成文本
譯文【51CTO.com快譯】我之前解釋了如何借助谷歌語音識別API,使用Speech Recognition庫將語音轉換成文本。本文介紹如何使用Facebook Wav2Vec 2.0模型將語音轉換成文本。
Facebook最近引入并開源了新框架:Wav2Vec 2.0,該框架用于自我監督學習來自原始音頻數據的表示形式。Facebook研究人員聲稱,該框架使用僅10分鐘長的轉錄語音數據,即可支持自動語音識別模型。
眾所周知,Transformer在自然語言處理中扮演著重要角色。Hugging Face Transformer的最新版本是4.30,它隨帶Wav2Vec 2.0。這是Transformer包含的第一個自動語音識別語音模型。
模型架構不在本文的討論范圍之內。有關Wav2Vec模型架構的詳細信息,請參閱此處。
不妨看看如何使用Hugging Face Transformer將音頻文件轉換成文本,附有幾行簡單的代碼。
安裝Transformer庫
- # Installing Transformer
- !pip install -q transformers
導入必要的庫
- # Import necessary library
- # For managing audio file
- import librosa
- #Importing Pytorch
- import torch
- #Importing Wav2Vec
- from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer
Wav2Vec2是一種語音模型,接受與語音信號的原始波形相對應的浮點數組。 Wav2Vec2模型使用連接時序分類(CTC)加以訓練,因此須使用Wav2Vec2Tokenizer對模型輸出進行解碼(參閱:https://huggingface.co/transformers/model_doc/wav2vec2.html)。
讀取音頻文件
在這個例子中,我使用了電影《颶風營救》中主人公的對話音頻片段“我會尋找你,我會找到你,我會殺了你”。
請注意,Wav2Vec模型已在16 kHz頻率上進行了預訓練,因此我們確保將原始音頻文件也重新采樣為16 kHz采樣率。我使用在線音頻工具轉換將《颶風營救》的音頻片段重新采樣為16kHz。
使用librosa庫加載音頻文件,并提到我的音頻片段大小為16000 Hz。它將音頻片段轉換成數組,并存儲在“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
導入預訓練的Wav2Vec模型
- # Importing Wav2Vec pretrained model
- tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
- model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
下一步是獲取輸入值,將音頻(數組)傳遞到分詞器(tokenizer),我們希望tensor是采用PyTorch格式,而不是Python整數格式。return_tensors =“pt”,這就是PyTorch格式。
- # Taking an input value
- input_values = tokenizer(audio, return_tensors = "pt").input_values
獲取logit值(非規范化值)
- # Storing logits (non-normalized prediction values)
- logits = model(input_values).logits
將logit值傳遞給softmax以獲取預測值。
- # Storing predicted ids
- prediction = torch.argmax(logits, dim = -1)
將音頻轉換成文本
最后一步是將預測傳遞給分詞器解碼以獲得轉錄。
- # 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'
它與我們的音頻片段完全匹配。
我們在本文中看到了如何使用Wav2Vec預訓練模型和Transformers將語音轉換成文本。這對于NLP項目特別是處理音頻轉錄數據非常有幫助。
您可以在我的GitHub代碼庫中找到整段代碼和數據。
原文標題:Speech to Text with Wav2Vec 2.0,作者:Dhilip Subramanian
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】