ベクトルデータベースと埋め込みは、現在の AI の注目のトピックです。
ベクトルデータベースの会社である Pinecone は、約 10 億ドルの評価額で 1 億ドルを調達しました。
Shopify、Brex、Hubspot などの企業は、AI アプリケーションにそれらを使用しています。
しかし、それらは何であり、なぜ AI で重要なのでしょうか?
まず、埋め込みとは何ですか?
簡単に言えば、埋め込みは N 次元ベクトルの数字です。テキスト、音楽、ビデオなど、何でも表すことができます。ここではテキストに焦点を当てます。
埋め込みの作成は非常に簡単です。埋め込みモデル(例:Openai の Ada など)が関与します。
テキストをモデルに送信すると、そのデータのベクトル表現が作成され、後で使用できるように保存されます。
ベクトルデータベースの重要な理由は、意味検索の能力を与えることです。つまり、類似性に基づいて検索することです。まるでテキストの意味によって。
この例では、男性、王、女性、および女王をベクトル平面上にモデル化し、彼らの関係を非常に簡単に見ることができます。
これはもっと直接的な例です:子供で、大きなおもちゃ箱を持っていると想像してください。今、あなたは似たようなおもちゃ、例えばおもちゃの車とおもちゃのバスを見つけたいと思います。それらはどちらも乗り物ですので、似ています。
これが「意味の類似性」と呼ばれるものです。- 物事が似たような意味 / アイデアを持っているとき。
さて、なぜそれらが重要なのでしょうか?それは LLM の文脈制約によるものです。
理想的には、無限の単語を LLM のプロンプトに入れることができるでしょう。しかし、私たちはそれをすることはできません。現在、それは~4096-32k トークンに制限されています。
LLM の「メモリ」、つまりトークン制限内にどれだけの単語を収容できるかによって、LLM とのやり取り方法が厳密に制限されています。
だから、PDF を chatGPT にコピーしてペーストして要約を求めることはできません。(おそらく今なら gpt4-32k を使用できるかもしれません)
さて、これらすべては最終的にどのように組み合わされるのでしょうか?ベクトル埋め込みを使用して関連するテキストを LLM のコンテキストウィンドウに注入することができます。例を見てみましょう:
巨大な PDF があると想像してみてください、たとえば議会の公聴会の 1 つです(笑)。そして、あなたは怠惰で、記事全文を読む気がせず、また、それが 10 億ページもあるため、全文を貼り付けることもできません。
まず、PDF を取得し、ベクトル埋め込みを作成し、それをデータベースに保存します。そして、質問をします、「彼らは xyz に何と言いましたか」。まず、あなたの質問の埋め込みを作成します、「彼らは xyz に何と言いましたか」
今、私たちは 2 つのベクトルを持っています:あなたの質問 [1,2,3] と PDF [1,2,3,34]、そして私たちは類似性検索を使用して質問ベクトルと私たちの巨大な PDF ベクトルを比較します。OpenAI はコサイン類似度を推奨しています。
今、私たちは 3 つの最も関連性の高い埋め込みとテキストを持っています。これらの 3 つの出力を使用し、いくつかのプロンプトエンジニアリングを介して LLM にフィードすることができます。
最も一般的なのは、コンテキストに基づいてユーザーの質問に正直に答えることです。できない場合は、「その質問には答えられません」と言います。これがすべてです!LLM は PDF から関連するテキストブロックを抽出し、質問に正直に答えようとします。
これは、埋め込みと LLM がどのようにしてあらゆる形式のデータに対してチャットのような機能を提供するのかの基本的な説明です。これがすべての「サイト / PDF /blah blah とのチャット」の仕組みです!これはファインチューニングではなく、マーケティング用語です。
埋め込みは、テキスト、画像、音声、ビデオなど、あらゆる形式のデータの n 次元ベクトル表現です。
chatfile などの製品では、主にテキストの埋め込みが使用されます。
手順:
1)PDF を小さなテキストチャンクに分割し、OpenAI の Ada モデルを使用して埋め込みを作成し、ローカルまたはリモートのベクトルデータベースに保存します。
2)ユーザーの質問も埋め込みに変換し、以前に作成した PDF ベクトルと比較し、意味の類似性検索(コサイン類似度アルゴリズム)を使用して最も関連性の高いテキストチャンクを見つけます。キーワード検索よりも優れている点は、キーワードの一致を要求せずにテキストの関連性を発見できることです。
3)ユーザーの質問と関連するテキストチャンクを OpenAI に送信し、与えられたコンテンツに基づいて ChatGPT が回答を生成するようにプロンプトを作成します。関連するテキストがないか、関連性が低い場合は、回答がわからないと返答します。
ChatGPT が誤った回答をすることを防ぐために、通常、温度を非常に低く設定するか、0 にします。
注意:この方法はまだ限定的な実用性があり、品質も良くありません。いくつかの調整の余地があります(テキストチャンク、質問と回答のペア)。
現時点では、ChatGPT のコンテキストメモリトークンが制限されているため(32k なら少し改善されます)、超長文書を直接与えて分析することはできません。