MENU

言語識別はAI英会話で何をしているのか。話した言語を自動で判定する仕組みと限界を分解した

AI英会話で英語を話しているのに、返ってきた文字起こしが日本語になっていた。

あるいはその逆で、日本語で質問したのに英語として文字に起こされた。

これは「AIの性能が低い」という話ではない。

音声認識の手前に、どの言語として聞くかを決める工程が別に存在しているからだ。

その工程の名前が「言語識別(Language Identification、略してLID)」である。

そして言語識別には、公式ドキュメントにはっきり書かれた設計上の制約がいくつもある。

この記事では、AIの部品を売っている会社が公開している開発者向けドキュメントの記述だけを材料にして、言語識別が何をしていて、どこで必ず失敗するのかを1つずつ開けていく。

サービスの順位づけはしない。仕組みの話だけをする。

TOC

【結論】言語識別は「候補リストの中から1つ選ぶ」装置で、候補外は選べない

先に答えを置く。

言語識別は、世界中の言語の中から話された言語を当てる装置ではない。

Microsoft Learn の言語識別を実装するは、冒頭でこう定義している。「言語識別は、オーディオで読み上げられた言語を、サポートされている言語の一覧と比較して自動的に識別するために使用されます」。

つまり、先に候補の一覧を渡し、その中から1つを選ばせる仕組みだ。

ここから、言語識別の挙動がほぼ全部説明できる。

言語識別が扱っていること言語識別が扱っていないこと
渡された候補の中で、どれがいちばん近いか候補の外の言語を見つけること
発話の頭で1回、または発話の途中で複数回の判定1つの文の中で言語が切り替わること
「言語」単位の判定「単語」単位の判定
基本言語ごとに1つのロケール同じ言語の方言の区別(en-USとen-GBの同時指定)

⇒ 言語識別で起きるトラブルの大半は「候補リストの設計ミス」であって、認識エンジンの精度の話ではない。

言語識別は音声認識とは別の部品だ(ここを混ぜると話が通じなくなる)

公式ドキュメントは、認識と識別を分けて考えろと名指しで書いている。

Microsoft Learn の該当ページにはこうある。「認識と識別を混同しないようにしてください。言語識別があってもなくても認識は使用できます」。

これは重要な区別だ。

  • 音声認識だけ=「この音声は英語である」と人間が決め打ちしてから文字に起こす。
  • 言語識別+音声認識=まず何語かを機械に決めさせ、その結果を使って文字に起こす。
  • 言語識別はオプション機能であり、使わないという選択が普通に存在する。

Microsoft の音声テキスト変換の概要にも、言語検出は独立した機能として並んでいる。「言語検出を使用すると、音声認識モデルはオーディオ入力で話されている言語を自動的に識別できます。これは、オーディオの言語が事前に不明な場合や、多言語のオーディオ コンテンツがある場合に便利です」。

裏を返せば、言語が事前に分かっているなら使う理由がない機能だということでもある。

AI英会話アプリで「学習する言語を英語に設定してください」という画面が最初に出るのは、言語識別をあえて使わず、決め打ちにしているからだ。

決め打ちのほうが速く、しかも間違えない。

公式ドキュメントも「音声認識では、言語識別の初期待機時間が長くなります。このオプション機能は、必要な場合にのみ含めてください」と明記している。

言語識別は、つけるとタダでは済まない部品なのだ。

言語識別には2つのモードがある|開始時LIDと継続的LID

Microsoft の実装は、言語識別を2つのモードに分けている。

「スピーチでは、開始時と継続的な言語識別(LID)の両方がサポートされます」と公式に書かれている。

項目開始時のLID継続的なLID
いつ判定するかオーディオの最初の数秒間で1回オーディオの間、複数回
候補にできる言語の数最大4つ最大10
返ってくるまでの時間5秒未満で1つの言語を返す公式に秒数の記載はこの形では置かれていない
使いどころオーディオ内の言語が変わらない場合オーディオ内の言語が変わる可能性がある場合
1回認識で使えるか使える使えない(継続的な認識でのみサポート)

