音声文字起こしベンチマークの方法論

Artificial Analysisは、音声文字起こし(STT)モデル(自動音声認識(ASR)モデルとも呼ばれます)の精度、速度、料金を評価します。非ストリーミング(オフライン/バッチとも呼ばれます)とストリーミングの両方の文字起こしをベンチマークします。精度(WER)、正規化、データセット、モデルの採用基準は両方式で共通です。以下では、まずこれらの共通基盤を定義し、その後にバッチ評価とストリーミング評価に固有の指標を説明します。

主要指標

単語誤り率(WER)

単語誤り率(WER)は、モデルの出力を参照文字起こし(人間が検証した文字起こし)と比較して、文字起こしの精度を測定します。

計算式:

WER = (Substitutions + Insertions + Deletions) ÷ Words in Reference

例:

  • 参照:the cat sat on the mat
  • 仮説:cat is on the big mat
  • 誤り:削除(the)、置換(sat → is)、挿入(big)
  • WER = 3 ÷ 6 = 50%

詳しくは、単語誤り率(WER)の評価をご覧ください。

速度係数(バッチ)

バッチ文字起こしAPIが、実際の音声の長さと比べてどれだけ速く音声を文字起こしするかを示します。

  • 1を超える値は、サービスがリアルタイムより速く文字起こしすることを意味します(例:2.0なら、10分の音声を5分で文字起こしできます)。

バッチベンチマークにはネットワーク遅延が含まれます。速度係数の推移に表示される各点は、24時間以内にランダムに実施した4回の測定値の中央値です。速度係数に表示される各バーは、直近7日間の中央値です。

計算式:

Speed Factor = Audio Duration ÷ API Response Time

遅延指標(ストリーミング)

ストリーミングモデルでは、次の2つの遅延指標を報告します。

  • 最終文字起こしまでの時間:SileroVADが発話終了を検出した後、Finalと指定された文字起こしが最初に共有されるまでの時間。
  • 最初の部分文字起こしまでの時間:SileroVADが発話終了を検出した後、Partialと指定された文字起こしが最初に共有されるまでの時間。

測定方法の詳細は、ストリーミング音声文字起こしをご覧ください。

1,000分あたりの料金

料金体系が異なるプロバイダー間で正規化した、1,000分の音声を文字起こしする推定費用を表します。

算出方法

  • 音声時間:プロバイダーが公開している、音声時間に基づく文字起こし料金を使用します。
  • 処理時間:多様な音声サンプルで処理時間をベンチマークし、処理時間に対する課金を音声1,000分あたりの費用に換算します。
  • トークン:代表的な音声サンプルで課金対象のトークン使用量をベンチマークし、観測された支出を音声1,000分あたりの費用に換算します。プロバイダーが推論トークンを別途開示している場合は明示的に含めます。そうでない場合、課金対象の出力トークンに、表示される出力と内部の推論トークンの両方が含まれることがあります。
  • サブスクリプションプラン:プロバイダーが定める上限の範囲内で、1か月に1,000分の文字起こしを現実的に処理できる、初期費用が最も低いプランを使用します。

共通単位

いずれの場合も、料金は同じ単位、すなわち文字起こしした音声1,000分あたりの推定費用に換算されます。

単語誤り率(WER)の評価

Artificial Analysisは、モデルとプロバイダーのすべての組み合わせに対して独自のWERテストを実施しています。

主な詳細:

  • エンドユーザーが体験する性能を反映するため、APIエンドポイントを直接テストしています。
  • 現在の評価:AA-AgentTalk、VoxPopuli-Cleaned-AA、Earnings22-Cleaned-AAの合計約8時間の音声(詳細は下記)。各データセット内の結果を時間加重平均で算出した後、AgentTalk 50%、VoxPopuli 25%、Earnings22 25%の加重平均を取り、AA-WERの結果を算出します。
  • モデルがプロンプトに対応している場合は、次のプロンプトを使用します:"Transcribe the audio verbatim, outputting only spoken words in sequence."

データセット

  1. AA-AgentTalk (独自・非公開):Artificial Analysisが開発した独自の評価データセットで、音声エージェントのユースケースに関連する発話に重点を置いています。詳しくはブログ記事をご覧ください。

    • サンプル数:469
    • サンプル時間の範囲:8~109秒
    • 合計時間:約250分
  2. VoxPopuli-Cleaned-AA:欧州議会の議事録。

    • サブセット:英語
    • サンプル数:628
    • サンプル時間の範囲:5~38秒
    • 合計時間:約119分
  3. Earnings22-Cleaned-AA:専門用語や複数話者の重なりを含む企業の決算説明会。

    • サンプル数:6
    • サンプル時間の範囲:約14~22分
    • 合計時間:約115分

