Qdrant

ベクターデータベース

レコードID

Qdrantのレコードを更新する際のキー情報は、レコードのIDです。 Qdrantでは、各レコード(Point)は一意の識別子(ID)、ベクトル、そしてペイロード(追加情報)で構成されています¹レコードを更新する際には、このIDを使用して特定のレコードを指定します¹

Lexical Search(レキシカル検索)は、キーワードベースの検索の一種で、[力されたクエリとデータベース内のテキストの正確な一致を探す方法です¹²。具体的には、以下のような特徴があります:>

  • 正確な一致:クエリに入力された単語とデータベース内の単語が正確に一致するものを探します。スペルや文法のバリエーションは無視されます¹
  • 高速で効率的:特定の名前や日付など、変更されにくい情報を迅速に見つけるのに適しています¹
  • シンプルな実装:多くの検索エンジンやデータベースで一般的に使用される方法です²

例えば、データベース内で特定の人物の名前を探す場合、レキシカル検索を使用するとその名前と正確に一致するエントリを見つけることができます。

一方で、レキシカル検索は意味の理解を伴わないため、同義語や文脈を考慮した検索には向いていません³。そのため、より高度な検索が必要な場合は、セマンティック検索(意味検索)などの他の方法が使用されることがあります¹

(1) Lexical Search Vs Semantic Search - Try Speak Free!. https://speakai.co/lexical-search-vs-semantic-search/. (2) Lexical and semantic search with Elasticsearch. https://www.elastic.co/search-labs/blog/lexical-and-semantic-search-with-elasticsearch. (3) Search in a Knowledge Base – Introduction & Lexical Search - Semedy. https://www.semedy.com/post/search-in-a-knowledge-base-introduction-lexical-search.

Dense Search(デンス検索)

Dense Search(デンス検索)は、高次元の数値ベクトルを使用してデータを検索する方法です。 これは、特にセマンティック検索(意味検索)に適しており、クエリとデータベース内のドキュメントの間の意味的な類似性を評価します¹²

特徴

  • ベクトル表現:テキストや画像などのデータを高次元のベクトルに変換します。 これにより、データの意味的な情報を数値として表現できます¹
  • 距離計算:クエリベクトルとデータベース内のベクトル間の距離(例えば、ユークリッド距離やコサイン類似度)を計算し、最も類似した結果を返します²
  • 機械学習モデル:BERTやGloVeなどの機械学習モデルを使用して、データをベクトルにエンコードします²

利点

  • 意味的な一致:キーワードの正確な一致に依存せず、意味的に関連する結果を返すことができます³
  • 多様なデータ対応:テキストだけでなく、画像や音声などの異なるデータタイプにも適用可能です¹

使用例

Dense Searchは、検索エンジンやレコメンデーションシステムなどで広く使用されています。 例えば、ユーザーが入力したクエリに対して、意味的に関連するドキュメントや商品を見つけるのに役立ちます。

¹: Dense Vector Search :: Apache Solr Reference Guide ²: Hybrid Search Explained - Weaviate ³: Understanding hybrid search - Pinecone Docs

(1) Dense Vector Search :: Apache Solr Reference Guide. https://solr.apache.org/guide/solr/latest/query-guide/dense-vector-search.html. (2) Hybrid Search Explained - Weaviate. https://weaviate.io/blog/hybrid-search-explained. (3) Understanding hybrid search - Pinecone Docs. https://docs.pinecone.io/guides/data/understanding-hybrid-search.

Sparse Vector

Sparse Vector(スパースベクトル)は、高次元のベクトルであり、その多くの要素がゼロであるエンベッディング手法です。具体的には、以下のような特徴があります:

特徴

  • 高次元:スパースベクトルは通常、非常に多くの次元を持ちますが、その中で非ゼロの要素はごくわずかです¹²(https://www.pinecone.io/learn/splade/)。
  • 効率的なメモリ使用:非ゼロの要素が少ないため、メモリとストレージの使用が効率的です³
  • 解釈可能性:各次元が特定の単語やトークンに対応しているため、ベクトルの意味を解釈しやすいです¹

使用例

  • 情報検索:TF-IDFやBM25などのアルゴリズムで使用され、キーワードの頻度に基づいて文書の関連性を評価します²
  • ドメイン固有の検索:医療や法律など、専門用語が多い分野で特に有効です¹

メリットとデメリット

  • メリット:高次元データの処理が得意で、特定のキーワードに対する精度が高い²
  • デメリット:意味的な情報を捉えるのが難しく、文脈を理解する能力が低い²

スパースベクトルは、特定のキーワードやトークンに焦点を当てることで、効率的かつ解釈可能な検索を実現しますが、意味的な検索には向いていないため、デンスベクトルと組み合わせたハイブリッド検索がよく利用されます ²

他に知りたいことがあれば教えてくださいね!

¹: Qdrant - Sparse Vectors ²: Pinecone - SPLADE for Sparse Vector Search ³: Zilliz - Vector Embeddings

(1) What is a Sparse Vector? How to Achieve Vector-based Hybrid Search. https://qdrant.tech/articles/sparse-vectors/. (2) SPLADE for Sparse Vector Search Explained - Pinecone. https://www.pinecone.io/learn/splade/. (3) An Introduction to Vector Embeddings: What They Are and How to … - Zilliz. https://zilliz.com/learn/everything-you-should-know-about-vector-embeddings.

使い分け

Qdrantでのdense vector(密ベクトル)とsparse vector(疎ベクトル)の使い分けについて説明します。

Dense Vector(密ベクトル)

  • 特徴: Dense vectorは、すべての要素が非ゼロの値を持つベクトルです。通常、ニューラルネットワークによって生成され、各要素が連続的な数値を持ちます。
  • 用途: 主に画像、音声、テキストの意味的な類似性を計算するために使用されます。例えば、画像検索や自然言語処理(NLP)における文の意味的な類似性の計算に適しています。
  • 利点: 高次元空間での類似性検索に強く、意味的な関係を捉えるのに優れています。

Sparse Vector(疎ベクトル)

  • 特徴: Sparse vectorは、多くの要素がゼロであり、非ゼロの要素のみをリストとして保持します。これにより、メモリ効率が高くなります。
  • 用途: 主にテキストデータの検索やランキングに使用されます。例えば、特定のキーワードの出現頻度に基づく検索や、BM25のようなランキングアルゴリズムに適しています。
  • 利点: 高次元のテキストデータを効率的に処理でき、特定のキーワードやフレーズの検索に強いです。

使い分けの例

  • 画像検索: Dense vectorを使用して、画像の意味的な類似性を計算します。
  • テキスト検索: Sparse vectorを使用して、特定のキーワードやフレーズに基づく検索を行います。
  • ハイブリッド検索: 両方のベクトルを組み合わせて、意味的な類似性とキーワードの一致を同時に考慮した検索を行います ¹ ² ³

具体的なユースケースや実装方法についてさらに知りたい場合は、Qdrantの公式ドキュメントを参照してください²

他に質問があれば、どうぞお知らせください!

¹: Qdrant Sparse Vectors ²: Qdrant Vectors Documentation ³: Qdrant Hybrid Vector Algorithm

(1) What is a Sparse Vector? How to Achieve Vector-based Hybrid Search - Qdrant. https://qdrant.tech/articles/sparse-vectors/. (2) Vectors - Qdrant. https://qdrant.tech/documentation/concepts/vectors/. (3) Qdrant unveils hybrid vector algorithm for improved RAG. https://blocksandfiles.com/2024/07/02/qdrant-launches-combined-vector-and-keyword-search-for-rag-and-ai-apps/.

Bedrock

Payload

Qdrantにおける「Payload」とは、ベクトルと一緒に保存される追加情報のことを指します。 PayloadはJSON形式で表現できる任意の情報を含むことができます。 例えば、商品データベースの場合、各商品のベクトルに対して以下のようなPayloadを付与することができます¹

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "name": "jacket",
  "colors": ["red", "blue"],
  "count": 10,
  "price": 11.99,
  "locations": [
    { "lon": 52.5200, "lat": 13.4050 }
  ],
  "reviews": [
    { "user": "alice", "score": 4 },
    { "user": "bob", "score": 5 }
  ]
}

Payloadは、検索時にフィルタリング条件として使用することもできます。 例えば、特定の価格範囲内の商品や特定の色の商品を検索する際に役立ちます¹

QdrantのPayloadを活用することで、ベクトル検索の精度を高め、より詳細な検索条件を設定することが可能になります。

他に具体的な質問や詳細が必要であれば、お知らせください!

¹: Qdrant Payload Documentation

(1) Payload - Qdrant. https://qdrant.tech/documentation/concepts/payload/.

Payload インデックス

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
client.create_payload_index(
    collection_name="my_collection",
    field_name="metadata.library",
    field_type=PayloadSchemaType.KEYWORD,
)

client.update_collection(
    collection_name="my_collection",
    hnsw_config=HnswConfigDiff(payload_m=16, m=0),
)

記事

ドキュメント: