本書は、全文検索エンジンである Apache Solr のバージョン 9 から導入された密ベクトル検索機能について、その特徴と使い方を紹介する本です。
ベクトル検索は従来のキーワード検索では実現が困難だった、ニュアンスの検索や類似画像検索、レコメンド、テキストから画像や音声などメディアの垣根を越えたマルチモーダルな検索などなど、ユーザーにまったく新しい検索体験を提供できる可能性を秘めた検索手法です。
その魅力の反面、Solr 上でのベクトル検索は、全文検索エンジンの知識に加えて、機械学習分野の素養も求められます。
そのため、導入の敷居が高いと感じられているチームが多いのではないでしょうか。
その証拠というべきか、ビジネスでの実用実績はおろか、使ってみたという記事さえほとんど見つかりません。
そこで、本書では、追加された Solr の機能の使い方はもちろん、肝となるベクトル生成部分の実現例についてもご紹介します。
これを読めば、検索チームが少なくとも機械学習チームとコミュニケーションを取ってベクトル検索を実現、あわよくば検索チームオンリーでもベクトル検索を活用スタートできるようになることを目指した一冊です。
稀有だと思いますが、これからSolrを使ってみたい、あるいは検索チームとコミュニケーションを取りたいMLチームの方でもなんとか読めるよう、最低限のSolr知識も1章、2章で解説しています。
サクッと雑感を知りたければ、以前書いたブログ記事もあるので、先にこちらを読んでもいいかもしれません。
本書の内容のうち Solr の機能紹介にフォーカスした部分を記載しています。
https://zenn.dev/sashimimochi/articles/1957974d64d571
======================
目次
はじめに
第 1 章 全文検索エンジン Apache Solr
1.1 全文検索とは
1.2 なぜ全文検索エンジンを使うのか
1.3 転置インデックス
1.4 Apache Solr
1.5 Solr の特徴
1.6 冗長化の実現
1.6.1 ノードとコレクション
1.6.2 シャーディング
1.6.3 レプリケーション
1.7 クラスター構成
1.7.1 スタンドアローン構成
1.7.2 Master Slave 構成
1.7.3 SolrCloud 構成
1.7.4 構成まとめ
1.8 その他の Solr 機能
1.8.1 コンテンツ抽出
1.8.2 管理者向け GUI
1.8.3 プラグインによる機能拡張
1.9 テキストの解析と評価
1.9.1 トークン化
1.9.2 形態素解析
1.9.3 N-Gram
1.9.4 日本語固有の課題と tokenizer
1.9.5 適合度
コラム: Solr の読み方は?
1.10 参考文献
第 2 章 全文検索エンジンとして動かしてみる
2.1 環境構築
2.2 まずは検索
2.3 solrconfig
2.4 managed-schema
2.5 ストップワード
2.6 データ投入
2.7 基本的な検索機能
2.7.1 メインクエリ
2.7.2 フィールドリスト
2.7.3 ソート
2.7.4 ファンクションクエリ
2.7.5 フィルタークエリ
2.8 高度な検索機能
2.8.1 リランキングクエリ
2.8.2 グルーピング
2.8.3 ファセット検索
2.8.4 ハイライト
2.8.5 ジョイン検索
2.9 表記や表現の揺れに強くする
2.9.1 フレーズ検索
2.9.2 あいまい検索
2.9.3 シノニム検索
2.9.4 MoreLikeThis
2.10 2 章のまとめ
第 3 章 ベクトル検索の理論とその要素技術
3.1 ベクトル検索がもたらす検索体験
3.2 ベクトル検索とは
3.3 埋め込み表現
3.4 ベクトル検索における類似度計算
3.4.1 ユークリッド距離
3.4.2 ドット積
3.4.3 コサイン類似度
3.4.4 どれを使うとよいのか
コラム: ベクトル検索は本当にベクトルを検索しているのか
3.5 モデルと学習
3.6 全文検索とベクトル検索の違い
3.7 近似最近傍探索
3.8 ベクトル検索をめぐるこれまで
コラム: ANN に代わる新たな近傍探索手法!?
第 4 章 Solr 上でベクトル検索を動かす
4.1 Solr 定義
4.2 インデックスデータの作り方
4.3 メインクエリでの使い方
4.4 フィルタークエリでの使い方
4.4.1 fq での基本的な使い方
4.4.2 fq で使うときの注意点
4.5 リランククエリでの使い方
4.5.1 rq での基本的な使い方
4.5.2 rq で使うときの注意点
4.6 ベクトルフィールドを複数使う
4.7 実用案
4.7.1 キーワード検索と組み合わせる
4.7.2 ファセットと組み合わせる
4.7.3 グルーピングと組みわせる
4.7.4 ジョイン検索でベクトル検索をする
第 5 章 実データを使ってベクトル検索をする
5.1 ニュース記事でベクトル検索
5.1.1 テキストデータのインデックスの作り方
5.1.2 テキスト検索リクエストの実装
5.2 画像でベクトル検索
5.2.1 画像データでのインデックスの作り方
5.2.2 画像検索リクエストの実装
コラム: ChatGPT を使った Embedding は?
5.3 パフォーマンスを測る
コラム: Elasticsearch でのベクトル検索
付録
付録 A 本書で扱うモデル
A.1 Word2Vec
A.2 CLIP
A.3 Sentence BERT
付録 B フレームワークとサービス
B.1 Streamlit
B.2 Hugging Face
B.3 メトリクスの可視化
付録 C Hierarchical Navigate Small World
C.1 グラフ理論における NSW
C.2 近似最近傍探索アルゴリズムとしての NSW
C.3 Hierarchical NSW
C.4 参考文献
あとがき
======================