VoxPopuli-Cleaned-AAとEarnings22-Cleaned-AAの詳細は、ブログ記事をご覧ください。両リポジトリで現在公開しているクリーニング済み文字起こしはバージョン1.0で、AA-WER v2に使用しています。

これらのクリーニング済み文字起こしは、手作業でのレビューとデータセット全体でのクロスバリデーションに基づき、逐語的な正解データを作成するために最善を尽くしたものです。今後の改善は後続バージョンとして公開します。問題を見つけた場合は、お問い合わせページまたはDiscordからぜひお知らせください。

音声の分割(Earnings22)

Earnings22には長いファイル(約14~22分)が含まれるため、評価モードとモデル設定によって分割方法が異なります。非ストリーミング文字起こし(バッチ/オフライン)では、デフォルトで元の音声全体を評価します。モデルやAPIの上限により短い入力が必要な場合、または途中での切り捨てやタイムアウトを避ける必要がある場合は、まず約9分のチャンクに分割し、必要な場合に限って約30秒まで短縮します。ストリーミング文字起こしでは、Earnings22のほとんどの実行で約30秒のチャンクを使用し、結果を元の通話単位に再集約します。一部のストリーミング設定では、プロバイダーのエンドポイントの動作により適合する場合、元の音声全体を評価します。単語の途中で分割しないよう、可能な限り発話の境界にチャンク境界を置きます。AA-AgentTalkとVoxPopuliのサンプルは十分に短いため、分割しません。

分割したEarnings22の音声では、結果を元の通話単位に再集約します。

  • WER:チャンクの文字起こしを元の通話単位に連結し、通話全体の正解データと照合して結合後の文字起こしのWERを算出します。その後、ほかのすべてのデータセットと同様に、元の通話間で音声時間による加重平均を取ります。
  • ストリーミング遅延:最終文字起こしまでの時間と最初の部分文字起こしまでの時間は、チャンク間の単純平均として集約します。

音声サンプル

正規化処理

比較の前に、参照(正解データ)とモデルによる文字起こしの仮説の両方を、OpenAIのWhisper正規化ツールで正規化します。

  • すべてのテキストを小文字に変換し、角括弧内のテキストとフィラー語("uh"、"um")を削除し、空白を正規化する
  • 短縮形を展開する(won'tとwill not、I'mとI am)
  • 数値表記を統一する(twenty fiveと25、two point fiveと2.5)
  • 句読点と記号を正規化する(意味を持たない記号を削除し、通貨やパーセントの表記を統一する)
  • 綴りを統一する(例:colourとcolor)

OpenAIのWhisper正規化ツールに加え、次の正規化も追加しています。

  • 数字、ID、電話番号について、連続表記、空白区切り、括弧付き、ハイフン区切りの同等な形式を統一する(例:1405 553 272と1405553272、(303) 775-4498と303 775 4498、CLM-2024-0873とCLM 2024 0873)
  • 区切り方が異なる、一文字ずつ区切った名前や綴り読みの文字列を統一する(例:S I N G HとS-I-N-G-H、A B CとA-B-C)
  • 先頭のゼロを保持し、同等な記号の読み上げ表現を正規化する(例:06100052、+とplus、engagement underscore rateとengagement_rate)
  • 同等な時刻表記を統一する(例:7:00pmと7pm、10:30 AMとten thirty AM)
  • 米国英語と英国英語の綴りの対応関係を追加する(例:totalledとtotaled)
  • データセット内の曖昧な固有名詞について、同等と認める綴りを追加する(例:MateoとMatteo)
  • 端点と単位が一致する数値範囲の表記を統一する(例:15-20 minutesとfifteen to twenty minutes、6-8%とsix to eight percent)
  • 意味が変わらない一般的な空白とハイフンの表記揺れを統一する(例:hard-codedとhardcoded、up frontとupfront、Sea-TacとSeaTac)
  • 欠落または置換によって文字起こしの意味が変わるコードや記号を保持する(例:F-150、W-2、$50、5%)
  • 繰り返し発話された大きな数の表現は、新しい数値に合算せず個別に保持する(例:twelve million twelve millionは24,000,000ではなく12,000,000 12,000,000とする)
  • 角括弧内の文字起こし内容は保持する一方、[music]、'<unk>'、language English'<asr_text>'などの注釈タグは削除する

