Audio Classification
Audio classification
音声分類では、テキストと同様に、入力データから出力されたクラス ラベルを割り当てます。唯一の違いは、テキスト入力の代わりに生のオーディオ波形があることです。音声分類の実際的な応用例には、話者の意図、言語分類、さらには音による動物の種類の識別などがあります。
このガイドでは、次の方法を説明します。
このタスクと互換性のあるすべてのアーキテクチャとチェックポイントを確認するには、タスクページ を確認することをお勧めします。
pip install transformers datasets evaluate
モデルをアップロードしてコミュニティと共有できるように、Hugging Face アカウントにログインすることをお勧めします。プロンプトが表示されたら、トークンを入力してログインします。
Load MInDS-14 dataset
まず、🤗 データセット ライブラリから MInDS-14 データセットをロードします。
train_test_split メソッドを使用して、データセットの train をより小さなトレインとテスト セットに分割します。これにより、完全なデータセットにさらに時間を費やす前に、実験してすべてが機能することを確認する機会が得られます。
次に、データセットを見てみましょう。
DatasetDict({
, train: Dataset({
, features: ['path', 'audio', 'transcription', 'english_transcription', 'intent_class', 'lang_id'],
, num_rows: 450
, })
, test: Dataset({
, features: ['path', 'audio', 'transcription', 'english_transcription', 'intent_class', 'lang_id'],
, num_rows: 113
, })
,}) データセットにはlang_idやenglish_transcriptionなどの多くの有用な情報が含まれていますが、このガイドではaudioとintent_classに焦点を当てます。 remove_columns メソッドを使用して他の列を削除します。
ここで例を見てみましょう。
{'audio': {'array': array([ 0. , 0. , 0. , ..., -0.00048828,
, -0.00024414, -0.00024414], dtype=float32),
, 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602b9a5fbb1e6d0fbce91f52.wav',
, 'sampling_rate': 8000},
, 'intent_class': 2} 次の 2 つのフィールドがあります。
audio: 音声ファイルをロードしてリサンプリングするために呼び出す必要がある音声信号の 1 次元のarray。intent_class: スピーカーのインテントのクラス ID を表します。
モデルがラベル ID からラベル名を取得しやすくするために、ラベル名を整数に、またはその逆にマップする辞書を作成します。
これで、ラベル ID をラベル名に変換できるようになりました。
'app_error'
Preprocess
次のステップでは、Wav2Vec2 特徴抽出プログラムをロードしてオーディオ信号を処理します。
MInDS-14 データセットのサンプリング レートは 8khz です (この情報は データセット カード で確認できます)。つまり、データセットを再サンプリングする必要があります。事前トレーニングされた Wav2Vec2 モデルを使用するには、16kHz に設定します。
{'audio': {'array': array([ 2.2098757e-05, 4.6582241e-05, -2.2803260e-05, ...,
, -2.8419291e-04, -2.3305941e-04, -1.1425107e-04], dtype=float32),
, 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~APP_ERROR/602b9a5fbb1e6d0fbce91f52.wav',
, 'sampling_rate': 16000},
, 'intent_class': 2} 次に、次の前処理関数を作成します。
audio列を呼び出してロードし、必要に応じてオーディオ ファイルをリサンプリングします。- オーディオ ファイルのサンプリング レートが、モデルが事前トレーニングされたオーディオ データのサンプリング レートと一致するかどうかを確認します。この情報は、Wav2Vec2 モデル カード で見つけることができます。
- 入力の最大長を設定して、長い入力を切り捨てずにバッチ処理します。
データセット全体に前処理関数を適用するには、🤗 Datasets map 関数を使用します。 batched=True を設定してデータセットの複数の要素を一度に処理することで、map を高速化できます。不要な列を削除し、intent_class の名前を label に変更します。これはモデルが期待する名前であるためです。
Evaluate
次に、予測とラベルを compute に渡して精度を計算する関数を作成します。
これでcompute_metrics関数の準備が整いました。トレーニングをセットアップするときにこの関数に戻ります。
Train
これでモデルのトレーニングを開始する準備が整いました。 AutoModelForAudioClassification を使用して、予期されるラベルの数とラベル マッピングを使用して Wav2Vec2 を読み込みます。
この時点で残っている手順は次の 3 つだけです。
- TrainingArguments でトレーニング ハイパーパラメータを定義します。唯一の必須パラメータは、モデルの保存場所を指定する
output_dirです。push_to_hub=Trueを設定して、このモデルをハブにプッシュします (モデルをアップロードするには、Hugging Face にサインインする必要があります)。各エポックの終了時に、トレーナーは精度を評価し、トレーニング チェックポイントを保存します。 - トレーニング引数を、モデル、データセット、トークナイザー、データ照合器、および
compute_metrics関数とともに Trainer に渡します。 - train() を呼び出してモデルを微調整します。
トレーニングが完了したら、 push_to_hub() メソッドを使用してモデルをハブに共有し、誰もがモデルを使用できるようにします。
音声分類用のモデルを微調整する方法の詳細な例については、対応する PyTorch notebook.
Inference
モデルを微調整したので、それを推論に使用できるようになりました。
推論を実行したい音声ファイルをロードします。必要に応じて、オーディオ ファイルのサンプリング レートをモデルのサンプリング レートと一致するようにリサンプリングすることを忘れないでください。
推論用に微調整されたモデルを試す最も簡単な方法は、それを pipeline() で使用することです。モデルを使用して音声分類用のpipelineをインスタンス化し、それに音声ファイルを渡します。
[
, {'score': 0.09766869246959686, 'label': 'cash_deposit'},
, {'score': 0.07998877018690109, 'label': 'app_error'},
, {'score': 0.0781070664525032, 'label': 'joint_account'},
, {'score': 0.07667109370231628, 'label': 'pay_bill'},
, {'score': 0.0755252093076706, 'label': 'balance'}
,] 必要に応じて、pipeline の結果を手動で複製することもできます。
特徴抽出器をロードしてオーディオ ファイルを前処理し、inputを PyTorch テンソルとして返します。
入力をモデルに渡し、ロジットを返します。
最も高い確率でクラスを取得し、モデルの id2label マッピングを使用してそれをラベルに変換します。
'cash_deposit'