Closed1

読解メモ - Using OpenSearch as a Vector Database

hassaku63hassaku63

読解メモ - Using OpenSearch as a Vector Database

https://opensearch.org/platform/search/vector-database.html

要約

柔軟で、スケーラブルで、将来性のある AI アプリケーションを構築するための OSS でオールインワンな Vector database としての OpenSearch の側面をアピールする文章。

序文

BM25 のような伝統的な字句検索は、検索アプリケーションで広く使われている。

しかし、字句検索は単語の意味や関連性を考慮するために多大な時間と専門性を必要とする。

分散表現 (embedding) を使用することで、文章・画像・音声をその意味や文脈を考慮した形でエンコードする。OpenSearch では、これを k-NN で検索できる。

OpenSearch を vector database として利用することで、伝統的な検索・分析・ベクターサーチを1つのパッケージで行うことができるようになり、AI アプリケーションの開発者の労力を軽減できるようになる。

※字句検索と vector search はどう違っててどう使い分けるのか?的な観点は押さえておく必要がある。 What is Lexical Search and Semantic Search? がちょうど良さそうなので、このノートの最後のセクションでこの文書の内容についても書いておく

What is a vector database?

「情報」には様々な形式がある。例えば

  • 非構造化データ
    • (自然言語で書かれた)文章
    • リッチ メディア(?)
    • 音声
  • 構造化データ
    • 地理座標
    • グラフ

AI 分野が発展したことで、モデルや分散表現 (Embeddings) を使ってこれらのデータをベクトルとして扱えるようになった。これで、ベクトルを使って意味や文脈を考慮した検索が、近傍を探索することによって実現できるようになった

vector database はベクトルとメタデータをインデックスでき、低遅延のクエリで類似度によるアセット(?)の発見ができる。「類似度」は k-NN インデックスを使う。

※k-NN 自体は近傍を計算するための手法だったはず。この文脈では「インデックス」という用語が入っているので、おそらく転置インデックスのような要領で k-NN で計算した近傍を検索に適した形式でインデックスしていると思われる。そのときに近傍の「インデックス」を構築するための手段=アルゴリズムが HNSW, IVF にあたるものと想像できる

※ HNSW = Hierarchical Navigable Small Worlds, IVF = Inverted File (System)

どっちの手法も使われているが、使い方とか精度の観点が異なる。

字句検索は Exactly match として知られる(たぶん Like 句とかのこともひっくるめた文脈で使ってると思われる)

スペルや文法上(多分活用形とか?)のバリエーションを考慮しない。この検索は、人や場所、物の情報を検索する目的でよく利用される。

意味検索はもうちょっと発展的。単語やスペルだけではなく、「意味」や「文脈」を考慮する。例えば、人物名を Semantic search で検索した場合は、その人物の意味(とは?)に近い名前を検索する。

一致検索がしたいなら、字句検索の方が早いし効率的。特定の名前を見つけたい場合に使える。しかし、前述したように一致検索であることによる限界もある。例えばスペリングの違いを認識できないこと。

意味検索はより高度で、スペルや文法の誤りを含むクエリでも「それらしい」情報を検索して類似情報を検索できる。大きなデータベースの中を検索するための良い選択肢となる。ただし、字句検索よりも多くのコンピューティングリソースを消費する。

それぞれに利点があり、一方的にどちらかが優れているわけではない。字句検索で十分なユースケースでは字句検索を使う、的な見極めがだいじ。

このスクラップは2023/10/28にクローズされました