หน่วย 2 / 11

การฝังและลอจิกฐานข้อมูลเวกเตอร์

กำไร:

  • เข้าใจว่าการฝังจะเปลี่ยนข้อความให้เป็นเวกเตอร์ในปริภูมิความหมายและความหมายที่คล้ายกันนั้นเป็นเวกเตอร์ที่ใกล้เคียง
  • อธิบายว่าการค้นหา ANN ทำงานอย่างไรกับตัวชี้วัดความคล้ายคลึงโคไซน์และจุด
  • การเลือกฐานข้อมูลเวกเตอร์ทั่วไปโดยพิจารณาจากต้นทุน ขนาด และความจำเป็นในการกรองข้อมูลเมตา

หัวใจของ RAG คือคำถามเดียว: "ข้อความใดที่คล้ายกับคำถามของผู้ใช้มากที่สุด" คอมพิวเตอร์ประมวลผลข้อความที่เป็นตัวเลข ไม่ใช่ตามตัวอักษร นั่นเป็นเหตุผลที่เราต้องแปลงข้อความเป็นตัวเลขที่มีความหมายก่อน นั่นคือสิ่งที่ฝัง: กระบวนการแปลงข้อความให้เป็นลำดับตัวเลข (เวกเตอร์) ที่แสดงถึงความหมายของข้อความนั้น เมื่อคุณจบหน่วยนี้ คุณจะรู้ว่าการฝังทำงานอย่างไร วัดความคล้ายคลึงกันอย่างไร และวิธีการเลือกฐานข้อมูลเวกเตอร์ที่เหมาะสม

การฝัง: การแปลความหมายเป็นพิกัด

โมเดลการฝัง (ปัญญาประดิษฐ์ที่ได้รับการฝึกมาเป็นพิเศษ) จะแปลงข้อความที่คุณระบุให้เป็นเวกเตอร์ของตัวเลข เช่น 1024 คิดว่าเวกเตอร์นี้เป็นพิกัดในปริภูมิหลายมิติ ความมหัศจรรย์คือ: ข้อความที่มีความหมายคล้ายกันจะอยู่ในพิกัดที่ใกล้เคียงกันในพื้นที่นี้

ตัวอย่างง่ายๆ: “การลาประจำปี” “สิทธิในวันหยุด” และ “การลาโดยได้รับค่าจ้างประจำปี” ใช้คำต่างกันแต่มีความหมายเหมือนกัน — เวกเตอร์ของคำเหล่านี้อยู่ใกล้กัน “บัญชีเงินเดือน” เป็นอีกเรื่องหนึ่ง — เวกเตอร์ของมันอยู่ห่างไกล ผู้ใช้จึงถามว่า "ฉันมีวันหยุดกี่วัน" เมื่อคุณถาม เรายังพบเอกสารที่ไม่มีคำว่า "วันหยุด" แต่ระบุว่า "วันหยุดประจำปีคือ 14 วัน" นี่คือสิ่งที่การค้นหาคำหลักแบบคลาสสิก (การค้นหาที่ตรงกับคำทุกประการ) ไม่สามารถทำได้

เคล็ดลับ: คิดว่าการฝังเป็น “ลายนิ้วมือของความหมาย” ลายนิ้วมือของสองประโยคที่มีความหมายเหมือนกันจะดูคล้ายกัน แม้ว่าคำพูดจะต่างกันก็ตาม

กฎสำคัญ: โมเดลที่คุณใช้เมื่อฝังคำถามควรเป็นโมเดลเดียวกับที่คุณใช้เมื่อฝังเอกสาร โมเดลที่ต่างกันจะสร้างช่องว่างที่แตกต่างกัน พิกัดกลายเป็นที่เปรียบมิได้

จะวัดความคล้ายคลึงกันได้อย่างไร?

มีหลายวิธีในการวัดว่าเวกเตอร์สองตัวมีความคล้ายคลึงกันอย่างไร สิ่งที่พบบ่อยที่สุดคือความคล้ายคลึงโคไซน์ โดยวัดมุมระหว่างเวกเตอร์สองตัว หากมุมมีขนาดเล็ก (เวกเตอร์ชี้ไปในทิศทางเดียวกัน) ความคล้ายคลึงกันก็จะสูง ค่าอยู่ระหว่าง −1 ถึง 1; ใกล้ 1 = คล้ายกันมาก

เกณฑ์

มันวัดอะไร?

เมื่อไหร่ที่เป็นที่ต้องการ?

โคไซน์

มุม (ทิศทาง) ระหว่างเวกเตอร์

