Hugging Faceではたくさんの音声認識モデルがあり、モデルごとにコードを変えるのが面倒です。
HuggingFaceではAutoProcessorとAutoModelForCTCがあるので少ない変更で用意されている色んなモデルを試せるぞ
AutoProcessor と AutoModelForCTC
HuggingFaceでは各モデルに必要な前処理とモデルのロードを自動的に選択できるAutoProcessor と AutoModelForCTCがあります。
これ使用することで少ないコードでいろんなモデルを試せます。
使用可能なモデルの確認
AutoProcessorで音声認識の前処理で使用可能な前処理は下記になります。
- sew — Wav2Vec2Processor (SEW model)
- sew-d — Wav2Vec2Processor (SEW-D model)
- unispeech — Wav2Vec2Processor (UniSpeech model)
- unispeech-sat — Wav2Vec2Processor (UniSpeechSat model)
- wav2vec2 — Wav2Vec2Processor (Wav2Vec2 model)
- wav2vec2-conformer — Wav2Vec2Processor (Wav2Vec2-Conformer model)
- wavlm — Wav2Vec2Processor (WavLM model)
https://huggingface.co/docs/transformers/v4.21.1/en/model_doc/auto#transformers.AutoProcessor
AutoModelForCTCで音声認識に使用可能なモデルは下記になります。
- Data2VecAudioConfig configuration class: Data2VecAudioForCTC (Data2VecAudio model)
- HubertConfig configuration class: HubertForCTC (Hubert model)
- MCTCTConfig configuration class: MCTCTForCTC (M-CTC-T model)
- SEWConfig configuration class: SEWForCTC (SEW model)
- SEWDConfig configuration class: SEWDForCTC (SEW-D model)
- UniSpeechConfig configuration class: UniSpeechForCTC (UniSpeech model)
- UniSpeechSatConfig configuration class: UniSpeechSatForCTC (UniSpeechSat model)
- Wav2Vec2Config configuration class: Wav2Vec2ForCTC (Wav2Vec2 model)
- Wav2Vec2ConformerConfig configuration class: Wav2Vec2ConformerForCTC (Wav2Vec2-Conformer model)
- WavLMConfig configuration class: WavLMForCTC (WavLM model)
https://huggingface.co/docs/transformers/v4.21.1/en/model_doc/auto#transformers.AutoModelForCTC
前処理が対応していないと使用できないため、使用できる音声認識モデルは下記になります。
- HubertConfig configuration class: HubertForCTC (Hubert model)
- SEWConfig configuration class: SEWForCTC (SEW model)
- SEWDConfig configuration class: SEWDForCTC (SEW-D model)
- UniSpeechConfig configuration class: UniSpeechForCTC (UniSpeech model)
- UniSpeechSatConfig configuration class: UniSpeechSatForCTC (UniSpeechSat model)
- Wav2Vec2Config configuration class: Wav2Vec2ForCTC (Wav2Vec2 model)
- Wav2Vec2ConformerConfig configuration class: Wav2Vec2ConformerForCTC (Wav2Vec2-Conformer model)
- WavLMConfig configuration class: WavLMForCTC (WavLM model)
コードによる動作確認
Google Colabで動作確認しました。
必要なライブラリをインストールします。
! pip install transformers[ja] datasets sentencepiece
必要なライブラリのインポートとデータセットを準備します。
from transformers import AutoProcessor, AutoModelForCTC
from datasets import load_dataset
import torch
dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
dataset = dataset.sort("id")
sampling_rate = dataset.features["audio"].sampling_rate
音声認識用の関数を作成します。
def speech_recognition(processor: AutoProcessor, dataset: load_dataset, sampling_rate: int, model: AutoModelForCTC):
inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
with torch.no_grad():
logits = model(**inputs).logits
predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids)
print(transcription[0])
Wav2Vecのモデルで音声認識をします。
processor = AutoProcessor.from_pretrained("facebook/wav2vec2-base-960h")
model = AutoModelForCTC.from_pretrained("facebook/wav2vec2-base-960h")
speech_recognition(processor, dataset, sampling_rate, model)
認識結果は下記のようになります。
MISTER QUILTER IS THE APOSTLE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPEL
SEWのモデルで音声認識をします。
processor = AutoProcessor.from_pretrained("asapp/sew-tiny-100k-ft-ls100h")
model = AutoModelForCTC.from_pretrained("asapp/sew-tiny-100k-ft-ls100h")
speech_recognition(processor, dataset, sampling_rate, model)
認識結果は下記のようになります。
MISTER QUILTER IS THE APPOSTILE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPOLLE
SEWDのモデルで音声認識をします。
processor = AutoProcessor.from_pretrained("asapp/sew-d-tiny-100k-ft-ls100h")
model = AutoModelForCTC.from_pretrained("asapp/sew-d-tiny-100k-ft-ls100h")
speech_recognition(processor, dataset, sampling_rate, model)
認識結果は下記のようになります。
MISTER QUILTER IS THE APOSTIL OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPEL
UniSpeechのモデルで音声認識をします。
processor = AutoProcessor.from_pretrained("microsoft/unispeech-sat-base-100h-libri-ft")
model = AutoModelForCTC.from_pretrained("microsoft/unispeech-sat-base-100h-libri-ft")
speech_recognition(processor, dataset, sampling_rate, model)
認識結果は下記のようになります。
MISTER QUILDER IS THE APOSTLE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPEL
UniSpeechSatのモデルで音声認識をします。
processor = AutoProcessor.from_pretrained("microsoft/unispeech-sat-base-100h-libri-ft")
model = AutoModelForCTC.from_pretrained("microsoft/unispeech-sat-base-100h-libri-ft")
speech_recognition(processor, dataset, sampling_rate, model)
認識結果は下記のようになります。
MISTER QUILDER IS THE APOSTLE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPEL
Wav2Vec2-Conformer のモデルで音声認識をします。
processor = AutoProcessor.from_pretrained("facebook/wav2vec2-conformer-rope-large-960h-ft")
model = AutoModelForCTC.from_pretrained("facebook/wav2vec2-conformer-rope-large-960h-ft")
speech_recognition(processor, dataset, sampling_rate, model)
認識結果は下記のようになります。
MISTER QUILTER IS THE APOSTLE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPEL
WavLM のモデルで音声認識をします。
processor = AutoProcessor.from_pretrained("patrickvonplaten/wavlm-libri-clean-100h-base-plus")
model = AutoModelForCTC.from_pretrained("patrickvonplaten/wavlm-libri-clean-100h-base-plus")
speech_recognition(processor, dataset, sampling_rate, model)
認識結果は下記のようになります。
mister quilter is the aposle of the middle classes and we are glad to welcome his gospel
少ないコードで実現できました!!
7種類のモデルをコード3行で試せるのは有用だったな