นิตยสารYamroongเรื่องราวที่ควรค่าแก่การอ่าน

Embedding กับ vector search อธิบายแบบไม่ต้องมีพื้นคณิต

การค้นหาแบบเดิมคือการจับคู่ตัวอักษร พิมพ์ว่า "รถยนต์" ก็ได้เอกสารที่มีคำนี้ แต่จะไม่เจอเอกสารที่เขียนว่า "รถเก๋ง" หรือ "พาหนะ" เลย

embedding แก้ปัญหานี้ ด้วยการแปลงข้อความเป็นชุดตัวเลขที่สะท้อนความหมาย ข้อความที่ความหมายใกล้กันจะได้ชุดตัวเลขที่อยู่ใกล้กัน

นึกภาพเป็นแผนที่

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

plaintext
"รถยนต์ประหยัดน้ำมัน"  → [0.21, -0.08, 0.55, ...]
"รถเก๋งกินน้ำมันน้อย"  → [0.19, -0.11, 0.58, ...]   ← ใกล้
"สูตรแกงเขียวหวาน"   → [-0.63, 0.40, -0.12, ...]  ← ไกล
ระยะห่างน้อย แปลว่าความหมายใกล้กัน

ภาษาไทยมีข้อควรระวังเพิ่ม

โมเดล embedding ส่วนใหญ่ฝึกด้วยข้อมูลภาษาอังกฤษเป็นหลัก คุณภาพกับภาษาไทยจึงต่างกันไปตามแต่ละตัว ก่อนเลือกควรทดสอบกับชุดคำถามจริงของงานคุณเอง

  • การตัดคำไทยไม่มีช่องว่าง โมเดลที่ไม่เคยเจอภาษาไทยมักตัดผิดที่
  • คำทับศัพท์ที่คนไทยใช้จริงอาจหายไปจากข้อมูลฝึก
  • การผสม keyword search กับ vector search มักได้ผลดีกว่าใช้อย่างเดียว

เลือกที่เก็บ vector อย่างไร

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

ข้อดีของการเริ่มจากฐานข้อมูลเดิมคือคุณควร JOIN กับตารางอื่นได้เลย เช่นกรองเฉพาะเอกสารที่ผู้ใช้คนนั้นมีสิทธิ์เข้าถึง ซึ่งเป็นเรื่องที่คนมักลืมจนขึ้น production ไปแล้ว

ความคิดเห็น

กำลังโหลดความคิดเห็น