設定の実体は SpeechServiceConnection_LanguageIdMode というプロパティで、値は AtStart か Continuous のどちらかだ。

このプロパティを指定しなければ、既定は開始時のLIDになる。

公式の記述は「プロパティは、継続的なLIDの場合のみ必須です。それがない場合、Speechサービスは既定で開始時のLIDになります」。

⇒ 何も設定していないAI英会話は、たいてい「最初の数秒で1回だけ言語を決めて、あとは変えない」状態で動いている。

言語識別の最大の落とし穴|候補にない言語を話しても、候補のどれかが返ってくる

ここが、言語識別でいちばん誤解されている挙動だ。

言語識別は「該当なし」を返さない。

Microsoft Learn の記述をそのまま引く。「音声サービスは、提供された候補言語がオーディオに含まれていない場合でも、それらのうちの1つを返します。たとえば、(フランス語)と(英語)が候補として指定されているが、ドイツ語が話されている場合、サービスからは…」という例が挙げられている。

候補がフランス語と英語の2つなら、ドイツ語を話してもフランス語か英語のどちらかが返る。

「分かりません」という答えは、この装置の出力に含まれていない。

AI英会話にあてはめると、こうなる。

  • アプリが候補を「英語と日本語」に設定していれば、あなたが何を話しても英語か日本語のどちらかとして処理される。
  • 発音が崩れた英語は、日本語側に寄って判定されることがありうる。
  • 逆に、カタカナ英語まじりの日本語は英語側に寄ることもありうる。
  • どちらに転んでも、機械は堂々と「判定できた」という顔で結果を返す。

⇒ 文字起こしが妙な言語になったときは、まず「候補リストに何が入っているか」を疑うのが筋だ。

言語識別は「基本言語ごとに1ロケール」しか持てない(en-USとen-GBは共存しない)

もう1つ、公式が名指しで禁じている設定がある。

候補言語はダッシュ区切りの完全なロケール(en-US のような形)で指定する必要があるが、「言語識別では基本言語ごとに1つのロケールのみが使用されます。同じ言語に対して複数のロケール(…など)を含めないでください」と書かれている。

これは、言語識別が「英語かどうか」までしか見ておらず、「アメリカ英語かイギリス英語か」は見ていないということだ。

ところが、その下流にある音声認識のほうは、英語を細かいロケールに分けて持っている。

Microsoft のAzure Speech の言語サポートには en-AU en-CA en-GB en-GH en-HK en-IE en-IN en-KE en-NG en-NZ en-PH en-SG en-TZ en-US en-ZA という15種類の英語ロケールが載っている。

Google 側も同様で、Cloud Speech-to-Text V2 supported languages には English (United States) / English (United Kingdom) / English (Australia) / English (India) / English (Ireland) / English (New Zealand) / English (Singapore) / English (Hong Kong) / English (Philippines) / English (Pakistan) の10種類が並ぶ。

工程英語をいくつに分けているか
言語識別(候補リスト)1つだけ(基本言語ごとに1ロケール)
音声認識(Microsoft の一覧)15種類の en-XX ロケール
音声認識(Google の一覧)10種類の English (…) エントリ

ここに段差がある。

言語識別を有効にした瞬間、「英語」は1本に束ねられ、どのロケールの認識モデルを使うかは候補リストを書いた人が事前に決めた1つに固定される。

Google がこの一覧に添えている注意書きも強い。「Use only the language codes shown in the following table. The following language codes are officially maintained and monitored externally by Google. Using other language codes can result in breaking changes.」

言語コードは自由に書ける文字列ではなく、表に載っているものだけが有効だという宣言である。

言語識別は「文の途中で英語が混ざる」を検出できない

日本人のAI英会話でいちばん起きやすい事故が、ここに正面から書かれている。

