# Wav2Vec2 Acoustic Model fine-tuned on LibriSpeech Original model can be found under https://github.com/pytorch/fairseq/tree/master/examples/wav2vec#wav2vec-20. Paper: https://arxiv.org/abs/2006.11477 ## Usage Make sure you are working on [this branch](https://github.com/huggingface/transformers/tree/add_wav2vec) (which will be merged to master soon hopefully) of transformers: ```bash $ git checkout add_wav2vec ``` In the following, we'll show a simple example of how the model can be used for automatic speech recognition. First, let's load the model ```python from transformers import AutoModelForMaskedLM model = AutoModelForMaskedLM.from_pretrained("patrickvonplaten/wav2vec2-base-960h") ``` Next, let's load a dummy librispeech dataset ```python from datasets import load_dataset import soundfile as sf libri_speech_dummy = load_dataset("patrickvonplaten/librispeech_asr_dummy", "clean", split="validation") def map_to_array(batch): speech_array, _ = sf.read(batch["file"]) batch["speech"] = speech_array return batch libri_speech_dummy = libri_speech_dummy.map(map_to_array, remove_columns=["file"]) # check out dataset print(libri_speech_dummy) input_speech_16kHz = libri_speech_dummy[2]["speech"] expected_trans = libri_speech_dummy[2]["text"] ``` Cool, now we can run an inference pass to retrieve the logits: ```python import torch logits = model(torch.tensor(input_speech_16kHz)[None, :]) # use highest probability logits pred_ids = torch.argmax(logits[0], axis=-1) ``` Finally, let's decode the prediction. Let's create a simple CTC-Decoder: ```python import numpy as np from itertools import groupby class Decoder: def __init__(self, json_dict): self.dict = json_dict self.look_up = np.asarray(list(self.dict.keys())) def decode(self, ids): converted_tokens = self.look_up[ids] fused_tokens = [tok[0] for tok in groupby(converted_tokens)] output = ' '.join(''.join(''.join(fused_tokens).split("")).split("|")) return output ``` and instantiate with the corresponding dict. ```python # hard-coded json dict taken from: https://dl.fbaipublicfiles.com/fairseq/wav2vec/dict.ltr.txt json_dict = {"": 0, "": 1, "": 2, "": 3, "|": 4, "E": 5, "T": 6, "A": 7, "O": 8, "N": 9, "I": 10, "H": 11, "S": 12, "R": 13, "D": 14, "L": 15, "U": 16, "M": 17, "W": 18, "C": 19, "F": 20, "G": 21, "Y": 22, "P": 23, "B": 24, "V": 25, "K": 26, "'": 27, "X": 28, "J": 29, "Q": 30, "Z": 31} decoder = Decoder(json_dict=json_dict) ``` and decode the result ```python pred_trans = decoder.decode(pred_ids) print("Prediction:\n", pred_trans) print("\n" + 50 * "=" + "\n") print("Correct result:\n", expected_trans) ``` 🎉