
クロスリンガル埋め込み検索とは、ある言語のクエリで別の言語の文書を、翻訳せずに意味の近さだけで探し出す技術である。多言語の埋め込みモデルは、これを言語をまたぐ単一のベクトル空間で実現すると期待される。だが当社が日本語・英語・タイ語・ラオ語を扱うナレッジ検索(RAG)基盤で実測したところ、低リソース言語であるラオ語だけは、言語をまたぐ検索がほぼ成立しなかった。本記事は、その分離性能を言語別に測った一次データと、原因の構造的な説明、そして「言語別インデックス」という現実的な解決策までをまとめたものだ。対象読者は多言語のナレッジ検索や RAG を設計するエンジニアで、読み終えると「クロスリンガル前提は全言語で成り立つわけではない」という前提の見直しと、対象言語ごとに分離性能を実測する手順を持ち帰れる。

多言語RAGは「1つの埋め込みモデルに全言語を入れれば、言語をまたいで意味で繋がる」という前提に立つことが多い。この前提は高・中リソース言語では概ね正しいが、低リソース言語では崩れる。 本章ではまずクロスリンガル検索の仕組みと、その前提がどこで危うくなるのかを整理する。
クロスリンガル検索は、クエリと文書の言語が違っても、両者を同じベクトル空間に埋め込み、その距離(類似度)で関連性を判定する仕組みだ。たとえばタイ語で質問を投げて日本語のマニュアルがヒットするのは、「タイ語の文」と「同義の日本語の文」が空間上で近い座標に配置されているからである。これが成立すれば、ナレッジを言語ごとに用意しなくても、1つのインデックスで多言語の利用者に応えられる。多言語対応のコストを大きく下げられるため、多くの多言語RAGがこの前提を採用している。この発想が魅力的なのは、対応言語を増やしてもインデックスを増やさずに済む点にある。日本語で書かれた1本の社内マニュアルが、英語でもタイ語でも検索できれば、ナレッジの管理は1系統で完結する。だが、この利便性は「すべての言語が同じ空間にきれいに整列している」という暗黙の仮定の上に成り立っている。その仮定が一部の言語で崩れると、検索は誰にも気づかれないまま空振りし始める。
当社のチャット/ナレッジ基盤も、当初は単一のベクトル空間で全言語の検索をまかなっていた。日本語・英語・タイ語では期待どおり動いていたため、この前提を疑う理由はなかった。問題が表面化したのは、ラオ語のナレッジ検索を検証し始めたときだ。ラオ語で質問しても、明らかに対応するはずの文書がまったくヒットしない。最初はインデックスの不備や前処理のバグを疑ったが、原因はもっと根深く、埋め込みモデルがラオ語を他言語と同じ空間へ整合できていないことにあった。ここから、言語ごとに分離性能を測り直す検証を始めた。振り返ると、危うさのサインは「動いている言語」の側に隠れていた。日本語・英語・タイ語で同義文が上位に並ぶ様子だけを見て、多言語対応は十分だと早合点していたのだ。実際には、検証していなかったラオ語で前提が完全に崩れていた。「主要言語で動くから全言語で動く」という一般化こそ、最初に捨てるべき思い込みだった。