継続的なLIDは、オーディオの途中で言語が変わることを追える。

だが公式は続けてこう書く。「継続的なLIDでは、同じ文章内での言語の変更はサポートされていません。たとえば、主にスペイン語を話しているときに、英語の単語を挿入した場合、単語ごとの言語の変更は検出されません」。

これを日本語話者の状況に置き換えると、そのまま日常の風景になる。

  • 英語で話している途中に「えーっと」が入る。
  • 日本語で説明している途中に固有名詞だけ英語で言う。
  • 1つの文の中で「これって What do you call it?」のように切り替える。

この3つはどれも、言語識別の設計の外側にある。

混ざった文は、まるごと片方の言語だと判定され、もう片方の単語はその言語の音として無理やり文字にされる。

⇒ 「AIが自分の英語を変な日本語に起こしてくる」のは、精度不足ではなく境界の設計の問題である場合がある。

言語識別を有効にすると、待ち時間が増える

会話系のAIにとって、待ち時間は品質そのものだ。

言語識別のページには、機能紹介の直後に注意書きが置かれている。「音声認識では、言語識別の初期待機時間が長くなります。このオプション機能は、必要な場合にのみ含めてください」。

そして開始時のLIDについては「1つの言語が検出され、5秒未満で返されます」と書かれている。

5秒未満というのは上限の話であって、会話のテンポでは決して短くない。

だからAI英会話の設計者は、たいてい言語識別を切る。

設計の選択得るもの失うもの
言語識別を使わない(言語を決め打ち)初期待機時間が増えない・判定ミスがゼロユーザーが自分で言語を選ぶ画面が要る
開始時のLIDを使う最初の言語選択が不要になる初期待機時間が増える・途中の切り替えに追随しない
継続的なLIDを使う会話の途中の言語切り替えに追随する1回認識では使えない・文中の混在は依然として不可

アプリの起動時に学習言語を選ばされるのは、開発の手抜きではなく、この表の1行目を選んだ結果だ。

言語識別とカスタムモデルの組み合わせには制限がある

言語識別は、単独で動く部品ではなく、他の機能と組み合わさるときに制限が出る。

公式ドキュメントは、カスタムモデル(Custom Speech)との併用についてこう書いている。「カスタムモデルを使用した言語検出は、リアルタイムの音声テキスト変換と音声翻訳でのみ使用できます。バッチ文字起こしでは、既定の基本モデルの言語検出のみサポートされます」。

言語ごとに別のカスタムモデルを割り当てる書き方も、公式のサンプルに出てくる。

検出された言語が en-US なら既定のモデル、fr-FR ならフランス語用のカスタムモデルのエンドポイント、という分岐だ。

つまり言語識別の結果は、そのあとどのモデルで聞くかという分岐のスイッチとして使われている。

スイッチが誤って倒れれば、その先の認識モデルも語彙も全部ずれる。

言語識別の1回の判定ミスが、文字起こしの全体をおかしくするのはこのためだ。

言語識別が対応している言語の数は、音声認識より少ないことがある

「使える言語」という言い方は、実は機能ごとに別々の表を見ないと答えが出ない。

Microsoft の言語サポートのページは、機能ごとに表を分けている。

音声テキスト変換、テキスト読み上げ、発音評価、音声翻訳、カスタムTTS、カスタムキーワードなどが並び、「これらを使用して、Azure Speech 機能ごとにターゲット言語とロケールを使用できるかどうかを確認します」と案内される。

  • ある言語が音声認識に対応していても、発音評価に対応しているとは限らない。
  • ある言語が認識に対応していても、カスタマイズ(モデルの追加学習)に対応しているとは限らない。
  • 言語識別の候補に置けるかどうかも、そのロケールが認識に対応していることが前提になる。

Google 側も同じ構造で、言語の表に「Automatic punctuation」「Speaker diarization」「Model adaptation」「Word-level confidence」「Profanity filter」「Spoken punctuation」「Spoken emoji」という機能別のフィルタが付いている。

