ทำความรู้จัก Multi-Vector Embedding Models: อนาคตของการค้นหาข้อมูลที่แม่นยำ

ในยุคที่ข้อมูลท่วมท้น การค้นหาข้อมูลที่ตรงใจและแม่นยำกลายเป็นเรื่องท้าทาย โมเดล Embedding แบบดั้งเดิมมักจะบีบอัดข้อความทั้งหมดให้อยู่ในเวกเตอร์เดียว ซึ่งอาจทำให้สูญเสียข้อมูลสำคัญบางส่วนไป แต่ปัจจุบันมีเทคโนโลยีใหม่ที่เรียกว่า Multi-Vector Embedding Models หรือ Late Interaction Models ที่เข้ามาพลิกโฉมวงการ โดยเฉพาะอย่างยิ่งเมื่อใช้ร่วมกับ Sentence Transformers ซึ่งจะทำให้การค้นหาข้อมูลมีความละเอียดและตรงจุดมากขึ้น

บทความนี้จะพาคุณไปสำรวจโลกของ Multi-Vector Models ทำความเข้าใจหลักการทำงาน ข้อดี ข้อเสีย และวิธีนำไปใช้งานจริง

Multi-Vector Models คืออะไร?

โมเดล Embedding แบบทั่วไปจะรับข้อความเข้ามา แล้วสร้างเวกเตอร์ (Vector) ที่เป็นตัวแทนของข้อความนั้นออกมาเพียงหนึ่งเดียว การเปรียบเทียบความคล้ายคลึงจึงทำได้โดยการคำนวณความสัมพันธ์ระหว่างเวกเตอร์สองตัวนี้ ซึ่งแม้จะทำงานได้ดีในหลายกรณี แต่ก็มีข้อจำกัดเมื่อข้อความยาว หรือมีเงื่อนไขการค้นหาหลายอย่าง

ลองนึกภาพการค้นหา "โซฟาผ้าสีเขียว ขาไม้ เบาะโค้งมน" โมเดลแบบเวกเตอร์เดียวอาจต้องเฉลี่ยคุณสมบัติทั้งหมดเข้าด้วยกัน ทำให้โซฟาที่สีตรงแต่ขาไม้ผิดแบบ อาจถูกจัดว่าใกล้เคียงกับสิ่งที่เราต้องการ

Multi-Vector Models แก้ปัญหานี้โดยการ ไม่บีบอัดข้อมูล แต่จะสร้างเวกเตอร์แยกสำหรับแต่ละ "โทเค็น" (Token) หรือส่วนย่อยของข้อความ ทำให้เอกสารที่มี 9 โทเค็น จะกลายเป็นเมทริกซ์ขนาด 9x128 แทนที่จะเป็นเวกเตอร์เดียวขนาด 1x128

หลักการทำงาน: MaxSim Operator

หัวใจสำคัญของ Multi-Vector Models คือ MaxSim Operator ซึ่งเป็นวิธีการคำนวณคะแนนความคล้ายคลึงที่แตกต่างออกไป โดยจะเปรียบเทียบโทเค็นของคำถาม (Query) กับโทเค็นทั้งหมดของเอกสาร (Document) แล้วเลือกค่าความคล้ายคลึงสูงสุดสำหรับแต่ละโทเค็นคำถาม จากนั้นจึงนำค่าสูงสุดเหล่านั้นมารวมกัน

สูตร MaxSim:
MaxSim(Q, D) = ∑Qi ∈ Q maxDj ∈ D Qi ⋅ Dj

พูดง่ายๆ คือ สำหรับทุกๆ โทเค็นในคำถาม MaxSim จะหาโทเค็นในเอกสารที่ "เข้าคู่" กันได้ดีที่สุด แล้วนำคะแนนความสัมพันธ์ที่ดีที่สุดของแต่ละโทเค็นคำถามมารวมกันเป็นคะแนนสุดท้าย

ข้อดีคือ วิธีนี้ช่วยให้สามารถจับคู่คำที่มีความหมายเหมือนกัน (Synonyms) หรือการใช้คำที่แตกต่างแต่มีความหมายใกล้เคียงกันได้ดีขึ้น โดยไม่จำเป็นต้องเป็นคำเดียวกันเป๊ะๆ เช่น คำว่า "live" ในคำถาม อาจไปจับคู่กับคำว่า "inhabit" ในเอกสารได้ แม้จะไม่มีตัวอักษรเหมือนกันเลยก็ตาม

สิ่งที่ได้รับ และสิ่งที่ต้องแลก

สิ่งที่ได้รับ ✅

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

