Views
No views yet
1pip install transformers[sentencepiece]
2pip install fairseq -U
3
4git clone https://github.com/huggingface/transformers.git
5cp transformers/src/transformers/models/wav2vec2/convert_wav2vec2_original_pytorch_checkpoint_to_pytorch.py .
6
7wget https://dl.fbaipublicfiles.com/fairseq/wav2vec/wav2vec_small_960h.pt -O ./wav2vec_small_960h.pt
8mkdir dict
9wget https://dl.fbaipublicfiles.com/fairseq/wav2vec/dict.ltr.txt
10
11mkdir outputs
12python convert_wav2vec2_original_pytorch_checkpoint_to_pytorch.py --pytorch_dump_folder_path ./outputs --checkpoint_path ./wav2vec_small_960h.pt --dict_path ./dict1 from transformers import Wav2Vec2Tokenizer, Wav2Vec2ForCTC
2 from datasets import load_dataset
3 import soundfile as sf
4 import torch
5
6 # load model and tokenizer
7 tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
8 model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
9
10 # define function to read in sound file
11 def map_to_array(batch):
12 speech, _ = sf.read(batch["file"])
13 batch["speech"] = speech
14 return batch
15
16 # load dummy dataset and read soundfiles
17 ds = load_dataset("patrickvonplaten/librispeech_asr_dummy", "clean", split="validation")
18 ds = ds.map(map_to_array)
19
20 # tokenize
21 input_values = tokenizer(ds["speech"][:2], return_tensors="pt", padding="longest").input_values # Batch size 1
22
23 # retrieve logits
24 logits = model(input_values).logits
25
26 # take argmax and decode
27 predicted_ids = torch.argmax(logits, dim=-1)
28 transcription = tokenizer.batch_decode(predicted_ids)1from datasets import load_dataset
2from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer
3import soundfile as sf
4import torch
5from jiwer import wer
6
7
8librispeech_eval = load_dataset("librispeech_asr", "clean", split="test")
9
10model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h").to("cuda")
11tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
12
13def map_to_array(batch):
14 speech, _ = sf.read(batch["file"])
15 batch["speech"] = speech
16 return batch
17
18librispeech_eval = librispeech_eval.map(map_to_array)
19
20def map_to_pred(batch):
21 input_values = tokenizer(batch["speech"], return_tensors="pt", padding="longest").input_values
22 with torch.no_grad():
23 logits = model(input_values.to("cuda")).logits
24
25 predicted_ids = torch.argmax(logits, dim=-1)
26 transcription = tokenizer.batch_decode(predicted_ids)
27 batch["transcription"] = transcription
28 return batch
29
30result = librispeech_eval.map(map_to_pred, batched=True, batch_size=1, remove_columns=["speech"])
31
32print("WER:", wer(result["text"], result["transcription"]))| "clean" | "other" |
|---|---|
| 3.4 | 8.6 |