Embedding กับ vector search อธิบายแบบไม่ต้องมีพื้นคณิต
การค้นหาแบบเดิมคือการจับคู่ตัวอักษร พิมพ์ว่า "รถยนต์" ก็ได้เอกสารที่มีคำนี้ แต่จะไม่เจอเอกสารที่เขียนว่า "รถเก๋ง" หรือ "พาหนะ" เลย
embedding แก้ปัญหานี้ ด้วยการแปลงข้อความเป็นชุดตัวเลขที่สะท้อนความหมาย ข้อความที่ความหมายใกล้กันจะได้ชุดตัวเลขที่อยู่ใกล้กัน
นึกภาพเป็นแผนที่
สมมติว่าเรามีแผนที่สองมิติ คำว่าที่เกี่ยวกับการเดินทางจะไปกองอยู่มุมหนึ่ง คำเกี่ยวกับอาหารไปกองอีกมุม ของจริง embedding ใช้หลายร้อยมิติ แต่หลักการเหมือนกัน
"รถยนต์ประหยัดน้ำมัน" → [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 ไปแล้ว

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