測定結果は明快だった。日本語・英語・タイ語はクロスリンガルで機能し、ラオ語だけが無関係文より低い類似度しか出さず、事実上他言語と直交していた。 以下はすべて当社が同一の多言語埋め込みモデルで測った値である(同義文ほど類似度が高いほど良い)。
文書を日本語に固定し、各言語のクエリから同義文書への類似度を測った。無関係な文書の類似度はおよそ 0.21 で、これを下回ると「意味でつながっていない」と判断できる。
結論:日本語・英語・タイ語はノイズ基準(約0.21)を十分上回るが、ラオ語は 0.03 とノイズより低く、ほぼ直交している。
| クエリ言語 | 同義文との類似度 | 判定 |
|---|---|---|
| 日本語 | 0.61 | ✅ |
| 英語 | 0.55 | ✅ |
| タイ語 | 0.45 | ✅(ノイズより十分高い) |
| ラオ語 | 0.03 | ❌(無関係文より低い) |
タイ語が 0.45 で機能している点が重要だ。タイ語とラオ語は文字体系も語彙も近縁だが、クロスリンガル性能はまったく異なる。「近い言語だから同じように動くはず」という直感は通用しない。
次に、ラオ語のクエリから各言語の同義文書への類似度を測った。もしラオ語が英語などを介して間接的にでも他言語とつながっているなら、どこかの言語で高い値が出るはずだ。
| ラオ語クエリ → | 類似度 |
|---|---|
| ラオ語文書(同一言語) | 0.80 ✅ |
| タイ語文書 | 0.13 |
| 英語文書 | 0.065 |
| 日本語文書 | 0.064 |
結果は、同一言語のラオ語文書にだけ 0.80 という高い値が出て、他のどの言語にもほとんど届かないというものだった。英語を経由した間接的なつながりも観測されない。ラオ語のベクトルは、他言語から隔離された領域に固まっている。逆に言えば、ラオ語同士の検索は極めて良好で、ここに解決の糸口がある。
「ラオ語が壊れている」と言っても、ラオ語のすべてがダメなわけではない。同一言語内で同義文と無関係文をどれだけ引き離せるか(識別力=同義の類似度 − 無関係の類似度)を測ると、ラオ語も機能している。
| 言語 | 同一言語内の識別力 |
|---|---|
| 日本語 | 0.49 |
| 英語 | 0.46 |
| タイ語 | 0.64 |
| ラオ語 | 0.34 |
ラオ語の 0.34 は他言語より低いものの、無関係文とは区別できている。値がやや小さいのは、無関係文でも類似度が高めに出る(空間が圧縮気味)ためだ。さらに、別の汎用埋め込みモデル(旧モデル)と比較すると、ラオ語のクロスリンガルは旧モデルでも破綻していた(同義 0.14 < 無関係 0.25)。一方で同一言語ラオ語の識別力は、旧モデルの 0.18 から現行モデルで 0.34 へ改善している。つまりクロスリンガルの破綻は特定モデル固有のバグではなく、低リソース言語に共通する構造的な限界だと分かる。

鍵は、「同一言語内で意味が近いと分かる能力」と「言語をまたいで意味を同じ座標へ揃える能力」が別物であり、後者だけが学習リソース量に強く依存することにある。 順に見ていく。
埋め込みモデルがラオ語同士の検索で 0.80 を出せるのは、「ラオ語のテキスト同士がどれだけ意味的に近いか」を学習できているからだ。これは単一言語内の分布さえ十分にあれば獲得できる。一方、クロスリンガル検索が要求するのは「ラオ語の概念を、他言語の同じ概念と同じ部分空間へ写像する」整合能力で、これには対訳的な手がかり(並行コーパスや言語をまたぐ共起)が大量に必要になる。同一言語の類似が機能していても、言語間の整合が欠けていれば、クロスリンガル検索だけが先に壊れる。今回ラオ語で観測したのは、まさにこの「片方だけ機能する」状態だった。たとえるなら、ラオ語の地図はラオ語の世界の中では正確に描けているが、その地図を世界地図の正しい位置に重ね合わせる座標系が与えられていない状態だ。地図そのものの精度(同一言語の類似)と、地図を共通座標へ載せる力(言語間整合)は、まったく別の問題なのである。
埋め込みモデルは web 規模の多言語データで学習されるが、その分布は高・中リソース言語に強く偏っている。タイ語は中リソース言語として十分な学習量があり、他言語との整合を獲得している。だからタイ語クエリで日本語文書が見つかる。対してラオ語は低リソースで、言語間整合の学習が薄い。結果、ラオ語ベクトルは孤立した領域に固まり、他言語へ一切ヒットしない。無関係文でも類似度が高めに出る圧縮現象も、整合が取れず空間が痩せていることの同じ症状だ。一般化すれば、低リソース言語ではクロスリンガル能力が真っ先に欠落する。この偏りは、低リソース言語をどれだけ丁寧に前処理しても埋まらない。学習データの総量そのものが、言語間整合の天井を決めているからだ。だからこそ、モデルを差し替えても低リソース言語のクロスリンガルだけが先に頭打ちになる。今回、新旧2つのモデルで同じ症状が再現したことは、この構造を裏づけている。
クロスリンガルが壊れていると分かると、最初に手を付けたくなるのはトークナイザや文字正規化、ストップワード処理といった前処理だ。だが今回の破綻は前処理層の問題ではない。ラオ語同士の検索が 0.80 で良好に機能している事実が、前処理は正しく働いていることを示している。壊れているのは埋め込みモデルが学習した言語間の整合そのものであり、入力の整え方をいくら最適化しても、ラオ語ベクトルが他言語の空間へ近づくことはない。前処理の改善に時間を溶かす前に、まず「同一言語は機能しているのにクロスリンガルだけ壊れている」のか「両方壊れている」のかを切り分けるべきだ。前者なら原因は整合能力の欠如であり、対処は前処理ではなく検索アーキテクチャの側にある。

