Embedding の類似度を測定する
ベクトル検索を支える距離・類似度の指標を理解し、適切な指標を選ぶ方法を学びます。
「Embedding の類似度を測定する」はCoddyKit上の無料LangChain / RAG / Vector DBsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLangChain / RAG / Vector DBs学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 LangChain / RAG / Vector DBsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
From Vectors to Meaning
An embedding maps text to a list of numbers in high-dimensional space. Texts with similar meaning land close together. To rank results we need a way to measure that closeness.
Cosine Similarity
Cosine similarity measures the angle between two vectors, ignoring their length. It ranges from -1 (opposite) to 1 (identical direction).
import numpy as np
def cosine(a, b):
a, b = np.array(a), np.array(b)
return a.dot(b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(cosine([1, 0], [1, 1])) # ~0.707Euclidean Distance
Euclidean (L2) distance is the straight-line distance between two points. Smaller means more similar. Unlike cosine, it is sensitive to magnitude.
import numpy as np
def l2(a, b):
return np.linalg.norm(np.array(a) - np.array(b))
print(l2([0, 0], [3, 4])) # 5.0Dot Product
The dot product multiplies matching dimensions and sums them. For normalized vectors it equals cosine similarity, which is why many stores normalize first.
import numpy as np
def dot(a, b):
return float(np.array(a).dot(np.array(b)))
print(dot([1, 2, 3], [4, 5, 6])) # 32.0Normalization
Dividing a vector by its length gives a unit vector. After normalization, dot product and cosine similarity become equivalent, simplifying the math.
import numpy as np
def normalize(v):
v = np.array(v, dtype=float)
return v / np.linalg.norm(v)
print(normalize([3, 4])) # [0.6 0.8]Choosing a Metric
Most modern text embedding models are trained for cosine similarity. Use cosine unless your provider documentation recommends otherwise.
- Cosine: direction matters, length ignored
- L2: absolute position matters
- Dot: cosine on normalized data
Similarity vs. Distance
Beware the inversion: higher cosine = more similar, but higher L2 = less similar. Vector stores expose this difference, sometimes returning a score you must interpret.
Why High Dimensions Help
Embeddings often have hundreds or thousands of dimensions. More dimensions give the model room to separate subtle differences in meaning, at the cost of more storage and compute.
Setting Metric in a Store
When creating a collection you declare the metric. Many libraries default to cosine.
import chromadb
client = chromadb.Client()
col = client.create_collection(
name="docs",
metadata={"hnsw:space": "cosine"}
)Ranking Search Results
Search computes the chosen metric between the query embedding and every stored vector, then returns the top-k closest. The metric directly shapes which documents win.
query_vec = embed("refund policy")
scored = [(cosine(query_vec, d.vec), d) for d in docs]
scored.sort(reverse=True)
top3 = scored[:3]Pitfall: Mixing Models
Vectors from different embedding models live in different spaces and are not comparable. Always embed your query with the same model you used to index the documents.
Quick Check
Test your grasp of similarity metrics.
Recap
You explored how similarity is measured:
- Cosine compares direction (most common for text)
- Euclidean compares position
- Dot product equals cosine on normalized vectors
- Always query and index with the same model
よくある質問
「Embedding の類似度を測定する」レッスンは無料ですか?
はい。「Embedding の類似度を測定する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、LangChain / RAG / Vector DBsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 LangChain / RAG / Vector DBsコースには全4レッスンが含まれています。
「Embedding の類似度を測定する」で何を学びますか?
ベクトル検索を支える距離・類似度の指標を理解し、適切な指標を選ぶ方法を学びます。 ブラウザで直接実行するハンズオンコードでLangChain / RAG / Vector DBsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
LangChain / RAG / Vector DBsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLangChain / RAG / Vector DBsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Embedding の類似度を測定する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLangChain / RAG / Vector DBsレッスンでコードを書いて実行できますか?
はい。すべてのLangChain / RAG / Vector DBsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- テキスト埋め込みを理解する
- ベクトルデータベース入門
- 埋め込みの保存と検索
- Embedding の類似度を測定する