銀河鉄道

検索エンジンのFAISSとは|似てるものを超高速で探してくれる機能

サムネイル
[FAISS]forfast vector search.

FAISSとは?

似てるものを超高速で探してくれる検索エンジン!

ざっくり言うと

  • 文章や画像などを「ベクトル(数値のかたまり)」に変換する
  • そのベクトル同士の“近さ”で、似てるものを探す
  • Facebook(Meta)が作ったオープンソースの検索ライブラリ

ラーメンでたとえると

たとえ本当は…
ラーメンの写真を見て「似た味のラーメン」を探したい→ 似た内容の文章を探したい
写真の特徴を数字で表す→ 埋め込みベクトル化する
その数字に近いラーメンを探す→ FAISSでベクトル検索する

どう使われる?

1. 埋め込み(Embedding)

文章を OpenAIEmbeddings() とかでベクトル(数値)に変換する
例:

“ラーメン大好き” → [0.123, -0.456, ...]

2. FAISSに登録(保存)

“FAISSに登録する”とは
  • 変換したベクトルを、FAISSに「記憶」させること
  • これがインデックスの作成やで!

3. FAISSに聞く(検索)

クエリもベクトルにして、「似てるベクトルある?」ってFAISSに聞くと
→ 一番近いベクトル=似た文章を教えてくれる!

保存するとどうなる?

  • index.faiss:ベクトルそのもの
  • index.pkl:どの文章がどのベクトルか、みたいなメタ情報

FAISSのすごいところ

特徴説明
爆速検索数千〜数百万件でも超高速で検索できる
ローカルOKクラウド不要。手元のマシンだけで動く
統合しやすいLangChainやLLMと相性バッチリ

FAISS検索とスコア計算係

スコアの計算自体は FAISS の機能、
でも「そのスコアをどう扱うか」はアプリ側の実装や。

1. 類似度スコアの計算 → FAISSが担当

  • FAISS は「埋め込みベクトル(embedding vector)」同士の距離を計算してくれる。
  • 多くの場合、**コサイン類似度(cosine similarity)**が使われる(ただしFAISSは内積ベースで実装されてることが多い)。

2. しきい値の判定ロジック → 自分のコードでやってる

  • 例:if score >= threshold: ← これがアプリ側の制御
  • FAISS は「上位n件出す」とか「最近傍検索(nearest neighbors)」まではやるけど、何点以上かでフィルタする処理は含まれてへん

類似度スコアと「しきい値」については
こっちで

インデックスを再構築する

元になる文章(たとえばPDFなど)を追加・削除・修正したら、毎回 、インデックスを再構築する必要がある。

なぜ? → FAISSは「静的なインデックス構造」だから

  • 元になる文章 → チャンク分割 → 埋め込み → ベクトルDB作成 という処理が必要
  • 一度作った .faissindex.pkl は、あとから自動で更新されるわけじゃない
  • 元になる文章が変わったら、再ビルドしないと整合性が壊れる

FAISSのインデックスと、データベースのインデックスの違い

名前は同じやけど、目的と使い方にははっきりした違いがあるで。

構造比較

項目FAISSのインデックスデータベースのインデックス
対象ベクトル(意味の近さ)列の値(完全一致 or 範囲)
用途類似検索(semantic search)高速検索(exact match / sort)
検索方法「意味が近い文書はどれ?」「ID=3のレコードはどれ?」
構造ベクトル空間に配置・近似探索B-tree や Hashインデックスなどの構造
「月についての説明に近い文章は?」「user_id = 3 の名前を出して」

用途の違いの例

Q: 「月ってどうやってできたの?」

→ FAISS: 意味的に近いチャンクを探す(semantic)

→ RDB index: "keyword = '月の成り立ち'" みたいな精密一致(syntax)

共通点と違い(あえて言うなら)

  • どちらも「検索を高速化するための補助構造」という意味では同じ
  • 対象をあらかじめ整理しておくことで、必要なデータを早く取り出せる
  • FAISSのインデックスは「似たものマップ
  • RDBのインデックスは「探し物リスト

まとめ

FAISSとは

「数値にした文章たちを覚えておいて、似たやつを爆速で見つけてくれるツール」!

To be continued…

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