「トランスフォーマーを使用した音声からテキストへの完全な入門ガイド」
Complete Beginner's Guide to Transcribing Speech to Text using Transformers
イントロダクション
私たちは、実際に気づかないうちにオーディオデータに関わっています。世界はオーディオデータと関連する解決すべき問題で溢れており、これらの問題の多くを機械学習を使って解決することができます。画像、テキスト、表形式のデータを使って機械学習モデルを訓練することや、これらのドメインの問題を解決するために機械学習を使うことにはお馴染みかもしれません。Transformerアーキテクチャの登場により、従来の方法よりもはるかに高い精度でオーディオ関連の問題を解決することが可能になりました。本講座では、トランスフォーマーを用いた音声テキスト変換を使用して、オーディオMLの基礎を学び、オーディオ関連の問題を機械学習を用いて解決するためのHuggingfaceライブラリの使用方法を学びます。
学習目標
- オーディオ機械学習の基礎と関連する背景知識について学ぶ。
- オーディオデータの収集、保存、処理方法について学ぶ。
- 機械学習を用いた一般的で価値のあるタスクである音声テキスト変換について学ぶ。
- オーディオタスクにおいてデータセットやトレーニング済みモデルを探し、それらを使用してHuggingface Pythonライブラリを活用してオーディオ問題を解決する方法について学ぶ。
この記事はData Science Blogathonの一部として公開されました。
背景
Deep Learningの革命が2010年代初頭に起こり、AlexNetが物体認識において人間の専門知識を超えたことから、Transformerアーキテクチャはおそらくそれ以来の最も大きなブレークスルーです。Transformerは以前に解決不可能だったタスクを可能にし、多くの問題の解決を簡素化しました。最初は自然言語翻訳の結果を向上させるために開発されたものでしたが、その後は自然言語処理以外のタスクにも広く採用されるようになりました。例えば、画像に関連するタスクにはViT(Vision Transformers)が適用され、強化学習エージェントの意思決定にはDecision Transformersが使用され、最近の論文ではMagViTというTransformersをビデオに関連するさまざまなタスクに使用する方法が示されています。
これは、Attentionメカニズムを導入した有名な論文Attention is All You Needに始まり、Transformersのアーキテクチャの内部構造を既に知っているとは仮定しません。
- ソースコード付きのトップ14のデータマイニングプロジェクト
- 「AIはデータガバナンスにどのように影響を与えているのか?」
- CMU、AI2、およびワシントン大学の研究グループが、NLPositionalityというAIフレームワークを導入しましたこれは、デザインのバイアスを特徴づけ、NLPのデータセットとモデルの位置性を定量化するためのものです
一般の開発者やパブリックドメインでは、ChatGPTやGitHub Copilotといった名前が非常に有名ですが、Deep Learningはビジョン、強化学習、自然言語処理など、さまざまな分野で多くの実世界のユースケースで使用されています。
近年では、薬物探索やタンパク質の折り畳みなど、他の多くのユースケースについても学んできました。オーディオはまだ完全にDeep Learningによって解決されていない魅力的な分野の1つであり、ある意味ではImagenetデータセットにおける画像分類は畳み込みニューラルネットワークによって解決されました。
前提条件
- Pythonの使用経験があることを前提としています。基本的なPythonの知識が必要です。ライブラリとその一般的な使用方法について理解している必要があります。
- また、機械学習とディープラーニングの基礎知識を持っていることを前提としています。
- Transformersの事前知識は必要ありませんが、役に立つ場合があります。
オーディオデータに関する注意事項:このプラットフォームではオーディオの挿入はサポートされていませんので、すべてのコードとオーディオデータを含んだColabノートブックを作成しました。こちらからアクセスできます。Google Colaboratoryで開き、ノートブックからブラウザでオーディオを再生することができます。
オーディオ機械学習の紹介
おそらく、オーディオ機械学習を実際に目にしたことがあるかもしれません。”Hi Siri”や”Okay, Google”と言うと、それぞれのプラットフォームのアシスタントが起動します-これはオーディオ関連の機械学習の一例です。この特定のアプリケーションは「キーワード検出」として知られています。
しかし、この領域でもTransformersを使用して多くの問題を解決することができる可能性があります。ただし、Transformersの使用に入る前に、Transformers以前にどのようにオーディオ関連のタスクが解決されていたかを簡単に説明します。
Transformers以前は、オーディオデータは通常、メルスペクトログラムとして変換され、処理するオーディオクリップの画像表現として扱われ、畳み込みニューラルネットワークに入力されてトレーニングされていました。そして、推論時には、オーディオサンプルがまずメルスペクトログラム表現に変換され、CNNアーキテクチャがそれに基づいて推論を行いました。
オーディオデータの探索
ここでは、`librosa`というPythonパッケージを紹介します。これはオーディオデータの取り扱いに非常に役立つパッケージです。メルスペクトログラムを生成して、外観をご理解いただくために紹介します。librosaのドキュメントはウェブ上で見つけることができます。
まず、ターミナルから次のコマンドを実行して、librosaライブラリをインストールします:
pip install librosa
次に、ノートブックで以下のようにインポートする必要があります:
import librosa
ライブラリにバンドルされているデータを使用して、ライブラリの基本的な機能をいくつか探索します。
array, sampling_rate = librosa.load(librosa.ex("trumpet"))
librosa.load()メソッドがトランペットの音に対してオーディオ配列とサンプリングレートを返すことがわかります。
import matplotlib.pyplot as plt
import librosa.display
plt.figure().set_figwidth(12)
librosa.display.waveshow(array, sr=sampling_rate)
これにより、オーディオデータの値が次のようなグラフにプロットされます:
X軸には時間、Y軸にはクリップの振幅が表示されます。次のように聞くことができます:
from IPython.display import Audio as aud
aud(array, rate=16_000)
このブログ記事のために作成したColabノートブックで音声を聞くことができます。
librosaを使用してメルスペクトログラムを直接プロットします。
import numpy as np
S = librosa.feature.melspectrogram(y=array, sr=sampling_rate,
n_mels=128, fmax=8_000)
S_dB = librosa.power_to_db(S, ref=np.max)
plt.figure().set_figwidth(12)
librosa.display.specshow(S_dB, x_axis="time",
y_axis="mel", sr=sampling_rate,
fmax=8000)
plt.colorbar()
他の表現よりもメルスペクトログラムを使用する理由は、他の表現よりも情報量が多いからです。周波数と振幅が1つの曲線に含まれています。スペクトログラムについて詳しくは、Analytics Vidhyaの素晴らしい記事を参照してください。
これは、トランスフォーマーがない前のオーディオMLの入力データの見た目です-畳み込みニューラルネットワークのトレーニングのためのデータです。
トランスフォーマーを使用したオーディオML
「Attention is All You Need」論文で紹介されたアテンションメカニズムは、高レベルで見ると、アテンションヘッドが次のトークンを予測する際に、シーケンスのどの部分に注目を集めるべきかを決定するため、言語関連のタスクを成功裏に解決します。
オーディオはシーケンスデータの非常に適した例です。オーディオは自然界の振動によって生成される連続的な信号であり、人間の話声や動物の音声の場合は、私たちの音声器官によって生成されます。しかし、コンピュータは連続的なデータを処理または保存することはできません。すべてのデータは離散的に保存されます。
オーディオも同じです。一定の時間間隔の値のみが保存され、これで曲を聴く、映画を見る、電話やインターネットで自分自身とコミュニケーションするのに十分です。
そして、トランスフォーマーもこのデータで動作します。
NLP(自然言語処理)と同様に、さまざまなトランスフォーマーアーキテクチャをさまざまなニーズに使用することができます。私たちは、エンコーダ-デコーダアーキテクチャを使用します。
Huggingface Hubからのトレーニングデータ
前述のように、各処理ステップについてHuggingfaceライブラリを使用します。オーディオデータセットを確認するためにHuggingface Dataset Hubに移動することができます。ここでは、MINDSデータセットを使用します。これは、異なる言語を話す話者の音声データセットです。データセットのすべての例には完全なアノテーションがされています。
データセットをロードして少し探索しましょう。
まず、Huggingfaceのデータセットライブラリをインストールします。
pip install datasets
これにより、オーディオ関連の機能をサポートしたdatasetsライブラリがダウンロードされます。
次に、MINDSデータセットを調査します。データセットのHuggingfaceページを参照し、データセットカードを読むことを強くお勧めします。
Huggingfaceのデータセットページでは、タスク、利用可能な言語、データセットの使用許可など、非常に関連性の高い情報が表示されます。
これからデータを読み込んで、詳細を学んでいきましょう。
from datasets import load_dataset, Audio
minds = load_dataset("PolyAI/minds14", name="en-AU",
split="train")
minds = minds.cast_column("audio", Audio(sampling_rate=16_000))
データセットの読み込み方法に注目してください。最初に名前があり、私たちはオーストラリア訛りの英語のデータだけに興味があり、トレーニングセットだけに興味があります。
トレーニングや推論のタスクに入力する前に、すべての音声データのサンプリングレートを同じにする必要があります。これはコード内の`Audio`メソッドによって行われます。
以下のように個々の例を調べることができます:
example = minds[0]
example
出力
{‘path’: ‘/root/.cache/huggingface/datasets/downloads/extracted/a19fbc5032eacf25eab0097832db7b7f022b42104fbad6bd5765527704a428b9/en-AU~PAY_BILL/response_4.wav’,‘audio’: {‘path’: ‘/root/.cache/huggingface/datasets/downloads/extracted/a19fbc5032eacf25eab0097832db7b7f022b42104fbad6bd5765527704a428b9/en-AU~PAY_BILL/response_4.wav’,‘array’: array([2.36119668e-05, 1.92324660e-04, 2.19284790e-04, …,9.40907281e-04, 1.16613181e-03, 7.20883254e-04]),‘sampling_rate’: 16000},‘transcription’: ‘I would like to pay my electricity bill using my card can you please assist’,‘english_transcription’: ‘I would like to pay my electricity bill using my card can you please assist’,‘intent_class’: 13,‘lang_id’: 2}
非常に理解しやすいです。Pythonの辞書形式で、階層があります。パスとサンプリングレートがすべて保存されています。辞書内のtranscriptionキーに注目してください。これは、自動音声認識に興味がある場合のラベルを含んでいます。 [“audio”][“array”] には、トレーニングや推論に使用するオーディオデータが含まれています。
任意のオーディオ例を簡単に再生することができます。
from IPython.display import Audio as aud
aud(example["audio"]["array"], rate=16,000)
Colabノートブックでオーディオを再生することができます。
これで、データがどのように見え、どのように構造化されているかを明確に把握しました。これから、自動音声認識のための事前学習モデルから出力を取得する方法に進んでいきます。
モデルのHuggingface Hubの探索
Huggingface Hubには、テキスト生成、要約、感情分析、画像分類などさまざまなタスクに使用できるモデルが多数あります。タスクに基づいてハブ内のモデルをソートすることができます。私たちのユースケースは音声からテキストへの変換であり、このタスクに特化したモデルを探索します。
そのために、https://huggingface.com/models に移動し、左のサイドバーで目的のタスクをクリックしてください。ここで、即座に使用できるモデルを見つけるか、特定のタスクに適したファインチューニングの候補を見つけることができます。
上の画像では、自動音声認識をすでに選択し、右側に関連するモデルがすべてリストされています。
異なる事前学習済みモデルに注目してください。wav2vec2のようなアーキテクチャは、特定のデータセットにファインチューニングされた多くのモデルを持つことができます。
検索を行い、そのモデルや微調整に使用できるリソースを覚える必要があります。
私はFacebookのwav2vec2-base-960hが私たちのタスクに適していると思います。再度、モデルのページに移動してモデルカードを読むことをお勧めします。
パイプラインメソッドを使用した推論の取得
Huggingfaceには、さまざまなトランスフォーマー関連のタスクをサポートする非常にフレンドリーなAPIがあります。私は、Huggingfaceパイプラインの使用例を多く提供する私が作成したKaggleノートブック「A Gentle Introduction to Huggingface Pipeline」を参照することを提案します。
前のセクションで必要なモデルを見つけたので、最後のセクションで見たパイプラインメソッドを使用してそれを使用します。
まず、Huggingfaceトランスフォーマーライブラリをインストールします。
pip install transformers
次に、パイプラインクラスをインポートし、タスクとモデルを選択します。
from transformers import pipeline
asr = pipeline("automatic-speech-recognition",
model="facebook/wav2vec2-base-960h")
print(asr(example["audio"]["example"])) # exampleはデータセットからの1つの例です
出力は次のとおりです:
{'text': '私はCADを使用して電気料金を支払いたいのですが、お手伝いいただけますか'}
これは、上記で見た注釈と非常によく一致していることがわかります。
この方法で、他の例から推論を得ることができます。
結論
このガイドでは、音声データ処理と探索の基礎、音声機械学習の基礎をカバーしました。音声機械学習のためのTransformerアーキテクチャの簡単な説明の後、Huggingfaceハブでの音声データセットの使用方法と、Huggingfaceモデルハブを使用した事前学習モデルの使用方法を紹介しました。
このワークフローは、多くの音声関連の問題に対して使用でき、トランスフォーマーアーキテクチャを活用して解決することができます。
重要なポイント
- 音声機械学習は、実世界の音声領域で発生する音声関連の問題を機械学習の技術を用いて解決することに関心があります。
- 音声データは数値のシーケンスとして保存されるため、他のシーケンス関連の問題を解決するために既に持っているツールを使用して扱うことができます。
- Transformerはシーケンス関連の問題を成功裏に解決するため、音声問題を解決するためにTransformerアーキテクチャを使用することができます。
- 音声データや音声データは、年齢、アクセント、話し方の習慣などの要因により一般に大きく異なるため、特定のデータセットに対して微調整されたソリューションを使用することが常に良いです。
- Huggingfaceは、データセット、トレーニング済みモデル、トレーニングと微調整の簡単な手段に関する多くの音声関連ソリューションを提供しています。
リソース
1. Huggingface Audio MLコース:Audio Machine Learningについて詳しく学ぶためのもの
2. Allen Downeyによる「Think DSP」:デジタル信号処理をより深く掘り下げるためのもの
よくある質問
この記事で表示されるメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles