HuggingFace の AutoProcessor と AutoModelForCTC で使用可能な音声認識モデルを確認する

Hugging Faceではたくさんの音声認識モデルがあり、モデルごとにコードを変えるのが面倒です。

HuggingFaceではAutoProcessorとAutoModelForCTCがあるので少ない変更で用意されている色んなモデルを試せるぞ

AutoProcessor と AutoModelForCTC

HuggingFaceでは各モデルに必要な前処理とモデルのロードを自動的に選択できるAutoProcessor と AutoModelForCTCがあります。

これ使用することで少ないコードでいろんなモデルを試せます。

https://huggingface.co/docs/transformers/v4.21.1/en/autoclass_tutorial#load-pretrained-instances-with-an-autoclass

使用可能なモデルの確認

AutoProcessorで音声認識の前処理で使用可能な前処理は下記になります。

https://huggingface.co/docs/transformers/v4.21.1/en/model_doc/auto#transformers.AutoProcessor

AutoModelForCTCで音声認識に使用可能なモデルは下記になります。

https://huggingface.co/docs/transformers/v4.21.1/en/model_doc/auto#transformers.AutoModelForCTC

前処理が対応していないと使用できないため、使用できる音声認識モデルは下記になります。

コードによる動作確認

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行で試せるのは有用だったな

Close Bitnami banner
Bitnami