speech-test commited on
Commit
10e57bf
1 Parent(s): 8cf46f2

Update info

Browse files
Files changed (1) hide show
  1. README.md +50 -24
README.md CHANGED
@@ -6,64 +6,90 @@ tags:
6
  - speech
7
  - audio
8
  - hubert
9
- - s3prl
10
  - audio-classification
11
  license: apache-2.0
12
  ---
13
 
14
  # Hubert-Base for Keyword Spotting
15
 
16
- [S3PRL speech toolkit](https://github.com/s3prl/s3prl)
17
 
18
- [Facebook's Hubert](https://ai.facebook.com/blog/hubert-self-supervised-representation-learning-for-speech-recognition-generation-and-compression)
19
 
20
- The base model is pretrained on 16kHz sampled speech audio. When using the model make sure that your speech input is also sampled at 16Khz.
21
- The classification head is trained using the Keyword Spotting part of the SUPERB dataset.
22
 
23
- [Paper](https://arxiv.org/abs/2105.01051)
24
 
25
- Authors: Shu-wen Yang, Po-Han Chi, Yung-Sung Chuang, Cheng-I Jeff Lai, Kushal Lakhotia, Yist Y. Lin, Andy T. Liu, Jiatong Shi, Xuankai Chang, Guan-Ting Lin, Tzu-Hsien Huang, Wei-Cheng Tseng, Ko-tik Lee, Da-Rong Liu, Zili Huang, Shuyan Dong, Shang-Wen Li, Shinji Watanabe, Abdelrahman Mohamed, Hung-yi Lee
26
 
27
- **Abstract**
28
- Self-supervised learning (SSL) has proven vital for advancing research in natural language processing (NLP) and computer vision (CV). The paradigm pretrains a shared model on large volumes of unlabeled data and achieves state-of-the-art (SOTA) for various tasks with minimal adaptation. However, the speech processing community lacks a similar setup to systematically explore the paradigm. To bridge this gap, we introduce Speech processing Universal PERformance Benchmark (SUPERB). SUPERB is a leaderboard to benchmark the performance of a shared model across a wide range of speech processing tasks with minimal architecture changes and labeled data. Among multiple usages of the shared model, we especially focus on extracting the representation learned from SSL due to its preferable re-usability. We present a simple framework to solve SUPERB tasks by learning task-specialized lightweight prediction heads on top of the frozen shared model. Our results demonstrate that the framework is promising as SSL representations show competitive generalizability and accessibility across SUPERB tasks. We release SUPERB as a challenge with a leaderboard and a benchmark toolkit to fuel the research in representation learning and general speech processing.
 
 
 
 
29
 
30
- The original model can be found under https://github.com/s3prl/s3prl/tree/master/s3prl/downstream/speech_commands.
 
31
 
32
- The base model is [hubert-base-ls960](https://huggingface.co/facebook/hubert-base-ls960)
33
 
34
- # Usage examples
35
 
36
  You can use the model via the Audio Classification pipeline:
37
  ```python
38
- import numpy as np
39
  from datasets import load_dataset
40
- from transformers import pipeline, PreTrainedTokenizer
41
 
42
- superb_ks = load_dataset("anton-l/superb_dummy", "ks", split="test")
43
- model = "superb/hubert-base-superb-ks"
44
- tokenizer = PreTrainedTokenizer() # a dummy tokenizer, since the classifier doesn't need a real one
45
- classifier = pipeline("audio-classification", model=model, feature_extractor=model, tokenizer=tokenizer)
46
 
47
- audio = np.array(superb_ks[0]["speech"])
48
- labels = classifier(audio, top_k=5)
49
  ```
50
 
51
  Or use the model directly:
52
  ```python
53
  import torch
54
- import numpy as np
55
  from datasets import load_dataset
56
  from transformers import HubertForSequenceClassification, Wav2Vec2FeatureExtractor
 
 
 
 
 
 
 
 
 
 
 
57
 
58
- superb_ks = load_dataset("anton-l/superb_dummy", "ks", split="test")
59
  model = HubertForSequenceClassification.from_pretrained("superb/hubert-base-superb-ks")
60
  feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("superb/hubert-base-superb-ks")
61
 
62
- audio = np.array(superb_ks[0]["speech"])
63
  # compute attention masks and normalize the waveform if needed
64
- inputs = feature_extractor(audio, sampling_rate=16_000, return_tensors="pt")
65
 
66
  logits = model(**inputs).logits
67
  predicted_ids = torch.argmax(logits, dim=-1)
68
  labels = [model.config.id2label[_id] for _id in predicted_ids.tolist()]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  ```
 
6
  - speech
7
  - audio
8
  - hubert
 
9
  - audio-classification
10
  license: apache-2.0
11
  ---
12
 
13
  # Hubert-Base for Keyword Spotting
14
 
15
+ ## Model description
16
 
17
+ This is a ported version of [S3PRL's Hubert for the SUPERB Keyword Spotting task](https://github.com/s3prl/s3prl/tree/master/s3prl/downstream/speech_commands).
18
 
19
+ The base model is [hubert-base-ls960](https://huggingface.co/facebook/hubert-base-ls960), which is pretrained on 16kHz
20
+ sampled speech audio. When using the model make sure that your speech input is also sampled at 16Khz.
21
 
22
+ For more information refer to [SUPERB: Speech processing Universal PERformance Benchmark](https://arxiv.org/abs/2105.01051)
23
 
24
+ ## Task and dataset description
25
 
26
+ Keyword Spotting (KS) detects preregistered keywords by classifying utterances into a predefined set of
27
+ words. The task is usually performed on-device for the fast response time. Thus, accuracy, model size, and
28
+ inference time are all crucial. SUPERB uses the widely used
29
+ [Speech Commands dataset v1.0](https://www.tensorflow.org/datasets/catalog/speech_commands) for the task.
30
+ The dataset consists of ten classes of keywords, a class for silence, and an unknown class to include the
31
+ false positive.
32
 
33
+ For the original model's training and evaluation instructions refer to the
34
+ [S3PRL downstream task README](https://github.com/s3prl/s3prl/tree/master/s3prl/downstream#ks-keyword-spotting).
35
 
 
36
 
37
+ ## Usage examples
38
 
39
  You can use the model via the Audio Classification pipeline:
40
  ```python
 
41
  from datasets import load_dataset
42
+ from transformers import pipeline
43
 
44
+ dataset = load_dataset("anton-l/superb_demo", "ks", split="test")
 
 
 
45
 
46
+ classifier = pipeline("audio-classification", model="superb/hubert-base-superb-ks")
47
+ labels = classifier(dataset[0]["file"], top_k=5)
48
  ```
49
 
50
  Or use the model directly:
51
  ```python
52
  import torch
 
53
  from datasets import load_dataset
54
  from transformers import HubertForSequenceClassification, Wav2Vec2FeatureExtractor
55
+ from torchaudio.sox_effects import apply_effects_file
56
+
57
+ effects = [["channels", "1"], ["rate", "16000"], ["gain", "-3.0"]]
58
+ def map_to_array(example):
59
+ speech, _ = apply_effects_file(example["file"], effects)
60
+ example["speech"] = speech.squeeze(0).numpy()
61
+ return example
62
+
63
+ # load a demo dataset and read audio files
64
+ dataset = load_dataset("anton-l/superb_demo", "ks", split="test")
65
+ dataset = dataset.map(map_to_array)
66
 
 
67
  model = HubertForSequenceClassification.from_pretrained("superb/hubert-base-superb-ks")
68
  feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("superb/hubert-base-superb-ks")
69
 
 
70
  # compute attention masks and normalize the waveform if needed
71
+ inputs = feature_extractor(dataset[:4]["speech"], sampling_rate=16000, padding=True, return_tensors="pt")
72
 
73
  logits = model(**inputs).logits
74
  predicted_ids = torch.argmax(logits, dim=-1)
75
  labels = [model.config.id2label[_id] for _id in predicted_ids.tolist()]
76
+ ```
77
+
78
+ ## Eval results
79
+
80
+ The evaluation metric is accuracy.
81
+
82
+ | | **s3prl** | **transformers** |
83
+ |--------|-----------|------------------|
84
+ |**test**| `0.9630` | `0.9672` |
85
+
86
+ ### BibTeX entry and citation info
87
+
88
+ ```bibtex
89
+ @article{yang2021superb,
90
+ title={SUPERB: Speech processing Universal PERformance Benchmark},
91
+ author={Yang, Shu-wen and Chi, Po-Han and Chuang, Yung-Sung and Lai, Cheng-I Jeff and Lakhotia, Kushal and Lin, Yist Y and Liu, Andy T and Shi, Jiatong and Chang, Xuankai and Lin, Guan-Ting and others},
92
+ journal={arXiv preprint arXiv:2105.01051},
93
+ year={2021}
94
+ }
95
  ```