言語ごとに、使える機能の集合が違う。

⇒ 「日本語対応」「英語対応」という1語の宣伝文句は、どの機能の話なのかを言っていない限り情報量がほぼゼロだ。

言語識別の挙動から逆算した、AI英会話の使い方

ここまでの仕様から、利用者側で打てる手が決まる。

効果を保証する話ではなく、仕様上そうなっているという話だけを書く。

  • 1つの文の中で言語を混ぜない。 文中の切り替えは継続的なLIDでも検出されないと公式に書かれている。言い直すなら、文を切ってから切り替えるほうが仕様と噛み合う。
  • 言い出しの数秒を英語で埋める。 開始時のLIDは「オーディオの最初の数秒間で1回」判定する。冒頭の「えーっと」は、その数秒を日本語で占有することになる。
  • アプリ側に言語設定があるなら必ず設定する。 決め打ちにすれば言語識別そのものが走らず、初期待機時間も判定ミスも消える。
  • 文字起こしが別言語になったら、内容ではなく設定を見る。 候補リストの設計の問題であって、発音の練習量の問題とは限らない。
  • 「該当なし」は返ってこないと知っておく。 機械は必ずどれかを返す。返ってきた言語名は「正解」ではなく「候補の中でいちばん近いと判断されたもの」だ。

どれも精神論ではなく、公式ドキュメントに書かれた制約の裏返しである。

言語識別に関するよくある質問

Q. 言語識別は何か国語まで同時に候補にできるのか。 A. Microsoft の実装では、開始時のLIDが最大4つ、継続的なLIDが最大10と公式に書かれている(出典)。無制限ではない。

Q. 候補に入れていない言語を話したらどうなるのか。 A. エラーにはならず、候補のうち1つが返る。公式は「提供された候補言語がオーディオに含まれていない場合でも、それらのうちの1つを返します」と明記している。

Q. イギリス英語とアメリカ英語を両方候補に入れられるか。 A. 言語識別では基本言語ごとに1つのロケールのみが使用されると書かれており、同じ言語に対して複数のロケールを含めないよう公式が指示している。

Q. 日本語の中に英単語を1つ入れたら、その単語だけ英語として扱われるか。 A. 扱われない。公式は「同じ文章内での言語の変更はサポートされていません」「単語ごとの言語の変更は検出されません」と書いている。

Q. 言語識別を使うと会話が遅くなるのか。 A. 公式が「言語識別の初期待機時間が長くなります」と書いている。開始時のLIDは5秒未満で1つの言語を返すという記述もあり、リアルタイム会話ではこの時間が体感に乗る。

まとめ|言語識別は「当てる装置」ではなく「選ばせる装置」

もう一度整理する。

  • 言語識別は、サポートされている言語の一覧と比較して話された言語を選ぶ機能であり、候補の外は原理的に選べない。
  • モードは2つ。開始時のLIDは最大4言語・5秒未満で1回、継続的なLIDは最大10言語で、後者は継続的な認識でのみ使える。
  • 候補にない言語を話しても候補のうち1つが返る。「該当なし」という出力は存在しない。
  • 文の中で言語が混ざるケースは検出されないと公式が明記している。日本語まじりの英語はこの穴に落ちる。
  • 有効にすると初期待機時間が長くなるので、AI英会話の多くは言語を決め打ちして、この機能をそもそも使っていない。

⇒ 「AIが自分の英語を聞き取れない」と感じたとき、原因は認識エンジンの精度だけではない。その手前で、何語として聞くかを決めている工程がある。そこの設計を知っていると、失敗の切り分けが一段速くなる。

※本記事の一次ソースはすべて2026-09-16に各公式ドキュメントで確認した。仕様は更新されるため、最新は各公式ドキュメントで確認してほしい。

Let's share this post !

Author of this article

Comments

To comment

TOC