Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Qdrant を用いた検索改善施策の紹介 / Search Engineering Tech ...

Qdrant を用いた検索改善施策の紹介 / Search Engineering Tech Talk 2024 Summer

2024年10月10日に開催された「Search Engineering Tech Talk 2024 Summer」の登壇資料です。
https://search-tech.connpass.com/event/331560/

▼関連資料
マルチAWSアカウント間のストリーミングによるデータ同期
https://speakerdeck.com/visional_engineering_and_design/aws-saas-builders-forum-2024

ビズリーチAI組織のDS/ML関連の論文・登壇実績を紹介します 〜NLP2024に向けて〜
https://engineering.visional.inc/blog/582/nlp2024/

検索ランキングの比較のためにInterleavingの導入と評価をした際の工夫
https://engineering.visional.inc/blog/615/implement-interleaving-for-search-evaluation/

-----
Visionalのエンジニアリングに関する最新情報はX、ブログで発信しています!📣

▼Visional Engineering Blog
https://engineering.visional.inc/blog/

▼VISIONAL ENGINEERING / X
https://twitter.com/VISIONAL_ENG

More Decks by Visional Engineering & Design

Other Decks in Technology

Transcript

  1. Qdrant を用いた検索改善施策の紹介
 Search Engineering Tech Talk 2024 Summer, 2024.10.10
 


    
 
 株式会社ビズリーチ(Visional グループ)
 リクルーティングプロダクト本部プラットフォーム開発部
 検索基盤グループ
 渡會 恭平
 1
  2. • 既存の検索システムに大きな変更を加えることなく機能を提供できる
 ◦ クエリの修正だけで実現可能(インデックス修正なしで対応できる)
 ◦ 当時(2022年9月)、検索システムの改修をしつつも検索品質の改善を進めたかった
 
 • モデルやベクトルの生成・運用をAI専門のチームで対応することができる
 ◦

    以前は、検索チームとAI機能を開発するチームが分かれていた
 ◦ 組織間を跨いでモデル・ベクトルを扱うアーキテクチャ設計や運用の仕組みの構築が不要
 
 • 既存の検索結果の並び順だけに影響を与えるので、ユーザー体験への影響を小さくできる
 ◦ ベクトル検索は全アイテムに対して影響があるが、ベクトルランキングは一部の検索結果が対象となるため影 響範囲が小さい
 ◦ ベクトル検索への移行は、ユーザー体験が大きく変わりすぎるのでプロダクトとしてすぐに受け入れられな かった
 ベクトルランキング導入のメリット
 15
  3. • Vector DB を選ぶ上で以下2つの要件が必須
 ◦ ブースト対象者を取得する上で、対象者を絞り込む「pre-filter」と「ベクトル検索」が備わっている
 ◦ 求職者の検索の前に処理するため、可能な限り「検索スループットが小さい」こと
 
 •

    上記2点を踏まえた上で調査したところ、以下のエンジンが候補して挙がった
 ◦ Elasticsearch (Lucene)
 ◦ OpenSearch (nmslib)
 ◦ Qdrant
 ◦ Vespa
 ◦ Vertex AI
 
 • 余談ですが、Faiss や Annoy などの近傍探索ライブラリも検討しましたが、pre-filter 機能が備わってなかった ので候補から外しました。(2022年9月の仕様検討時点)
 Vector DB を選ぶ
 21
  4. • パフォーマンス検証(2022年9月頃に実施したため、現在の状況は異なります。)
 ◦ 1000万件ぐらいのドキュメントに対して検索スループットを調査
 
 • 検証結果
 ◦ Qdrant >

    Vespa >> Elasticsearch > Vertex AI > OpenSearch
 
 • 検証結果より、最も検索スループットが良かった「Qdrant」 を採用することに決定!!
 Vector DB を選ぶ(2)
 22
  5. What is Qdrant? - Qdrant より
 Qdrant is a vector

    similarity search engine that provides a production-ready service with a convenient API to store search, and manage points (i.e. vectors) with an additional payload.
 
 Qdrant でできること
 • ベクトルおよびペイロードを用いた検索
 • クラウドまたはオンプレミスで利用可能
 • Quantization や Indexing などの機能も備わっている
 Qdrant
 Qdrant is a vector similarity search engine that provides a production-ready service with a convenient API to store search, and manage points (i.e. vectors) with an additional payload. 23
  6. What is Qdrant? - Qdrant より
 Qdrant の構成
 25 引用:https://qdrant.tech/documentation/overview/#high-level-overview-of-qdrants-architecture


    Collections
 • 検索できる Point の名前付きセット
 • 同じ Collection 内の各 Point のベクトルは、同じ 次元を持ち、単一のメトリックで比較する 
 • NamedVector オブジェクトを用いると、単一のポ イントに複数のベクトルを持つことができ、各ベクト ルには独自の次元とメトリック要件を設定できる 

  7. What is Qdrant? - Qdrant より
 Qdrant の構成
 26 引用:https://qdrant.tech/documentation/overview/#high-level-overview-of-qdrants-architecture

    Distance Metric • ベクトル間の類似性を測定するために使用され、コレク ションを作成するときに同時に選択する • メトリックの選択は、ベクトル生成の方法によって異なる Distance Metric
 • ベクトル間の類似性を測定するために使用され、コ レクション作成時に選択する
 • メトリックの選択は、ベクトル生成の方法によって異 なる
 

  8. What is Qdrant? - Qdrant より
 Qdrant の構成
 27 引用:https://qdrant.tech/documentation/overview/#high-level-overview-of-qdrants-architecture


    Points
 • Qdrant が操作する中心的な Entity
 • ベクトル、 ID および Payload で構成される
 ◦ Point 構成
 ▪ ID:一意の識別子
 ▪ Vector:データの高次元表現
 ▪ Payload:Json オブジェクト

  9. What is Qdrant? - Qdrant より
 Qdrant の構成
 引用:https://qdrant.tech/documentation/overview/#high-level-overview-of-qdrants-architecture
 28

    Storage
 • 2 つの Storage オプションを持つ。
 • in-memory storage:すべてのベクトルを RAM に保存 し、disk アクセスは永続性のために利用する仕組み 
 • memmap storage :ディスク上のファイルに関連付けら れた仮想アドレス空間を作成する仕組み 

  10. • A Complete Guide to Filtering in Vector Search -

    Qdrant より
 ◦ Filterable Vector Index を採用して、近傍探索(HNSW)&フィルタリングでの検索が可能。
 ◦ フィルタでノード間のリンクが切れても追加のリンクを構築するので、最適解への探索が打ち切られることがな い。
 
 Qdrant の検索
 引用:https://qdrant.tech/articles/vector-search-filtering/
 29
  11. 本番稼働に向けて以下のような課題がありました。
 • 検索結果に対する取得したブースト対象者のカバレッジが低い
 • Payload + Vector の検索が遅い
 • Payload

    の条件が多いクエリの検索が遅い
 これらに対する解決策とその効果について紹介します。
 Qdrant 本番稼働に向けての課題
 30
  12. 課題
 • 検索結果に対する取得したブースト対象者のカバレッジが低い
 ◦ 検索結果にブースト対象者が現れないことが頻発した。
 解決策
 • パフォーマンスと精度のトレードオフを見つつ、近傍探索およびHNSWのパラメータを修正
 • 修正パラメータ


    ◦ エッジの数
 ◦ indexing と search の時に保持する近傍ノードの数
 結果
 • 検索結果に対するカバレッジ平均が約5倍向上した。
 • 検索結果に出現するブースト対象の候補者が増えた。
 Qdrant 本番稼働に向けての対応(1)
 31
  13. 課題
 • Payload + Vector の検索が遅い
 解決策
 • Storage オプションを設定する。


    ◦ in-memory storage に payload を配置し、memmap storage にベクトルを配値
 ◦ メモリ使用率とパフォーマンス(レイテンシ)のトレードオフを調査
 結果
 • 平均 100 ~ 200 ミリ秒のレイテンシーが、平均 50 ~ 60ミリ秒になった。
 • 両方とも in-memory storage に配置すれば良さそうに見えるが。。。
 ◦ ベクトルはメモリ使用量が大きいため、そのまま in-memory stroage で扱う場合コストがかかる。
 ◦ また、複数のベクトルを対象に実験を行うことを想定すると、さらにメモリが必要になるためコストの都合上 in-memory での運用は厳しい
 Qdrant 本番稼働に向けての対応(2)
 32
  14. 課題
 • Payload の条件が多いクエリの検索が遅い
 解決策
 • 条件の密度が多い Payload の属性値に対して、payload_indexing および

    full_text_indexing を設定
 結果
 • Payload 検索のレイテンシーが、10 ~ 20ミリ秒ほど改善された
 Qdrant 本番稼働に向けての対応(3)
 33
  15. 施策とその効果まとめ
 • 近傍探索およびHNSWのパラメータを修正により精度を改善
 • Storage オプションの設定でメモリコスト削減およびレイテンシーの改善
 • Payload に対して Indexing

    を設定して、レイテンシーをさらに改善
 
 これらの改善策を導入して、ベクトルランキングを本番稼働させることができました。
 最後に、ベクトルランキングで利用する「モデル・ベクトル生成」について紹介します。
 
 Qdrant 本番稼働!
 34
  16. • ベクトルランキングでは、Two Tower Model を採用
 ◦ 検索クエリを扱う Query Tower と候補者データを扱う

    Candidate Tower を構築
 ◦ Query / Candidate Tower それぞれに関連する特徴を入れてベクトルを生成し、過去ログのインタラクショ ンを正解ラベルとして、Query Tower と Candidate Tower のモデルを共同で学習する
 • マルチモーダルやコールドスタート問題にも対応できる
 
 Two Tower Model
 38
  17. • Query Tower のモデルと Candidate Tower のモデルからベクトルを生成し、検索の過去ログのインタラクショ ンを元にそれぞれのモデルを学習する。
 • ベクトルランキングでは

    Contrastive Learning を採用している。
 ◦ 類似するものは近くに、異なるものは遠くにマッピングされるように学習する。
 モデル:学習
 引用:https://www.mdpi.com/2073-8994/11/9/1066
 39 類似度スコア(インタラクション)をもとに loss を算出。
  18. 学習したモデルは、オンライン・オフラインでそれぞれ利用する
 • Query Tower
 ◦ Query Tower のモデルは、オンラインで API で提供


    ◦ Query データをリアルタイムでベクトルに変換する
 • Candidate Tower
 ◦ Candidate Tower のモデルは、オフラインで Batch として利用
 ◦ Qdrant の Collection に挿入するベクトル生成で、大規模なデータをまとめて処理する
 
 プロダクションでの利用
 41
  19. 以下の施策を実施
 • モデル構造の見直しとパラメータチューニング
 • Positive / Negative Sampling
 • Implicit

    Feature の導入(行動履歴の特徴)
 • などなど。。。
 
 今回は、Implicit Feature 導入による精度改善について紹介します。
 モデル改善の施策
 42
  20. • ベクトルランキング施策とその構成について紹介
 ◦ ベクトルランキングはベクトル検索技術を用いて検索時のスコアをブーストする仕組み
 ◦ クエリの修正で実現できるので、導入コストが小さく、改善効果も期待できる
 
 • Qdrantの本番稼働に向けた施策の紹介
 ◦

    Qdrant の採用経緯とその特徴・構造について紹介
 ◦ メモリ・精度・レイテンシーに関わる Qdrant のチューニング方法を紹介
 
 • モデル・ベクトル生成の紹介
 ◦ Two Tower Model を用いたベクトル生成の仕組みを採用
 ◦ レコメンド技術を用いて行動履歴から特徴を作成し、モデルの精度を改善
 まとめ
 47
  21. Qdrant
 https://qdrant.tech/
 
 What is Qdrant?
 https://qdrant.tech/documentation/overview/
 
 A Complete

    Guide to Filtering in Vector Search
 https://qdrant.tech/articles/vector-search-filtering/
 Appendix:参考文献
 49
  22. Embedding-based Retrieval in Facebook Search
 https://arxiv.org/pdf/2006.11632
 
 Embedding-based Product Retrieval

    TaoBao Search
 https://arxiv.org/pdf/2106.09297
 
 Lecture Notes on Neural Information Retrieval
 https://arxiv.org/pdf/2207.13443
 
 Appendix:参考文献(2)
 50
  23. Efficient and robust approximate nearest neighbor search using Hierarchical Navigable

    Small World graphs
 https://arxiv.org/pdf/1603.09320
 
 Deep Metric Learning: A Survey
 https://www.mdpi.com/2073-8994/11/9/1066
 
 Innovative Recommendation Applications Using Two Tower Embedding at Uber
 https://www.uber.com/en-JP/blog/innovative-recommendation-applications-using-two-tower-embeddings/
 
 Appendix:参考文献(3)
 51