【検証してみた!】サンプリングレートや圧縮率で音声認識の精度はどのように変化するのか!?

「高音質なデータじゃないと音声認識精度が落ちるのでは?」
「ファイルサイズを小さくしたいけど、どこまで圧縮して大丈夫?」
音声認識サービスを利用する際、こんな疑問を持ったことはありませんか?
ストレージ容量や通信帯域を考えるとデータは軽くしたいけれど、精度が犠牲になるのは困る…。そんなお悩みを解決するために、今回は、AmiVoice APIにおいてサンプリングレートと圧縮率が音声認識精度に与える影響を実際に検証してみました。
音声データの最適な形式について知りたい方、データ容量と認識精度のバランスに悩んでいる方は、ぜひこの記事を参考にしていただければと思います。
検証の流れ
今回は、以下の2つの観点で検証を行います。
- サンプリングレートによる音声認識精度の違い
- 圧縮率による音声認識精度の違い
STEP1:検証用データの用意
検証に使用したデータは以下の通りです。
特定の話者・内容に偏ったデータセットにならないように、多様性を考慮して音声を作成しました。
- 日報やニュース、会議、朗読、音声入力のための指示など、計10パターンの発話内容
- 話者は、男性2人・女性3人、年齢は20代から40代までの幅広い年齢層を含める
- ノイズによる影響を排除するため、音声データは全てクリアな環境で収録
No | ジャンル | 概要 | 文字数 | 音声の長さ |
---|---|---|---|---|
1 | 日報 | 昼食の献立に関する内容 | 165文字 | 27秒 |
2 | ニュース | 天気のニュース | 159文字 | 29秒 |
3 | コマンド | 音声入力のコマンド | 168文字 | 53秒 |
4 | 会社紹介 | 当社アドバンスト・メディアの会社概要 | 416文字 | 1分11秒 |
5 | 議会 | 市議会の録音データ | 477文字 | 1分19秒 |
6 | 会社紹介 | 当社アドバンスト・メディアの展望 | 563文字 | 1分46秒 |
7 | 文学 | 物語の朗読 | 479文字 | 1分47秒 |
8 | ニュース | 天気のニュース | 512文字 | 1分50秒 |
9 | 議会 | 都議会の録音データ | 762文字 | 2分19秒 |
10 | 文学 | 散文の朗読 | 827文字 | 2分45秒 |
STEP2:AmiVoice APIによる音声認識
音声データをもとに、当社が提供しているAmiVoice APIを利用し、Curlコマンドにて各サンプリングレートおよび圧縮率の音声データを音声認識させます。
curl https://acp-api.amivoice.com/v1/recognize \
-F d=-a-general \
-F u= {APP_KEY} \
-F a=@filename.wav | jq .text >> out.txt
{APP_KEY}には、AmiVoice APIの利用において必要となるAPPKEYを指定します。また、APIによる音声認識結果はJSON形式で出力されるため、jqコマンドにて整形して「out」ファイルに出力します。
STEP3:結果の集計
Pythonで動作するjiwerという音声認識精度用ライブラリを用いて、各データの音声認識結果と正解データを計測します。「jiwer」の使い方については、こちらの記事をご参照ください。
評価にあたっては、以下のコードにて10パターンの音声データの平均音声認識精度を計測します。
import jiwer
refs = open("answer.txt", encoding="utf_8").read()
answers = open("outPCM48K.txt", encoding="utf_8").read()
output = jiwer.process_characters(refs, answers)
ave_accuracy = (1-output.cer)*100
print("-----------------結果-----------------")
print(f"平均音声認識精度: {ave_accuracy}")
検証結果1:サンプリングレートによる比較
サンプリングレートとは、音質を表現するための指標の一つです。たとえば、電話では8kHz、CDでは44.1kHzなどのサンプリングレートが採用されています。 サンプリングレートが高ければ高いほど高周波を表現できるため、音楽であれば高いサンプリングレートであることが重要です。
一方で、人間の発声による音の高さには限界があるため、一般的な音声認識の用途では、そこまで高いサンプリングレートは必要とされません。
AmiVoice APIでは、16kHzを最適なサンプリングレートとしています。サンプリングレートが16kHzより高い音声を入力すると、内部でサンプリングレート16kHz相当の音質に変換(ダウンサンプリング)し、音声認識処理を行う仕組みです。 そのため、サンプリングレート48kHzと16kHzのデータを音声認識した場合で、精度にほぼ違いはありません。
それでは、実際にサンプリングレート48kHzと16kHzのデータを用いて、音声認識精度に違いが出ないのか検証してみましょう。
比較対象
サンプリングレート48kHzと16kHzの音声データを比較しました。音声データの詳細は以下の通りです。
- フォーマット:非圧縮Waveデータ
- ビット深度:16ビット
- チャンネル:モノラル
比較結果
各サンプリングレートのkbpsと音声認識精度は下表の通りです。
サンプリングレート48kHz | サンプリングレート16kHz | |
---|---|---|
kbps | 768kbps | 256kbps |
平均音声認識精度 (マイクロ平均法による) | 98.0% | 98.0% |
※kbps … 1秒間に処理できるデータ量
※マイクロ平均法 … 全てのデータセットの文字ごとの誤り数を合計し、全体の文字数で割って平均誤り率を出す方法
AmiVoice APIでは、サンプリングレートを16kHzより高くしても音声認識精度には影響しない、ということが確認できました。
なお、Amivoice APIでは、音声認識エンジンが日々更新されていることや、音声認識サーバの負荷状況により若干の計算量の調整を行っていることから、同じ音声データを送信しても同じ結果が得られるとは限りません。比較検証を行う際、音声認識精度の結果に若干の誤差が生じる場合もあります。
検証結果2:圧縮率による比較
アプリケーションを設計する際、通信データ量やストレージ容量を抑えるための音声圧縮は非常に重要です。しかし、圧縮しすぎると音質が劣化し、認識精度に影響が出る可能性があります。では、どの程度の圧縮率までなら実用的な精度を保てるのでしょうか。高品質でオープンな音声コーデックとして知られるOpusを用い、圧縮率(ビットレート)を変化させて認識精度を比較しました。
比較対象
Opus形式の圧縮音声データを利用し、6kbps~256kbpsの6つの圧縮率で比較を行いました。
比較結果
各kbpsの音声認識精度は下表の通りです。オリジナルデータに対する圧縮率も記載しています。
256kbps | 128kbps | 64kbps | 32kbps | 16kbps | 6kbps | |
---|---|---|---|---|---|---|
圧縮率 | 約1/1 | 約1/2 | 約1/4 | 約1/8 | 約1/16 | 約1/43 |
平均音声認識精度 (マイクロ平均法による) | 98.0% | 98.0% | 98.1% | 98.2% | 97.9% | 95.5% |
考察
6kbpsでは、ほかの圧縮率よりも精度が低かったものの、16kbps以上では有意な差は見られませんでした。一定程度の圧縮をかけても、十分に精度を保って音声認識を実施できることがわかります。
ただし、人の耳でも聞き取りづらいような強い圧縮をかけると、認識精度に影響が出ます。当社では、以下のとおり、圧縮方式ごとに圧縮率のガイドラインを示しています。
- Speex: quality 7 以上
- Opus: 圧縮率 10 分の 1 程度
まとめ
今回は「サンプリングレートの違い」と「圧縮率の違い」で音声認識精度はどのように変化するのか、実際にサンプル音声データを用いて検証を行いました。
AmiVoice APIでは、サンプリングレートが16kHzより高い音声を入力すると、内部で16kHzにダウンサンプリングされるため、過度に高いサンプリングレートの音声データを使用しても、音声認識精度に違いが出ないことが確認できました。
また、圧縮率についても、ある程度の圧縮率であれば音声認識精度には影響しないことがわかりました。ただし、強い圧縮をかけると認識精度に影響がでるため注意が必要です。圧縮した音声データをお使いで、認識精度が思うようにでないという方は、音声データの圧縮率を確認してみてください。
また、ご紹介した検証手順を参考に、自社の音声データを使って試すこともお勧めします。
AmiVoice APIは無料トライアルを提供しているので、実際に検証して、データサイズの削減や音声認識精度の改善にお役立てください。
付録
検証で使用した各音声ファイルのファイルサイズ一覧です。
サンプル音声 データNo | ファイルサイズ(kbyte) 48kHz | ファイルサイズ(kbyte) 16kHz |
---|---|---|
1 | 2,634 | 878 |
2 | 2,814 | 938 |
3 | 5,098 | 1,699 |
4 | 6,855 | 1,699 |
5 | 7,630 | 2,543 |
6 | 10,232 | 3,411 |
7 | 10,324 | 3,441 |
8 | 10,609 | 3,536 |
9 | 13,399 | 4,466 |
10 | 15,914 | 5,305 |
サンプル音声 データNo | ファイルサイズ(kbyte) | |||||
---|---|---|---|---|---|---|
256kbps | 128kbps | 64kbps | 32kbps | 16kbps | 6kbps | |
1 | 885 | 445 | 224 | 114 | 56 | 22 |
2 | 946 | 475 | 239 | 124 | 61 | 25 |
3 | 1,713 | 860 | 433 | 208 | 102 | 38 |
4 | 2,303 | 1,156 | 581 | 299 | 153 | 58 |
5 | 2,563 | 1,287 | 647 | 338 | 167 | 68 |
6 | 3,436 | 1,725 | 867 | 425 | 208 | 81 |
7 | 3,467 | 1,741 | 875 | 430 | 213 | 79 |
8 | 3,563 | 1,789 | 899 | 455 | 222 | 87 |
9 | 4,500 | 2,259 | 1,136 | 585 | 295 | 113 |
10 | 5,344 | 2,683 | 1,348 | 667 | 325 | 119 |