0Pricing
Learn AI with Python · レッスン

ベクトルデータベース入門

ベクトル 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-cpu

IndexFlatL2でインデックスを作成する

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)   # 100

index.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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Python の sqlite3 モジュールで SQLite を扱う
  2. Pandas と SQL の連携
  3. 機械学習の結果を保存・検索する
  4. ベクトルデータベース入門
← Learn AI with Pythonに戻る