検索エンジンのFAISSとは|似てるものを超高速で探してくれる機能
作成日:2025-05-28
更新日:2025-05-31

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作成 という処理が必要
- 一度作った
.faiss
とindex.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…
CLICK
2025-05-28
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-
[LangChain].invoke() LangChainの標準関数[invoke]結果をもらうための統一された実行メソッド(2025年) -
[LangChain]PythonでChatを実装する 生成AI|Pythonでリクエストしてみよう[OpenAI APIとLangChain] -
[What's AI ?]AI is the brain, robots are the body. AIの基礎知識|そもそもAIとロボットの違いは?(2025年) -
[AI Bot]作ってみるFeeling-to-Words Python×OpenAI|感情の言語化ボットを作ってみる -
[What's AI ?]AI to Singularity AIの基礎知識|どうなる今後、そして現状と歴史 -
Why Pythonfor AI? なぜAI開発はPythonでおこなうの?