สิ่งที่ต้องแลก ⚠️

  • ขนาด Index ที่ใหญ่ขึ้น: การเก็บเวกเตอร์จำนวนมากต่อเอกสาร ย่อมใช้พื้นที่จัดเก็บมากกว่าโมเดลเวกเตอร์เดียวอย่างหลีกเลี่ยงไม่ได้ แม้ว่ามิติของเวกเตอร์แต่ละตัวจะเล็กลงก็ตาม
  • อย่างไรก็ตาม เทคนิคการบีบอัด Index เช่น PLAID สามารถช่วยลดขนาดพื้นที่จัดเก็บลงได้ ทำให้ขนาด Index ใกล้เคียงกับโมเดลแบบดั้งเดิม

การใช้งาน Multi-Vector Models กับ Sentence Transformers

การเริ่มต้นใช้งาน Multi-Vector Models กับ Sentence Transformers นั้นง่ายดาย เพียงติดตั้งไลบรารีที่จำเป็น

pip install -U sentence-transformers

หากต้องการใช้งานสำหรับการค้นหาเชิงภาพ (Visual Document Retrieval) อาจต้องติดตั้ง Dependencies เพิ่มเติมสำหรับจัดการรูปภาพ

การโหลดโมเดล 🛠️

การโหลดโมเดล Multi-Vector ทำได้เหมือนกับการโหลดโมเดล Sentence Transformers ทั่วไป เพียงระบุชื่อโมเดลที่รองรับ

from sentence_transformers import SentenceTransformer

# โหลดโมเดล Multi-Vector
model = SentenceTransformer('lightonai/LateOn')

คุณสามารถค้นหาโมเดลที่รองรับได้บน Hugging Face Hub โดยมองหา Tag ที่เกี่ยวข้อง เช่น multi-vector และ sentence-transformers

การเข้ารหัส (Encoding) Queries และ Documents 📝

Multi-Vector Models มีความแตกต่างระหว่างการเข้ารหัสคำถาม (Query) และเอกสาร (Document) โดยเฉพาะการใช้ Prefixes, การกำหนดความยาวสูงสุด (Length Caps) และการกำหนด Token ที่จะข้ามไปในการคำนวณคะแนน

# เข้ารหัสคำถาม
query_embeddings = model.encode_query("What is the weather like today?")

# เข้ารหัสเอกสาร
document_embeddings = model.encode_document("The weather today is sunny with a slight breeze.")

ผลลัพธ์ที่ได้จะเป็น List ของ 2D Tensors โดยแต่ละ Tensor แทนเวกเตอร์ของแต่ละ Token ซึ่งจะมีรูปร่างแตกต่างกันไปตามจำนวน Token ของแต่ละ Input

การคำนวณคะแนน (Scoring) 📊

หลังจากได้ Embeddings แล้ว คุณสามารถใช้เมธอด model.similarity() เพื่อคำนวณคะแนนความคล้ายคลึงระหว่าง Embeddings ทั้งหมดได้

# สมมติว่ามี query_embeddings และ document_embeddings จากตัวอย่างก่อนหน้า
# หากต้องการเปรียบเทียบหลายๆ เอกสารกับหลายๆ คำถาม
# scores = model.similarity(query_embeddings, document_embeddings)

คะแนนที่ได้อาจจะใกล้เคียงกันในบางกรณี เนื่องจาก MaxSim Operator จะพยายามหาจุดร่วมที่ดีที่สุดสำหรับแต่ละโทเค็น ทำให้แม้แต่เอกสารที่ไม่ได้ตรงเป๊ะ ก็อาจได้คะแนนสูงได้

การปรับแต่งโมเดล

โมเดล Multi-Vector มีการตั้งค่าบางอย่างที่สามารถปรับแต่งได้ เช่น queryprefix, documentprefix, maxlength สำหรับ Query และ Document รวมถึง skiptokens ที่จะถูกข้ามไปในการคำนวณคะแนน การตั้งค่าเหล่านี้จะอยู่ใน config ของโมเดล ซึ่งสามารถตรวจสอบได้ด้วยการ print(model)

โดยทั่วไปแล้ว การตั้งค่าเริ่มต้นที่มากับโมเดลก็เพียงพอสำหรับการใช้งานส่วนใหญ่ แต่หากคุณต้องการสร้างโมเดลเอง หรือปรับแต่งให้เหมาะกับข้อมูลเฉพาะของคุณ อาจต้องศึกษาเพิ่มเติมในส่วนของการสร้างโมเดลแบบกำหนดเอง (Creating Custom Models)