例:

  • 正解データ:Hello, I'm Dr. Smith. I have twenty-five patients today.
  • モデル出力:hello i am doctor smith i have 25 patients today
  • 正規化後:hello i am doctor smith i have 25 patients today

WERの算出

  • WERはレーベンシュタイン距離に基づきます。これは、あるシーケンスを別のシーケンスに変換するために必要な置換、挿入、削除の最小回数を求め、2つのシーケンスを対応付ける手法です。
  • ここでは、モデルの文字起こし(仮説)を、検証済みの人間による文字起こし(参照)に戻すために必要な編集を測定します。
  • 短いクリップが多数あることで長いファイルに比べて結果が偏らないよう、各データセット内の結果は、音声時間で加重平均したWERとして集約します。

ストリーミング音声文字起こし

ストリーミングベンチマークは、上記のバッチベンチマークとの比較可能性を維持しながら、特に音声エージェントのユースケースにおけるストリーミングモデルの精度を示します。WER、正規化、データセット、重み付け、音声分割は上記の定義に従います。最終文字起こしのWERと、発話終了後の最初の部分文字起こしのWERを個別に報告します。

ストリーミングでは、各データセット内の遅延指標をサンプル数で加重し、WERは引き続き音声時間で加重します。分割したEarnings22の音声については、上記の分割結果の集約に関する注記をご覧ください。

ストリーミングの仕組み

音声は20msのチャンク単位、または公開されているモデル設定の推奨に従ってリアルタイムでストリーミングします。ストリーミングSTTモデルは、次の2種類の文字起こしを返します。

  • 部分文字起こし:まだ確定しておらず、変更される可能性があります。
  • 最終文字起こし:確定済みで、それ以降は変更されません。

すべての遅延測定にネットワーク遅延を含めます。これは独自モデルにおける実際のエンドユーザー体験を反映しますが、プロバイダー間で標準化するうえで課題となる場合があります。

強制エンドポイント処理

多くのモデルでは、別のVADが発話終了を検出した時点など、指定した時刻に最終文字起こしを生成させることができます。音声エージェントの開発者は、文字起こしをどの程度積極的に確定させるかを制御するため、個別に調整したエンドポイント検出モデルを併用することが多いため、これは重要です。強制エンドポイント処理に対応するモデルは以下の標準フローで評価し、対応しないモデルはフォールバックロジックで評価します(以下のタイミングロジックの詳細を参照)。

プロバイダーがエンドポイント関連の設定を提供している場合、強制エンドポイント信号だけが最終文字起こしをトリガーするように設定し、このユースケースについてプロバイダーが公開している推奨設定を使用します。

タイミングロジック:強制エンドポイント処理に対応

  • 音声をリアルタイムでストリーミングします。SileroVADが発話終了を検出した時点で、force-endpointリクエストを送信します。
  • 最終文字起こしまでの時間を測るタイマーは、音声ファイル内の発話終了タイムスタンプではなく、発話終了地点までの音声が実際にストリーミングされ、force-endpoint信号が送信された実時間の瞬間に開始します。これにより、テストハーネス側またはモデル側のペーシングのずれが遅延値に混入するのを防ぎます。
  • モデルから次の最終文字起こしを受信した時点でタイマーを停止します。WERは、結合した最終文字起こしから算出します。
  • SileroVADが作動する前にモデルがすでに最終文字起こしを共有していた場合は、直近のものを使用します。
  • 最初の部分文字起こしまでの時間も同様に測定し、force-endpoint信号の後に最初の部分文字起こしを受信した時点で停止します。

タイミングロジック:強制エンドポイント処理に非対応

  • SileroVADによる発話終了から2秒以内に生成された、最初の自然な最終文字起こしを使用します。
  • 2秒以内に自然な最終文字起こしが生成されない場合、2秒経過後に届いた最初の部分文字起こしを使用します。
  • 2秒経過後に何も届かない場合、2秒経過前の直近の部分文字起こしを使用します。

報告する指標

最終WERは、結合した最終文字起こしに、上記のロジックで選択した最終文字起こしまたはフォールバックの部分文字起こしを加えて算出します。一方、部分WERは、結合した最終文字起こしに、上記のロジックで選択したエンドポイント後の部分文字起こしを加えて算出します。どちらも完全な正解文字起こしと比較します。エンドポイント後の最初の部分文字起こしは、通常、モデルのストリーミング出力のより早い時点を反映するため、部分WERと最終WERは直接比較せず、個別に報告します。

