cv.cm

AI · AI音声

AIの音声認識(文字起こし)はどんな仕組み?

約10分で読めます

結論

音声認識(ASR)は、音をスペクトログラム、つまりどの周波数が時間とともに大きいかを示す画像に変換します。ニューラルネットワークがその画像を読み、最もありそうな文章をトークン単位で書き出します。Whisper のようなモデルは数十万時間の書き起こし付き音声から学習しているため、多くの言語やノイズに対応できますが、固有名詞を聞き違えたり、無音の部分で文章を作り出したりすることがあります。

文字起こしを開く

音波から文字へ:4つのステップ

Whisper のような最近の音声認識モデルは、ファイルを渡すたびに同じ流れで処理します。

  1. リサンプリング。音声を1チャンネル、毎秒16,000サンプルに変換します。音声の情報の大半は8 kHz以下にあるため、これで十分です。
  2. スペクトログラムの作成。信号を短い重なり合う窓に切り分け(Whisper は10 msごとに25 msの窓)、各窓をメル尺度の80個の数値にします。メル尺度は、人間の聴覚に合わせて周波数を配置したものです。結果は、片方の軸が時間、もう片方が音の高さの帯になった画像です。
  3. エンコード。Transformer のエンコーダがスペクトログラムを読み、どの音が音声でどれがノイズかを含め、話された内容の表現を作ります。
  4. デコード。Transformer のデコーダが、音声とそれまでの文章を踏まえて次のトークンを選びながら、書き起こしを1トークンずつ書き出します。特殊トークンで、言語、タスク(書き起こしか、英語への翻訳か)、タイムスタンプを置く場所を指示します。

Whisper は音声を30秒の窓で処理します。1時間のファイルは、窓をずらしながら順に処理され、予測されたタイムスタンプによって次の窓をどこから始めるかが決まります。タイムスタンプは20 ms単位で予測されるため、Whisper による字幕のタイミングは良好ですが、フレーム単位で正確ではありません。

モデルはどう学習したか:大規模な弱教師あり学習

従来のシステムは、音を扱う音響モデル、発音辞書、語順を扱う言語モデルなど、別々の部品を組み合わせていました。各部品に、言語ごとに丁寧にラベル付けされたデータが必要でした。

Whisper は別の道を選びました。開発者はインターネット上にある、書き起こしとペアの音声68万時間を集めました。そのうち約11万7千時間は英語以外の96言語で、12万5千時間は英語以外の音声と英語テキストの組み合わせで、これがモデルに翻訳を教えました。ラベルは不完全でした(弱教師ありの「弱」の部分です)が、規模の大きさによって、評価データごとのファインチューニングなしでも、訛り、背景ノイズ、録音品質に頑健なモデルになりました。

同じ考え方が、弱点も説明します。そのデータセットで量の少ない言語は、認識精度が下がります。また、モデルはネット上の字幕の癖を覚えており、動画の最後によく出てくる決まり文句を付け足すことがあります。

精度の測り方:単語誤り率(WER)

音声認識の精度は、単語誤り率(WER)で報告されます。置換、削除、挿入された単語の数を、正解の書き起こしの単語数で割った値です。低いほど良く、モデルが大量にテキストを挿入すると100%を超えることもあります。

Reference:  the meeting moved to three thirty on friday   (8 words)
Model:      the meeting moved to tree  thirty    friday

Substitutions: three -> tree        1
Deletions:     on                   1
Insertions:                         0
WER = (1 + 1 + 0) / 8 = 25%

比較の前に、研究者は両方のテキストを正規化します。小文字化、句読点の除去、短縮形の展開、数字の表記の統一です。この処理がないと、「3:30」と「three thirty」は、どちらも正しいのに誤りと数えられてしまいます。ベンダーがWERを示すときは、どんな音声で測ったのかを確認しましょう。クリアな朗読音声と、ノイズの多い電話の通話では、何倍も差が出ることがあります。

中国語、日本語、タイ語のように単語をスペースで区切らない言語では、代わりに文字誤り率(CER)が使われます。

音声認識モデルの種類

種類仕組み強み弱み
エンコーダ・デコーダ型(Whisper 系)音声のかたまりを読み、デコーダでテキストを書く高精度、句読点、多言語、翻訳チャンク単位の処理のため、ライブ字幕は遅れる。幻覚が起きうる
CTC・トランスデューサ型短い音声フレームごとにラベルを予測し、結合する低遅延でライブ字幕に向く。テキストをほとんど作り出さない句読点や大文字小文字の処理に手間がかかる
プラットフォームの音声サービスブラウザやスマホが音声をベンダーのサービスに送るか、端末内のモデルで処理するセットアップ不要。Web Speech API でWebページから使えるブラウザや端末で挙動が異なる。ネットワークが必要な場合もある

