埋め込み対生成:モデルがこなす二つの仕事
埋め込みと生成は別々の仕事です。自分の課題がどちらを必要としているかを知ることが、本当に機能するシステムへの最短ルートです。
人々は「AIを使う」ことを、まるで一つの能力であるかのように語ります。実際には、ほとんどのプロダクトを支えるモデルは、少なくとも二つのまったく異なる仕事をこなしており、それらを混同することがプロジェクトの行き詰まる一般的な原因です。一つの仕事は生成です。新しいテキスト、コード、画像をトークンごとに生み出すこと。もう一つは埋め込みです。あるコンテンツを、その意味を捉える数値のリストに変え、機械が他のコンテンツと比較できるようにすること。両者が似て感じられるのは、同じ基盤の仕組みがしばしば両方を支えているからですが、答える問いは異なり、システムの異なる部分に属します。
本記事は両方の仕事を平易な言葉で説明し、それぞれがどこに収まるかを示し、自分の課題が実際にどちらを必要としているかを見分ける助けになります――というのも、驚くほど多くの「もっと賢いモデルが要る」問題が、実は「間違った仕事を使った」問題だからです。
生成がすること
生成は、言語モデルと聞いて多くの人が思い描く仕事です。何らかの入力――プロンプト、質問、書きかけの文書――を与えると、それまでに来たすべてに基づいて選ばれる断片を一つずつ生み出し、出力します。結果は、それまで存在しなかった新しいコンテンツです。答え、要約、書き直し、ひとかたまりのコード。
生成を特徴づける性質は、それが生み出すことです。生成は開放的です。正しい出力の定まったメニューはなく、モデルが何かを組み立てます。その力は同時にコストでもあります。生成は一歩ずつ進むため比較的遅く、各ステップが本物の計算なので比較的高価で、各ステップに真の選択があるので出力はばらつきます。何かを創り出す必要があるとき、生成が正しい仕事であり、これらのコストは入場料です。
埋め込みがすること
埋め込みは新しいコンテンツではありません。測定です。モデルはあるコンテンツを読み、固定長の数値のリスト――ベクトル――を返します。それは、そのコンテンツが一種の「意味空間」のどこに位置するかを表します。似た意味を持つ二つのコンテンツはその空間で近くに着地し、異なる意味を持つ二つは遠くに離れます。数値そのものは人間には読めませんが、それで構いません。その全目的は、コンピューターに比較されることだからです。
埋め込みを特徴づける性質は、大規模に類似度を測れることです。文書がいったん埋め込まれれば、あるクエリに最も関連するものを見つけるのは、速い数学的演算です――クエリのベクトルを保存済みのベクトルと比較し、近さで並べる。埋め込みは安く、速く、保存して再利用できる安定した結果を生みます。生成が創るところで、埋め込みは位置を突き止めます。
両者を見分ける簡単な方法
自分の課題に一つ問いを立てましょう。システムに何かを作ってほしいのか、それとも何かを見つけたり比較したりしてほしいのか。
答えが「作る」なら――この返信を書く、この要約を起草する、この段落を翻訳する、このコードを生成する――生成が必要です。答えが「見つける」または「比較する」なら――私の文書のどれがこれに答えるか、この二つのチケットは重複か、これらのレビューを話題ごとにまとめる、このクエリは過去に見たものに近いか――埋め込みが必要です。多くの実際の機能は両方を順番に必要とし、その継ぎ目を見分けることが設計作業のほとんどです。
両者がどう連携するか
二つの仕事が協働する最も明快な例は、検索拡張生成(RAG)です。ほとんどの「文書とチャットする」機能の背後にある標準パターンです。これは二つの仕事にちょうど対応する二段階で動きます。
第一に、埋め込みの段階。知識ベースのすべての文書は、あらかじめ一度埋め込まれ、ベクトルが保存されます。ユーザーが質問すると、その質問も埋め込み、ベクトル比較を使って、意味的に最も近い保存済みチャンクをひと握り引き出します。これは速く安く、システムが何千もの文書を、重要な数件へと絞り込む方法です。
第二に、生成の段階。検索されたわずかなチャンクが、ユーザーの質問とともに生成モデルに渡され、モデルはその与えられた文脈に根拠を置いた答えを書きます。埋め込みが見つけることをし、生成が書くことをしました。すべてを生成だけでやろうとして――あらゆる文書をプロンプトに詰め込んで――は、遅く、高価で、すぐに壁にぶつかります。埋め込みだけでやろうとすれば、関連する文書は得られても、実際の答えは得られません。二つの仕事は補完的であって、交換可能ではないのです。
なぜこの区別がお金と時間を節約するのか
これらの仕事をきちんと区別する実践的な見返りは、安い仕事に高価な道具を使うのをやめられることです。生成は高くつく操作で、埋め込みは安価なものです。コンテンツを一度埋め込み、あとはクエリごとに速いベクトル比較を走らせるシステムは、検索のステップにごくわずかしか費やさず、高価な生成のステップは本当に新しいテキストが要る瞬間のために取っておきます。
逆の誤りはよくあり、静かに高くつきます。埋め込みのほうがうまく扱える仕事を、生成モデルに頼むことです。「このサポートチケットは過去のチケットに似ているか」は、何かを書くことを要しません――比較を要し、それこそまさに埋め込みのためのものです。それを生成に通すのは、適切な道具より遅く、高く、信頼性が低い。同様に、分類や重複排除も、たいていは生成の衣装をまとった類似度の問題です。その衣装を見抜くところに、節約が眠っています。
それぞれが破綻するところ
各仕事には、知っておく価値のある失敗モードがあります。埋め込みは、そのモデルが理解するよう学習した形で意味を捉えます。つまり、あなたのドメインは気にするがモデルが学ばなかった区別を取り逃しうります――一般には似て見えるが、あなたの専門的な文脈では正反対の意味になる二つの文。検索がもっともらしいが間違った一致を返すとき、埋め込みの「似ている」という概念が容疑者です。
生成の失敗モードは、より知られたものです。流暢で自信に満ちながら単純に間違ったコンテンツを生みうります。その仕事はもっともらしい何かを組み立てることであって、それを検証することではないからです。これこそ、検索システムで両者が組み合わされる理由です――埋め込みが根拠のある出典資料を取ってくることで、生成はでっち上げる代わりに、寄りかかる事実を得るのです。どちらの仕事も自己修正しません。設計が、それぞれがどう失敗するかを織り込まねばなりません。
まとめ
二つの仕事、二つの目的。生成は新しいコンテンツを一歩ずつ創ります――強力で、開放的で、比較的遅く高価です。埋め込みは意味を測り、コンテンツを大規模に見つけ比較できるようにします――速く、安く、再利用可能です。機能するシステムへの最短ルートは、課題の各部分について、何かを作る必要があるのか、何かを見つける必要があるのかを問い、対応する仕事を使うことです。頑健なAI機能のほとんどは、一つのモデルがすべてをこなすのではなく、これら二つの仕事を、それぞれが得意なことをするよう配置したものです。役割分担を正しく決めれば、残りはずっと楽になります。