ที่พบบ่อยที่สุด; ค่าเริ่มต้นในความคล้ายคลึงกันทางความหมายของข้อความ

สินค้าดอท

ทิศทาง+ขนาดรวมกัน

ถ้าเวกเตอร์ถูกทำให้เป็นมาตรฐาน มันจะให้ผลลัพธ์เหมือนกับโคไซน์ มีความรวดเร็ว

แบบยุคลิด (ระยะทางแบบยุคลิด)

ระยะห่างตรงระหว่างพิกัด

ในบางสถานการณ์การจัดกลุ่ม ใช้ในข้อความน้อยลง

ในทางปฏิบัติ โมเดลที่ฝังส่วนใหญ่จะสร้างเวกเตอร์ที่ทำให้เป็นมาตรฐาน (กำหนดขนาดไว้ที่ 1) ในกรณีนี้ โคไซน์และดอทโปรดัคมีลำดับเดียวกัน อย่าเป็นอัมพาตในการตัดสินใจ: เริ่มต้นด้วยโคไซน์

ในบรรดาเวกเตอร์หลายล้านตัว การเปรียบเทียบพวกมันทีละตัวนั้นค่อนข้างช้า นั่นเป็นสาเหตุที่ฐานข้อมูลเวกเตอร์ใช้อัลกอริธึม ANN (Approximate Nearest Neighbor) ANN พบว่า "ใกล้เคียงที่สุด" มากกว่า "ใกล้เคียงที่สุด" อย่างรวดเร็ว ตัวอย่างเช่น วิธีการที่เรียกว่า HNSW สามารถส่งคืนผลลัพธ์ได้ภายในเวลาไม่กี่มิลลิวินาที แม้จะใช้กับเวกเตอร์ 10 ล้านตัวก็ตาม คุณได้รับความเร็วที่ยอดเยี่ยมโดยเสียความแม่นยำเพียงเล็กน้อย

ฐานข้อมูลเวกเตอร์ทำอะไร?

ฐานข้อมูลเวกเตอร์ทำสามสิ่งพร้อมกัน: (1) เก็บเวกเตอร์ (2) ค้นหาเวกเตอร์ที่คล้ายกับเวกเตอร์แบบสอบถามอย่างรวดเร็วที่สุด (3) กรองตามข้อมูลเมตาถัดจากเวกเตอร์แต่ละตัว ข้อมูลเมตาคือแท็กที่คุณแนบไปกับส่วนนั้น เช่น ไฟล์ต้นฉบับ วันที่ แผนก ระดับความเป็นส่วนตัว ฯลฯ การกรองข้อมูลเมตาถือเป็นสิ่งสำคัญใน RAG ระดับองค์กร เพราะคุณต้องสามารถกำหนดข้อจำกัดได้ เช่น "ค้นหาเฉพาะในเอกสารปี 2025 ของแผนกการเงิน"

# ลงทะเบียนฐานข้อมูลเวกเตอร์ (conceptual)vektor_db.add( id="izin-politikasi-parca-3", vektor=embed("การลาโดยได้รับค่าจ้างรายปีคือ 14 วัน..."), text="การลาโดยได้รับค่าจ้างรายปีคือ 14 วัน...", metadata={"source": "ik_el_kitabi.pdf", "department": "IK", "date": "2025-06", "ความเป็นส่วนตัว": "ic"})

# การค้นหาที่กรองข้อมูลเมตา (แนวคิด) ผลลัพธ์ = vektor_db.search( vektor=embed("ฉันมีวันลากี่วัน?"), top_k=4, filter={"department": "HR", "privacy": ["internal", "on"]})

การเลือกฐานข้อมูลที่เหมาะสม

ยานพาหนะ

แง่มุมที่โดดเด่น

สถานการณ์ที่เหมาะสม

ในตัว / ตามไฟล์ (ไลบรารีแบบฝัง)

ไม่ต้องติดตั้งเครื่องเดียว

ต้นแบบชุดเล็ก (<อะไหล่ไม่กี่แสน)

บริการคลาวด์ที่มีการจัดการ

การปรับขนาดและการบำรุงรักษาไม่ใช่ความรับผิดชอบของคุณ

การผลิต ข้อมูลโตเร็ว ทีมเล็กๆ

โอเพ่นซอร์สบนเซิร์ฟเวอร์ของคุณเอง

ควบคุมได้เต็มที่ ข้อมูลของคุณยังคงเป็นของคุณ

ภาระผูกพันด้านความเป็นส่วนตัวโครงสร้างพื้นฐานที่มีอยู่