Web Speech API の SpeechRecognition インターフェースを使うと、Webページがプラットフォームに、マイクからのライブ認識を依頼できます。既定ではブラウザやOSが提供するサービスを使い、端末上で動かせるブラウザもあります。Whisper を自前で動かすページ、たとえば Whisper をブラウザ内で実行して TXT、SRT、VTT で書き出せる cv.cm の音声文字起こしツールは、そのサービスに依存しませんが、モデルを最初に1回ダウンロードする必要があります。

音声認識が失敗するとき

  • 人名、ブランド名、専門用語。デコーダは一般的な単語を好むので、珍しい名字はありふれた名字になります。手作業で直すか、ツールが対応していれば、正しい綴りを書いた短いプロンプトを渡します。
  • 無音や音楽での幻覚。Whisper の論文は、長尺の書き起こしで、同じ文の繰り返しにはまり込む、区間の最初や最後の言葉を飛ばす、音声と無関係なテキストを出力する、といった現象を報告しています。無音のイントロ、拍手、BGMがよくきっかけになります。
  • 訛りとコードスイッチング。1つの文の中で2つの言語を混ぜる話者や、学習データの少ない強い地域訛りは、誤り率を上げます。
  • 重なり合う話者。ほとんどの音声認識は1本のテキストを書き出すだけで、誰が話したかは示しません。話者ラベル(話者分離、ダイアライゼーション)は別の処理です。
  • 繁体字と簡体字。北京語では、モデルがどちらの字体でも出力することがあります。1つの字体にしたいときは、後から書き起こしを変換します。
  • 言語の誤検出。自動判定は音声の冒頭を見ます。最初の数秒が音楽や別の言語だと、言語を手動で選ぶ必要があります。

きれいな字幕を作る実践ワークフロー

  1. 手元にある最良の音声から始めます。スピーカーから録り直したものではなく、元のファイルを使います。可能なら、声の下のBGMを下げます。
  2. 言語の誤検出や架空の文の原因になる、冒頭の長い無音や音楽をトリミングします。
  3. 言語がわかっているなら、手動で設定します。
  4. 最終的な字幕には大きいモデルを、さっとメモを取るには小さいモデルを選びます。大きいモデルは遅いものの、固有名詞や訛りでの誤りが少なくなります。
  5. SRT か VTT で書き出し、動画を見ながらファイル全体を一度読みます。名前、数字、繰り返している行を直します。
  6. 長いキューは分割します。読みやすい字幕は2行程度で、少なくとも1秒は画面に残ります。

よく使われる2つの字幕形式は、細部が少し違うだけです。

SRT:
1
00:00:01,000 --> 00:00:04,000
Welcome to the lesson.

VTT:
WEBVTT

00:00:01.000 --> 00:00:04.000
Welcome to the lesson.

SRT は各キューに番号を付け、ミリ秒の前にカンマを使います。HTMLのvideo要素で使われるW3C形式の WebVTT は、WEBVTT ヘッダーで始まり、ピリオドを使います。

プライバシーと同意

会議、通話、インタビューの録音には個人データが含まれ、多くの国で人を録音するには本人の同意が必要です。クラウドの文字起こしサービスを使う前に、音声がどこに保存されるか、学習に使われるかを確認しましょう。アプリやブラウザでモデルをローカル実行すれば、音声は端末の外に出ません。プライバシー要件を満たす最も簡単な方法になることが多いです。

よくある質問

AIの文字起こしはどのくらい正確ですか?

利用者の多い言語で、話者が1人のクリアな音声なら、最近のモデルの誤りは100単語あたり数個程度です。ノイズ、話者の重なり、強い訛り、少数言語、専門用語では精度が下がるため、名前と数字は必ず校正してください。

Whisper が言っていない言葉を書くのはなぜですか?

音声を条件にしたテキスト生成モデルだからです。無音、音楽、ノイズの部分では、同じ行の繰り返しや、ネット動画の最後によくある決まり文句など、一般的にありそうなテキストを続けることがあります。無音のトリミングと言語の指定で軽減できます。

音声認識で誰が話しているかもわかりますか?

それだけではわかりません。話者の識別は話者分離(ダイアライゼーション)と呼ばれ、通常は別のモデルが区間を「話者1」「話者2」のようにラベル付けします。そのラベルを実際の名前に対応づけるのは人間の作業です。

SRT と VTT の違いは何ですか?

どちらも開始・終了時刻を持つプレーンテキストの字幕ファイルです。SRT はタイムスタンプにカンマを使い、各キューに番号を付けます。VTT は WEBVTT の行で始まり、ピリオドを使い、ブラウザがHTMLのvideoでそのまま読める形式です。

オフラインで文字起こしできますか?

できます。Whisper のようなオープンなモデルは、パソコンや最新のブラウザの中で、音声をサーバーに送らずに動かせます。最初の実行時にモデルをダウンロードし、その後はファイルをアップロードせずに文字起こしできます。

AIチュートリアル一覧