0Pricing
AI Agents · บทเรียน

ความคล้ายแบบโคไซน์สำหรับการค้นคืน

ความคล้ายแบบโคไซน์วัดมุมระหว่างเวกเตอร์สองตัว ซึ่งเป็นเมตริกระยะทางมาตรฐานสำหรับการค้นหาเชิงความหมาย

ความคล้ายแบบโคไซน์สำหรับการค้นคืน เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

การวัดความคล้ายคลึง

เวกเตอร์สองตัวอยู่ใกล้กันเพียงใด มีเมตริกระยะห่างที่ใช้กันทั่วไปสามแบบ:

  • ความคล้ายคลึงแบบโคไซน์ — มุมระหว่างเวกเตอร์
  • ผลคูณจุด — การฉาย
  • ระยะห่างแบบยุคลิด (L2) — ระยะทางเส้นตรง

สำหรับเวกเตอร์แทนความหมายของข้อความ ค่าเริ่มต้นคือความคล้ายคลึงแบบโคไซน์

สูตรความคล้ายคลึงแบบโคไซน์

สำหรับเวกเตอร์ A และ B:

cos(A, B) = (A . B) / (|A| * |B|)

ผลลัพธ์อยู่ระหว่าง -1 ถึง 1:

  • 1 = ทิศทางเหมือนกัน
  • 0 = ตั้งฉาก (ไม่เกี่ยวข้องกัน)
  • -1 = ทิศทางตรงข้ามกัน

ด้วย Python และ NumPy

การนำไปใช้งานที่ตรงไปตรงมา:

import numpy as np

def cosine_similarity(a, b):
    a = np.array(a)
    b = np.array(b)
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

print(cosine_similarity(vec_apple, vec_orange))   # high
print(cosine_similarity(vec_apple, vec_car))      # low

เวกเตอร์ที่ทำให้เป็นมาตรฐานไว้แล้ว

หากเวกเตอร์ฝังตัวของคุณทำให้เป็นมาตรฐานไว้แล้ว (เวกเตอร์ของ OpenAI เป็นเช่นนั้น) ค่าความคล้ายคลึงแบบโคไซน์จะเท่ากับผลคูณจุด และข้ามการหารได้เลย:

def cosine_normalized(a, b):
    return np.dot(a, b)   # faster

การดึงข้อมูล K อันดับแรก

หากต้องการค้นหาเอกสาร K รายการที่คล้ายกับคำค้นหามากที่สุด ให้คำนวณความคล้ายคลึงกับเอกสารทุกฉบับแล้วเรียงลำดับ:

def topk(query_vec, doc_vecs, k=5):
    scores = [(np.dot(query_vec, v), i) for i, v in enumerate(doc_vecs)]
    scores.sort(reverse=True)
    return scores[:k]

การขยายระบบ

การค้นหา K อันดับแรกแบบตรงไปตรงมามีค่า O(N) ต่อคำค้นหา ซึ่งเหมาะสำหรับเอกสาร 10k ฉบับ แต่จะช้าเมื่อมี 10M ฉบับ สำหรับชุดข้อมูลขนาดใหญ่ ให้ใช้ดัชนีเพื่อนบ้านใกล้เคียงโดยประมาณ (ANN) เช่น HNSW, IVF และ FAISS

เหตุใดจึงไม่ใช้ระยะยูคลิด

ระยะ L2 ถือว่า LENGTH ของเวกเตอร์มีความหมาย สำหรับเวกเตอร์ฝังตัว ทิศทางสำคัญกว่าขนาด นี่จึงเป็นเหตุผลที่ความคล้ายคลึงแบบโคไซน์เหมาะกว่า

(สำหรับเวกเตอร์ที่ทำให้เป็นมาตรฐานแล้ว L2 และโคไซน์จะจัดอันดับเหมือนกัน ดังนั้นจึงไม่สำคัญว่าจะใช้แบบใด)

ผลคูณจุดเทียบกับโคไซน์

หากเวกเตอร์ทำให้เป็นมาตรฐานไว้แล้ว ผลคูณจุด = โคไซน์ และคำนวณได้เร็วกว่า (ไม่ต้องหาร) ระบบที่ใช้งานจริงส่วนใหญ่ใช้ผลคูณจุดกับเวกเตอร์ที่ทำให้เป็นมาตรฐานแล้ว

A Tiny End-to-End Retrieval

docs = ['Python is a programming language', 'Pizza is Italian food', 'The Eiffel Tower is in Paris']
doc_vecs = [embed(d) for d in docs]

query_vec = embed('What is Python?')
scores = [(cosine_similarity(query_vec, v), d) for v, d in zip(doc_vecs, docs)]
scores.sort(reverse=True)
for s, d in scores:
    print(f'{s:.3f}  {d}')
# 0.83  Python is a programming language
# 0.45  Pizza is Italian food
# 0.41  The Eiffel Tower is in Paris

การดึงข้อมูลแบบผสม

ผสานความคล้ายคลึงแบบโคไซน์เข้ากับการค้นหาด้วยคำสำคัญ (BM25) เพื่อให้ได้ข้อดีของทั้งสองแบบ ได้แก่ ความหมายและการตรงกันแบบพอดี ระบบที่ใช้งานจริงส่วนใหญ่ใช้การดึงข้อมูลแบบผสมในปัจจุบัน

การกรองตามค่าเกณฑ์

ตัดผลลัพธ์ที่ต่ำกว่าค่าเกณฑ์ความคล้ายคลึงออก เพื่อไม่ป้อนบริบทที่ไม่เกี่ยวข้องให้ LLM:

results = [r for r in retrieved if r.score > 0.7]

ช่วงค่าของโคไซน์

ค่าความคล้ายคลึงแบบโคไซน์มีช่วงเท่าใด

สรุปทบทวน

ความคล้ายคลึงแบบโคไซน์เป็นเมตริกมาตรฐานสำหรับการดึงเวกเตอร์ฝังตัว ใช้ร่วมกับการค้นหาแบบผสมและ ANN เพื่อรองรับระบบขนาดใช้งานจริง

คำถามที่พบบ่อย

บทเรียน “ความคล้ายแบบโคไซน์สำหรับการค้นคืน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ความคล้ายแบบโคไซน์สำหรับการค้นคืน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ความคล้ายแบบโคไซน์สำหรับการค้นคืน”

ความคล้ายแบบโคไซน์วัดมุมระหว่างเวกเตอร์สองตัว ซึ่งเป็นเมตริกระยะทางมาตรฐานสำหรับการค้นหาเชิงความหมาย คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ความคล้ายแบบโคไซน์สำหรับการค้นคืน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม

ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Embedding คืออะไร (ตัวแทนแบบเวกเตอร์)
  2. การสร้าง Embedding ด้วย text-embedding-3
  3. ความคล้ายแบบโคไซน์สำหรับการค้นคืน
  4. เปรียบเทียบโมเดล Embedding (OpenAI กับ Cohere กับ OSS)
← กลับไปที่ AI Agents