ベクトル検索とは
はじめに
アプリケーション開発の現場でも、よく耳にするようになったベクトル検索について、簡潔に整理しました。
ベクトル検索とは?
ベクトル検索とは、コンテンツ(テキスト、画像、音声)をベクトルに変換(エンベディング(埋め込み))し、これらのベクトル間の類似度や距離を基に、類似したベクトル(コンテンツ)を見つけることができる手法です。
従来のキーワード検索では対応できなかった、ユーザーの入力情報が曖昧な場合でも、検索エンジン側が目的や意図を理解して、ユーザーが求めるものを提供する概念(セマンティック検索)の手段の一つとして使用されています。
エンベディング(埋め込み)
エンベディング(埋め込み)とは、深層学習モデル(例えば、Word2VecやMobileNet(共にGoogle))を利用して、テキストや画像などのコンテンツをベクトル形式で表現することです。
類似したベクトルを見つける
ベクトル間の類似度や距離は、通常、コサイン類似度やユーグリッド距離で計測されます。
しかし、高次元のベクトル空間では、すべての検索対象ベクトルとの比較を行うと計算コストが非常に高くなります。
この問題に対応するため、近似最近傍探索(ANN)のような手法が用いられることが多いです。ANNはインデックスを使用して近似的な結果を高速に取得するため、大量のデータを効率的に検索する際に有効ですが、完全な精度とはトレードオフの関係にあります。
さらに、次元の増加に伴ってベクトル間の比較計算コストが指数的に増大する「次元の呪い」という問題があります。この問題の緩和のため、次元削減手法(例えばPCA(主成分分析)やt-SNE)を活用することが推奨されることもあります。
キーワード検索
キーワード検索は、コンテンツに紐づけられたタグなどを基に、キーワードとの合致度、類似度をリレーショナルデータベースなどでマッチングすることで、関連するコンテンツを見つける従来の手法です。