นอกเหนือจากฐานข้อมูลที่มีอยู่แล้ว

คุณไม่ได้จัดการระบบที่แยกจากกัน

การเพิ่มการสนับสนุนเวกเตอร์ให้กับฐานข้อมูลที่คุณใช้อยู่แล้ว

ถามตอนเลือก : จะมีกี่ชิ้น? การกรองข้อมูลเมตามีความสำคัญเพียงใด ข้อมูลสามารถออกไปนอกบริษัทได้ (การรักษาความลับ) หรือไม่? ทีมงานสามารถดำเนินการโครงสร้างพื้นฐานได้หรือไม่? มักเป็นการดีที่จะเริ่มต้นจากเล็กๆ และขยายตามความจำเป็น

แนวทางที่อ่อนแอ / แนวทางที่แข็งแกร่ง

อ่อนแอ (จัดเก็บการฝังแบบธรรมดา ไม่มีข้อมูลเมตา):

เพียงบันทึกข้อความและเวกเตอร์ ค้นหา: ส่งคืนเวกเตอร์ที่คล้ายกันมากที่สุด 4 ตัว # ปัญหา: ไม่สามารถกรองเช่น "เฉพาะเอกสาร HR ปัจจุบัน"; # ส่วนที่เก่า/ไม่ได้รับอนุญาตอาจรวมอยู่ในการตอบกลับด้วย

ทรงพลัง (ข้อมูลเมตาที่หลากหลาย + การค้นหาที่กรองแล้ว):

เพิ่มแหล่งที่มา วันที่ แผนก และแท็กความเป็นส่วนตัวลงในแต่ละชิ้น กรองตามอำนาจของผู้ใช้และความทันสมัยในระหว่างการค้นหา: filter = {"privacy": user_authority, "date_date": "2024-01"}# ดังนั้น ผลลัพธ์จึงมีทั้งความปลอดภัยและเป็นปัจจุบัน

มินิเคสสามอัน

กรณีที่ 1 — คละรุ่นผิด ทีมงานฝังเอกสารที่มีโมเดล A และคำถามด้วยโมเดล B การค้นหาให้ผลลัพธ์ที่ไม่มีความหมาย และอัตราการตอบที่ถูกต้องยังคงอยู่ที่ 31% เมื่อฉันเปลี่ยนไปใช้โมเดลเดียว (ทั้งโมเดลที่ฝังเหมือนกัน) อัตราเพิ่มขึ้นเป็น 88% บทเรียน: คำถามและเอกสารควรอยู่ในช่องว่างเดียวกัน

กรณีที่ 2 — ความเสี่ยงด้านความเป็นส่วนตัวโดยไม่มีข้อมูลเมตา ในบริษัทด้านการดูแลสุขภาพ เอกสารของแผนกทั้งหมดจะรวมอยู่ในกลุ่มเดียวโดยไม่มีข้อมูลเมตา เมื่อพนักงานขายถามคำถาม ระบบจะปรับบริบทของข้อมูลผู้ป่วย เมื่อเพิ่มข้อมูลเมตา + ตัวกรอง (ตามระดับการอนุญาต) ความเสี่ยงนี้จะถูกกำจัด ในการเรียกคืน จะไม่นำชิ้นส่วนที่ไม่ได้รับอนุญาตจำนวน 12 ชิ้นมาด้วย

กรณีที่ 3 — ปัญหาคอขวดของขนาด บริษัทอีคอมเมิร์ซแห่งหนึ่งค้นหาคำอธิบายผลิตภัณฑ์ 8 ล้านรายการด้วยวิธี "สแกนทั้งหมด" แบบง่ายๆ แบบสอบถามแต่ละครั้งใช้เวลา 6 วินาที เมื่อเราเปลี่ยนมาใช้ ANN ที่ใช้ HNSW เวลาลดลงเหลือ 45 มิลลิวินาที โดยสูญเสียความแม่นยำเพียง 1% เท่านั้น บทเรียน: ANN จำเป็นในชุดใหญ่

