

TITLE
Wav2Vec2

COMMENTS
11

REACTIONS
+1: 14
-1: 0
laugh: 0
hooray: 0
heart: 0
rocket: 5
eyes: 0

BODY
# What does this PR do?

Adds Wav2Vec2 from https://github.com/pytorch/fairseq/blob/master/examples/wav2vec/README.md

This PR adds the wav2vec2 Acoustic model to Transformers. The model is different from "conventional" transformer
models since it classifies a raw waveform input (float array) into logits. Therefore the `Wav2Vec2Tokenizer` behaves quite differently from usual tokenizers in that it only pads an input instead of encoding it to token ids.

The fully functional model should be added in three steps:

1) Add the Acoustic model ready to be used for inference (This PR)
2) Add fine-tuning + pertaining functionality to the model (Next PR)
3) Add an example script showing how Wav2Vec2 can be used with a language model
4) Add an Encoder/Decoder version of Wav2Vec2.

# Usage

One can play around with a quick demo here: https://colab.research.google.com/drive/1xaVKQ739-ue0v8IuMZoMzOFc4-NlGQyd?usp=sharing and some usage examples as described on the model cards:
https://huggingface.co/models?filter=wav2vec2

# Review
In this PR, no training functionality is added to the model. Because this is quite complex for Wav2Vec2 this will be done in a follow up PR. 
It would be great, if we can however already merge this first part which allows to use Wav2Vec2 for inference.
The tokenizer is quite different, so it would be great if @thomwolf @n1t0 can also take a look here.
Since the model expects the raw waveform signal as an input, the name `input_ids` is changed to `input_values` standing for "a tensor of float values" - would be great if you can check this @LysandreJik @sgugger @thomwolf. 

# Done:

- [x] load pretrained weight into model
- [x] make sure forward pass yields equal outputs
- [x] successful transcription
- [x] add tokenizer
- [x] Think about how to add the two different architectures `Wav2Vec 2.0 Large (LV-60)`/`Wav2Vec 2.0 Large (LV-60) + Self Training` is different from `Wav2Vec 2.0 Large`/`Wav2Vec 2.0 Base` (layer_norm is switched and no group norm is used)
- [x] add model tests
- [x] add tokenizer tests
- [x] add docstring
- [x] clean config

# Future TODO:
- [ ] Add PreTraining & Fine-Tuning to model
- [ ] Add Encoder Decoder model / CTC decoding

