自分の名前を英語で名乗ったら、AIがまったく違う単語として聞き取った。
勤務先の社名、担当している商品名、住んでいる町の名前。
AI英会話で自己紹介をしようとすると、必ずこの壁にぶつかる。
これは発音の問題である前に、音声認識という装置の構造の問題だ。
音声認識は「知っている単語の中から、いちばんそれらしいものを選ぶ」装置であって、知らない単語は原理的に出力できない。
その穴を埋めるために用意されているのが、カスタム語彙と呼ばれる一群の仕組みである。
この記事では、AIの部品を売っている会社の開発者向けドキュメントの記述だけを材料にして、カスタム語彙が何を変えていて、何を変えられないのかを1つずつ開けていく。
サービスの順位づけはしない。仕組みの話だけをする。
【結論】カスタム語彙は「単語を追加する」のではなく「選ばれる確率を傾ける」仕組み
先に答えを置く。
Google Cloud のモデル適応(model adaptation)のドキュメントは、機能の目的をこう定義している。
「You can use the model adaptation feature to help Speech-to-Text recognize specific words or phrases more frequently than other options that might otherwise be suggested.」
公式が挙げている例が分かりやすい。
音声に「weather」がよく出るなら、「whether」ではなく「weather」として文字に起こしてほしい。そのために認識モデルを「weather」寄りに傾ける(bias する)、という説明だ。
つまりカスタム語彙は、辞書に単語を1つ足す操作ではなく、候補の重みを変える操作である。
| 誤解 | 公式ドキュメントの実際の書き方 |
|---|---|
| 知らない単語を辞書に登録する | 認識結果として選ばれる確率を上げる(bias する) |
| 登録すれば必ずその単語になる | 確率が上がるだけ。誤検出も同時に増えうる |
| 1回設定すれば全体に効く | 強さは数値で調整する対象になっている |
| どの言語でも同じように使える | 機能の可否が言語ごとに異なる |
⇒ カスタム語彙は「通らない単語を通す」ためのものだが、その効き方は確率であって保証ではない。
カスタム語彙が必要になる理由|認識器の語彙は大きいが無限ではない
まず、なぜ固有名詞が通らないのかを公式の言葉で押さえておく。
Google のベストプラクティスにはこう書かれている。
「The recognizer has a very large vocabulary, however terms and proper names that are out-of-vocabulary will not be recognized.」
語彙は非常に大きいが、語彙の外にある用語や固有名詞は認識されない、と明言している。
そして同じ項目の推奨側にはこうある。「Use word and phrase hints to add names and terms to the vocabulary and to boost the accuracy for specific words and phrases.」
「語彙の外は出ない」と「ヒントで足せる」がセットで書かれている。
モデル適応のページは、役に立つ場面を3つに整理している。
- 頻出する語句の精度を上げる。 ユーザーがよく使う音声コマンドなどを認識モデルに知らせておく。
- 語彙そのものを広げる。 固有名詞やドメイン固有の単語など、一般的な言語使用ではまれな語を足す。
- 音声がノイジーだったり不明瞭だったりする場合の精度を上げる。
3番目が地味に重要だ。カスタム語彙は、音が悪いときの保険にもなるという位置づけになっている。
カスタム語彙の第1の形|フレーズを渡して確率を傾ける
いちばん単純な形は、単語や語句の一覧を渡すやり方だ。
公式の説明はこうだ。「To increase the probability that Speech-to-Text recognizes the word “weather” when it transcribes your audio data, you can pass the single word “weather” in the PhraseSet object」。
複数語のフレーズを渡した場合の挙動も書かれている。
「When you provide a multi-word phrase, Speech-to-Text is more likely to recognize those words in sequence. Providing a phrase also increases the probability of recognizing portions of the phrase, including individual words.」
フレーズで渡すと、そのフレーズ全体だけでなく、中の単語単体も通りやすくなる。
ただし数と量には上限があり、公式は「See the content limits page for limits on the number and size of these phrases」と別ページを案内している。
Microsoft 側にも対応する仕組みがあり、名前が違う。
Azure Speech の言語サポートには、フレーズ リストについてこう書かれている。「(フレーズ リストは)ランタイム認識機能であり、モデルのカスタマイズ機能ではありません。この機能が有効になっているロケールでは、基本音声エンドポイントとカスタム音声エンドポイントの両方で、リアルタイムの文字起こしと高速文字起こしでフレーズ リストを使用できます。フレーズ リストでは、モデルトレーニングは必要ありません。」
| カスタム語彙の種類 | 事前の学習が要るか | 効き方 |
|---|---|---|
| フレーズ リスト/PhraseSet | 不要(ランタイムで効く) | 渡した語句が選ばれる確率が上がる |
| カスタムモデル(追加学習) | 必要(データを用意して学習させる) | モデル自体がドメインの語彙を覚える |
その場で効くものと、学習が要るもの。カスタム語彙という言葉は、この2つをまたいで使われている。
カスタム語彙の第2の形|クラスで「種類」ごとに傾ける
固有名詞を1つずつ書き出すのが現実的でない場合のために、別の仕組みがある。
公式が「classes」と呼ぶものだ。
「Classes represent common concepts that occur in natural language, such as monetary units and calendar dates. A class helps you improve transcription accuracy for large groups of words that map to a common concept, but that don’t always include identical words or phrases.」
公式の例は住所だ。
「My house is 123 Main Street, the fourth house on the left」という音声で、「123」を序数の「one-hundred twenty-third」ではなく住所の番地として認識させたい。
だが世の中のすべての番地を書き出すのは非現実的である。「It’s impractical to list every possible street address in a PhraseSet resource.」
そこで「番地というカテゴリ」を指定する。数字が何であっても番地として読ませる、という指定だ。
指定にはクラストークンという特別な文字列を使い、$ADDRESSNUM のような形でフレーズの中に埋め込む。
ここで公式が親切に書いている落とし穴がある。
["my address is $ADDRESSNUM"] だけを登録すると、「I am at 123 Main Street」のような似ているが同一でない発話には効かない。だから「クラストークンを単体でも入れておけ」と書かれている。
そして誤ったトークンを書いた場合の挙動も明記されている。「If you use an invalid or malformed class token, Speech-to-Text ignores the token without triggering an error but still uses the rest of the phrase for context.」
エラーは出ず、黙って無視される。設定したつもりで効いていない、という事故が起きやすい設計だ。
なお、クラスの利用可否は一律ではない。「Class availability varies by transcription model and language.」と注記されている。
カスタム語彙の効き目を数値で調整する|boost という考え方
ここがカスタム語彙のいちばん面白いところだ。
公式は、既定の効き目が弱いことを自分から認めている。
「By default model adaptation provides a relatively small effect, especially for one-word phrases.」
そこで boost という重みづけの機能が用意されている。「The model adaptation boost lets you increase the recognition model bias by assigning more weight to some phrases than others.」
公式の例は「fair」と「fare」だ。
どちらもフレーズに登録すると「hare」や「lair」より通りやすくなるが、両者の間では確率が同じになる。「Without boost values, the recognition model will recognize “fair” and “fare” with equal probability.」
そこで片方に大きい値を与えて、どちらを優先するかまで指定する。
| boost の仕様 | 公式に書かれている内容 |
|---|---|
| 取りうる値 | 0 より大きい浮動小数点数 |
| 実用上の上限 | 20(the practical maximum limit for boost values is 20) |
| 決め方 | 実際の文字起こし結果を見ながら上下させて実験する |
| 上げすぎた副作用 | 音声に無い語まで出てくる(false positives) |
| 複数語フレーズへの適用 | フレーズ全体にだけ適用される。部分には効かない |
この最後の行が実務では厄介で、公式も対処法を書いている。
長いフレーズを boost しても効かないときは、その中の 2 語の組み合わせ(bigram)を個別に登録して、それぞれに boost 値を振れという指示だ。
副作用についても正面から書かれている。
「Higher boost values can result in fewer false negatives… However, boost can also increase the likelihood of false positives; that is, cases where the word or phrase appears in the transcription even though it didn’t occur in the audio.」
⇒ カスタム語彙を強く効かせるほど、言っていない単語が文字起こしに混ざるリスクが上がる。
カスタム語彙の第3の形|モデルそのものを追加学習させる
その場で効くヒントでは足りない場合、モデル自体を作り替える道がある。
Microsoft のCustom Speech とはは、既定の状態をこう説明している。
「音声認識では、Microsoft が所有するデータを使用してトレーニングされ、一般的に使用される音声言語を反映する基本モデルとしてユニバーサル言語モデルが活用されます」。
そのうえでカスタムモデルの役割を書く。「カスタム モデルを使用すると、モデルをトレーニングするテキスト データを提供することによって、ベース モデルを拡張し、アプリケーションに特有のドメイン固有のボキャブラリの認識を向上させることができます。」
ここで言う「ドメイン固有のボキャブラリ」が、まさにカスタム語彙の中身だ。
効果の測り方も定義されている。基本モデルの文字起こしと人間の文字起こしを比べて単語誤り率(WER)を出し、「WER スコアが高い場合は、誤って識別された単語を認識するようにカスタム モデルをトレーニングすることをお勧めします」とされている。
コストの話も明記されている。
- 「Custom Speech モデルの使用とエンドポイント ホスティングには料金が発生します」と公式に書かれている。
- バッチ文字起こしに限れば「ホストされたデプロイ エンドポイントは必要ありません」とされ、リソースを節約できると案内されている。
- 「トレーニング操作の完了には、数日かかる場合があります」とも書かれている。
カスタム語彙を本気で通すには、時間とお金と人手がかかるということだ。
カスタム語彙をモデルに教えるためのデータ仕様
追加学習の側の仕様を見ると、カスタム語彙が何を求めているかがよく分かる。
Microsoft のトレーニングとテストのデータセットは、データ種別ごとに推奨量を表で示している。
| データの種類 | 公式が示している数量 |
|---|---|
| 関連テキスト(プレーンテキスト) | 1 – 200 MB |
| 構造化テキスト | 最大 4,000 の項目、最大 50,000 のトレーニング文を含む最大 10 個のクラス |
| 発音テキスト | 1 KB から 1 MB まで |
| オーディオ+人間がラベル付けした文字起こし | 1 から 100 時間のオーディオ |
| 精度の評価用 | 0.5-5 時間のオーディオ |
そして公式は「テキストを使用したトレーニングは、オーディオによるトレーニングよりもはるかに高速です(分単位と日単位)」と書いている。
だから「プレーンテキスト データまたは構造化テキスト データから始めます。このデータによって、特殊な用語や語句の認識が改善されます」というのが推奨の順序になる。
関連テキストが効く理屈も説明されている。
「関連テキスト文を使用すると、一般的な単語やドメイン固有の単語をコンテキストに表示することによって、その単語の誤認識に関連する置換エラーを減らすことができます。」
単語を裸で並べるのではなく、その単語が出てくる文ごと渡すことに意味がある、という設計だ。
ただし公式は、やりすぎも止めている。
「製品名などの用語の重みを増やすには、その用語を含む複数の文を追加します。ただし、コピーしすぎないでください。これが全体的な認識率に影響する可能性があります。」
「文字、単語、または単語のグループを 3 回より多く繰り返すことは避けます」という具体的な線も引かれている。
カスタム語彙で「読み方」まで指定できる|発音辞書という層
カスタム語彙には、綴りだけでなく音を指定する層がある。
Microsoft の構造化テキストの仕様には、発音辞書(phonetic lexicon)の書き方が載っている。
公式の例はこうだ。「”cat” のように聞こえる単語があり、発音を “k ae t” に調整する場合は、- cat/k ae t」と書く。
制限も明記されている。「最大 15,000 個のエントリ。単語あたり最大 2 個の発音。」
1つの単語に登録できる読み方は、最大で2つまでだ。
構造化テキストのファイル仕様も細かく決まっている。
- 拡張子は
.md。最大ファイルサイズは 200 MB。テキストエンコードは UTF-8 BOM。 - リストは最大 20 個。リストあたり最大 35,000 項目。
- トレーニング文からは
{@list name}の形でリストを参照できる。同じ文で複数参照してもよいし、まったく参照しなくてもよい。 - プレーンテキストのほうは「1 行あたりの発話の数=1」「ファイルの最大サイズ 200 MB」「URI は拒否されます」。
日本語にも注意書きがある。「一部の言語(日本語や韓国語など)では、大量のテキスト データをインポートする際に時間がかかったり、タイム アウトしたりすることがあります。データセットは、それぞれ最大 20,000 行のテキスト ファイルに分割することを検討してください。」
カスタム語彙まわりの仕様は、言語によって難易度が違うということが公式に書かれている。
カスタム語彙の限界|言語ごと・モデルごとに使えるかが変わる
「カスタム語彙が使える」という一言では、実は何も決まらない。
Microsoft の言語サポートのページは、カスタマイズの可否を機能別・ロケール別の表で管理している。
「音声テキスト変換認識の精度を向上させるために、一部の言語と基本モデルをカスタマイズできます。ロケールに応じて、人間がラベル付けしたトランスクリプト、プレーンテキスト、構造化テキスト、発音データを含むオーディオをアップロードできます。既定では、使用可能なすべての基本モデルでプレーンテキストのカスタマイズがサポートされています。」
ロケールによって、渡せるデータの種類が違うということだ。
Google 側も同じ構造で、言語一覧に「Model adaptation」という機能フィルタが用意されている。
Cloud Speech-to-Text V2 supported languages のフィルタ項目には、Automatic punctuation / Speaker diarization / Model adaptation / Word-level confidence / Profanity filter / Spoken punctuation / Spoken emoji が並ぶ。
つまり「この言語ではモデル適応が使えるか」を、言語ごとに表で確認する構造になっている。
boost についても「To see whether the boost feature is available for your language, see the language support page」と案内されている。
そして Microsoft は、カスタム語彙を足す前の判断基準も書いている。「米国英語など、最も使用の多い言語の1つを使用する場合は、オーディオ データを使用してトレーニングする必要性は低いです。」
カスタム語彙の話から見える、AI英会話での固有名詞の扱い方
ここまでの仕様から、利用者側で言えることが決まる。
効果を保証する話ではなく、仕様上そうなっているという話だけを書く。
- 固有名詞が通らないのは、自分の発音だけの問題とは限らない。 公式が「out-of-vocabulary な用語や固有名詞は認識されない」と明言している。
- 固有名詞は、文の中に置いて話す。 関連テキストの説明にあるとおり、単語が「コンテキストに表示される」ことが認識の助けになる設計だ。
- 同じ固有名詞を何度も言い直しても、仕組み上は同じ結果になりやすい。 認識器の語彙が変わるわけではない。
- 文字起こしに言っていない単語が出てきたら、boost の効かせすぎの可能性がある。 公式が false positives として名指ししている現象だ。
- 練習の主戦場を固有名詞に置かない。 自分の名前や社名が通るかどうかは、英語力ではなく辞書の設定の話である。
通らない固有名詞に時間を使うより、通る語彙で会話量を積むほうが仕組みと噛み合う。
カスタム語彙に関するよくある質問
Q. カスタム語彙に登録すれば、その単語は必ず認識されるのか。 A. されない。公式の定義は「recognize specific words or phrases more frequently than other options」で、確率を上げる仕組みである。しかも既定の効果は「relatively small effect, especially for one-word phrases」と書かれている(出典)。
Q. 効き目を強くすればいいのではないか。 A. boost の実用上の上限は 20 と書かれている。ただし上げると false positives、つまり音声に無かった語が文字起こしに現れる確率も上がると公式が明記している。
Q. 学習が必要なものと、その場で効くものがあるのか。 A. ある。Microsoft はフレーズ リストについて「ランタイム認識機能であり、モデルのカスタマイズ機能ではありません」「モデルトレーニングは必要ありません」と書いている。一方カスタムモデルの学習は「数日かかる場合があります」とされている。
Q. 読み方まで指定できるのか。 A. できる。構造化テキストの発音辞書に - cat/k ae t の形で書ける。ただし「最大 15,000 個のエントリ。単語あたり最大 2 個の発音」という制限がある。
Q. どの言語でも同じように使えるのか。 A. 使えない。Microsoft は「一部の言語と基本モデルをカスタマイズできます」と書き、Google は言語一覧に Model adaptation の可否フィルタを置いている。言語ごとに表で確認する構造になっている。
まとめ|カスタム語彙は確率を傾ける道具であって、魔法の辞書ではない
もう一度整理する。
- 認識器の語彙は非常に大きいが有限で、語彙の外の固有名詞は認識されないと公式が明言している。
- カスタム語彙の正体は「選ばれる確率を傾ける」仕組みで、登録=必ず出力される、ではない。
- 形は3つ。その場で効くフレーズ リスト/PhraseSet、種類でまとめるクラス、学習が要るカスタムモデル。
- 効き目は boost で調整でき、実用上の上限は 20。強くするほど言っていない語が混ざるリスクが上がる。
- 使えるかどうかは言語とモデルごとに違う。「カスタム語彙対応」という一言では何も決まらない。
⇒ AI英会話で自分の名前や社名が通らないとき、それはあなたの英語の到達度とは別の層で起きている問題だ。層を切り分けられれば、練習の焦点がずれずに済む。
※本記事の一次ソースはすべて2026-09-16に各公式ドキュメントで確認した。仕様は更新されるため、最新は各公式ドキュメントで確認してほしい。
Comments