ベクトルデータベース入門
ベクトル DB が存在する理由、ローカル類似検索のための FAISS、AI 検索用の埋め込み保存を学びます。
「ベクトルデータベース入門」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
完全一致を超えて
従来のデータベースでは、完全に一致する値を使って行を検索します(WHERE name = "x")。しかし、AIは意味を捉えるベクトルである 埋め込み を扱うため、完全一致ではなく、クエリに最も 類似した項目を求めることがよくあります。
ベクトルデータベースは、この類似度検索を高速に行うために作られています。
埋め込みとは
埋め込みとは、テキスト、画像、音声などを表す数値のリスト(ベクトル)です。似た項目ほど、ベクトル空間内で近くに配置されます。
セマンティック検索、レコメンデーション、検索拡張生成(RAG)は、いずれも埋め込みを基盤としています。
import numpy as np
# A toy 4-dim embedding for a sentence
vec = np.array([0.12, -0.43, 0.88, 0.05], dtype="float32")
print(vec.shape) # (4,)通常のデータベースではなぜいけないのか
何百万ものベクトルとクエリを総当たりで比較するループは低速です。ベクトルDBは、専用のインデックスと距離計算を使い、最近傍のベクトルを数ミリ秒で返します。
さらに、ベクトルと一緒にメタデータを扱いながら、スケール、永続化にも対応できます。
類似度の測定
近さは距離指標で測定します。
- L2(ユークリッド) — 直線距離。小さいほど近い
- コサイン — ベクトル間の角度。テキストに適しています
FAISSは複数の指標に対応していますが、ここではL2を使用します。
FAISSの紹介
FAISS(Facebook AI Similarity Search)は、ベクトル検索のための高速で無料のライブラリです。サーバーなしでローカルに実行できるため、学習やプロトタイピングに適しています。
import faiss
import numpy as np
# pip install faiss-cpuIndexFlatL2でインデックスを作成する
IndexFlatL2(dim)は、L2距離を使うフラット型(総当たりによる完全一致)のインデックスを構築します。ベクトルの次元数を指定する必要があります。
「Flat」は結果が完全に正確であることを意味するため、小規模から中規模のコレクションに最適です。
import faiss
dim = 4
index = faiss.IndexFlatL2(dim)
print(index.is_trained) # True (flat index needs no training)index.addでベクトルを追加する
埋め込みは、形状が (n, dim) の2次元float32 NumPy配列として渡します。index.addがベクトルを保存し、index.ntotalが件数を返します。
import numpy as np
embeddings = np.random.random((100, dim)).astype("float32")
index.add(embeddings)
print(index.ntotal) # 100index.searchで検索する
index.search(query, k)は、クエリに最も近いk個のベクトルを返します。距離の配列 D と、インデックスの配列 I(追加した順番における位置)の2つが返されます。
query = np.random.random((1, dim)).astype("float32")
D, I = index.search(query, k=5)
print("nearest ids:", I[0])
print("distances:", D[0])インデックスから元の項目に戻す
FAISSが返すのは元のデータではなく位置です。インデックスの位置と実際の項目を対応付ける並列リスト(またはDB)を保持しておき、結果を参照できるようにします。
docs = ["doc about cats", "doc about dogs", "doc about cars"]
# after search:
for pos in I[0]:
print(docs[pos]) # map id -> original document小さなセマンティック検索パイプライン
基本的な流れは、ドキュメントを埋め込みに変換し、インデックスに追加し、クエリも埋め込みに変換して検索し、一致するドキュメントを返すというものです。(sentence-transformersなどの埋め込みモデルがベクトルを生成します。)
import faiss, numpy as np
# doc_vectors: (n, dim) from an embedding model
index = faiss.IndexFlatL2(doc_vectors.shape[1])
index.add(doc_vectors)
# query_vec: (1, dim) embedding of the user query
D, I = index.search(query_vec, k=3)
results = [docs[i] for i in I[0]]
print(results)ベクトルDBを使う場面
次のような要件がある場合は、ベクトルデータベースを使用します。
- テキストや画像のセマンティック検索
- 類似度に基づくレコメンデーション
- RAG:LLMに関連するコンテキストの取得
FAISSはローカルでの利用に適しています。マネージドサービス(Pinecone、Weaviate、pgvector)を使うと、永続化とスケーラビリティを追加できます。
クイックチェック:FAISS検索
FAISSのインデックスに対して index.search(query, k=5) を呼び出します。
振り返り:ベクトルデータベース
類似度検索の基礎を学びました。
- 埋め込みによって、似た項目がベクトル空間内で近くに配置されます
- ベクトルDBによって、大規模な最近傍検索を高速に行えます
- FAISSの
IndexFlatL2(dim)は、正確なL2インデックスを構築します index.add(embeddings)がベクトルを保存し、index.search(query, k)が距離とインデックスを返します- 返されたインデックスを元の項目に対応付けます
これでデータベースの章は完了です。次は、Gitを使ってAIプロジェクトを構成します。
よくある質問
「ベクトルデータベース入門」レッスンは無料ですか?
はい。「ベクトルデータベース入門」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「ベクトルデータベース入門」で何を学びますか?
ベクトル DB が存在する理由、ローカル類似検索のための FAISS、AI 検索用の埋め込み保存を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「ベクトルデータベース入門」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。