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

Elasticsearchにおけるベクトル検索(第57回Elasticsearch勉強会)

樋口慎
December 18, 2023

 Elasticsearchにおけるベクトル検索(第57回Elasticsearch勉強会)

第57回 Elasticsearch勉強会(LT大会)の発表資料です。

樋口慎

December 18, 2023
Tweet

More Decks by 樋口慎

Other Decks in Technology

Transcript

  1. Copyright © Acroquest Technology Co., Ltd. All rights reserved. 第57回Elasticsearch勉強会

    Elasticsearchにおけるベクトル検索 Acroquest Technology 株式会社 Elastic Certified Engineer 樋口 慎 @shin0higuchi 1
  2. 自己紹介 ⚫ 名前:樋口 慎 ⚫ 所属:Acroquest Technology株式会社 ⚫ 業務:Elasticコンサルティング全般、データ分析、システム開発 ⚫

    資格/執筆: 世界初「Elastic Certification」3種取得 Azure Solutions Architect Elasticsearch NEXT STEP 執筆
  3. ベクトル化することで、自然言語に依らず検索が可能 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    5 画像1: [0.8, 0.2, 0.3, ....] 画像2: [0.0, 0.5, 0.2, ....] 画像3: [0.3, 0.4, 0.1, ....] 画像4: [0.4, 0.6, 0.2, ....] ベクトル化
  4. 文書のベクトル検索 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    6 ▪Elasticsearchの通常の検索 検索クエリを 形態素解析 AWS上でElasticsearchを使うには? AWS/上/で/Elasticsearch/ を/使う/に/は/? 検索対象ドキュメント群 検索 「AWS」「Elasticsearch」 といったキーワードを含むド キュメントのみがヒットする ▪セマンティック検索 機械学習モデルで ベクトル化(embedding) AWS上でElasticsearchを使うには? [0.8, 0.2, 0.3, ....] 検索対象ドキュメント群 検索 意味的に近い ドキュメントがヒットする ※検索ドキュメント群が事前に ベクトル化されている必要がある
  5. Elasticsearchで学習済みモデルを利用するには Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    8 Kibana Elasticsearch 学習済みモデル ② Elandを利用して、 学習済みモデルを Elasticsearchに登録する ① 学習済みモデルを用意する (Hugging Face等を利用す る場合、適切なモデルを選 ぶのみ) ③ ドキュメント登録時/検 索時に登録済みモデルを 呼び出して利用する (ベクトル化)
  6. Elasticsearchでのベクトル検索 Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    10 1. HNSWと呼ばれるアルゴリズムによって、 大量のベクトルが対象でも高速な類似検索が可能 ※script scoreクエリによるブルートフォースkNNも利用可能だが 高レイテンシーのため、厳密性を求めない限りは利用機会が少ないと思われる 2. バージョンアップとともに、利用可能なベクトル次元数も増加 (ver.8.11では4096次元のベクトルまで登録可能) 3. 詳細なクエリ記法はリファレンス参照 k-nearest neighbor (kNN) search | Elasticsearch Guide [8.11] | Elastic を参照
  7. 余談ですが.... Copyright © Acroquest Technology Co., Ltd. All rights reserved.

    13 • 8.11で sparse_vector型が復活しました(実体はrank_feature型)