モデルの採用基準

エンドユーザーが使用するモデルとプロバイダーを選べるよう、最も人気があり、性能の高い音声文字起こしモデルを取り上げることを目指しています。そのため、新しいモデルとプロバイダーの採用を判断する際は、「業界での重要性」と競争力のある性能を基準に評価します。現在、これらの基準を改善しており、ご意見やご提案をお待ちしています。モデルを提案する場合は、お問い合わせページからご連絡ください。

バージョン履歴

AA-WER v2.2

2026年5月~現在

  • 意味を持つ欠落や置換には引き続きペナルティを適用しつつ、意味を保持する次の文字起こし表記の揺れを同等として扱うよう、英語テキスト比較用の正規化ツールをさらに更新しました。
    • 同等な表現でのUnicodeアポストロフィーの違い(例:we’reとwe're)
    • 意味が一致する符号付きパーセント表記(例:-12%とnegative twelve percent)
    • 通貨記号がない場合の小数の区切り方(例:99.99とninety-nine ninety-nine)。ただし、通貨記号が欠落している場合は引き続きペナルティを適用(例:$71.50とseventy-one fiftyは同等ではない)
    • 書式上の違いにすぎないハイフンやダッシュの表記(例:18-year-oldと18 year old)
    • コード、URL、メールアドレスであることが明確な文脈での技術的な句読点(例:UserController.javaとUserController dot java、/v1/usersとslash v1 slash users、gmail.comとgmail dot com)
    • 読み上げ形式と表記形式が一致するバージョン、小数、分数の表記(例:version 1.24.3とversion one point twenty-four dot three、1.0とone point zero、1.25 inchesとone and a quarter inches)
    • 意味が変わらない単位の略記(例:mg/dLとmilligrams per deciliter、GBとgigabytes)
  • ストリーミング音声文字起こしの評価を開始し、最終文字起こしまでの時間と最初の部分文字起こしまでの時間という遅延指標を追加しました。

AA-WER v2.1

2026年4月~2026年5月

  • 意味を持つ欠落や置換には引き続きペナルティを適用しつつ、意味を保持する次の文字起こし表記の揺れを同等として扱うよう、英語テキスト比較用の正規化ツールを更新しました。
    • ハイフンや空白が数字のグループ化にのみ使われているIDと電話番号の表記(例:303-775-4498と303 775 4498、CLM-2024-0873とCLM 2024 0873)
    • 区切り方が異なる、一文字ずつ区切った名前や綴り読みの文字列(例:S I N G HとS-I-N-G-H)
    • 端点と単位が一致する数値範囲の表記(例:15-20 minutesとfifteen to twenty minutes、6-8%とsix to eight percent)
    • 意味が変わらない一般的な空白とハイフンの表記揺れ(例:hard-codedとhardcoded、up frontとupfront、Sea-TacとSeaTac)
    • 欠落または置換によって文字起こしの意味が変わるコードや記号の保持(例:F-150、W-2、$50、5%)
    • 繰り返し発話された大きな数の表現は、新しい数値に合算せず個別に保持(例:twelve million twelve millionは24,000,000ではなく12,000,000 12,000,000とする)
    • 角括弧内の文字起こし内容は保持する一方、[music]、'<unk>'、language English'<asr_text>'などの注釈タグは削除

AA-WER v2.0

2026年2月~現在

  • 音声エージェントのユースケースに重点を置いた新しい独自評価データセットAA-AgentTalk(重み50%)を、非公開のホールドアウトテストセットとして導入しました。
  • VoxPopuliとEarnings22の正解文字起こしをクリーニングし、参照文字起こしの誤りを修正して、より公正な評価を実現しました。
  • 文字起こしの品質に問題があったため、AMI SDMをベンチマークから削除しました。
  • 実際の文字起こし誤りではなく書式の違いによってWERが不当に高くなるのを抑えるため、Whisperの英語正規化ツールを基にした独自の正規化ツールを使用しました。
  • 新しい重み付け:AA-AgentTalk 50%、Earnings22-Cleaned-AA 25%、VoxPopuli-Cleaned-AA 25%。

AA-WER v1.0

2025年9月~2026年2月

  • 3つの公開データセット(AMI SDM、VoxPopuli、Earnings22)を使用した初回リリース。
  • 3つのデータセットで合計約6時間の音声。