はじめに
Azure サービスの1つ、Custom Speechを使用して秋田弁を認識する音声認識モデルを開発したので、この記事ではCustom Speechについて紹介したいと思います。
Azure Custom Speechについて
Azure Custom Speechとは、ユーザが収集したデータを利用して、利用したいシーンに特化した音声認識モデルをトレーニングできるサービスです。
できること
- 人が多い場所、機械が動いている場所など特定の環境のノイズに特化した音声認識の開発
- トレーニングしたモデルはバッチの文字起こしはもちろん、リアルタイムでの文字起こしも可能
- トレーニングで使用するデータは、音声データとテキストだけでなく、テキストのみでもOK
- この場合、語彙のトレーニングができるようです
使い方
ここでは、音声+テキストでモデルを開発する手順について書き綴っていきます。
データ準備
音声データ
形式:WAV
サンプル形式:PCM 16bit
サンプルレート:8000Hz または 16000Hz
1音声ファイルの最大長:トレーニング用は40秒、テスト用は2時間
トレーニングに使用する音声データは長さの合計60分を超える必要があります。
テキストデータ
テキストデータは、ファイル名とトランスクリプトをタブで区切ったもので、エンコードはUTF-8(BOM付き)、1行1発話とします。最大サイズは200MBです。
また、テキストは90文字を超える場合は .(ドット)で区切る必要があります。
ただ、文章の途中でドットをいれるのではなく、文章の終わりにいれる必要があります。
(1文90文字を超える文章はそんなに無いと思うので、句点の終わりにドットを入れてしまえばOKだと思います)
データは、後述するテストでも使用するので、トレーニングした音声認識モデルをテストする場合は、トレーニングとは別にデータセットを作成する必要があります。
アップロード
AzureのSpeech Studioのカスタム音声認識プロジェクトでアップできます。
音声+テキストのデータをzipアーカイブしたものをアップします。
ファイルをアップするとAzure上でファイルの処理が行われ、処理が完了すると閲覧ができるようになります。
注意)処理中にエラーが生じた場合は、エラー対象のファイルをスキップし処理を続行します。処理中にエラーが起こったかどうかは通知が来ないため、データセットの詳細から確認する必要があります。
よく遭遇したエラー
- 正規化後のテキストが空になってしまう
- 記号が入っているとテキストの正規化する過程で空になってしまうことがあるようなので、記号は消してあげてください
- ファイルが見つからない
- 音声ファイル名とテキストファイル中のファイル名が対応するようにしてください
トレーニング
トレーニングを行うためには、学習に使用するデータ形式、ベースモデル、使用するデータセットを選択します。
トレーニングにかかった時間は1時間程度でした。
Tips
トレーニングに使用できる音声データは40秒以内という制限があります。
もし、データセットに40秒を超える長さの音声データがある場合は、対象のデータはスキップされます。
ちなみに、トレーニングに使用したデータセットすべてが40秒を超えるとエラーが発生し、トレーニングに失敗します。
また、特定のリージョンではトレーニング用の専用ハードウェアが利用でき、トレーニングを高速化することができます。
専用ハードウェアが利用できる別のリージョンでトレーニングを行い、モデルを別のリージョンにコピーをすることで時短、コスト削減ができます。
テスト
テストでは、2つの音声認識モデルの比較ができます。
テストを行うためには、2つのモデルと、テストで使用するデータセットを選択します。
評価は単語誤り率(WER)、トークン誤り率(TER)で評価されます。
単語誤り率
音声認識した結果のテキスト中に、正解テキストと比較して、余計な単語が入っている回数(挿入)、文字が誤ってしまっている回数(置換)、文字が不足している回数(削除)がどれほど入っているかの割合です。
トークン誤り率
日本語の文章では句読点を考慮した単語誤り率と思っていただければいいと思います。
デプロイ
エンドポイントを作成し、そこにトレーニングした音声認識モデルを紐づけることによって、モデルの利用が可能になります。
デプロイをすると音声認識の利用時間にかかわらず料金が発生するので気をつけてください。
データについて
秋田弁話者にお願いしてデータ収集をしました。話者は男女、年齢がなるべくばらつくように募集しました。
トレーニング用のデータとして60分、テスト用のデータとして30分のデータを収集することができました。
注意)秋田弁は地域ごとに異なってくるようなのですが、今回はごちゃまぜにしています。
結果
ベースモデル(トレーニング前)と比較をした結果が下記の通りで、WERは10%ほど改善しております。
所感
最低量のデータでトレーニングしてもWERが改善しており驚きでした。
実際の音声認識をさせてみると、トレーニングデータに引っ張られすぎず、かなりマイルドに改善した印象でした。