ข้อผิดพลาดทั่วไป

  • การฝังคำถามและเอกสารด้วยโมเดลต่างๆ ผลลัพธ์ไม่มีความหมาย รุ่นหนึ่งเสมอ
  • การข้ามข้อมูลเมตา: คุณไม่สามารถกรองได้ คุณจะสูญเสียการควบคุมความเป็นส่วนตัวและความทันสมัย
  • การฝังที่ผิดพลาดสำหรับการเข้ารหัส: การฝังจะมีข้อมูลที่ย้อนกลับได้ เป็นการผิดที่จะถือว่าข้อมูลที่ละเอียดอ่อนนั้น "ถูกซ่อน"
  • การสร้างโครงสร้างพื้นฐานขนาดใหญ่โดยไม่จำเป็นบนชุดขนาดเล็ก: คลัสเตอร์ขนาดยักษ์ที่มีการจัดการสำหรับ 5,000 ส่วนถือเป็นความซับซ้อนโดยไม่จำเป็น
  • อย่ากังวลมากเกินไปเกี่ยวกับเกณฑ์ความคล้ายคลึง: เริ่มต้นด้วยโคไซน์ในข้อความ การปรับแต่งแบบละเอียดจะเกิดขึ้นในภายหลัง
ข้อควรระวัง: การฝังจะฝังความหมายของข้อความเป็นตัวเลข แต่ไม่ได้ "ทำลาย" เนื้อหา หากฐานข้อมูลเวกเตอร์รั่วไหล ข้อความต้นฉบับที่เก็บไว้ (ในการติดตั้งส่วนใหญ่ข้อความก็จะถูกจัดเก็บด้วย) ก็จะถูกบุกรุกเช่นกัน เก็บพื้นที่เก็บข้อมูลเวกเตอร์เป็นความลับเช่นเดียวกับเอกสารที่อยู่ภายใน

โดยสรุป

  • การฝังจะเปลี่ยนข้อความให้เป็นเวกเตอร์ของตัวเลขที่มีความหมาย ความหมายที่คล้ายกันคือเวกเตอร์ใกล้เคียง
  • ความคล้ายคลึงกันมักวัดด้วยโคไซน์ สำหรับเวกเตอร์ที่ทำให้เป็นมาตรฐาน ผลคูณดอทจะให้ผลลัพธ์เดียวกัน
  • ในข้อมูลขนาดใหญ่ ANN (เช่น HNSW) เข้ามาแทนที่การค้นหาแบบตรงทั้งหมด: ความเร็วที่ยอดเยี่ยมแต่ความแม่นยำลดลงเพียงเล็กน้อย
  • ฐานข้อมูลเวกเตอร์ดำเนินการจัดเก็บเวกเตอร์ + การค้นหาความคล้ายคลึง + การกรองข้อมูลเมตา ข้อมูลเมตาเป็นสิ่งจำเป็นสำหรับ RAG ขององค์กร
  • คำถามและเอกสารจะต้องแปลด้วยโมเดลการฝังเดียวกัน ไม่เช่นนั้นจะเปรียบเทียบพิกัดไม่ได้

งานสมัคร

แยกข้อความสั้น 10 ข้อความ (แต่ละประโยค 3-6 ประโยค) จากเอกสารที่คุณเลือกในหน่วยก่อนหน้า (1) ออกแบบแท็กข้อมูลเมตาอย่างน้อยสามแท็กสำหรับแต่ละชิ้น (แหล่งที่มา วันที่ และแท็กที่สามที่เหมาะสมกับบริบททางธุรกิจของคุณ: แผนก ผลิตภัณฑ์ ความเป็นส่วนตัว ฯลฯ) (2) เขียนว่าควรใช้ตัวกรองข้อมูลเมตาใดสำหรับคำถามผู้ใช้ 3 ข้อที่แตกต่างกัน (3) ค้นหาคู่คำถาม 3 คู่ที่แสดงความหมายเหมือนกันในคำที่ต่างกัน (เช่น "สิทธิ์ลาพักร้อน" ↔ "การลาประจำปี") และอธิบายในประโยคเดียวว่าเหตุใดจึงไม่ตรงกับการค้นหาคำหลัก แต่จะตรงกับการฝัง

รายการตรวจสอบ

  • [ ] ฉันสามารถบอกได้ว่าการฝังจะเปลี่ยนข้อความให้เป็นเวกเตอร์ในปริภูมิความหมายและความหมายที่คล้ายกันก็ใกล้เคียงกัน
  • ฉันรู้ว่า [ ] ความคล้ายคลึงของโคไซน์วัดมุมและเป็นค่ากำหนดเริ่มต้นในข้อความ
  • [ ] ฉันสามารถอธิบายได้ว่าทำไม ANN ถึงจำเป็นในข้อมูลขนาดใหญ่
  • [ ] ฉันรู้ว่าเหตุใดข้อมูลเมตาจึงมีความสำคัญต่อการรักษาความลับและการควบคุมความสดใหม่
  • [ ] ฉันปฏิบัติตามกฎของการแปลคำถามและเอกสารที่มีรูปแบบการฝังเดียวกัน