ข้อควรพิจารณาเพิ่มเติม

  • Document Length Cap: การกำหนด documentlength จะเป็นการตัดส่วนของเอกสารที่เกินกว่าค่าที่กำหนดออกไปก่อนที่จะถูก Index หาก Chunk ข้อมูลของคุณยาวกว่าค่า Cap ที่โมเดลถูกฝึกมา อาจพิจารณาเพิ่มค่านี้ในการเรียก encodedocument แต่ต้องคำนึงว่า Index จะมีขนาดใหญ่ขึ้น และโมเดลอาจทำงานนอกเหนือขอบเขตที่เคยฝึกมา
  • Asymmetric Nature: โปรดจำไว้ว่าโมเดลเหล่านี้มีลักษณะไม่สมมาตร (Asymmetric) การใช้ encodequery() และ encodedocument() แยกกันจึงเป็นสิ่งจำเป็นเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง

สรุป

Multi-Vector Embedding Models ที่ทำงานร่วมกับ Sentence Transformers เป็นก้าวสำคัญในการพัฒนาเทคโนโลยีการค้นหาข้อมูลให้มีความแม่นยำและละเอียดอ่อนมากยิ่งขึ้น แม้จะมีข้อแลกเปลี่ยนเรื่องขนาด Index แต่ด้วยเทคนิคการบีบอัดและประสิทธิภาพที่ได้รับ ทำให้โมเดลเหล่านี้เป็นทางเลือกที่น่าสนใจอย่างยิ่งสำหรับแอปพลิเคชันที่ต้องการการค้นหาข้อมูลที่เหนือกว่า

#MultiVectorEmbeddings #SentenceTransformers #AI #NLP #InformationRetrieval

ขอบคุณ แหล่งข้อมูล
https://huggingface.co/blog/multi-vector-encoder