「多言語埋め込みモデル=どの言語のクエリでもどの言語の文書に当たる」という前提は、高・中リソース言語でのみ成り立つ近似にすぎない。低リソース言語の利用者に対しては、クロスリンガル検索に依存してはならない。 やっかいなのは、この破綻が例外もログも出さず静かに起きる点だ。類似度が低いだけで、システムは淡々と無関係な文書を返すか、しきい値次第で結果ゼロを返す。利用者には「答えが無い」ように見え、運用側には「検索は動いている」ように見えるため、高リソース言語だけで検証して問題が出ないと、低リソース言語の利用者が空振りの検索を使わされていることに誰も気づけない。監視するなら、言語別のヒット率や平均類似度をダッシュボードに出し、特定言語だけ極端に低い値が続いていないかを見るとよい。その上で、設計に効く示唆が二つある。
今回の知見はラオ語固有のものではない。原因が「言語間整合の学習リソース不足」である以上、学習データが薄い言語全般に同じリスクがある。クメール語、ミャンマー語、各種の地域言語など、web 上のテキスト量が限られる言語を扱う場合は、同じ破綻を疑うべきだ。逆に、英語・中国語・主要な欧州言語のような高リソース言語同士なら、クロスリンガルはおおむね信頼できる。重要なのは「この言語は高・中・低リソースのどれか」を意識し、低リソース側に倒れる言語ほど個別検証を厚くすることだ。言語を1つ追加するたびに、その言語のクロスリンガル分離性能を測る——この一手間が、静かな検索破綻を防ぐ最も確実な方法になる。
特別なベンチマークは要らない。各言語について、(1) 意味が同じクエリと文書のペア(同義ペア)、(2) 無関係なクエリと文書のペア(無関係ペア)を数十組ずつ用意し、それぞれの類似度の分布を比べるだけでよい。同義ペアの類似度が無関係ペアを十分に上回っていれば機能しており、並ぶか下回れば破綻している。クロスリンガルを測るなら、クエリと文書の言語を変えたペアを用意する。サンプルが少なすぎると分布が安定しないので、最低でも各条件で数十組は欲しい。実運用で頻出する語彙やフレーズを含めると、本番に近い判定ができる。判定の基準値(しきい値)も、この分布から決めるとよい。無関係ペアの類似度がどこまで上がるかを把握しておけば、検索結果を採用するかどうかのカットオフを言語ごとに調整できる。1つのしきい値を全言語に流用すると、空間が圧縮気味の言語で無関係文を拾いやすくなるため注意したい。今回の検証も、この素朴な「同義 vs 無関係」の比較だけでラオ語の破綻を明確に捉えられた。

クロスリンガルが壊れていても、同一言語内(ラオ語↔ラオ語=0.80)は良好に機能する。これを利用し、ナレッジを利用者の言語へ翻訳して保存・埋め込みし、検索を同一言語比較に持ち込むのが言語別インデックスである。
設計は次の3点に集約される。第一に、ナレッジ文書を利用者の言語へ翻訳して保存・埋め込みし、言語別の埋め込み行を持たせる。第二に、検索時は利用者の言語の埋め込みと照合する(=同一言語比較)。翻訳が用意できていない場合は原文の埋め込みへフォールバックする。第三に、翻訳には低リソース言語ペアに強い言語モデルを優先的に使い、失敗時には別系統へフォールバックさせる。要するに、壊れているクロスリンガル比較を避け、機能している同一言語比較だけで検索を成立させる発想だ。フォールバックの設計は、品質と安全性の両面で効く。翻訳がまだ無いナレッジは原文の埋め込みで暫定的に検索し、翻訳が用意できた時点で同一言語比較へ自動的に切り替える。これにより、翻訳バッチの進捗に関係なく検索は常に動き続ける。翻訳系統を複数持たせるのも、特定のモデルが低リソース言語ペアで失敗したときに検索品質が一気に落ちるのを防ぐためだ。
ラオ語のクエリ(LMS の設定・テナント作成・ユーザー登録に関する質問)を、対応するナレッジに対して検索し、経路ごとに類似度を比較した。
結論:ラオ語へ翻訳した言語別インデックス経由が 0.64 で、日本語原文へのクロスリンガル検索 0.42 を明確に上回った。
| 検索経路 | 類似度 |
|---|---|
| ラオ語翻訳(言語別インデックス) | 0.64 ✅ |
| 日本語原文(クロスリンガル) | 0.42 |
補足すると、この例で原文クロスリンガルでも 0.42 が出たのは、クエリに含まれる "LMS" や "tenant" といったラテン文字の共有トークンが効いたためだ。純粋なラオ語だけのクエリでは、原文経路の類似度はおよそ 0 まで落ちる。つまり実際の業務クエリでは、言語別インデックスとの差はさらに開く。
言語別インデックスは万能ではない。翻訳(言語モデル呼び出し)と追加の埋め込みコストが発生し、ストレージも保持する言語数の分だけ増える。だが全言語に一律で適用する必要はない。クロスリンガルが機能する言語(英語・タイ語など)への適用は任意とし、破綻する言語(ラオ語)に優先して適用すれば費用対効果が高い。さらに、翻訳が無い場合に原文へフォールバックする設計にしておけば、一部の言語・一部のナレッジから段階的に導入しても検索全体が壊れない。ストレージ増加も、適用言語を絞れば現実的な範囲に収まる。破綻する1〜2言語にだけ翻訳行を持たせるなら、全ナレッジを全言語へ複製する必要はない。まずアクセスの多いナレッジと、最も破綻が深刻な言語から着手し、効果を測りながら対象を広げるのが堅実だ。コストは一度に背負うのではなく、検索品質の改善が見える範囲で段階的に投じればよい。

