埋め込みの隠れた欠陥: AI が間違える理由
近年、技術文書や科学文献からソーシャルメディアの投稿や顧客評価に至るまで、非構造化テキスト データが急増しています。さまざまな分野の企業が、このテキストが貴重な洞察を提供していることにますます気づき始めていますが、このデータを取得、整理、活用することは困難です。
人間の言語の意味の豊かさは、従来のキーワードベースのテキスト処理技術では捉えられず、不十分であることがわかっています。たとえば、「車の問題」を検索しても、「自動車の問題」に関する関連論文が見つからない場合があります。また、「画面がフリーズした」と記載されている製品レビューは、「システム クラッシュ」に関する顧客の苦情を調べるときに見逃される可能性があります。
この基本的な制約の結果として、単語や文章をその意味を捉える数値ベクトルに変換する新しい技術であるテキスト埋め込みが開発され、使用されました。大手テクノロジー企業は、さらに高度な埋め込みモデルの作成に数十億ドルを費やしてきました。OpenAI の埋め込み、Meta の RoBERTa、Google の BERT、および多数のオープンソースの代替モデルは、現在、現代の NLP システムに不可欠な要素となっています。
しかし、広く使用されているにもかかわらず、これらの埋め込みモデルが実際の設定でどのように機能するかについてはまだ完全には理解されていません。この理解不足により、次のような結果が生じています。
- システムがビジネスニーズを満たしていない場合に発生する、コストのかかる実装エラー。
- 検索システムや推奨システムで関連コンテンツが見つからない場合、ユーザー エクスペリエンスが低下します。さまざまなユーザー デモグラフィック、コンテンツ カテゴリ、言語間でパフォーマンスが異なります。
- 過度に複雑なモデルを採用している組織によるリソースの非効率的な使用
業界への関連性と適用性
さまざまな業界がこの分析から直接利益を得ることができます。
小売および電子商取引:
- 多言語の問い合わせ、同義語、スペルミスに対応するために製品検索を強化します。
- さまざまな説明を持つ類似製品を識別するための推奨システムを改善します。
- 感情の微妙な違いを認識する、より洗練されたレビュー分析ツールを開発します。
医療:
- 臨床文書検索システムにおいて、表記法のバリエーション間で医療用語を一致させることができます。
- 教育水準に関係なく、症状の説明のための患者の言語処理を強化します。
- 技術的変数間の概念のマッチングを改善することで医学文献の検索性を向上させる
ファイナンス:
- 文言に関係なく、ポリシー違反に対するコンプライアンス監視を強化します。
- 言語の違いを超えて疑わしいパターンを識別することで不正検出を強化します。
- 消費者からのさまざまな問い合わせをより深く理解することで顧客サービスを向上させる
埋め込みモデルが同様の結果を返す方法を見つける: この分析は、埋め込み動作を理解するための体系的な方法を提供することで、組織がモデルの選択、前処理のニーズ、および可能な拡張戦略についてより適切な決定を下すのに役立ちます。このアプローチにより、最終的には、より効率的で信頼性が高く、公平な言語処理システムが実現します。
テキスト埋め込みとは何ですか?
初心者向けに説明すると、テキスト埋め込みは単語や文章を数値ベクトルに変換します。数値ベクトルは本質的に長い数字のリストで、多次元の密なベクトルです。これらのベクトルは、意味の類似性が近接性によって表される高次元空間に配置されます。簡単に言えば、意味が似ているものはこの空間内で互いに近接しているはずです。これらの埋め込みは、現代の NLP のほぼすべての機能に利用されています。
Google で検索すると、「ニューヨークの宿泊場所」と入力しても、「ニューヨークのホテル」という意味だと認識されます。
メールクライアントが返信を提案するとき
コンテンツ推奨システムがあなたの好みに合う記事を見つけると
この機能は、数多くのアプリに採用されています。
- セマンティック検索エンジン
- コンテンツを推奨するシステム
- チャットボットの意図の特定
- 文書の整理とグループ化
- テキストを分類し、質問に答えるシステム
これらのアプリケーションの有効性は、埋め込みモデルがさまざまなテキストのバリエーションや言語的出現をどれだけうまく管理できるかに大きく依存します。小さな書式設定の違いに敏感すぎるモデルは実際の検索クエリで問題が生じますが、「この製品が大好きです」と「この製品が嫌いです」をほぼ同じものとして扱うモデルは感情分析には効果がありません。
埋め込みモデルの調査を始めた理由
サンプル ドキュメントを使用して、顧客の 1 人のために埋め込みモデルを調査していた日のことを、私は決して忘れません。「タッチ スクリーンのないラップトップ」を検索しようとしましたが、ベクター インデックスからはタッチ スクリーン ラップトップに関する応答しか得られませんでした。私たちの埋め込みモデルは、否定を完全に見逃していました。
その瞬間は、私の記憶に残りました。つまり、モデルが基本的な「without」を理解できないのであれば、他に何が欠けているのでしょうか? その出来事は、私を予期せぬ道へと導きました。私は、問題がどれほど深刻であるかを知る必要がありました。確かに、埋め込みモデルのベンチマークは印象的でしたが、ユーザーが毎日入力する乱雑な現実世界の言語ではどのように動作するのでしょうか? 単語のスペルミス、文の不完全さ、絵文字の使用があった場合はどうなるのでしょうか?
RAG Experiment Accelerator ( https://github.com/microsoft/rag-experiment-accelerator ) を使用して、さまざまなアプリケーションでさまざまな埋め込みモデルを 2 年間にわたって実験した後、これらのモデルがさまざまな種類の文のバリエーションを処理する方法を評価する体系的な方法を開発しました。私が発見したことは、私を怖がらせるものでした。
これらはランダムな不具合ではなく、これらのモデルが言語を認識する方法に組み込まれた、深く体系的な盲点でした。そして、誰もそれについて語っていませんでした。私がこれらの調査結果を共有しているのは、高度な埋め込みベースのシステムを実装するために何ヶ月も費やしたにもかかわらず、予期しない方法で機能しなくなることに気付くのが遅すぎるというチームをあまりにも多く見てきたからです。
この問題は単なる学術的な問題ではありません。埋め込み動作の誤解の結果は深刻です。大手ヘルスケア企業の同僚が私に、埋め込みモデルが略語や医療用語のバリエーションを適切に処理できないため、医療情報検索システムで関連する臨床文書が欠落していると教えてくれました。ヘルスケアでは、このようなミスが治療の決定に影響を与える可能性があります。
ある金融サービス会社では、埋め込みモデルが受動態の文 (「資金が送金された」) と能動態の文 (「誰かが資金を送金した」) が同じ意味であることを認識できなかったため、コンプライアンス監視システムがポリシー違反を見逃していました。私は、e コマース企業が、商品検索システムが買い物客がよく使用するタイプミスや言語の省略形に対応できなかったために、数百万ドルの損失を被ったのを目にしてきました。
私のテストアプローチ
私は、埋め込みモデルが複数の異なるカテゴリのテキスト バリエーションにどのように反応するかを調べるテスト フレームワークを開発しました。コサイン類似度をメトリックとして使用し (1.0 は意味が同一であることを意味し、0.0 はまったく無関係であることを意味します)、何百ものテスト ケースを実行しました。MSMarco DistilBERT、OpenAI テキスト埋め込みなど、複数のモデルに焦点を当てて、私が発見したことを詳しく説明します。ほとんどのトランスフォーマー ベースの埋め込みで同様のパターンを確認しました。
大文字と小文字が全く区別できない
これには驚きました。埋め込みモデルは、「 Apple が新製品を発表」と「apple が新製品を発表」をまったく同じものとして認識します。類似度スコアは完璧な 1.0 です。何の違いもありません。
私は製品カタログ システムでこれに遭遇しました。検索では、ブランド名「Apple」と果物名「apple」を区別できませんでした。Apple 製品を検索した顧客は、アップル パイのレシピを見つけました。顧客は結果を見て満足すると思いますか? きっと私は気に入らないでしょう。
なぜこれが重要なのでしょうか? 大文字と小文字の違いによって意味が変わるすべてのケースについて考えてみましょう。「Polish」と「polish」、「March」と「march」、「Bill」と「bill」などです。法律や医学のテキストでは、これらの区別が重要になることがあります。基本的に、私たちは、書き言葉の次元全体を部分的に無視するモデルを扱っています。このような問題を修正する方法はありますが、これについては後で説明します。埋め込みに関するその他の問題を理解しましょう。これらの違いが処理しているケースに影響しない場合は、これが有利になる可能性があることに注意してください。
数字は作り話かもしれない
これにも驚きました。埋め込みモデルは、「投資は年間 2% の収益を生みました」と「投資は年間 20% の収益を生みました」を同じものと見なし、類似度スコアは 0.97 と非常に高い値を示しました。2つのシナリオの間には、識別できる違いはありません。
金融文書検索システムでこれに遭遇しました。アルゴリズムは「管理手数料: 0.2%」と「管理手数料: 2.0%」の違いを区別できませんでした。低手数料のファンドを探している投資家は、代わりに高価なオプションを勧められました。あなたの退職金口座がこの間違いを喜ぶと思いますか? 手数料で貯蓄が食いつぶされるのは、きっと嫌なはずです。
数値が重要な投薬指示、工学的許容範囲、財務収益、契約期限などであるすべてのケースについて考えてみましょう。投資や医療のテキストの場合、これらの区別は人生を変えるほどのものです。基本的に、私たちは重要な数量で満たされたテキストを処理しているにもかかわらず、数値に疎いモデルで作業しているのです。
「ない」問題は怖い
これは実際に危険です。文に「not」を追加しても、文字通り意味が反転しますが、類似度スコアにはほとんど影響しません。完全に反対の表現に対して、0.95 を超えるスコアが頻繁に見られました。「治療により患者の転帰が改善された」と「治療により患者の転帰は改善されなかった」→ 類似度 0.96これを当社の医療検索システムを使用している医師に見せたところ、医師は恐怖を感じました。あまりの恐怖に、物理的にコンピューターから離れてしまいました。当然のことです。
私たちは、医師が治療プロトコルを見つけるために使用するシステムを構築していました。これを間違えると、人が死ぬ可能性があります。否定は特別なケースではなく、人間の言語の基本です。検索、推奨、または分析システムが「効果的」と「効果的でない」、または「安全」と「危険」を区別できない場合、危険な幻覚マシンを構築していることになります。
医療においては、有害な治療法を推奨することを意味する可能性があります。法的文書においては、契約上の義務を完全に覆す可能性があります。コンテンツモデレーションにおいては、「暴力は許容される」と「暴力は決して許容されない」の違いを見落とす可能性があります。
スペースは重要ではない(本当に重要になるまでは)
余分なスペース、タブ、奇妙な書式設定など、モデルは気にしません。類似度は 0.995 を超えています。しかし、すべてのスペースを削除すると、類似度は突然 0.82 に低下します。この問題は、スクレイピングされたコンテンツで作業中に発生しました。そのコンテンツは、HTML が不十分なために間隔が不規則でした。私たちは、スクレイピングされた数千のドキュメントを含むデジタル ライブラリ用に、この美しい検索システムを構築しました。クエリの半分は、間隔が不規則なため、何も役に立ちませんでした。司書たちは、プロジェクト全体を破棄する準備ができていました。
この癖は、ユーザー生成コンテンツ、OCR 文書、または英語と同じようにスペースを使用しない言語 (タイ語や中国語など) を扱う場合に壊滅的になります。また、これらのモデルはハッシュタグ、URL、製品コードなど、実際の人々が毎日検索するものに苦労します。
参照は難しい
組み込みモデルは、「車は木の左側にあります」と「車は木の右側にあります」をほぼ同一と見なします。これは、0.98 という非常に高い類似度スコアです。反対の視点を記述しているにもかかわらず、組み込みモデルはこれらをほぼ同一と認識します。ロボットが荷物を間違ったステーションに配達したら、倉庫管理者は喜ぶと思いますか? 私なら、きっとイライラして圧倒されるでしょう。
視点と参照フレームが不可欠なすべてのケースについて考えてみましょう。ナビゲーションの方向、空間関係、医療処置における相対的な位置、事故現場の法的説明などです。これらの区別は些細なことではありません。視点によって意味がまったく変わります。基本的に、私たちは何かを正面から説明しているのか、後ろから説明しているのかを判断できないモデルで作業しています。
反事実が完全に逆転する
これを見て私は笑い、そして泣きました。埋め込みモデルは、「需要が増加すれば、価格は上がる」と「需要が増加すれば、価格は下がる」を実質的に同一と見なします。驚くべきことに、類似度スコアは 0.95 です。それにもかかわらず、これらはまったく異なる経済シナリオを描いています。
私は経済研究論文の分析システムを構築しているときにこの問題に遭遇しました。アルゴリズムは相反する因果関係を区別できませんでした。需要急増時の価格上昇に関する論文を検索した経済学者は、不況時の価格下落に関する結果を取得しました。何百万ドルもの投資決定を行う金融アナリストが、正確に逆の情報を得ることを喜ぶと思いますか? 私は自分の退職金をそのような方法で管理されたくはありません。
もう一度、反事実的推論が重要となるすべてのケースについて考えてみましょう。経済予測、医学的因果関係、法的仮説、エンジニアリングの障害分析などです。「X なら Y」と「X でなければ Y ではない」を区別できない場合は、因果関係を根本的に誤解していることになります。基本的に、仮説や予測が満載のテキストを扱っているにもかかわらず、基本的な条件付きロジックを理解できないモデルを扱っていることになります。
範囲と正確な値
これには言葉を失いました。埋め込みモデルは、「製品の価格は 50 ~ 100 ドルです」と「製品の価格はちょうど 101 ドルです」をほぼ同じものと見なします。驚くべき 0.98 の類似度スコアです。1 つは範囲内、もう 1 つは範囲外ですが、モデルはほとんど気づきません。
私は、電子商取引のクライアント向けの価格比較システムを構築しているときに、このことに気付きました。検索では、価格帯と正確な価格を区別できませんでした。正確な価格が指定範囲外だった場合でもです。厳密に 100 ドルの予算で「100 ドル以下」の商品を探している買い物客には、120 ドルや 150 ドルの商品が表示され続けました。予算が固定されている顧客は、明らかに買えない商品を見ることを喜ぶと思いますか? 私なら、買えないものを閲覧して時間を無駄にしたくないでしょう。
価格決定、投薬量の範囲、法的期限、安全許容範囲、パフォーマンス ベンチマークなど、範囲と正確な値が重要になるすべてのケースについて考えてみましょう。モデルが「少なくとも 25 日」と「正確に 20 日」を基本的に同じものとして扱う場合、重要な意味が失われます。基本的に、テキストを処理しているにもかかわらず、柔軟性と精度を区別できないモデルを扱っています。この区別が決定を左右します。
真実と結果
以下は、msmarco-distilbert-base-tas-b、all-mpnet-base-v2、open-ai-text-embedding-3-large の比較です。これらのモデルの出力に大きな違いがないことがわかります。
msmarco-distilbert-base-tas-b 異なるテストケース間の埋め込みスコア
さまざまなテストケースにわたる all-mpnet-base-v2 埋め込みスコア
openai-text-embedding-3-large さまざまなテストケースにわたる埋め込みスコア
埋め込みの操作方法
見ての通り、埋め込みはこれらの問題にもかかわらず驚くほど便利です。埋め込みを使用しないと言っているのではなく、注意して使用してくださいと言っているのです。数十のプロジェクトと数え切れないほどの失敗を経て、私が実践してきたアドバイスは次のとおりです。
展開前に、実際のユーザー言語パターンでモデルをテストします。学術的なベンチマークや、サニタイズされたテスト ケースではなく、ユーザーがどのようにコミュニケーションするかの実際の例です。否定、タイプミス、数値の違いなどの一般的なバリエーションをシミュレートする「言語ストレス テスト」ツールキットを構築しました。テストするすべてのシステムは、いくつかの領域で失敗します。問題は、それらの領域が特定のアプリケーションにとって重要であるかどうかです。
重大な盲点の周囲にガードレールを構築します。アプリケーションによって、失敗が許されない要件は異なります。医療の場合、通常は否定とエンティティの精度です。金融の場合、数値と時間的関係です。法律の場合、条件と義務です。自分のドメインで絶対に失敗してはいけないことを特定し、特別な保護策を実装します。
埋め込みにすべてを賭けるのではなく、さまざまなテクニックを重ねます。当社の最も成功したシステムは、埋め込みベースの検索とキーワード検証、明示的なルール チェック、重要な区別のための特殊な分類器を組み合わせています。この冗長性は非効率的ではなく、不可欠なものです。
システムが確実に実行できることと実行できないことをユーザーに対して透明性を持って伝えます。結果に否定、数値比較、その他の潜在的な弱点が含まれる可能性がある場合に明示的にフラグを付ける信頼スコアを追加しました。ユーザーはこの正直さを評価し、システム全体に対する信頼を構築します。
私が学んだ最も重要なことは、これらのモデルは人間のように言語を理解するのではなく、統計的なパターンを理解するということです。人間のような理解を期待するのをやめて、特定の盲点を持つ洗練されたパターンマッチングツールとして扱い始めたとき、私のシステムは改善されました。はるかに改善されました。
私が説明した盲点は、すぐには消えません。これらのモデルの動作方法に組み込まれているからです。しかし、盲点があることがわかれば、それを考慮して設計することができます。そして、時には、限界を認めることが、それを克服するための第一歩となることもあります。
注: 実験を通じて、このようなケースが他にもたくさん見つかりました。これについては、コード例とともに次の投稿で取り上げる予定です。
次回の続きは近日公開予定です。お楽しみに!!