การเลือกเมตริกระยะทาง (cosine, L2, dot)
เรียนรู้ว่าเมื่อใดควรเลือก cosine, L2 (แบบยุคลิด) หรือระยะทางผลคูณจุด และเหตุใดโมเดล Embedding ส่วนใหญ่จึงชอบ cosine
การเลือกเมตริกระยะทาง (cosine, L2, dot) เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
เมตริกทั่วไปสามรายการ
ฐานข้อมูลเวกเตอร์ให้คุณเลือกเมตริกระยะห่างได้ สามรายการที่พบเห็นบ่อยที่สุดมีดังนี้
- ความคล้ายกันแบบ cosine — มุมระหว่างเวกเตอร์
- dot product — การฉายเวกเตอร์หนึ่งลงบนอีกเวกเตอร์หนึ่ง
- Euclidean (L2) — ระยะห่างเป็นเส้นตรง
Cosine
ช่วงค่า: -1 ถึง 1 ค่ายิ่งสูงยิ่งคล้ายกัน
import numpy as np
def cosine(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))Dot Product
ช่วงค่า: -อนันต์ ถึง +อนันต์ ค่ายิ่งสูงยิ่งคล้ายกัน
def dot(a, b):
return np.dot(a, b)
# Equivalent to cosine when both vectors are unit-normalized.Euclidean (L2)
ช่วงค่า: 0 ถึง +อนันต์ ค่ายิ่งต่ำยิ่งคล้ายกัน
def l2(a, b):
return np.linalg.norm(np.array(a) - np.array(b))ควรใช้แบบใด
สำหรับเวกเตอร์ฝังข้อความ แนวทางทั่วไปมีดังนี้
- OpenAI text-embedding-3 — cosine (เวกเตอร์ถูกทำให้อยู่ในรูปมาตรฐานล่วงหน้าแล้ว)
- Cohere — cosine
- Sentence Transformers / BGE — โดยปกติใช้ cosine ควรตรวจสอบการ์ดโมเดล
หากไม่แน่ใจ ให้ใช้ cosine
dot เท่ากับ cosine เมื่อทำให้เป็นนอร์มัลไลซ์
หาก |a| = |b| = 1 ดังนั้น cos(a,b) = a . b dot product เร็วกว่า (ไม่ต้องหาร) ระบบใช้งานจริงจึงมักใช้ dot กับเวกเตอร์ที่ทำให้อยู่ในรูปมาตรฐานล่วงหน้าแล้ว
กรณีที่ใช้ L2
โมเดลวิจัยบางรายการ (Sentence-BERT รุ่นเก่า และเวกเตอร์ฝังรูปภาพ) ได้รับการฝึกด้วยระยะห่าง L2 และทำงานได้ดีกว่าเมื่อใช้วิธีนี้ ควรตรวจสอบการ์ดโมเดล ALWAYS
เหตุใดจึงสำคัญต่อดัชนี
โครงสร้างดัชนี (HNSW, IVF, FAISS) สร้างขึ้นสำหรับเมตริก SPECIFIC การเปลี่ยนเมตริกหลังจากทำดัชนีแล้วมักหมายถึงการสร้างดัชนีใหม่ตั้งแต่ต้น
Setting Metric in Pinecone
from pinecone import ServerlessSpec
pc.create_index(
name='docs',
dimension=1536,
metric='cosine', # or 'dotproduct' or 'euclidean'
spec=ServerlessSpec(cloud='aws', region='us-east-1')
)Setting Metric in Qdrant
from qdrant_client.models import VectorParams, Distance
client.create_collection(
collection_name='docs',
vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)เมตริกไม่สอดคล้องกันระหว่างระบบ
หากภายหลังคุณจัดอันดับใหม่ด้วยตัวเข้ารหัสแบบไขว้ ตัวเข้ารหัสนั้นจะมีสเกลคะแนนของตัวเอง อย่านำเมตริกต่างชนิดมาผสมเป็นคะแนนรวมเดียวโดยไม่ปรับให้อยู่ในมาตรฐานเดียวกันก่อน
การแสดงความแตกต่างด้วยภาพ
สำหรับเวกเตอร์หน่วยสองตัว
- cos = 1, L2 = 0 -> เหมือนกันทุกประการ
- cos = 0.5, L2 ~ 1 -> มีความเกี่ยวข้องกัน
- cos = 0, L2 ~ sqrt(2) -> ตั้งฉากกัน
- cos = -1, L2 = 2 -> ตรงข้ามกัน
ทำให้อยู่ในรูปมาตรฐานล่วงหน้าเพียงครั้งเดียว
การทำให้อยู่ในรูปมาตรฐานขณะนำเข้าข้อมูลมีต้นทุนต่ำ (การหารเพียงครั้งเดียว) ช่วยให้เข้ากันได้กับ cosine / dot และหลีกเลี่ยงการทำให้อยู่ในรูปมาตรฐานทุกครั้งที่ query ในภายหลัง
vec = vec / np.linalg.norm(vec)เมตริกเริ่มต้น
สำหรับเวกเตอร์ฝังข้อความของ OpenAI เมตริกระยะห่างเริ่มต้นคืออะไร
สรุปทบทวน
ใช้ cosine สำหรับข้อความ ทำให้อยู่ในรูปมาตรฐานล่วงหน้าเพียงครั้งเดียว แล้วใช้ dot product เพื่อความเร็ว กำหนดเมตริกตอนสร้างดัชนี เพราะการเปลี่ยนภายหลังหมายถึงการสร้างดัชนีใหม่
คำถามที่พบบ่อย
บทเรียน “การเลือกเมตริกระยะทาง (cosine, L2, dot)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเลือกเมตริกระยะทาง (cosine, L2, dot)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเลือกเมตริกระยะทาง (cosine, L2, dot)”
เรียนรู้ว่าเมื่อใดควรเลือก cosine, L2 (แบบยุคลิด) หรือระยะทางผลคูณจุด และเหตุใดโมเดล Embedding ส่วนใหญ่จึงชอบ cosine คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การเลือกเมตริกระยะทาง (cosine, L2, dot)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เปรียบเทียบ Pinecone, Weaviate และ Qdrant
- การกรองข้อมูลกำกับสำหรับการค้นหาแบบผสม
- การอัปเดตและลบเวกเตอร์
- การเลือกเมตริกระยะทาง (cosine, L2, dot)