最もスコアの高いテキスト列を効率的に探索するアルゴリズム。
貪欲探索:各出力ステップで最高確率の1候補を選ぶ → 系列全体の最適解とは限らない
ビーム探索(ビーム幅
ビーム幅 B=3 の例:
t=1: "a"(0.7)、"b"(0.2)、"c"(0.1) を保持
t=2: 各候補を展開 → 9候補 → 上位3を残す
"ab"(0.42)、"ac"(0.21)、"ba"(0.10)、...
最終: 最もスコアが高い系列を出力
が大きいほど良い解を見つけやすいが、計算コストも増大する。
音声認識の最も基本的な評価指標——単語レベルの誤り率。
| 記号 | 意味 | 例 |
|---|---|---|
| Substitutions(置換) | 正解単語が別の単語に認識された | |
| Deletions(削除) | 正解単語が認識されなかった | |
| Insertions(挿入) | 存在しない単語が認識に現れた | |
| 正解文の総単語数 | — |
注意:
になることもある(挿入が多い場合)。
正解文:今日 は 天気 が いい(5単語)
認識結果:今日 は 天候 いい(4単語)
アライメント:
正解: 今日 は 天気 が いい
認識: 今日 は 天候 いい
今日 → 今日 (一致)
は → は (一致)
天気 → 天候 (置換: S+1)
が → (なし) (削除: D+1)
いい → いい (一致)
正解文:今日 は 晴れ(3単語)
認識結果:今日 は 今日 は 晴れ(5単語)
正解: 今日 は 晴れ
認識: 今日 は 今日 は 晴れ
「今日 は」が余分に挿入された
S=0, D=0, I=2, N=3
挿入が多いと WER は 100% を超えることもある。
WER/CER の計算基盤は編集距離(最小操作回数で2つの列を一致させる)。
動的計画法による計算(
初期条件:
ref = cat、hyp = car
| c | a | r | ||
|---|---|---|---|---|
| 0 | 1 | 2 | 3 | |
| c | 1 | 0 | 1 | 2 |
| a | 2 | 1 | 0 | 1 |
| t | 3 | 2 | 1 | 1 |
編集距離 = 1(t → r の置換1回で一致)
→ 文字レベルの CER を計算する場合も全く同じ手順
文字レベルの誤り率——日本語などでよく使われる。
| 指標 | 対象言語 | 使う理由 |
|---|---|---|
| WER | 英語・スペース分かち書き言語 | 分かち書き規則を固定して単語の誤りを測る |
| CER | 日本語・中国語など | 単語分割の規則の違いを避けて評価できる |
日本語の「今日は良い天気だ」を単語に分けると形態素解析が必要。
CERなら単語分割を避けられる。句読点・空白・表記の正規化はどちらも統一する。
正解文:今日は天気がいい(8文字)
認識結果:今日はてんきがいい(9文字)
文字単位のアライメント:
正解: 今 日 は 天 気 が い い
認識: 今 日 は て ん き が い い
操作:
「天」→「て」 置換 (S+1)
「気」→「ん」 置換 (S+1)
(なし)→「き」 挿入 (I+1)
「が」以降は一致
SLUE(Spoken Language Understanding Evaluation)
Shonほか(2022)が提案した、英語自然発話を用いる評価ベンチマーク。
| 評価 | 測るもの | 主な指標 |
|---|---|---|
| ASR | 書き起こしの正確さ | WER |
| 固有表現認識(NER) | 人名・地名・組織名などの抽出 | F1 |
| センチメント分析(SA) | ポジティブ・ネガティブ・ニュートラルの分類 | macro F1など |
初期版は2つのSLUタスク+ASR。Phase-2では課題が拡張されている。
書き起こしの正確さと下流タスク性能は別に評価する。SAの分類成績から、感情や意味理解全体の正確さは結論できない。
音素混同行列:どの音素が他の音素に誤認識されやすいかを可視化。
音素混同行列の例(行=正解音素、列=認識音素)
/a/ /i/ /u/ /e/ /o/
正解/a/ [ 95 2 1 1 1 ...]
正解/i/ [ 3 90 3 2 2 ...]
正解/u/ [ 2 4 88 2 4 ...]
(架空の例。行ごとに正規化した割合 %)
対角成分が高いほど一致が多い。挿入・削除も別に数える
日本語でよくある誤認識例
| 正解単語 | よくある誤認識 | 原因 |
|---|---|---|
| 橋(はし) | 箸(はし) | 音素列は同じ。アクセントや文脈の手がかりも条件に依存 |
| 音楽 | 音学 | 同じ読みからの表記選択の誤り(原因は要検証) |
Step 1:量的分析
Step 2:エラーの分類
| エラー種別 | 対処法 |
|---|---|
| 音響的誤り(類似音の混同) | 音響モデルの改善・データ増強 |
| 語彙外単語(OOV) | 辞書拡張・文字モデル使用 |
| 言語モデルエラー | LM 更新・ドメイン適応 |
| ハルシネーション | 無音・分割・復号条件を確認し、対策後も評価 |
Step 3:デバッグ → Step 4:改善策の立案と評価
!pip install "jiwer>=4,<5"
from jiwer import wer, cer
ref_en = "the cat sat on the mat"
hyp_en = "the cat sat on the mat at"
print(f"WER: {wer(ref_en, hyp_en):.1%}") # 16.7%(挿入 1 / 参照 6 単語)
ref_ja = "今日は天気がいい"
hyp_ja = "今日はてんきがいい"
print(f"CER: {cer(ref_ja, hyp_ja):.1%}") # 37.5%(編集 3 / 参照 8 文字)
自前の実装(最小編集距離を動的計画法で求める)
def edit_distance(reference, hypothesis):
m, n = len(reference), len(hypothesis)
dp = [list(range(n + 1))] + [[i] + [0] * n for i in range(1, m + 1)]
for i in range(1, m + 1):
for j in range(1, n + 1):
cost = int(reference[i - 1] != hypothesis[j - 1])
dp[i][j] = min(dp[i - 1][j] + 1, # 削除
dp[i][j - 1] + 1, # 挿入
dp[i - 1][j - 1] + cost) # 一致 / 置換
return dp[m][n]
第7〜9回の流れ
第7回: 音声と統計モデル(GMM-HMM, wav2vec 2.0)
↓ モデルを学んだ
第8回: 最新 E2E モデル(Conformer, Whisper)と実習
↓ 使い方を学んだ
第9回: 評価指標とエラー分析
↓ 評価方法を学んだ
第10回: 音声インタフェースと UX 設計 →
第9回テスト(5問・選択式)
テストは別途メールでお知らせしたURLから受験してください。
正解文:私 は 毎日 学校 へ 行く(6単語)
認識結果:私 は 毎日 学校 行く(5単語)
このときの WER はいくらか?
正解: 私 は 毎日 学校 へ 行く
認識: 私 は 毎日 学校 行く
「へ」が削除されている → D=1, S=0, I=0
N=6(正解の総単語数)
正解:選択肢 1
選択肢 3(1/5)は誤り——分母は正解文の単語数(6)であり、認識結果の単語数(5)ではない。
正解文:今日は天気がいい(8文字)
認識結果:今日はてんきがいい(9文字)
このときの CER はいくらか?
正解:選択肢 3(動的計画法で
単語分割の規則の違いを避けたいとき、CERを選ぶ理由として最も適切なのはどれか。
正解:選択肢 2
日本語・中国語などでは通常は単語間に空白を置かない。CERは単語分割の違いを避けられる。日本語でも分割規則を固定してWERを使える。
reference = [A, B, C, D](4単語)、hypothesis = [A, C, D, E](4単語)
の最小編集距離(単語レベル)はいくらか?
正解:選択肢 2(B を削除 D+1、E を挿入 I+1 → 合計2操作)
SLUE ベンチマークに関する説明として最も適切なものはどれか。
正解:選択肢 2
SLUE初期版には、NER・センチメント分析に加えて、同じデータでのASR評価も含まれる。
動画視聴後、Google FormsテストURL(別途メールで案内)に回答してもらう。テストは5問・選択式。
今回は計算問題が中心。数式を見るだけでなく、手を動かして計算の手順を体得してもらうことが目標。
第7〜8回で学んだAM・LM・デコーダの知識が全部つながるイメージを持ってもらう。今回は「評価」の段階。
モデル構成と学習方法は組み合わせられる設計軸であり、単純な世代順ではない。WERは条件をそろえて比較する。shallow fusionは確率そのものではなく、認識モデルと外部LMの対数確率を組み合わせた探索スコアである。
直感的なアナロジー:探索の「網の目の粗さ」。自己回帰型の単純な実装ではB=1が貪欲探索に相当する。CTC prefix beam searchは経路を合算するため、best-path復号との区別が必要。
分母が「正解文の単語数」であることを強調する。認識結果の単語数ではない。ここは計算ミスが多いポイント。
アライメントの「差分を探す」作業が編集距離の計算と同じ。次のスライドで動的計画法として一般化する。
Whisperのハルシネーション(存在しない発話を出力)が起きると挿入が大量に発生する。実際のシステムでのWER>100%の事例として紹介するとよい。
動的計画法の直感:左から右に埋めていく表計算。次のスライドで具体例を示す。
表の右下が最終的な編集距離。バックトレースでS/D/Iの内訳が分かる(コードで実装)。
日本語ではCERがよく使われるが、分かち書き規則を決めてWERも計算できる。アラビア語は通常、単語間に空白を書く。
テストの問2と同じ例題。手順を確実に追えるよう、アライメント→S/D/I数え上げ→計算の3ステップで説明する。
SLUE初期版はNER・SAの2つのSLUタスクとASR。SAはmacro F1であり、weighted F1ではない。提案はShonほかの共同研究でありMIT単独ではない。方式の優劣は課題と学習条件に依存し、2つのタスクから意味理解全体を一般化しない。
混同行列は「系統的誤り」を発見するツール。特定の音素ペアが混同されやすい場合、そのペアのデータ増強などを検討し、独立した評価データで効果を確かめる。
体系的なエラー分析の流れを「量→分類→デバッグ→改善」として整理。第8回の実習でやった誤りパターン分析がStep1〜2に相当する。
jiwerは1行で計算できるが、自前実装でアルゴリズムを理解することが重要。テストでは手計算の手順を問う。