Automatic speech recognition
自動音声認識 (ASR) は音声信号をテキストに変換し、一連の音声入力をテキスト出力にマッピングします。 Siri や Alexa などの仮想アシスタントは ASR モデルを使用してユーザーを日常的に支援しており、ライブキャプションや会議中のメモ取りなど、他にも便利なユーザー向けアプリケーションが数多くあります。
このガイドでは、次の方法を説明します。
このタスクと互換性のあるすべてのアーキテクチャとチェックポイントを確認するには、タスクページ を確認することをお勧めします。
始める前に、必要なライブラリがすべてインストールされていることを確認してください。
モデルをアップロードしてコミュニティと共有できるように、Hugging Face アカウントにログインすることをお勧めします。プロンプトが表示されたら、トークンを入力してログインします。
Load MInDS-14 dataset
まず、🤗 データセット ライブラリから MInDS-14 データセットの小さいサブセットをロードします。これにより、完全なデータセットのトレーニングにさらに時間を費やす前に、実験してすべてが機能することを確認する機会が得られます。
~Dataset.train_test_split
メソッドを使用して、データセットの train
分割をトレイン セットとテスト セットに分割します。
次に、データセットを見てみましょう。
データセットにはlang_id
やenglish_transcription
などの多くの有用な情報が含まれていますが、このガイドでは「audio
」と「transciption
」に焦点を当てます。 remove_columns
メソッドを使用して他の列を削除します。
もう一度例を見てみましょう。
次の 2 つのフィールドがあります。
audio
: 音声ファイルをロードしてリサンプリングするために呼び出す必要がある音声信号の 1 次元のarray
。transcription
: ターゲットテキスト。
Preprocess
次のステップでは、Wav2Vec2 プロセッサをロードしてオーディオ信号を処理します。
MInDS-14 データセットのサンプリング レートは 8000kHz です (この情報は データセット カード で確認できます)。つまり、データセットを再サンプリングする必要があります。事前トレーニングされた Wav2Vec2 モデルを使用するには、16000kHz に設定します。
上の transcription
でわかるように、テキストには大文字と小文字が混在しています。 Wav2Vec2 トークナイザーは大文字のみでトレーニングされるため、テキストがトークナイザーの語彙と一致することを確認する必要があります。
次に、次の前処理関数を作成します。
audio
列を呼び出して、オーディオ ファイルをロードしてリサンプリングします。オーディオ ファイルから
input_values
を抽出し、プロセッサを使用してtranscription
列をトークン化します。
データセット全体に前処理関数を適用するには、🤗 Datasets map
関数を使用します。 num_proc
パラメータを使用してプロセスの数を増やすことで、map
を高速化できます。 remove_columns
メソッドを使用して、不要な列を削除します。
🤗 Transformers には ASR 用のデータ照合器がないため、DataCollatorWithPadding
を調整してサンプルのバッチを作成する必要があります。また、テキストとラベルが (データセット全体ではなく) バッチ内の最も長い要素の長さに合わせて動的に埋め込まれ、均一な長さになります。 padding=True
を設定すると、tokenizer
関数でテキストを埋め込むことができますが、動的な埋め込みの方が効率的です。
他のデータ照合器とは異なり、この特定のデータ照合器は、input_values
と labels
」に異なるパディング方法を適用する必要があります。
次に、DataCollatorForCTCWithPadding
をインスタンス化します。
Evaluate
次に、予測とラベルを compute
に渡して WER を計算する関数を作成します。
これでcompute_metrics
関数の準備が整いました。トレーニングをセットアップするときにこの関数に戻ります。
Train
Trainer を使用したモデルの微調整に慣れていない場合は、ここ の基本的なチュートリアルをご覧ください。
これでモデルのトレーニングを開始する準備が整いました。 AutoModelForCTC で Wav2Vec2 をロードします。 ctc_loss_reduction
パラメータで適用する削減を指定します。多くの場合、デフォルトの合計ではなく平均を使用する方が適切です。
この時点で残っている手順は次の 3 つだけです。
TrainingArguments でトレーニング ハイパーパラメータを定義します。唯一の必須パラメータは、モデルの保存場所を指定する
output_dir
です。push_to_hub=True
を設定して、このモデルをハブにプッシュします (モデルをアップロードするには、Hugging Face にサインインする必要があります)。各エポックの終了時に、トレーナー
は WER を評価し、トレーニング チェックポイントを保存します。トレーニング引数を、モデル、データセット、トークナイザー、データ照合器、および
compute_metrics
関数とともに Trainer に渡します。train() を呼び出してモデルを微調整します。
トレーニングが完了したら、 push_to_hub() メソッドを使用してモデルをハブに共有し、誰もがモデルを使用できるようにします。
Inference
モデルを微調整したので、それを推論に使用できるようになりました。
推論を実行したい音声ファイルをロードします。必要に応じて、オーディオ ファイルのサンプリング レートをモデルのサンプリング レートと一致するようにリサンプリングすることを忘れないでください。
推論用に微調整されたモデルを試す最も簡単な方法は、それを pipeline() で使用することです。モデルを使用して自動音声認識用のpipeline
をインスタンス化し、オーディオ ファイルをそれに渡します。
転写はまあまあですが、もっと良くなる可能性があります。さらに良い結果を得るには、より多くの例でモデルを微調整してみてください。
必要に応じて、「パイプライン」の結果を手動で複製することもできます。
プロセッサをロードしてオーディオ ファイルと文字起こしを前処理し、input
を PyTorch テンソルとして返します。
Pass your inputs to the model and return the logits:
最も高い確率で予測された input_ids
を取得し、プロセッサを使用して予測された input_ids
をデコードしてテキストに戻します。