ความแตกต่างหลักระหว่างการค้นหาด้วยคีย์เวิร์ดและการค้นหาด้วยเวกเตอร์คืออะไร?
การค้นหาด้วยคีย์เวิร์ดจะจับคู่เอกสารโดยใช้คำที่เหมือนกันโดยใช้ดัชนีผกผัน ในขณะที่การค้นหาด้วยเวกเตอร์จะจับคู่โดยใช้ความคล้ายคลึงทางความหมายในพื้นที่ฝังตัว วิธีแรกเป็นแบบเชิงคำศัพท์และแม่นยำ ส่วนวิธีที่สองเป็นแบบเชิงความหมายและโดยประมาณ นั่นหมายความว่าการค้นหาด้วยคีย์เวิร์ดอาจพลาดเอกสารเกี่ยวกับ 'รถยนต์' เมื่อคุณค้นหา 'รถยนต์' แต่การค้นหาด้วยเวกเตอร์น่าจะพบเอกสารนั้น
แบบไหนดีกว่าสำหรับการใช้งาน RAG?
การค้นหาแบบเวกเตอร์เป็นพื้นฐานของระบบการสร้างผลลัพธ์ที่เสริมด้วยการค้นหา (Retrieval-Augmented Generation หรือ RAG) ส่วนใหญ่ เนื่องจากสามารถจับคู่คำถามของผู้ใช้ที่ถามด้วยภาษาธรรมชาติกับส่วนของเอกสารที่เกี่ยวข้องได้ อย่างไรก็ตาม ปัจจุบันระบบ RAG จำนวนมากใช้การค้นหาแบบไฮบริด โดยผสมผสานคะแนนคำหลัก BM25 กับความคล้ายคลึงของเวกเตอร์ เพื่อปรับปรุงการเรียกคืนข้อมูลสำหรับคำศัพท์ทางเทคนิคและคำที่หายาก
คุณสามารถใช้การค้นหาด้วยคำหลักและเวกเตอร์ร่วมกันได้หรือไม่?
ใช่แล้ว การค้นหาแบบไฮบริดกำลังเป็นที่นิยมมากขึ้นเรื่อยๆ ระบบจะทำการค้นหาทั้งด้วยคีย์เวิร์ดและเวกเตอร์ จากนั้นจึงรวมผลลัพธ์เข้าด้วยกันโดยใช้วิธีต่างๆ เช่น การรวมอันดับแบบผกผัน หรือโดยการป้อนสัญญาณทั้งสองเข้าไปในตัวจัดอันดับใหม่ Elasticsearch, Weaviate และ Vespa ต่างก็รองรับการค้นหาแบบไฮบริดโดยตรง
การค้นหาด้วยเวกเตอร์ช้ากว่าการค้นหาด้วยคำหลักหรือไม่?
โดยทั่วไปแล้ว การค้นหาด้วยเวกเตอร์ต้องใช้การคำนวณต่อคำค้นหามากกว่า เพราะเป็นการเปรียบเทียบเวกเตอร์ที่มีความหนาแน่นสูง แทนที่จะค้นหาข้อมูลที่กระจัดกระจาย อย่างไรก็ตาม อัลกอริทึม ANN เช่น HNSW ทำให้การค้นหาด้วยเวกเตอร์เร็วพอสำหรับการใช้งานแบบเรียลไทม์ และคุณภาพเชิงความหมายมักจะคุ้มค่ากับต้นทุนที่เพิ่มขึ้น นอกจากนี้ การสร้างดัชนียังช้าลงด้วย เพราะคุณต้องสร้างเวกเตอร์ฝังตัว (embeddings) สำหรับทุกเอกสาร
ฉันควรใช้โมเดลฝังตัวแบบใดสำหรับการค้นหาเวกเตอร์?
การเลือกใช้โมเดลขึ้นอยู่กับข้อมูลและภาษาของคุณ สำหรับข้อความภาษาอังกฤษ โมเดลอย่าง text-embedding-3-small ของ OpenAI, embed-v3 ของ Cohere หรือตัวเลือกโอเพนซอร์สอย่าง BGE และ E5 เป็นที่นิยม สำหรับความต้องการหลายภาษา ควรพิจารณาโมเดลอย่าง multilingual-e5 หรือ multilingual embeddings ของ Cohere ควรทำการทดสอบประสิทธิภาพกับข้อมูลของคุณเองเสมอ เพราะประสิทธิภาพจะแตกต่างกันไปตามแต่ละโดเมน
ฉันจำเป็นต้องใช้ฐานข้อมูลเวกเตอร์หรือสามารถใช้ PostgreSQL ได้หรือไม่?
PostgreSQL ที่มีส่วนขยาย pgvector สามารถจัดการการค้นหาเวกเตอร์ได้ดีสำหรับชุดข้อมูลขนาดเล็กถึงขนาดกลาง ซึ่งมักจะมีเวกเตอร์ไม่เกินสองสามล้านรายการ สำหรับข้อมูลขนาดใหญ่หรือความต้องการเฉพาะทาง เช่น การกรองเมตาเดต้าและการขยายขนาดในแนวนอน ฐานข้อมูลเวกเตอร์เฉพาะทาง เช่น Pinecone, Milvus หรือ Qdrant จะเป็นตัวเลือกที่ดีกว่า ทีมงานหลายทีมเริ่มต้นด้วย pgvector และค่อยย้ายไปใช้ฐานข้อมูลอื่นในภายหลัง
BM25 แตกต่างจากการค้นหาแบบเวกเตอร์อย่างไร?
BM25 เป็นฟังก์ชันการจัดอันดับแบบความน่าจะเป็นที่ให้คะแนนเอกสารโดยพิจารณาจากความถี่ของคำและความถี่ผกผันของเอกสาร และยังคงเป็นเกณฑ์มาตรฐานที่แข็งแกร่ง ในชุดข้อมูลมาตรฐานอย่าง BEIR นั้น BM25 มักมีประสิทธิภาพเหนือกว่าการตั้งค่าเวกเตอร์พื้นฐาน โดยเฉพาะอย่างยิ่งในชุดข้อมูลทางเทคนิค ตัวค้นหาข้อมูลแบบหนาแน่นสมัยใหม่ที่ฝึกฝนด้วยการเรียนรู้แบบเปรียบเทียบสามารถเอาชนะ BM25 ในงานด้านความหมายได้ แต่ช่องว่างจะแคบลงเมื่อใช้แนวทางแบบผสมผสาน
ปัญหาความไม่สอดคล้องกันของคำศัพท์คืออะไร?
ปัญหาความไม่ตรงกันของคำศัพท์เกิดขึ้นเมื่อผู้ใช้และผู้เขียนเอกสารใช้คำที่แตกต่างกันในการอธิบายแนวคิดเดียวกัน การค้นหาคำว่า 'heart attack' จะไม่พบเอกสารที่กล่าวถึงเฉพาะ 'myocardial infarction' ในระบบค้นหาคำหลักล้วนๆ การค้นหาแบบเวกเตอร์แก้ปัญหานี้ได้โดยการแมปวลีทั้งสองไปยังจุดใกล้เคียงกันในพื้นที่ฝังตัว แม้ว่าจะไม่มีคำที่ใช้ร่วมกันก็ตาม
การค้นหาด้วยเวกเตอร์มีค่าใช้จ่ายมากกว่าการค้นหาด้วยคำหลักอย่างไร?
การค้นหาด้วยเวกเตอร์มีค่าใช้จ่ายสูงกว่า เนื่องจากคุณต้องจ่ายค่าสร้างข้อมูลฝังตัว (มักทำผ่านการเรียกใช้ API หรือการประมวลผลด้วย GPU) ในระหว่างการสร้างดัชนี รวมถึงการใช้หน่วยความจำที่สูงกว่าสำหรับการจัดเก็บเวกเตอร์ที่มีความหนาแน่นสูง การค้นหาด้วยคำหลักใช้ดัชนีแบบผกผันราคาประหยัดที่บีบอัดได้ง่าย สำหรับเอกสารหนึ่งล้านฉบับ การจัดเก็บเวกเตอร์อาจต้องใช้พื้นที่ 3-6 GB ในขณะที่ดัชนีคำหลักอาจใช้พื้นที่เพียงไม่กี่ร้อย MB เท่านั้น
การค้นหาด้วยเวกเตอร์สามารถจัดการกับคำค้นหาที่ตรงกันทุกประการได้หรือไม่?
ไม่น่าเชื่อถือเสมอไป การค้นหาแบบเวกเตอร์จะถือว่าทุกอย่างมีความคล้ายคลึงกันโดยประมาณ ดังนั้นการค้นหาด้วยรหัสสินค้าเฉพาะ เช่น 'SKU-12345' อาจให้ผลลัพธ์ที่มีความหมายคล้ายกันแต่ไม่ถูกต้อง นี่คือเหตุผลที่ระบบไฮบริดยังคงใช้การค้นหาด้วยคำหลักสำหรับความต้องการการจับคู่ที่ตรงกันทุกประการ หรือใช้การกรองเมตาเดต้าควบคู่ไปกับการค้นหาแบบเวกเตอร์