多言語RAGでラオ語のような低リソース言語を扱うとき、現場でよく出る疑問をまとめた。
対象言語ごとに「同義文の類似度」と「無関係文の類似度」を測り、両者が十分に離れているかを見るのが基本だ。同義文の類似度が無関係文を下回る、あるいはほぼ並ぶ言語は、クロスリンガル検索が成立していないと判断できる。エラーは出ないため、必ず数値で確認する必要がある。実務では、まず日本語や英語のような高リソース言語で基準値を取り、それと並べて極端に低い言語がないかを一覧で見ると、破綻している言語をすばやく特定できる。検索ログから言語別の平均類似度やヒット率を継続的に出しておけば、運用中の劣化にも早く気づける。
文字や語彙の近さと、埋め込みモデルが学習した言語間整合の量は別物だからだ。タイ語は中リソース言語として十分な学習量があり他言語と整合しているが、ラオ語は低リソースで整合の学習が薄い。当社の実測でもタイ語は 0.45、ラオ語は 0.03 と大きく分かれた。近縁言語でも個別に測るべきである。
する。だからこそ低リソース言語ペアに強い言語モデルを翻訳に使い、失敗時に別系統へフォールバックさせる設計が重要になる。ただし、翻訳経路(0.64)が原文クロスリンガル(0.42)を上回った当社の検証が示すとおり、現実の翻訳品質でも同一言語比較の利得は十分に大きい。

多言語埋め込みモデルのクロスリンガル能力は、言語のリソース量に依存し、低リソース言語で真っ先に破綻する。当社の実測では、タイ語がクロスリンガルで機能する一方、近縁のラオ語は無関係文より低い類似度しか出さず、他言語と事実上直交していた。一方で同一言語内の検索は良好に機能する。だからこそ、同一言語検索とクロスリンガル検索を別物として扱い、対象言語ごとに分離性能を実測することが欠かせない。破綻する言語には、翻訳して同一言語比較に持ち込む言語別インデックスで対処し、原文フォールバックを併用すれば安全に段階導入できる。多言語のナレッジ検索を設計するなら、まずは自分たちが使う全言語で「同義 vs 無関係」を測ることから始めてほしい。当社の多言語ナレッジ基盤の知見が、低リソース言語を含む検索設計の一助になれば幸いだ。
Chi
ラオス国立大学で情報科学を専攻し、在学中は統計ソフトウェアの開発に従事。データ分析とプログラミングの基礎を実践的に培った。2021 年より Web・アプリケーション開発の道に進み、2023 年からはフロントエンドとバックエンドの両領域で本格的な開発経験を積む。当社では AI を活用した Web サービスの設計・開発を担当し、自然言語処理(NLP)、機械学習、生成 AI・大規模言語モデル(LLM)を業務システムに統合するプロジェクトに携わる。最新技術のキャッチアップに貪欲で、技術検証から本番実装までのスピード感を大切にしている。