You’re in!
ウェビナー
ベクトル検索のベストプラクティス
本日、本日のセッション「Vector Search Best Practices」と、ゲストスピーカーのGin Tang Yuinをご紹介できることを嬉しく思います。彼はここZillowのdeveloperadvocateです。彼はAmazonでauto MLに取り組むソフトウェアエンジニアとしてのバックグラウンドを持っています。YuEugeneはコンピューターサイエンス、統計学、神経科学、研究論文を学び、ええと、I e E E、big Dataを含むカンファレンスで研究論文を発表しています。彼はバブルティーを飲むこと、ええと、家族と過ごすこと、水辺にいることを楽しんでいます。本日はご参加いただき本当にありがとうございます。ようこそ、Eugene。
紹介を、紹介をありがとう、Emily。ええと、参加してくださった皆さん、ありがとうございます。今日は、Vector Searchのベストプラクティスについて皆さんにお話しします。Vectorと埋め込み、それが何であるか、どのように使うか、いつ使うか、それで何をするか、そしてVectorデータベースをどのように使えるかについて学びます。では、私について少し。
ええと、私の名前はChenin Tangです。ここにQRコードを載せています。もしお手元に携帯電話があれば、このQRコードをスキャンしていただくと、LinkedInで私を見つけられます。そこが私が最も活発に活動している場所です。ええと、LinkedInを使っていない場合は、メールまたはTwitterで私とつながることができます。ええ、そしてご存じのように、Emilyが言っていたように、私のバックグラウンドはソフトウェアエンジニアリングです。
ええと、私はAmazonにいましたし、I B Mにもいました。そして多くのMLシステムに取り組んできました。ええと、Zillowについて少し。ええと、TwitterではZillow universeとして、LinkedInではZillowとして私たちを見つけることができます。ええと、Slackにも行けます。viss io、ええと、mils io slash Slackに行くことができます。
ええと、またはGitHubでオープンソースのベクターデータベースvissを見つけることができます。ええと、ここで少しポイントがあります。Zillowは会社です。VissはZillowによってメンテナンスされているオープンソースのベクターデータベースです。さて、それでは始めましょう。
今日は何を取り上げるのでしょうか?ここにある基本的な4つのトピックを取り上げます。なぜベクトルが必要なのか?埋め込みとは何か?ベクトル埋め込みとは何か?ベクターデータベースはどのように機能するのか?そして、ベクターデータベースをどのように始められるのか。では、これから始めましょう。なぜベクトル埋め込みが必要なのでしょうか?非構造化データは至るところにあります。これは、これは、皆さんの多くが、ええと、もう何度も聞いたことがあると思いますが、データの80%は非構造化データであり、その90%は一度も分析されていない、ということです。
ええと、私たちがこの機械学習AI中心の、ええと、業界、宇宙、あるいは何と呼ぶにせよ、今LLMがシーンを支配しているこの世界へと進んでいくにつれて、非構造化データはますます増えていき、その構造化データも分析され始めるでしょう。そしてこれが、あるいはこれこそが、ベクトル埋め込みが必要になる理由です。なぜなら、ベクトルは、この非構造化データ、つまり事前定義されたデータモデルに適合しないデータを表現するために使えるからです。したがって、ええと、テキスト、画像、動画、音声、ええと、分子、ええと、非常に多くのさまざまなものを表現するために使えます。ええと、ですので、これは、ええと、ベクトル埋め込みが非常に重要である理由の一部です。では、ベクターデータベースはどこで役立つのでしょうか。Convectorデータベースは実際に何に役立つのでしょうか?ええと、これらはベクターデータベースがよく使われるトピックの一部です。
これらの多くはより従来型のトピックで、たとえば画像類似検索、動画類似検索、音声類似検索、テキスト類似検索などです。そして後ほど、画像類似検索のやり方とテキスト類似検索のやり方について、いくつかコードをお見せします。ええと、必ずしもすべての詳細には踏み込みませんが、ええと、理解して始めるためのコードをいくつかお見せします。そしてノートブックへのリンクは、ええと、チャットか後ほど共有されます。おっと。
わかりました。では、これらはベクターデータベースの、私がこれから説明する、これまでいろいろ見てきた中でもより興味深い、あるいは、ええと、より大きなユースケースのいくつかです。まず一つ目は、LLMにデータを追加することです。たとえば、ええと、現在のLLMは完全に最新のデータでトレーニングされているわけではなく、あなたの社内のプライベートデータでトレーニングされているわけでもありません。ですから、本番環境やエンタープライズ規模でL L Mを使いたいのであれば、そこに何らかのデータを追加したくなるはずです。
そして、これらはこの領域で使えるツールのいくつかの例です。たとえば、G P T Cacheは、私たちが作った、ええと、G P T向けのキャッシュツールです。ええ、オープンソースです。GitHubのスターがほぼ5,000あります。かなり人気があります。
ええ、それからLAMA indexがあります。これは、ええと、聞いたことがあれば、データフレームワークであり、LLMで自分のデータにアクセスするためのフレームワークです。私はこれを使ってかなり多くのものを作りましたし、そのリンクのいくつかもきっと利用できるようになると思います。ええ、それからOSS chatがあります。これは@osschat. ioで確認できます。これは基本的に、オープンソースソフトウェアとチャットできるようにするものです。
そしてこれは、CV Pスタックと呼んでいるものに従ってLLMにデータを追加するアプリの例です。ええ、それについては後でもう少し触れます。ええ、しかし基本的には、これはベクターデータベースを使って社内データや個人固有のデータを追加する方法を示しています。この場合、そのデータはオープンソースソフトウェアのドキュメントであり、そのデータを追加してクエリし、チャットボットとベクターデータベースを使って本質的にそのデータとチャットする方法を示しています。その他にも、ベクターデータベースは製品レコメンデーションのようなものに使えます。
これは非常に、非常に一般的です。とても人気があります。ええと、その理由の一つは実は、そしてこれは、これは、これは、たぶん後でもっと触れると思いますが、ええと、製品レコメンデーションには本当に優れた、つまり超高精度なものは必要ないということです。なぜなら、欲しい製品を見つけることになり、数クリック以内で見つけられればよいからです。ですから、これは多くの、多くの異なるやり方がある興味深いユースケースですが、ベクターデータベースは、ええと、最も類似した製品を見つけるのに特に優れています。
それから逆画像検索があります。ええと、これは基本的に逆画像検索です。これは製品レコメンデーションのようなカテゴリに似ています。何かの写真があって、それに似たものを見つけたいとしましょう。ええ、それで私はミニファッションAIプロジェクトを作成しました。これは、ええと、基本的に衣類のようなものでこれを行います。ええと、しかしここにある例では、見てわかるように、それは、ええ、食べ物で、与えた画像に基づいて近い画像、いくつかの食べ物を返します。
ええと、最も、ええと、つまり、ご存じのように、最近ベクターデータベースをずっと人気にしたものは、この生成AIですよね?これらのLLMです。ですから、それはこのテキスト検索エンジン、このテキストの、ええと、Q&A型ボット、質問応答のようなものに当てはまります。だいたいここに分類されます。そこで、ここにズームインして、ユースケースの例を取り上げ、あなた、あるいは、ええと、ご存じのように、企業がベクターデータベースをどのように使って、ええと、生成AIアプリを作成できるのかを理解していきます。たとえば、何十万ページ、もしかすると何百万ページもの独自の社内ドキュメントがあり、スタッフ、ええと、顧客、ご存じのように、この情報を必要とする人たちが行って、自分のやりたいことを済ませられるようにしているとします。
つまり、もしあなたが、ええと、もしあなたの、もしあなたの顧客が来て質問をしてきたら、ほとんどの場合、これを行うには何らかのカスタマーサービス担当者が必要になります。ええと、でも簡単な質問の多くは自動化することもできます。ベクトルデータベースと L L M を使うことで、ほぼ自動的に答えられるような質問です。そしてそれはより速くなります。なぜなら、こうした何百万、何十万ものページを検索するには、カスタマーサービス担当者や、その、その、その検索をしている人の何らかの社内専門知識が必要だからです。ですから、誰かにそれほど多くの時間を費やさせる代わりに、できることは、これらの LLM を使って顧客のクエリやユーザーのクエリを理解し、それをベクトルデータベースに入れて、l l m を使って正しい、最も類似したドキュメントを見つけることです。さて、ではベクトル埋め込みとは何でしょうか?私はベクトルデータベースについて、それをどう使えるか、なぜ必要なのかについてたくさん話してきましたよね?非構造化データはたくさんあります。
何らかの形で表現される必要があるデータがたくさんあり、ベクトル埋め込みは基本的にその答えです。では、ベクトル埋め込みの導入をしましょう。私は、私はこの画像が大好きです。ええと、これは非常に、ええ、これは Sudor らによる非常に画期的な論文からの画像です。そしてこれはベクトル埋め込みについてのものです。
ベクトル埋め込みとは何でしょうか?なぜ重要なのでしょうか?そうですよね?基本的に、ベクトルが可能にするのは、あなたが、あなたが持っていない、ええと、構造を持っていない知識にアクセスできるようにすることです。そうですよね?この例で見ているのは、queen、king、woman、man という単語です。そして私が望むこと、この例で示したいことは、ベクトル埋め込みを使うと単語に対して数学を行えるということです。わかりましたか?そしてそこから理想的には、これを外挿できます。画像や音声、ええと、文、段落などに対しても数学を行えます。でも、今はこれから始めます。私たちは、つまり、queen を見て、ええと、king を見て、woman を見て、man を見ます。
queen と woman は同じ最初の数値 0. 3 を持ち、king と man は同じ最初の数値 0. 5 を持っていることに注目してください。では、queen から woman を引くと、最初の数値は 0 になります。2 番目の数値は 0 になります。
5。そこに man を足すと、その最初の数値は 0 になります。1。2 番目の数値は今度は 0 になります。7。
そして、または最初の数値は 0. 5 になります。2 番目の数値は 0. 7 になります。そして今、king という単語が得られます。
つまり基本的に、このベクトルが、ええと、この画像が示しているのは、これらのベクトル埋め込みを使うと、単語に対してこうした数、こうした数学を行えるということです。Queen minus woman plus man equals king。ええと、これは非常に、とても単純化された例です。従来、ベクトルははるかに、はるかに高次元の空間にあります。そうですよね?今、私は 2 次元の例を示しています。
もし sentence transformers のようなものを使うなら、ええと、768 次元になります。ええと、実際には、そのことについては、ええと、後で少し話します。では、これらのベクトル埋め込みはどのように生成されるのでしょうか?それらが何次元を持つかは何によって決まるのでしょうか?それらが何であるかは何によって決まるのでしょうか?実際にこれにとって本当に重要なのは、あなたが選ぶモデルです。ベクトル埋め込みとは、実際には実行することに決めたディープラーニングモデルの最後から 2 番目の層の出力にすぎません。ええと、従来のディープラーニングモデルでは、何らかの、ええと、何らかの入力、何らかの隠れ層、そして出力層のようなものがあります。この出力層は通常、何らかの予測、何らかの分類になります。
場所のことかもしれないし、あなたの場所がロケーションかどうかかもしれないし、次の単語を予測しているのかもしれないですよね? そして、たとえば、G B tのデコードアーキテクチャでは、品詞か何かを見つけているのかもしれません。これは予測的な種類のものですよね? つまり、1つ、1層戻ると、こうした層、この、これらの、このニューロンの層があり、通常は数百のニューロンがあって、何らかの出力を提供し、その出力が最後の層に渡されます。つまり、その出力が私たちのベクトル埋め込みです。ええと、ではどうやってベクトル埋め込みを作ることができるのでしょうか? 実際には、ベクトル埋め込みを作成するときに選ぶ最も重要なものの1つは、使用するモデルです。ええと、完璧なpre-callや、あるいは完璧な速度などのために、インデックス作成を最適化するのに何百時間も費やすことができます。
ええと、あの、完璧というものは実在しませんが、かなり良い再現率、かなり良い速度のために、ということです。ですよね? でも、ベクトル埋め込みが間違っていれば意味がありません。たとえば、ここにはベクトル埋め込みを取得できる場所がいくつかあります。open AIにはopen ais embeddingsがあります。これらは1536次元です。これらは少し大きめです。
Hugging faceでは、ご存じのように、hugging faceには、とにかく非常に多くのモデルがあり、ええと、使うことができます。つまり、hugging faceはそのためのハブです。ええと、PyTorchにもいくつかあると思います。ここには載せていませんが。PyTorchにもいくつかあります。ええと、それからRESNET 50があります。RESNET 50はhugging faceとPyTorchの両方で利用可能で、多くの形式で利用できます。
ええと、ただしこれは画像アーキテクチャです。そしてこれは、ええと、画像モデルであり、これは、こうしたベクトル埋め込みを作成するときに覚えておく必要があることです。画像を扱っている場合、ベクトル埋め込みを取得するには画像モデルを使わなければなりません。テキストを扱っている場合、ベクトル埋め込みを取得するにはテキストモデルを使わなければなりません。そして実際、私がこうしたものを扱っている人たちと話している中でよく出てくることの1つは、ええと、適切な種類のテキストに適切なモデルを使うということです。たとえば、ええと、テキストが物語や小説であれば、sentence transformersのような、完全な文に対して機能し、完全な文で訓練されたものが非常にうまく機能するでしょう。
しかし、テキストがたとえばCSV形式である場合、sentence transformersは最良の考えではないかもしれません。なぜなら、すべての単語の間にあるこれらのカンマや、slash r slash nのようなものをどう扱えばよいかわからないからです。これらの文字、csvや、ええと、P D Fに入る特殊文字ですね? つまり、テキストには非常に多くの形式があり、こうしたベクトル埋め込みを作成するときには、それについても考える必要があります。おっと。では、ベクトル埋め込みがどのように見えるか見てみましょう。
これはよく受ける質問です。ええと、なぜなら、人々は、ご存じのように、ベクトルデータベースはどのように見えるのか? ベクトルデータベースの内部はどのように見えるのか? 私がベクトルデータベースについて話すことが時々あると、人々はただ、なるほど、いいですね、という感じになります。これは頭を越えていっている感じです。あなたが何を話しているのかまったくわかりません。つまり、これはキー・バリュー・ストアなのか? これは、なんというか、ただの数字の集まりなのか、何が起きているのか? という感じです。これはZillowsの、ええと、Zillows Cloudからそのまま取ったスクリーンショットです。そしてこれは、追加のデータベースの中に何があるかを示しています。
これは私たちのサンプルデータセットからのものです。つまり私たちのサンプルデータセットは、ええと、medium publicationsにあります。そしてこれは、ご存じのように、1つのエントリがどのように見えるかを示しています。IDとベクトルを示していますよね? つまり、ここで知っておくべき重要な点は、このベクトルは実際にはただの長い数列だということです。そしてここには他のメタデータがいくつかあります。
つまり、メタデータが必要なら、ええと、Zillows novis はメタデータを、その、その、そのデータベースに入れることもサポートしています。はい。ベクトルデータベースはどのように動作するのでしょうか?ああ、チャットにいくつかあるのが見えます。ええと、ええと、埋め込みはモデル固有のものです。2つの異なるモデルの埋め込みをどうやって検索するのでしょうか?基本的には、2つの異なる埋め込みを検索する必要があり、2つの異なるベクトルデータベースを検索する必要があります。
ええと、では、いくつかのベクトルインデックス手法を見ていきます。つまり、これはベクトル検索のやり方について話すことになりますよね?これはベクトル検索のベストプラクティスの部分です。まず最初に見ていくのは、近似最近傍です。ああ、そうです。または annoy です。
これは、ええと、Spotify から出てきたアルゴリズムです。そして本質的にこれが行うことは、あなたの、ええと、空間、次元、あなたの、はい、空間を半分に切ることです。何度も、何度も、葉ノードの数や葉ノード内のノード数のような、ある事前定義されたパラメータに到達するまで行います。ええと、そしてこれが行うことは、空間を半分に切るたびに、二分木を作成します。ええと、すみません、空間を複数回半分に切ることで二分木を作成します。なので最初に実際に行うことは、ランダムな2点を選ぶことです。その点が何であるかは問題ではありません。
ええと、そしてそれらを、一方ともう一方に最も近い点を見つけることで分類します。そしてそこで最初の半分が得られ、それぞれの空間の半分の中でそれを再び行います。これが annoy です。これは Spotify から出たものです。これはかなりまともな、ええと、インデックスです。空間をあまり多く使いません。ええと、なぜなら基本的には二分木を保存しているだけだからです。そして計算量もそれほど重くありません。なぜならツリーをたどった後は、少数のノードとしか比較しないからです。
次に取り上げるのは inverted file index です。これはおそらく、私が言うには最も、ええと、直感的なベクトル、ええと、ベクトルインデックス手法です。もし、もし機械学習入門の授業を受けたことがあるなら、おそらく、ええと、K means が何か知っているでしょう?つまり k means はクラスタリングアルゴリズムで、本質的には、ここにいくつかの数の OID があります。それぞれの oid に近い点を見つけることでクラスターを見つけてください、そしてそれがクラスターになります、というものです。そしてそれが基本的に I V F が行うことです。
これは、はい、ある数の centris を見つけて、その周りに点をグループ化します、と言います。そしてコメントするとき、それは、ええと、つまりインデックス作成時です。なのでクエリ時に入ってきて検索し、Hey、見たいです、つまり、このベクトルを、というとき、実際にこれが行うのは、最も近い cent を検索して見つけ、それからその OID に入り、その中の oid 内で最も近い、ええと、点を検索して見つけることです。なのでここでも、メモリは、ええと、かなり良いということがなんとなくわかりますよね?インデックスのためにそれほど多くのメモリを保存する必要はありません。ええと、そして、ええと、検索の仕方に基づいて、ほとんどの場合、正しい結果が返ってくることもわかります。
それから hierarchical navigable small worlds、または H N S W があります。これは本当に、本当に、本当に人気のある、ええと、ベクトルインデックス手法です。そしてこれがこれほど人気である理由の1つは、非常に正確で、ほぼ100パーセント保証、100パーセントの再現率だからです。ええと、そしてそのように動作する理由は、その仕組みにあります。つまりインデックス時に、データを挿入しているとき、グラフを作成し、すべてのノードのグラフインデックスを作成します。
そこから、ある程度こんなふうに考えることができます。つまり、実際にはノード自体だけでなく、より多くの情報を追跡しなければならない、ということです。ですから実際には非常にメモリを消費しますが、現時点で人気がある理由の1つは、メモリを消費するとはいえ、今はメモリを買うのがそれほど高くないからです。ええと、それに人々はその精度を好んでいます。では、H N S W は挿入時にどのように機能するのでしょうか? データセットがあるたびに、データポイントがあり、それをグラフデータベース、いや、グラフインデックスに入れたいとき、何が起こるかというと、一様乱数を割り当てます。そしてその一様乱数が、何らかの事前定義されたパラメータと比較してどうであるかに基づいて、特定のレイヤーに入ることになります。たとえば、私の事前定義されたパラメータが 0.
9 で、PO を挿入していて、私は、データポイントを挿入しているとします。データポイントを挿入するときに、一様乱数を生成します。その一様乱数がゼロから 0. 9 の間であれば、レイヤーゼロに入ります。もし 0.
9 から 0. 99 の間であれば、そうですね? 次のレイヤーも 90% なので、それは 0. 0 とレイヤーゼロ、そしてレイヤー1に入ります。もし 0. 99 から 0.
999 の間であれば、レイヤーゼロ、レイヤー1、レイヤー2に入り、以後も同様です。つまり、ポイントがどのレイヤーに入るかはある種確率的であり、そこも興味深い点です。これは、ランダムシードを設定しない限り、H N ss W がグラフを作成するとき実際には非決定的であることを意味します。ええと、しかしこれによって可能になるのは、クエリ時には、コードを書いて最上位のレイヤーに入る、ということです。ちなみに、得られるレイヤー数も確率的になります。
ええと、最上位のレイヤーに入って、「このレイヤーで最も近いポイントは何か?」と言います。そして下に降りて、「このレイヤーで最も近いポイントは何か?」と言います。そしてさらに下に降りて、もう一度それを行います。ですから実際、ここで行わなければならない本当の計算、主な本当の計算は、ええと、とても、とても短いものです。なぜなら、各ノードに最も近いノードがどこにあるかをすでに知っている、このグラフインデックスが構築済みだからです。そのノードは、ええと、その、その、そのインデックス内にあります。ええと、そうですね、これは非常に精度の高いインデックスで、少し多めのメモリを使いますが、クエリ時間も速いです。わかりましたか? では、ベクターデータベースを使い始めるにはどうすればよいでしょうか? ええと、あ、遅い、はい、ベクターデータベースを使い始めるにはどうすればよいでしょうか? これから、ええと、ベクターデータベースのいくつかの、ええと、異なるユースケースと、それらがどのように機能するかを取り上げます。まず最初に、類似検索とは何かを考えてみましょう。類似検索が実際に何であるかを取り上げましょう。
これはあなたが行っていることであり、これはベクターデータベースが本質的にあなたのために処理するものです。ええと、そしてこれが、これがベクターデータベースを使う主な理由です。そうですよね? 互いにどれほど似ているかを見つける必要があるものがあるなら、そのときにベクターデータベースを使うことになります。しかし、たとえば、ええと、キー値のようなもの、たとえばユーザーのリストがある場合、おそらくベクターデータベースは必要ありません。なぜなら、その場合は正確な応答を返してほしいからです。というのも、もし私がユーザー名を渡して、それが別のユーザー名に似ているだけで、私にそのパスワードを返してきたら、私は自分のユーザーを検証できないですよね? ですから、ベクターデータベースは類似検索アプリケーションに使われます。そしてこの仕組みは、まず非構造化データ、ステップ1から始めますよね? ええと、いくつかの画像、いくつかの動画、ドキュメント、音声、何でも、何らかのデータがあり、それをベクトルに変換します。
そして、これが先ほど話していた重要な部分です。つまり、ベクトルを変換するときには、適切なベクトルモデルを選ばなければならない、ということです。ああ、わかりましたか? ええと、それから一度変換したら、それをベクトルデータベースに保存して、それで終わりです。データをベクトルデータベースに入れるために必要なことはそれだけですよね? ここから気にするべきことは、どうやって自分のベクトルを取り戻すか、ということです。ええと、本質的にやっていることは、クエリを実行するということです。そしてクエリを実行するときには、以前と同じモデルを使います。同じモデルを使わなければなりません。
ええと、先ほどの質問は良い質問でした。つまり、もし2つの異なるモデルがある場合はどうするのか、ということですよね? その場合、それぞれに対して2つの異なるベクトル埋め込みが必要で、2つの異なるベクトル検索が必要で、2つの異なるコレクションなどが必要になります。ですから、クエリから埋め込みを取得したら、それをベクトルデータベースに流し込み、だいたいこのようなことをします。ああ、このスライドを説明し忘れていました。ええと、すぐに説明します。ええと、そして I V F や annoy、または H N S W のようなインデックスのいずれかを実行すると、結果が返ってきて、最も類似したベクトルがどこにあるかを見ることができます。通常は、いくつかの結果数を指定して返してもらいます。たとえばトップ5とかトップ3、ええと、そういったものです。
Zillow cloud は自動的にトップ100を返します。ですので、必要であればそれも確認できます。ええと、これは先ほど飛ばしてしまったスライドで、どうして飛ばしたのかわかりませんが、理解するうえで重要です。ええと、ではなぜ、なぜ専用のベクトルデータベースが欲しいのでしょうか? 先ほど説明したようなインデックスはそのまま使えるのに、専用のベクトルデータベースを使う意味は何でしょうか。これらを使うのにベクトルデータベースは必要ありません。自分で実装することもできます。
何らかのオープンソースリポジトリなどで見つけることもできます。これらはベクトル検索アルゴリズム、またはベクトル検索ライブラリと呼ばれ、総当たり検索ではなく、ある種の高性能なベクトル検索を提供してくれますよね? では、これらと比べて、ベクトルデータベースには何があって重要なのでしょうか? ええと、まず、ベクトルデータベースを持つことの最も重要な点の一つは、少なくとも novis / illus では、非常に優れた点の一つとして、dynamic schema と呼ばれるものを可能にすることです。基本的には、挿入時に新しいフィールドを挿入でき、それをスキーマで定義する必要がありません。これは、これは本当にすごいことで、素晴らしいです。これは no sql でできることですよね? SQL データベースでは、このテーブルスキーマをいじりすぎると、いくつか問題が起きるでしょう。でも no sql では、基本的に好きなものを挿入できます。そして私たちにもその dynamic schema の機能があります。ええと、2つ目は、フィルタリングだと思います。
これでメタデータに基づいてフィルタリングできるようになりました。というか、実際には以前からこれもできたと思いますが、メタデータでフィルタリングできます。ええと、それによって、より具体的なタスクを実行できるようになります。たとえば、ええと、何らかのものを作成したい、ええと、私は、よく聞かれる質問に対する最も一般的な回答を見つけたいとします。ただし、過去1か月に出てきた回答だけが欲しいのです。では、ええと、その質問が、最も人気のある l l m は何ですか、というようなものだとします。そして、ええと、これらの回答をすべて自分のベクトルデータベースに保存して、それから、よし、過去1か月で最も人気のある l l m が何だったのか知りたい、というわけです。そうですよね?つまり、フィルタリングの優れた点の一つは、メタデータで選択できることです。あるいは、たとえば Medium の例で言えば、ええと、UX collective や the startup という出版物からのものだけが欲しいとします。そうですよね?ベクトル検索を行うときに、これらの、ええと、これらの例をフィルタリングできます。ですから当然、フィルタリングについて出てくる質問の一つは、ええと、フィルタするのか、ええと、ベクトルを前にフィルタするのか、それとも後にフィルタするのか、ということです。これは私がよく聞かれることですが、実際の答えは、検索中にベクトルをフィルタリングする、というものです。つまり、これも Novus の本当に素晴らしい部分で、これは非常に効果的で効率的な検索パターンです。というのも、やることはビットマスクを作成することで、処理していく中で、メタデータにビットマスクを適用して、これらの計算を行う対象として検討したいかどうかを示すだけだからです。
録画していますか?どこで?スライドはもらえますか?はい、録画しています。これらは後で送付されます。ええと、ベクトルデータベースを重要にするその他の要素には、つまり、本当に基本的なものがありますよね?ええと、スケーリングを管理します。ええと、水平にも垂直にも、より大きな C P U、より大きな G P U が欲しい場合です。ええと、また、これは再び Novus に固有のものですが、ええと、Nvidia 内での G P U サポート、ええと、10億規模のストレージがあります。ええと、もし、つまり、ベクトルデータベース用に複数ノード、ええと、複数インスタンス、複数サーバーが必要であれば、それも可能です。
ええと、ストリーミングデータのバックアップ用のシャーディング、ライフサイクル管理、マルチテナンシー、エンタープライズユーザー向けのロールベースのアクセス制御のようなものです。ええと、非常に高い t p s、つまり transactions per second です。これらはベクトルデータベースがサポートする種類のものです。そして、Novus のような専用設計のベクトルデータベースがサポートするものです。ベクトルデータベースは ACID をサポートしますか?ええと、はい。
まあ、実際には、実際には、Novus ではいくつかの異なる種類の整合性を利用できます。ええと、でも ity はほぼ常にあると私はかなり確信しています。ええと、整合性については、何と呼ばれていましたっけ?結果整合性、ええと、強整合性、ええと、セッション整合性です。そして4つ目が喉元まで出かかっているのですが、名前を思い出せません。
しかし基本的には、異なる種類の整合性を選べるようになっています。ええと、ですので、はい、spectra data、短い答えとしては、はい、ベクトルデータベースは ACID をサポートします。ええと、では、ここで示したこのベクトル類似検索をどのように実装するのでしょうか?実際にはこれをどのように実装するのでしょうか?まず、何らかのナレッジベース、ええと、画像、音声、動画、テキスト、そのようなものから始めます。そして、それをディープラーニングモデルに通します。そして、適切なモデルを選ばなければなりません。そうですよね?データに対応するモデルを選ぶ必要があります。
文データを使っているなら、sentence transformers を使ってください。C S V データを使っているなら、別のものを使ってください。そして、最後の層を切り落とす必要があることを覚えておいてください。出力を得ます。それがベクトルです。そして、それを VIS や zills などに入れることができます。ええと、コードに入る前にもう一つコメントします。最後に質問の時間を少し取れるように、コードはかなり手早く進めます。実際には、コードに入る前に、この後でいったん止めて質問を受けます。
ええと、でも、コードも十分に素早く進めて、いくつか質問を受けられるようにします。これはベクトルデータベースのベンチマーキングツールです。ええと、もう一度言いますが、QRコードはここにあります。QRコードをスキャンしてください。これはオープンソースのGitHubで、ダウンロードできます。ベンチマーキングの多くは、ええと、すでに設定されています。
ええと、でも、もし異なるベクトルデータベースを評価したい場合は、独自のベンチマーキングを行うこともできます。私たちはそれを可能にしています。では、コードに入る前に、いくつか質問を受けます。ええと、それからこちらは、これは、あ、すみません、これは別のQRコードで、スキャンするとvis GitHubに移動します。Novisはオープンソースのベクトル、ええと、データベースですよね?ええと、そこに行けば、まあ、ダウンロードして、使い始めて試してみることができます。質問はありますか?はい?ええと、ああ、ありがとう、Chris。
ええと、はい、Christophが今、あ、はい、いいですね。Emily、ありがとうございます。ええと、ベクトル検索は線形境界のみというのは本当ですか?実は、線形境界のみというのが何を意味するのか、実はわかりません。ええと、それは、どういう意味ですか、実はそれが何を意味するのかちょっとわかりません。ベクトル検索というのは、ええと、本質的には、L2、ええと、またはip、内積ですね?ええと、あるいはcosignのような何らかのベクトル指標を使うものです。
Cosignは単に正規化された内積ですよね?そして、ええと、これらのベクトル指標のいずれかを使って比較し、これらのベクトル指標のいずれかを使って2つのベクトルを比較し、選択した指標に基づいて、ええと、最も近いものを返すだけです。また、挿入時に選んだ指標と検索時の指標が同じであることを確認する必要もあります。なぜなら、それが最も理にかなっているからです。モデルが新しいバージョンを公開した場合、次元数は変わりますか?あるいは、変わらない場合、私のデータベースにすでにある埋め込みと互換性がありますか?それとも、すべての埋め込みを再計算して再度保存する必要がありますか?ええと、これは実際、つまり、私は、ほとんどの場合、次元数は変わらないと思いますが、もし変わるなら、モデルカードに記載されます。ええと、たとえば、sentence transformersモデルは長い間768で、今後もおそらくそうし続けるでしょう。
ええと、OpenAIは1536で、おそらく今後もそうし続けるでしょう。ええと、人々が、ベクトルアーキテクチャを変更し、ええと、モデルアーキテクチャを変更して、それを同じモデルと呼ぶのはかなり珍しいと思います。通常は、「この新しいモデルを公開しました」という論文を発表するでしょう。ええと、まあ、人々は論文を出したいですから。ええと、そして、はい、そうでない場合でも、それらは埋め込みと互換性がありますか?はい。
再計算したいですか?ええと、それはあなた次第です。できます。ええと、性能を確認して、それが重要かどうかを見てください。ベクトルデータベースを使用する前に、モデルのトレーニングやパラメータ作成は必要ですか。モデルをトレーニングする必要はありません。オンラインに行けば、オンラインでモデルを見つけられます。ええと、たとえば、こうした、ええと、リソースを通じてですね。Hugging Faceに行けば、たくさんのモデルがありますし、OpenAIに行けば、open AI embeddingsを使えますが、テキストにしか使えません。
ええと、まあ、ええと、ResNet 50を使うこともできます。これもHugging Faceにあり、Pie Torchにもあります。これは画像用なので、トレーニングは必要ありませんが、モデルは必要です。特定の種類のデータが必要なら、トレーニングすることもできます。ベクトル類似度のためのGoogleのuniversal sentence encodingについてどう思いますか?ええと、使えると思います。それについて、ええと、特にコメントはありません。
ただ、はい、それは、つまり、動きますよね?はい、いいですね。このプレゼンテーションについてはもう質問がないようなので、コードに移って、それからこのコードを見ていきます。では、2つのコード片を見ていきます。ええと、これらが何をしているのかを説明するチュートリアルが、ええと、利用可能です。でも、ええと、ここではこれらを取り上げて、モデルを選ぶこと、モデルを選ぶこと、そして、ええと、なぜそのモデルが重要なのか、これが異なる種類のテキストによってどのように変わるのか、そういったところを見ていければと思います。
この例では、テキストデータを扱っています。そして、ここで本質的に何をしているかというと、何かを見つける、つまり、あるデータセットを見つけて、それにはいくつか、この場所からダウンロードできます。ええと、これはすべて、これはすべて利用可能になるので、ある程度自分で再現できますが、データセットがあります。ええと、それはホワイトハウスの演説のセットです。なので最初にやる必要があるのは、優れたデータサイエンティストなら誰でもするように、データセットを読み込んで、それをクリーンアップすることです。読み込むと、実際には、ああ、これは、私はこのアンケートを開始していませんでした。
Okay、ではここでこのアンケートを開始できるか見てみましょう。なので、データを見始めると、クリーンアップすべきものがたくさんあることが分かりますよね?ええと、そして進んでこのデータをクリーンアップすると、今は私がいろいろなことをしたのが分かります。いくつかの nas を削除し、いくつかのスピーチの長さを確認し、その他いろいろ、ええと、そしてデータをクリーンアップしました。なので今は見た目がきれいです。実際に使えるデータのように見えますし、自分が持っているデータ、ベクトルデータベースに入れるデータがデータであることを確認したいわけです。
意味が通る、ということですよね?ええと、そうでなければあまり役に立ちません。ええと、これは実際にはあまり役に立たないコードです。Okay? それでここから、ええと、ベクトルデータベースにものを入れ始めることができますが、実際にお見せしたいのはそのスライドではなく、それは重要ではありません。重要なものはどこだ? ああ、ああ、ありました。Okay。
ここで私がやったことは、このものを使って sentence transformers を取得した、ということです。そうですね? つまり sentence transformers、そしてこれは特定の sentence transformer model で、all mini lmm、ええと、L six V two です。これは人気のある model で、ええと、sentence transformer model のバージョンの一つです。なのでこれは、先ほどあなたが言っていたことに向かうようなものです。ええと、Christophe、model が新しいバージョンを公開する場合、ええと、たいていの場合、次元数は変わりません。sentence transformer models はすべて 7 68 だと思います。
ええと、ええと、なので示します、ああ、実際には 3 84 ですね。ああ、間違っていました。Okay、実際には 3 84 です。これは 3 84 ですが、7 68 のものもたくさんあります。なので、新しいものを公開するにつれて、変わることもあるのでしょう。
ええと、そしてこれは基本的に、テキストデータ用の model を選ぶことについてお見せしたかったことです。ええと、この件についてはほぼそれだけです。ここでこれをこれ以上長く実行するつもりはありません。必要ないと思います。ええと、どうすれば、Okay、これを再起動させてください。そしてもう一つは paintings です。
つまり vision models、reverse image search、reverse painting search、Okay、これでは、やっていることは、またいくつかの、まあ、いくつかのファイルをダウンロードしているということです。もう一度。ええと、そしてこれは PyTorch を使うものです。前回は sentence transformers を使いましたが、これは実際には hugging face のものです。そして今回は PyTorch を使います。これは別の integration です。つまり、これらすべての integrations、ええと、これらすべての integration examples も ZI Cloud 上で利用できます。
ええと、そしてこれでは次元数が違います。ご覧のとおり、2048 です。これは、ええと、かなり、かなり多くの次元です。ええと、そして基本的には、まあ、vector database を起動して、ええと、起動されて、それから field schema を作成して、blah, blah, blah、入れて、すべての、ええと、すべての画像を入れます。そしてここ、ここが、まあ、ここで model を選ぶ場所です。そうですよね? Torch PyTorch に入るわけです。そうですよね? それから resnet 50 の何らかのバージョンを読み込みます。ええと、そして私が実際にこの model をここにキャッシュしているのが分かるでしょう。
ええと、でもそれは私が、えー、すでにモデルをダウンロードしているからです。なので実際には、もしモデルをダウンロードする必要があるなら、この Ss s l のステップも先にやる必要があります。自分に、えー、このモデルをダウンロードできるようにビルドを入力するためのコンテキストを与えるためですね。そしてここで知っておくべき重要なこと、えー、ここで触れておきたい重要なことがいくつかあって、皆さんに見てほしいのは、A、これはこの最後から2番目のレイヤーを削除する、えー、最後のレイヤーを削除する、そういう方法を提供してくれるということです。Python を使ってですね。えー、それから、えー、ここでは上のほうで次元数を定義しています。えー、それは、この特定のモデルが 2048 の次元数を持っていることを事前に知っていたからです。
それを事前に知らない場合は、おそらく A、vec を読む、えー、モデルカードを読むことができますし、または B、モデルにあまり情報がない場合は、えー、実行してから自分でそれを確認することもできます。えー、そしてここでもう一度、まあ、これも、どこだっけ?3 84 はどこ?ああ、ここですね、大丈夫です。つまり、sentence transformers モデルの次元数も、それをセットアップする前に知っていたということです。えー、そしてここでまた注意しておきたいのは、実際にはこの種のモデルは PyTorch モデルとは違った扱いをするということです。それはライブラリ自体のためですね。つまり PyTorch は、えー、こうしたニューラルネットワークを構築できるようにして、ニューラルネットワークで作業できるようにするライブラリです。なので、これらのレイヤーを切り取ることができるわけですが、一方で、えー、transformers、つまり Hugging Face は、主に既知のネットワークを構築することに焦点を当てているわけではなく、むしろ彼らのモデルを使うことに焦点を当てています。
えー、なので、彼らは実際には encode するだけでよく、これは単なる関数で、ベクトル埋め込みを取得するためのデータです。えー、ここで主に指摘したかったのはその点です。えー、これらのテキストとこれらのビジョン、えー、えー、モデルの違いは、特に次元数に関して注意しておくことが重要です。えー、そして 384 次元のテキストデータを 20, 48 次元の画像データと比較することはできません。えー、今は実際、実は、Emily が先ほどこれに言及しましたが、えー、27日にウェビナーを開催する予定で、それは、えー、マルチモーダル、えー、マルチモーダルモデルについてのものになります。
モデルとマルチモーダルモデルを使うと、えー、テキスト、画像、音声、そのモデルが学習しているものが何であれ、それらの間でファクター検索を行うことができます。えー、なので、はい、ここで取り上げたかったことはだいたい以上です。最後に質問のための時間をかなり残してあります。えー、質問があまり多くなければ、この実際のコード自体を見ていって、これがどのように動作するのかを一緒に見ていくこともできます。えー、ノートブックを順番に進めていって、それがどのように動くのかを見ていきます。
はい。質問はないようですね、あ、はい。ノートブックへのリンクを投稿してください。はい?えー、はい、取ってきます。これらを開いておくべきでした。
えー、ちょっとお見せします。Jen がそのリンクを開いている間に、えー、皆さん、質問は下部の q and a パネルに入れていただけると助かります。そうすると、えー、チャットウィンドウで見失わずに済みます。えー、ではChat window to everyone。これは reverse painting search なので、これは扱いません。これにはすべての埋め込みを取得するのに12分か何かかかるからです。えー、でもこちらが image search のはずで、こちらが text search です。
はい。なのでこちらは text search で、これを使うと、えー、すべての tech データを扱うことができます。えー、はい、なのでこれらが2つのモデルで、どちらにも、えー、それらが付いています、すみません、これらが2つのノートブックで、どちらにも、えー、この U R L 関連のものが付いていて、何も変更しなくてもノートブック自体をそのまま実行できるはずです、えー、動作させるために。Hill Amsm。Pine Cone Vespa や他のプレイヤーと比較した場合の viss の主な利点は何ですか?素晴らしい質問です。えー、viss とそれらが他のベクトルデータベースとどのように比較されるかを見るには、Vector database benchmarking tool を確認していただくのがよいと思います。
ええと、言えるのは、ここで言いたいことは何でも言えるということです。たとえば、ああ、Novis はこれまでで最高のものだ、と言うことはできます。でも、実際に自分で試してみない限り、信じてもらえないでしょう。だから本当に、自分で試してみることをおすすめします。私が考える Novis の優位性、ええと、他のベクトルデータベースと比べたときの優位性は、viss が扱えるスケールが本当にとんでもないという点です。たとえば、Vespa も、もしかすると10億規模で動作するかもしれませんが、ええと、間違いなくそれほど速くはありません。ええ、それに読み込みにも間違いなく時間がかかりますし、1秒あたりのクエリコストも高いです。ただ、繰り返しになりますが、これは私が Novus の主な利点だと見ている点です。
ぜひ見てください、ベクトルデータベースのベンチマーキングツールをぜひ見て、自分で確認してみてください。はい、Tom Tofi、tofi、異常検知にベクトルデータベースを活用することについて詳しく説明してもらえますか?はい、実は、私たちはちょうど Galileo という会社とこの件について話していたところです。ええと、基本的に異常検知というのは、そうですね、「ああ、このデータポイントは本当にかなり変だ。外れ値のように見える」ということです。そしてベクトルデータベースの仕組みは、つまり本質的には、あなたが、あなたが、これらすべてのクラスタを作っているわけですよね?私が見せた I V F の、ええと、画像を覚えていますか、それはこれらすべてのクラスタを作ります。あるいは annoy のものもそうですよね?それはデータのクラスタをすべて作ります。ええと、H N S W でさえそれを行います。ただ、画像ではそれが表示されていなかっただけです。
ええと、なので、あなたが、あなたが、あなたがクエリするときに、もしあなたの、つまりクエリに使っているベクトルが本当に、本当に遠く離れたところにあるなら、それは、そうですね、非常に遠い距離にあるということなので、それが異常であり、おそらく間違っていると分かります。ええと、はい、Christophe Busler、どれほど関連しているか分かりませんが、大きなテキストを使う場合、多くの場合、それをいくつかの部分に分割し、それぞれの部分ごとに埋め込みを作成することが推奨されます。最適な粒度はページ、段落、文のどれですか?ええと、これはユースケースごとに異なります。残念ながら、すべてのテキストに対して最適な粒度が何かをお伝えすることはできません。ええと、ただ、sentence transformers は主に、ええと、主に文に対して機能するように訓練されています。
なので、それを見てみることをおすすめします。私は、これについて少し付け加えたいことがあります。割り込んでしまってすみません。ええと、大丈夫です。でも、今後ウェビナーがあります。
まだ私たちのウェブサイトには載っていませんが、うまくいけば、ええと、来週末までには掲載されるはずです。なのでウェビナーを行います。ええと、8月、日付を確認しますね。ええと、8月24日に Lang Chain の Lance と行います。彼は実際に、ええと、データをどのようにチャンク化するか、またはテキストをチャンク化するか、そして、ええと、そのようなドキュメント内の、ええと、文脈の多くを維持する方法について話す予定です。ですので、興味があるなら間違いなくチェックする価値があります。ああ、そうですね、実は私も最近 Lance とこのことについて話しました。
それで Lance が私に話してくれた、Lane Chain がやっていることは、ええと、smart chunking のようなものと呼ばれることをやっているということです。ええと、今のところ私が分かる限りでは、まだルールベースのように見えます。つまり、何らかのチャンクサイズを与えて、何らかのオーバーラップを与えるというものです。ええと、つまり文脈のためには、テキスト間にある程度のオーバーラップが必要だということです。ええ、文脈を保つために。ええと、でもチャンクサイズは完全にあなた次第です。Tom Tofi 具体的には、ワイヤレスネットワーク向けに、非構造化された主要業績評価指標を比較することに興味があります。
私は、それは関連する質問でした、それは異常検知に関する質問への追加でした。検知ですね、わかりました。ええと、つまり、はい、KPI をベクトルに入れることはできますし、それから、それらが、そうですね、あなたが、それらすべてを保存しておいて、それらが入ってくるたびに、「ねえ、これは通常から本当に大きく外れているかな?」と言うことができます。そしてもしそうなら、それはおそらく異常です。ええと、Mohammed、類似性に基づく遺伝子優先順位付けに Zillow を使う手がかりを教えてもらえますか?わあ。ええと、この質問を受けたのは初めてです。
ええと、これはクールですね。あなたは遺伝子の類似性に取り組んでいるんですね。ええと、つまり、遺伝子の類似性とか、遺伝子のベクトル埋め込みを得ることができる、みたいな。正直に言うと、私は遺伝子については何も知りません。人間のゲノム全体が解読されていて、それがかなり小さいということは知っています。
ええと、でも自分の遺伝子を取得して、それらの埋め込みを取得できます。そして本質的に Zillows が手助けできるのは、あなたがすでにベクトル埋め込みを作成した遺伝子の中から、検索に使いたい遺伝子と最も類似した遺伝子を見つけることです。ええと、Alex、PDF に最適なエンコーダーを提案できますか?なぜ sentence transformers ではだめなのでしょうか、それとも私があなたの言ったことを単に誤解しているのでしょうか?PDF は奇妙で、本当に奇妙なデータ型です。はい、PDF は実際、ええと、特に難しいものです。そしてこれは私たちも取り組んでいることです。というのも、私たちは、私は、ええと、どうやって、つまり、PDF をより大きなデータベースに取り込むにはどうすればいいかに取り組んでいます。なぜなら PDF には実際、多くの混在した種類のデータが含まれているからです。つまり PDF には画像が含まれ、グラフが含まれ、ええと、そしてテキストが含まれていますよね?ええと、A P D F に sentence transformers を使えますか?答えはイエスです、ええと、ただし PDF から文章を抽出する必要があります。つまり、単に、たとえば p d F 形式のまま渡しても、うまくいきません。
ええと、なので、基本的には、文章を何らかの作業可能な形式に抽出する必要があることを覚えておく必要があります。ええと、正直に言うと、PDF に最適なエンコーダーが何かについての答えは持っていません。これは、これは、これは、これは本当の問題であり、多くの人々によって取り組まれているものです。Tom Tofi、チャットのそれらのリンクをコピーしたいです。私にメールで送ってもらえますか?待って、何ですか?コピーできますか?つまり、もちろんできます、はい、Alex?たとえば lane chain loader のようなもので?もちろん、はい、はい、はい、はい。
もしそれが、ええと、あなたがやりたいことなら、lane chain loader を使って PDF d f ドキュメントを読み込むことができます。Q roll。Zillow のデータベースを使うメリットを得るには、face node の代わりに、たとえば Firestore に埋め込みを保存する場合と比べて、埋め込むデータ量はどのくらい大きくあるべきですか?データ量はどのくらい大きくあるべきか?つまり、データサイズだけの問題ではありません。おそらく、ええと、たとえば、インデックス化のさまざまな方法のようなものも見る必要があると思います。なので face はインデックスアルゴリズムで、それは正しいです。ええと、face node が何かは分かりません。もしかすると Node 専用のものですか?分かりませんが、face は特定のインデックスアルゴリズムです。
でも先ほど言っていたように、ベクトルデータベースはそれ以上に多くのものを提供してくれます。たとえば、データに対して何らかのフィルタリングをしたい場合、メタデータがあってフィルタリングをしたい場合、ええと、zills のようなものを使いたくなるでしょう。ええと、あるいは、もし大量のトランザクションを処理できるようにしたいなら、おそらく zills のようなものを使うことになるでしょう。ええと、なので、もしあなたのアプリが、ただ楽しみのための P O C のようなものを作っているなら、つまり、ああ、埋め込みが 100 個あって、ええと、それらは全部かなり小さい、みたいな感じなら、問題ありません。好きなものを使ってください。face を使ってもいいし、H N S W を使ってもいいし、何でもいいです。重要ではありません。でもスケールが大きくなって、ベクトルデータベースをより複雑なクエリに本当に使えるようになってくると、単にベクトルを比較するだけではなくなります。そのときに Zillow や Novis などを使いたくなるでしょう。Gil、あなたは face、Leucine などのオープンソースエンジンを使っていますか、それとも独自エンジンを使っていますか?ええと、これはこれらのインデックスについて尋ねているものとして解釈します。
ええと、私たちは公開されているものを多数使っていますし、自分たちで作成したものも使っています。そしてそれらを選択できます。つまり VIS のクールな点の一つは、他の多くのベクトルデータベースとは違って、インデックスタイプを選べるようにしていることです。他のものの名前は挙げませんが。rock。これは Tom 宛てです。リンクをクリックして U R L バーからコピーできます。ダウンロードすることも、Google Drive にコピーすることもできます。はい、その通りです。
ええと、Alex、ハイブリッド検索のトピックについてもう少し詳しく説明してもらえますか。それと Viss がそれをどのようにサポートしているかも。はい、もちろんです。ハイブリッド検索というのは、ええと、実際には、つまり、実際にこの用語が複数の意味で使われているのを目にすると思います。ええと、ある人たちの使い方では、ベクトル型のようなもの、たとえば、その、BMM 25 のようなものを検索できるという意味です。ええと、別の人たちの使い方では、こうした非構造化データと構造化データを検索できるという意味で、これは実際、業界で多く質問を受けることです。何人かと話したことがありますが、彼らは、そうですね、その、私たちが本当に解明したいことの一つは、こうしたキー・バリューの構造化データを、ベクトル、つまり非構造化データと一緒にどうやってクエリできるか、ということなんです、と言っていました。
でも私の見方としては、つまり、あなたにはベクトルデータがあり、それにメタデータを一緒に保存でき、そのメタデータに対してフィルタリングできる、という感じです。そしてそれこそが、私が本当のハイブリッド検索だと考えているものです。つまり、ベクトルに付随する、その、その、そのデータに対してフィルタリングすることです。それを行う別の方法について考えることもできますが、だいたい私はそう考えています。そしてそれによって何ができるか、それが検索に入って実行されるときに何をするか、そしてなぜそれで十分なのかというと、すべてのメタデータにこのビットマスクを適用し、すべてのメタデータをフィルタリングして、このメタデータがこのビットマスクに従っていないなら、ええと、そのままスキップすると言うのです。計算はまったく行いません。
だからそれで十分なのです。ベクトルではなく、ハミング距離に基づくバイナリデータの近似検索はサポートしていますか?実はこの答えはわかりません。Emily、答えを知っていますか?知りません。わかりました。ノーと言っておきます。
ええと、はい。Sam Corbett、皆さんはインデックス作成のみに G P U を使っていますか、それとも検索フェーズ中にも使っていますか?ええ、はい、G P U は使われています、ええと、検索フェーズ中にも使われていると思います。というのも本質的には、NVIDIA が viss 向けに提供している G P U サポートで、VISS が C P U の代わりに G P U を使って、ええと、計算を行えるようにするものだからです。なので、そうですね、クエリフェーズで使われる必要があります。Francisco、メタデータ機能は標準的なリレーショナルデータベースに近づけることを意図しているのですか。Postgres には今やベクトルが入っていて、同じギャップを埋めようとしていますが、逆方向です。Postgres はベクトルデータベースと比べて、その情報において何が欠けているのでしょうか?なぜ一方をもう一方より選ぶのでしょうか?なので、メタデータ機能が本当に標準的なリレーショナルデータベースに近づけることを意図しているのかはわかりません。
そう見ることはできます。私は、メタデータ機能は本当に、データにタグを付けられるようにしたい、たとえば、それがいつ起きたのか、どこから来たのか、ええと、あるいは何か、何らかの別のタグのようなものを見られるようにしたい、というこの問題を解決しているのだと思います。私はメタデータをだいたいそういうものとして見ています。ええと、それによってそこまで近づくとは思いません。つまり、私たちは、たとえば、その、このテーブルの中のユーザーだけが欲しい、where が何であれ select from where みたいな検索ができるわけではありません。
ええと、ただ、はい、Postgres にはベクトルがあります。PG vector というものがあります。そして Postgres の実装は Vector database と比べて何が欠けているのか?まあ、かなり初期段階です。私たちは 2017 年から存在しているので、vis に取り組む時間が長くありましたし、かなり活発なコミュニティがあります。実際、皆さんが先ほど私が使っているのを見た Pine viss の、ええと、s D K は、実はコミュニティメンバーによってコントリビュートされたものです。
ええと、でもPostgresは、まあ、1つの点として、Postgresにはインデックス作成メソッドが1種類しかありません。だからPostgresは、そうですよね?一方で私たちには、複数のインデックス作成メソッドがあります。PostgresはI V Fだけだと思います。ええと、それに、ベクトル検索向けに最適化されているわけでもないですよね?では、リレーショナルデータベースの検索のようなものと比べて、ベクトル検索をこれほど違うものにしている点の1つは何でしょうか。それは、大量の計算をしなければならないということですよね?これらのベクトルは、ご存じのとおり、こうした非常に長い、長い数値、長い数列です。これらの数値に対して非常に多くの計算を行う必要があります。ですから、これを基本的に総当たりで行っているだけの実装や、あるいは、ええと、こうした種類の計算に最適化されていない何かを使っている実装であれば、遅くなります。ええと、基本的にパフォーマンスが悪くなるということです。
ええと、なぜ一方ではなくもう一方を選ぶのでしょうか?もし類似検索に関わることを何かするなら、私はベクトルデータベースを使いますし、novisを使います。ええと、もし、たとえば、ユーザーデータベースのようなキー・バリューデータが大量にある場合なら、私は間違いなくPostgresや、何らかのorgデータベースのようなものを使うでしょう。何であれ、間違いなくPostgresを使いますよね?ええと、ただ、ご存じのとおり、私たちがLLMの世界へ進んでいくにつれて、より機械学習に焦点を当てたものの世界へ進んでいくにつれて、より多くの非構造化データ、より多くの、より多くの非構造化データ、より多くのベクトル埋め込みを見ることになり、ベクトルデータベースはそのために本当に重要になると思っています。ええと、ベクトル検索は完全一致を見つけるためのものではありませんよね?実際には、完全一致を見つけることもできます。たとえば、この例では、ここで完全一致が得られましたよね?これは何でしたっけ?これは誰の絵ですか、Degaですか?はい。
たとえば、この例では、私のDegaの絵に一致するものが見つかり、実際にはその中に2つあります。ただ、ご覧のとおり、距離が得られます。ええと、つまり、この距離は基本的にゼロです。ええと、こうした一致が表示されます。ええと、完全一致も取得できますが、主に類似検索に使われます。いいですね。q and a OSS vectorにあるのはこれですべてです。
ああ、それとEmilyですね。ああ、これは何ですか?Postgres sqlで検索するためのVector。わあ。なるほど。面白い画像ですね。
ええと、Postgresには実際、ベクトルを管理するための非常に強力なアドオンがあります。わかりました。これは、これは質問ではないので、何を、何をお伝えすればいいのかよくわかりません。ええと、わかりました。残り5分ありますので、ほかにどなたか、ああ、私の、皆さん画面は見えていますか?あなたの画面が見えています、はい、出ました。
わかりました。わかりました。ちょっとの間、私の、私の画面に何が起きたのかわかりません。残りの質問は終わったようですので、本日はご参加いただいた皆さんにお礼を申し上げたいと思います。Eugene、本当に素晴らしいセッションをありがとうございました。
ええと、本当に多くの内容をカバーしましたので、ええと、皆さんご確認ください。リプレイへのリンクをお送りしますので、見逃したことや戻って確認したいことがあれば、必ず、ええと、その時間を取っていただけます。本当にありがとうございました。また今後のウェビナーでお会いできることを願っています。Eugene、ありがとうございました。皆さん、ありがとうございました。