ทำความรู้จัก Multi-Vector Embedding Models: อนาคตของการค้นหาข้อมูลที่แม่นยำในยุคที่ข้อมูลท่วมท้น การค้นหาข้อมูลที่ตรงใจและแม่นยำกลายเป็นเรื่องท้าทาย โมเดล Embedding แบบดั้งเดิมมักจะบีบอัดข้อความทั้งหมดให้อยู่ในเวกเตอร์เดียว ซึ่งอาจทำให้สูญเสียข้อมูลสำคัญบางส่วนไป แต่ปัจจุบันมีเทคโนโลยีใหม่ที่เรียกว่า Multi-Vector Embedding Models หรือ Late Interaction Models ที่เข้ามาพลิกโฉมวงการ โดยเฉพาะอย่างยิ่งเมื่อใช้ร่วมกับ Sentence Transformers ซึ่งจะทำให้การค้นหาข้อมูลมีความละเอียดและตรงจุดมากขึ้นบทความนี้จะพาคุณไปสำรวจโลกของ Multi-Vector Models ทำความเข้าใจหลักการทำงาน ข้อดี ข้อเสีย และวิธีนำไปใช้งานจริงMulti-Vector Models คืออะไร?โมเดล Embedding แบบทั่วไปจะรับข้อความเข้ามา แล้วสร้างเวกเตอร์ (Vector) ที่เป็นตัวแทนของข้อความนั้นออกมาเพียงหนึ่งเดียว การเปรียบเทียบความคล้ายคลึงจึงทำได้โดยการคำนวณความสัมพันธ์ระหว่างเวกเตอร์สองตัวนี้ ซึ่งแม้จะทำงานได้ดีในหลายกรณี แต่ก็มีข้อจำกัดเมื่อข้อความยาว หรือมีเงื่อนไขการค้นหาหลายอย่างลองนึกภาพการค้นหา "โซฟาผ้าสีเขียว ขาไม้ เบาะโค้งมน" โมเดลแบบเวกเตอร์เดียวอาจต้องเฉลี่ยคุณสมบัติทั้งหมดเข้าด้วยกัน ทำให้โซฟาที่สีตรงแต่ขาไม้ผิดแบบ อาจถูกจัดว่าใกล้เคียงกับสิ่งที่เราต้องการMulti-Vector Models แก้ปัญหานี้โดยการ ไม่บีบอัดข้อมูล แต่จะสร้างเวกเตอร์แยกสำหรับแต่ละ "โทเค็น" (Token) หรือส่วนย่อยของข้อความ ทำให้เอกสารที่มี 9 โทเค็น จะกลายเป็นเมทริกซ์ขนาด 9x128 แทนที่จะเป็นเวกเตอร์เดียวขนาด 1x128หลักการทำงาน: MaxSim Operatorหัวใจสำคัญของ Multi-Vector Models คือ MaxSim Operator ซึ่งเป็นวิธีการคำนวณคะแนนความคล้ายคลึงที่แตกต่างออกไป โดยจะเปรียบเทียบโทเค็นของคำถาม (Query) กับโทเค็นทั้งหมดของเอกสาร (Document) แล้วเลือกค่าความคล้ายคลึงสูงสุดสำหรับแต่ละโทเค็นคำถาม จากนั้นจึงนำค่าสูงสุดเหล่านั้นมารวมกันสูตร MaxSim:MaxSim(Q, D) = ∑Qi ∈ Q maxDj ∈ D Qi ⋅ Djพูดง่ายๆ คือ สำหรับทุกๆ โทเค็นในคำถาม MaxSim จะหาโทเค็นในเอกสารที่ "เข้าคู่" กันได้ดีที่สุด แล้วนำคะแนนความสัมพันธ์ที่ดีที่สุดของแต่ละโทเค็นคำถามมารวมกันเป็นคะแนนสุดท้ายข้อดีคือ วิธีนี้ช่วยให้สามารถจับคู่คำที่มีความหมายเหมือนกัน (Synonyms) หรือการใช้คำที่แตกต่างแต่มีความหมายใกล้เคียงกันได้ดีขึ้น โดยไม่จำเป็นต้องเป็นคำเดียวกันเป๊ะๆ เช่น คำว่า "live" ในคำถาม อาจไปจับคู่กับคำว่า "inhabit" ในเอกสารได้ แม้จะไม่มีตัวอักษรเหมือนกันเลยก็ตามสิ่งที่ได้รับ และสิ่งที่ต้องแลกสิ่งที่ได้รับ ✅ความแม่นยำในการค้นหาสูงขึ้น: โดยเฉพาะอย่างยิ่งเมื่อคำถามมีความเฉพาะเจาะจง หรือต้องการค้นหาข้อมูลบางส่วนที่สำคัญในเอกสารยาวๆการจัดการกับคำถามที่มีหลายเงื่อนไข: แต่ละเงื่อนไขสามารถหาหลักฐานสนับสนุนของตัวเองได้ ทำให้ผลลัพธ์ตรงกับความต้องการมากขึ้นความยืดหยุ่น: สามารถจัดการกับข้อมูลที่อยู่นอกเหนือจากการฝึกฝนของโมเดลแบบเวกเตอร์เดียวได้ดีกว่าการค้นหาเชิงภาพ (Visual Document Retrieval): เหมาะอย่างยิ่งสำหรับการจับคู่คำถามที่เป็นข้อความกับรูปภาพของเอกสารโดยตรง โดยไม่ต้องผ่านการแปลงข้อความเป็นตัวอักษร (OCR)สิ่งที่ต้องแลก ⚠️ขนาด Index ที่ใหญ่ขึ้น: การเก็บเวกเตอร์จำนวนมากต่อเอกสาร ย่อมใช้พื้นที่จัดเก็บมากกว่าโมเดลเวกเตอร์เดียวอย่างหลีกเลี่ยงไม่ได้ แม้ว่ามิติของเวกเตอร์แต่ละตัวจะเล็กลงก็ตามอย่างไรก็ตาม เทคนิคการบีบอัด Index เช่น PLAID สามารถช่วยลดขนาดพื้นที่จัดเก็บลงได้ ทำให้ขนาด Index ใกล้เคียงกับโมเดลแบบดั้งเดิมการใช้งาน Multi-Vector Models กับ Sentence Transformersการเริ่มต้นใช้งาน Multi-Vector Models กับ Sentence Transformers นั้นง่ายดาย เพียงติดตั้งไลบรารีที่จำเป็นpip install -U sentence-transformersหากต้องการใช้งานสำหรับการค้นหาเชิงภาพ (Visual Document Retrieval) อาจต้องติดตั้ง Dependencies เพิ่มเติมสำหรับจัดการรูปภาพการโหลดโมเดล 🛠️การโหลดโมเดล Multi-Vector ทำได้เหมือนกับการโหลดโมเดล Sentence Transformers ทั่วไป เพียงระบุชื่อโมเดลที่รองรับfrom sentence_transformers import SentenceTransformer # โหลดโมเดล Multi-Vector model = SentenceTransformer('lightonai/LateOn')คุณสามารถค้นหาโมเดลที่รองรับได้บน Hugging Face Hub โดยมองหา Tag ที่เกี่ยวข้อง เช่น multi-vector และ sentence-transformersการเข้ารหัส (Encoding) Queries และ Documents 📝Multi-Vector Models มีความแตกต่างระหว่างการเข้ารหัสคำถาม (Query) และเอกสาร (Document) โดยเฉพาะการใช้ Prefixes, การกำหนดความยาวสูงสุด (Length Caps) และการกำหนด Token ที่จะข้ามไปในการคำนวณคะแนน# เข้ารหัสคำถาม query_embeddings = model.encode_query("What is the weather like today?") # เข้ารหัสเอกสาร document_embeddings = model.encode_document("The weather today is sunny with a slight breeze.")ผลลัพธ์ที่ได้จะเป็น List ของ 2D Tensors โดยแต่ละ Tensor แทนเวกเตอร์ของแต่ละ Token ซึ่งจะมีรูปร่างแตกต่างกันไปตามจำนวน Token ของแต่ละ Inputการคำนวณคะแนน (Scoring) 📊หลังจากได้ Embeddings แล้ว คุณสามารถใช้เมธอด model.similarity() เพื่อคำนวณคะแนนความคล้ายคลึงระหว่าง Embeddings ทั้งหมดได้# สมมติว่ามี query_embeddings และ document_embeddings จากตัวอย่างก่อนหน้า # หากต้องการเปรียบเทียบหลายๆ เอกสารกับหลายๆ คำถาม # scores = model.similarity(query_embeddings, document_embeddings)คะแนนที่ได้อาจจะใกล้เคียงกันในบางกรณี เนื่องจาก MaxSim Operator จะพยายามหาจุดร่วมที่ดีที่สุดสำหรับแต่ละโทเค็น ทำให้แม้แต่เอกสารที่ไม่ได้ตรงเป๊ะ ก็อาจได้คะแนนสูงได้การปรับแต่งโมเดลโมเดล Multi-Vector มีการตั้งค่าบางอย่างที่สามารถปรับแต่งได้ เช่น queryprefix, documentprefix, maxlength สำหรับ Query และ Document รวมถึง skiptokens ที่จะถูกข้ามไปในการคำนวณคะแนน การตั้งค่าเหล่านี้จะอยู่ใน config ของโมเดล ซึ่งสามารถตรวจสอบได้ด้วยการ print(model)โดยทั่วไปแล้ว การตั้งค่าเริ่มต้นที่มากับโมเดลก็เพียงพอสำหรับการใช้งานส่วนใหญ่ แต่หากคุณต้องการสร้างโมเดลเอง หรือปรับแต่งให้เหมาะกับข้อมูลเฉพาะของคุณ อาจต้องศึกษาเพิ่มเติมในส่วนของการสร้างโมเดลแบบกำหนดเอง (Creating Custom Models)ข้อควรพิจารณาเพิ่มเติมDocument Length Cap: การกำหนด documentlength จะเป็นการตัดส่วนของเอกสารที่เกินกว่าค่าที่กำหนดออกไปก่อนที่จะถูก Index หาก Chunk ข้อมูลของคุณยาวกว่าค่า Cap ที่โมเดลถูกฝึกมา อาจพิจารณาเพิ่มค่านี้ในการเรียก encodedocument แต่ต้องคำนึงว่า Index จะมีขนาดใหญ่ขึ้น และโมเดลอาจทำงานนอกเหนือขอบเขตที่เคยฝึกมาAsymmetric Nature: โปรดจำไว้ว่าโมเดลเหล่านี้มีลักษณะไม่สมมาตร (Asymmetric) การใช้ encodequery() และ encodedocument() แยกกันจึงเป็นสิ่งจำเป็นเพื่อให้ได้ผลลัพธ์ที่ถูกต้องสรุปMulti-Vector Embedding Models ที่ทำงานร่วมกับ Sentence Transformers เป็นก้าวสำคัญในการพัฒนาเทคโนโลยีการค้นหาข้อมูลให้มีความแม่นยำและละเอียดอ่อนมากยิ่งขึ้น แม้จะมีข้อแลกเปลี่ยนเรื่องขนาด Index แต่ด้วยเทคนิคการบีบอัดและประสิทธิภาพที่ได้รับ ทำให้โมเดลเหล่านี้เป็นทางเลือกที่น่าสนใจอย่างยิ่งสำหรับแอปพลิเคชันที่ต้องการการค้นหาข้อมูลที่เหนือกว่า#MultiVectorEmbeddings #SentenceTransformers #AI #NLP #InformationRetrievalhttps://huggingface.co/blog/multi-vector-encoder
Shared content
HUGGINGFACE.CO
Multi-Vector (Late Interaction) Embedding Models with Sentence Transformers
We’re on a journey to advance and democratize artificial intelligence through open source and open science.
3 Yorumlar 0 hisse senetleri 879 Views 0 önizleme