ข้ามไปยังเนื้อหาหลัก

ค้นหาใน CooLWJ

选择搜索范围,输入关键词后按回车。

ภาษา

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

หนึ่ง、กระบวนการทั้งหมดของงานธุรกิจที่ใช้โมเดลขนาดใหญ่

1.png

  1. การสร้างคลัสเตอร์ AI:การจัดเตรียมระบบประมวลผล、การสื่อสาร、และการจัดเก็บข้อมูล

  2. ข้อมูลสำหรับโมเดลขนาดใหญ่:ชุดข้อมูลโมเดลขนาดใหญ่、การประมวลผลข้อมูล、ฐานข้อมูลเวกเตอร์

  3. อัลกอริทึมโมเดลขนาดใหญ่:จาก NLP แบบดั้งเดิมสู่โมเดลภาษาขนาดใหญ่ LLM ที่ผ่านการฝึกล่วงหน้า

  4. การฝึกโมเดลขนาดใหญ่:วิธีการเชิงอัลกอริทึมทั่วไปและการวิเคราะห์เสถียรภาพในการฝึกโมเดลขนาดใหญ่

  5. การทำงานขนานแบบกระจาย:การขนานโมเดล การขนานข้อมูล การขนานตัวปรับให้เหมาะสม เป็นต้น

  6. การปรับจูนโมเดลขนาดใหญ่:อัลกอริทึมปรับจูนพารามิเตอร์ทั้งหมด、ปรับจูนพารามิเตอร์จำนวนน้อย、ปรับจูนตามคำสั่ง

  7. การอนุมานของโมเดลขนาดใหญ่:การบีบอัดด้วยควอนไทเซชัน การอนุมานด้วยการขยายความยาวลำดับ วิธี Cache

  8. การประเมินโมเดลขนาดใหญ่:งานปลายทางด้าน NLP、งานปลายทางด้าน CV、แผนการประเมิน

  9. เอเจนต์โมเดลภาษาขนาดใหญ่:กระบวนการ RLHF เอเจนต์ และการเรียนรู้ตลอดชีวิต

สอง、เวกเตอร์

ผู้ที่คุ้นเคยกับสุนัขสามารถแยกสายพันธุ์ของพวกมันได้อย่างรวดเร็ว ที่ทำเช่นนี้ได้ก็เพราะเราสังเกตลักษณะของพวกมันจากมุมมองต่าง ๆ เช่น ขนาดลำตัว。
2.pngหากเราใช้แกนพิกัดแสดงลักษณะด้านขนาดของพวกมัน สุนัขเหล่านี้ก็จะอยู่ตามพิกัดที่ต่างกัน อย่างไรก็ตาม การอาศัยเพียงลักษณะด้านขนาดอย่างเดียวยังไม่เพียงพอ เพราะบางตัวมีขนาดใกล้เคียงกันมาก。
3.pngเราลองสังเกตลักษณะของมันเพิ่มเติม เช่น ความยาวของขน แล้วสร้างแกนพิกัดอีกแกน วิธีนี้ก็จะแยกสุนัขบางส่วนที่มีขนาดเท่ากันออกจากกันได้
4.pngแต่ก็ยังมีบางส่วนทับซ้อนกันอยู่ จึงต้องสังเกตจากแง่มุมอื่นเพิ่มเติม เช่น ความยาวของจมูก
5.pngเรายังเพิ่มมิติได้อีก เช่น ขนาดดวงตา เราไม่สามารถวาดกราฟในปริภูมิสี่มิติได้ แต่สำหรับค่าตัวเลขของจุดพิกัดนั้นทำได้ง่ายมาก เพียงเพิ่มค่าต่อท้ายไปเรื่อย ๆ
6.pngเรายังสังเกตลักษณะของสุนัขตัวหนึ่งได้จากมุมมอง หรือจะเรียกว่ามิติต่าง ๆ มากขึ้น เช่น ความหนาบางของขา ความหยิกของขน หรือแม้แต่มุมมองเชิงนามธรรมบางอย่าง เช่น ความเชื่อฟัง ประโยชน์ในการใช้งาน เป็นต้น ยิ่งเราใช้มิติมาก ความสามารถในการแยกแยะสุนัขก็ยิ่งสูงขึ้น ขณะเดียวกัน ปริภูมิที่จุดพิกัดอยู่ก็ยิ่งมีจำนวนมิติสูงขึ้นด้วย
7.pngไม่ใช่แค่สุนัข ที่จริงแล้วแทบทุกสิ่งสามารถอธิบายด้วยวิธีนี้ได้ อาจเป็นสิ่งที่เป็นรูปธรรม, หรือเป็นนามธรรมอย่างความยินดี ความโกรธ ความเศร้า ความสุข การพลัดพรากและการพบพานก็ได้ สิ่งต่าง ๆ มีลักษณะหรือค่าที่แตกต่างกันในแต่ละมิติของคุณลักษณะ ดังนั้นท้ายที่สุดแต่ละสิ่งจึงสอดคล้องกับจุดพิกัดหนึ่งในปริภูมิคุณลักษณะมิติสูง เพียงแต่เมื่อครอบคลุมสิ่งต่าง ๆ ในขอบเขตที่กว้างขึ้น เราอาจต้องใช้มิติของคุณลักษณะที่มากขึ้นเพื่อแยกแยะสิ่งเหล่านั้นได้ดี อาจเป็นหลายร้อย หลายพัน หรืออาจถึงหลักหมื่น。
8.pngแต่เนื่องจากเราไม่สามารถวาดภาพที่เกินสามมิติได้ จึงใช้พิกัดสองมิติในการอธิบาย。
9.pngเราจะพบว่าจุดที่มีแนวคิดใกล้เคียงกันจะรวมกลุ่มกันมากกว่าในปริภูมิ ส่วนจุดที่มีแนวคิดแตกต่างกันมากจะอยู่ห่างกันมาก ยิ่งไปกว่านั้น หากใช้จุดกำเนิดของพิกัดเป็นจุดเริ่มต้น และใช้จุดพิกัดเหล่านี้เป็นจุดสิ้นสุด สิ่งนี้ก็คือเวกเตอร์ที่มีทั้งทิศทางและขนาด。

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

สาม、ฐานข้อมูลเวกเตอร์

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

แผนภาพแสดงจุดข้อมูลเวกเตอร์ในปริภูมิสามมิติ

1、การค้นหาเวกเตอร์

หนึ่งในกรณีใช้งานหลักของข้อมูลเวกเตอร์คือ:เมื่อกำหนดเวกเตอร์ค้นหามาแล้ว ให้หาเวกเตอร์จำนวนหนึ่งที่คล้ายกันที่สุดจากเวกเตอร์จำนวนมาก นี่คือสิ่งที่เรียกว่าปัญหาเพื่อนบ้านใกล้ที่สุด และอัลกอริทึมที่ใช้ทำสิ่งนี้เรียกว่าอัลกอริทึมเพื่อนบ้านใกล้ที่สุด วิธีที่นึกถึงได้ง่ายที่สุดวิธีหนึ่งอาจเป็นการค้นหาแบบไล่ครบ โดยเปรียบเทียบความคล้ายคลึงระหว่างเวกเตอร์ทุกตัวกับเวกเตอร์ค้นหาทีละตัว แล้วเลือกตัวที่คล้ายกันสูงสุดจำนวนหนึ่ง ส่วนวิธีเฉพาะในการเปรียบเทียบความคล้ายคลึงของเวกเตอร์สองตัวนั้นมีอยู่มากมาย,ระยะทางแบบยุคลิดและความคล้ายคลึงแบบโคไซน์。
10.png

  • ระยะทางแบบยุคลิดหมายถึงการคำนวณระยะทางเส้นตรงระหว่างเวกเตอร์สองตัว ในระบบพิกัดสองมิติ สมมติว่ามีเวกเตอร์ p และ q ระยะทางแบบยุคลิดก็คือระยะทางของเส้นตรงที่เชื่อมจาก p ไปยัง q ในระบบพิกัดสามมิติ เวกเตอร์แต่ละตัวประกอบด้วยพิกัด x、y、z สามค่า และใช้สูตรคำนวณระยะทางระหว่างจุดสองจุดใด ๆ ส่วนในระบบพิกัด n มิติ มีพิกัด 100 ค่า และใช้สูตรคำนวณระยะทางระหว่างจุดสองจุดใด ๆ ยิ่งระยะทางสั้นเท่าใด ก็ยิ่งแสดงว่าเวกเตอร์สองตัวนี้มีความคล้ายคลึงกันในบางมิติมากขึ้นเท่านั้น
    11.png

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

2、ดัชนีเวกเตอร์

ก่อนหน้านี้ได้อธิบายหลักการค้นคืนของฐานข้อมูลเวกเตอร์ไปแล้ว แต่ในทางปฏิบัติ เมื่อจับคู่ความคล้ายคลึงในฐานข้อมูลเวกเตอร์ จะคำนวณตามสูตรทั้งหมดไม่ได้ เพราะฐานข้อมูลเวกเตอร์มักมีข้อมูลปริมาณมากและมีมิติสูงด้วย หากใช้สูตรคำนวณความคล้ายคลึงระหว่างเวกเตอร์ 1000 มิติสองตัว จะมีปริมาณการคำนวณค่อนข้างมาก และต้องใช้ CPU ประมวลผลอย่างหนัก แล้วหากมีเวกเตอร์หนึ่งร้อยล้านตัวที่ต้องคำนวณทีละตัว เวลาและต้นทุนการคำนวณก็จะยิ่งสูงขึ้น ดังนั้นเราจึงนำแนวคิดที่เรียกว่าดัชนีเวกเตอร์มาใช้ในที่นี้。
ดัชนีเวกเตอร์คล้ายกับดัชนีในฐานข้อมูลเชิงสัมพันธ์ แต่มีข้อแตกต่างอยู่ประการหนึ่ง ในฐานข้อมูลเวกเตอร์ ผลที่ค้นพบผ่านดัชนีเวกเตอร์เป็นผลโดยประมาณ ไม่ใช่ผลที่ถูกต้อง 100%。ดัชนีเวกเตอร์อธิบายระดับความคล้ายคลึงว่าสูงหรือต่ำ ดังนั้นเราจึงเรียกมันว่าการค้นหาเพื่อนบ้านใกล้ที่สุดแบบประมาณ(ANS)。 หากไม่มีดัชนีเวกเตอร์ การค้นหาความคล้ายคลึงของเวกเตอร์หนึ่งตัวก็คล้ายกับการสแกนทั้งตารางในฐานข้อมูลเชิงสัมพันธ์ แต่ยังต้องเพิ่มการคำนวณอีกชั้นบนการสแกนทั้งตารางด้วย จึงมีต้นทุนสูงกว่าการสแกนทั้งตารางในฐานข้อมูลเชิงสัมพันธ์มาก
เมื่อแบ่งตามวิธีการนำไปใช้ ดัชนีเวกเตอร์ ANNS แบ่งได้เป็นสี่ประเภทหลัก:

  • ดัชนีแบบต้นไม้

  • ดัชนีที่อิงกราฟ

  • ดัชนีที่ใช้แฮช

  • ดัชนีที่อาศัยการควอนไทซ์

1、วิธีที่อาศัยโครงสร้างต้นไม้

แนวคิดหลักของวิธีที่อาศัยโครงสร้างต้นไม้คือการแบ่งข้อมูล คล้ายกับต้นไม้ค้นหาแบบทวิภาค ซึ่งช่วยลดพื้นที่ค้นหาขณะค้นหา เพื่อให้ค้นคืนข้อมูลได้รวดเร็ว แต่วิธีนี้ไม่เหมาะกับปริภูมิมิติสูง วิธีที่อาศัยโครงสร้างต้นไม้ที่สำคัญ ได้แก่ KDTree(K-Dimensional Tree)และ Annoy(Approximate Nearest Neighbors Oh Yeah)。
1.1 KDTree
การสร้าง KDTree ก็อาศัยแนวคิดการแบ่งแบบเวียนเกิดเช่นกัน โดยเริ่มจากเลือกมิติที่มีความแปรปรวนสูงสุด ใช้ค่ามัธยฐานของข้อมูลทั้งหมดในมิตินั้นเป็นจุดแบ่ง แบ่งบริเวณไฮเปอร์เรกแทงเกิลออกเป็นสองบริเวณย่อย ข้อมูลที่น้อยกว่าค่ามัธยฐานจัดไปทางซ้าย ข้อมูลที่น้อยกว่าค่ามัธยฐานจัดไปทางขวา แล้วสร้างต้นไม้ย่อยซ้ายและขวาแบบเวียนเกิด จนกระทั่งแบ่งข้อมูลทั้งหมดเสร็จ。
13.png

กระบวนการค้นหาโดยใช้ KDTree:
1、สำหรับข้อมูลที่ค้นหา p และมิติที่ใช้แบ่งของโหนดปัจจุบัน d ให้เปรียบเทียบค่าพิกัดของข้อมูล p ในมิติ d กับค่าของโหนด หากมากกว่าให้ไปยังโหนดลูกซ้าย หากน้อยกว่าให้ไปยังโหนดลูกขวา;
2、จนกระทั่งเดินสำรวจถึงโหนดใบ ให้ทำเครื่องหมายว่าเยี่ยมชมแล้ว และกำหนดระยะทางถึงโหนดใบเป็นระยะทางที่ใกล้ที่สุด;
3、ย้อนรอยที่โหนดใบ ทุกครั้งที่ย้อนรอยให้ตรวจสอบระยะห่างระหว่าง p กับกิ่งที่ยังไม่ได้เยี่ยมชมในโหนดแม่
a)หากระยะห่างระหว่างโหนดสาขานั้นกับ p มากกว่าระยะที่ใกล้ที่สุดในขณะนั้น ให้ย้อนกลับขึ้นไปต่อจนถึงโหนดราก;
b)หากระยะระหว่างโหนดสาขานั้นกับ p น้อยกว่าระยะใกล้ที่สุดในปัจจุบัน ให้ใช้สาขานั้น ทำขั้นตอน 1 และขั้นตอน 2 จนถึงโหนดใบ แล้วปรับปรุงระยะใกล้ที่สุดระหว่างโหนดใบกับ Q
14.png

1.2Annoy
Annoy ใช้ไฮเปอร์เพลนแบ่งปริภูมิ โดยใช้ KMeans(k=2) หาจุดศูนย์กลางของสองคลัสเตอร์ ระนาบที่ตั้งฉากกับเส้นเชื่อมจุดศูนย์กลางทั้งสองก็คือไฮเปอร์เพลนที่ใช้แบ่ง แล้วทำซ้ำไปเรื่อย ๆ จนจำนวนข้อมูลในแต่ละปริภูมิย่อยต่ำกว่าเกณฑ์ที่กำหนด。
 15.png16.png17.png

18.png

หากต้องการค้นหาจุดใดก็ตามในปริภูมินี้ สามารถเริ่มเดินต้นไม้ทวิภาคจากรากได้ โหนดภายในแต่ละโหนด(สี่เหลี่ยมเล็ก ๆ ในต้นไม้ข้างต้น)กำหนดไฮเปอร์เพลนหนึ่งระนาบ จึงใช้ไฮเปอร์เพลนตัดสินได้ว่าควรไปต่อที่โหนดลูกซ้ายหรือโหนดลูกขวา การค้นหาจุดหนึ่งจุดทำได้ในเวลาระดับลอการิทึม ซึ่งก็คือความสูงของต้นไม้

ข้อดี:ความแม่นยำกับข้อมูลมิติต่ำค่อนข้างสูง ข้อเสีย:ไม่สามารถเก็บรายละเอียดความซับซ้อนของข้อมูลได้อย่างครบถ้วน ความแม่นยำกับข้อมูลมิติสูงค่อนข้างต่ำ

2、วิธีที่อาศัยกราฟ

วิธีที่อาศัยกราฟใช้โครงสร้างข้อมูลแบบกราฟเป็นหลัก โดยใช้ความเชื่อมโยงระหว่างโหนดข้างเคียงสร้างเส้นทางด่วน เปลี่ยนปัญหาให้เป็นการท่องกราฟ จึงลดขอบเขตการค้นหาได้อย่างรวดเร็วและเร่งความเร็วในการค้นคืน แต่โครงสร้างข้อมูลแบบกราฟค่อนข้างซับซ้อน เพื่อให้ได้ความเร็วในการค้นคืนสูงสุด โดยทั่วไปจะโหลดกราฟทั้งหมดเข้าสู่หน่วยความจำ ทำให้ใช้หน่วยความจำสูงมาก แต่ค้นคืนได้เร็วและมีอัตราการเรียกคืนสูง

อัลกอริทึมค้นหาบนกราฟที่ใช้กันทั่วไปในปัจจุบันหลัก ๆ คือ HNSW(Hierarchical Navigating Small World)ส่วน NSW(Navigating Small World)เป็นอัลกอริทึมก่อนหน้าของมัน ซึ่งก็ควรทำความเข้าใจไว้เช่นกัน。
2.1 NSW
NSW เพิ่มข้อกำหนดต่อไปนี้บนพื้นฐานของการสร้างกราฟแบบง่าย:ทุกโหนดต้องมีโหนดข้างเคียง;โหนดข้างเคียงต้องมีเส้นเชื่อม;จำนวนเพื่อนบ้านเป็นไฮเปอร์พารามิเตอร์ที่ผู้ใช้กำหนด ใช้เป็นหลักเพื่อแก้ข้อจำกัดบางประการของวิธีสร้างกราฟแบบง่าย。
19.pngกระบวนการสร้างกราฟ NSW:
เมื่อแทรกโหนดใหม่ ให้ค้นหาโหนด m โหนดที่อยู่ใกล้โหนดใหม่ที่สุดก่อน แล้วเชื่อมโหนดใหม่เข้ากับโหนดทั้ง m โหนดนี้。
กระบวนการค้นหา NSW:
สำหรับข้อมูลค้นหา q ให้สุ่มเลือกโหนด entry point และโหนดเพื่อนบ้านจากกราฟ คำนวณระยะห่างระหว่าง entry point กับ p และระหว่างโหนดเพื่อนบ้านกับ p หากมีโหนดเพื่อนบ้านที่อยู่ใกล้ p มากกว่าระยะห่างระหว่าง p กับ entry point ให้กำหนดจุดที่มีระยะห่างน้อยที่สุด ทำซ้ำจนพบ point ที่โหนดเพื่อนบ้านทั้งหมดอยู่ห่างจาก query มากกว่า point นี้。
ดังภาพด้านบน หากต้องการค้นหาโหนดที่อยู่ใกล้โหนด query สีเขียวที่สุดจากกราฟเพื่อนบ้านใกล้เคียงที่สร้างไว้ ให้เริ่มจาก entry points ที่สุ่มเลือก โดยช่วงแรกอาศัย long-link สีแดงไปยังโหนดใกล้ query อย่างรวดเร็ว จากนั้นใช้ short-link สีดำค้นหาจุดที่ตรงตามเงื่อนไข
NSW เป็นการคำนวณแบบประมาณเช่นกัน จึงไม่สามารถรับประกันได้ว่าจะได้เพื่อนบ้านที่ใกล้ที่สุดจริง ๆ จุดที่แทรกก่อนมีเส้นเชื่อมส่วนเกินมากกว่า จึงมีโอกาสก่อตัวเป็นทางด่วนมากกว่า ยิ่งเป็นจุดที่แทรกภายหลัง โอกาสที่จะมีทางด่วนก็ยิ่งต่ำลง
2.1 HNSW
HNSW เป็นแนวทางปรับปรุงจาก NSW โดยหลักอาศัยแนวคิดของสกิปลิสต์และใช้การแบ่งชั้น แต่ละชั้นเป็น NSW หนึ่งชุด จึงเรียกได้ว่าเป็นวิธี NSW แบบหลายชั้น ยิ่งชั้นบน โหนดยิ่งเบาบางและระยะห่างระหว่างโหนดยิ่งมาก ยิ่งลงชั้นล่าง โหนดยิ่งมากขึ้น การเชื่อมต่อก็เพิ่มขึ้น และระยะห่างเฉลี่ยยิ่งใกล้ขึ้น。
20.png

ข้อดี:ค้นหาเพื่อนบ้านใกล้เคียงที่คล้ายกันในข้อมูลมิติสูงได้ จึงเพิ่มประสิทธิภาพการค้นหา ข้อเสีย:วิธีสร้างกราฟซับซ้อน ส่งผลต่อประสิทธิภาพการใช้หน่วยความจำ。

3、วิธีที่อาศัยแฮช

วิธีที่อาศัยแฮชใช้คุณสมบัติของฟังก์ชันแฮชเป็นหลัก โดยข้อมูลที่มีความคล้ายคลึงกันสูงจะมีค่าแฮชคล้ายกันด้วย ฟังก์ชันแฮชสามารถแปลงข้อมูลมิติสูงเป็นข้อมูลมิติต่ำ ช่วยเพิ่มประสิทธิภาพในการสร้างได้อย่างมาก แต่ฟังก์ชันแฮชก็มีข้อจำกัดอีกอย่างหนึ่งเช่นกัน คือข้อมูลที่มีค่าแฮชคล้ายกันอาจไม่ได้คล้ายกันจริง ส่งผลให้อัตราการเรียกคืนของวิธีนี้ไม่สูงนัก วิธีที่อาศัยแฮชหลัก ๆ คือ LSH(Locality-Sensitive Hashing หรือการแฮชที่ไวต่อความใกล้เคียง)。สมมติว่าเวกเตอร์สองตัวคล้ายกัน ค่าแฮชของเวกเตอร์ทั้งสองก็จะคล้ายกันด้วย ใช้ฟังก์ชันแฮชแมปเวกเตอร์ที่คล้ายกันลงในบักเก็ตเดียวกัน เมื่อค้นหา จะหาบักเก็ตที่คล้ายกับเวกเตอร์คำค้นมากที่สุดก่อน แล้วจึงค้นหาและคำนวณข้อมูลภายในบักเก็ตเพื่อหาผลลัพธ์ topk ที่คล้ายกันมากที่สุด
21.pngLSH(แฮชที่ไวต่อตำแหน่ง) ก็เป็นวิธีที่อาศัยการแบ่งปริภูมิเช่นกัน วิธีดำเนินการเป็นดังภาพด้านล่าง โดยสุ่มสร้างเส้นตรงขึ้นมาหนึ่งเส้น เส้นนี้แบ่งออกเป็นด้านบวกและด้านลบ หากเวกเตอร์อยู่ด้านบวกของเส้นนี้ ก็จะเป็น 1 หากอยู่ด้านลบก็เป็น 0 จากนั้นสุ่มสร้างเส้นตรงขึ้นมาอีกหนึ่งเส้น เช่นเดียวกัน ด้านบวกเป็น 1 ด้านลบเป็น 0 เมื่อเราสร้างเส้นตรงเช่นนี้หลายเส้น ก็จะคำนวณค่า 0 หรือ 1 จำนวน 4 ค่าสำหรับเวกเตอร์แต่ละตัว ทำให้แต่ละตัวได้รหัสฐานสองขนาด 4 บิต ตอนนี้เรามาดูระดับความคล้ายกันของรหัสฐานสอง 4 ชุดนี้
22.png23.png24.png25.png26.png27.png

ข้อดี:ประมวลผลข้อมูลได้รวดเร็วมากเมื่อขยายไปสู่ข้อมูลขนาดใหญ่ ข้อเสีย:ความถูกต้องอยู่ในระดับปานกลาง

5、ดัชนีที่อาศัยการควอนไทซ์(Quantized)

5.1、การจัดกลุ่ม
หากกำหนดขอบเขตโดยประมาณให้เวกเตอร์คำค้นก่อนค้นหา ก็จะช่วยเพิ่มความเร็วในการค้นหาได้อย่างมาก เราเลือกจำนวนกลุ่มที่ต้องการแบ่งก่อน เช่น ในภาพด้านล่างมี 4 กลุ่ม แล้วสุ่มสร้างจุดศูนย์กลาง 4 จุด จากนั้นเวกเตอร์ใดอยู่ใกล้จุดศูนย์กลางใดที่สุด ก็จัดให้อยู่กับจุดศูนย์กลางนั้น แล้วใช้เวกเตอร์ที่ถูกจัดอยู่ในกลุ่มเดียวกันในขณะนั้นคำนวณจุดเวกเตอร์เฉลี่ย ปรับตำแหน่งจุดศูนย์กลางให้เป็นจุดเวกเตอร์เฉลี่ย จากนั้นพิจารณาอีกครั้งว่าแต่ละจุดเวกเตอร์อยู่ใกล้จุดศูนย์กลางใดที่สุด แล้วจัดกลุ่มใหม่ กระบวนการที่ทำซ้ำเช่นนี้เรียกว่าการฝึก สุดท้ายจุดศูนย์กลางเหล่านี้จะมีแนวโน้มคงที่ หรือเรียกว่าลู่เข้า เมื่อค้นหา เพียงหาศูนย์กลางคลัสเตอร์ที่อยู่ใกล้เวกเตอร์คำค้นที่สุด แล้วค้นหาเวกเตอร์ในคลัสเตอร์นั้น ก็จะบรรลุเป้าหมายในการจำกัดขอบเขตการค้นหา
29.png29.png

5.2、การควอนไทซ์(Quantization)
แต่สำหรับข้อมูลเวกเตอร์ปริมาณมหาศาล นอกจากความเร็วในการค้นหาแล้ว การใช้หน่วยความจำก็เป็นความท้าทายอย่างมากเช่นกัน อันที่จริง ในการใช้งานจริง เวกเตอร์ที่มีมิตินับพันและข้อมูลเวกเตอร์นับร้อยล้านรายการไม่ใช่เรื่องแปลก จึงใช้หน่วยความจำสูงมาก
30.png

จากการจัดกลุ่มข้างต้น เราได้รู้จักจุดศูนย์กลาง ซึ่งจริง ๆ เรียกว่าจุดเซนทรอยด์ เราสามารถใช้จุดเซนทรอยด์แทนจุดต่าง ๆ ในกลุ่มได้หรือไม่ น่าจะทำได้ อันที่จริง วิธีนี้ก็คือตัวอย่างทั่วไปของการบีบอัดแบบสูญเสียข้อมูล  หากยกตัวอย่างด้วยภาพจะเป็นดังนี้:
31.png32.png

แม้วิธีนี้จะทำให้ค่าส่วนหนึ่งของเวกเตอร์สูญหาย แต่เมื่อพิจารณาความสัมพันธ์ระหว่างเซนทรอยด์ของคลัสเตอร์กับเวกเตอร์ในกลุ่มนั้น ก็ยังเก็บรักษาข้อมูลดั้งเดิมบางส่วนไว้ได้มาก และเมื่อเทียบกับรายละเอียดบางส่วนที่สูญเสียไปจากการบีบอัดแบบสูญเสียข้อมูลนี้ ประโยชน์ที่ได้ก็นับว่ามากทีเดียว สามารถจัดเก็บตามภาพด้านล่างได้ เมื่อต้องใช้เวกเตอร์ใด ก็ใช้รหัสของมันค้นหาเซนทรอยด์ที่ตรงกันในสมุดรหัส แล้วกู้คืนค่าจริงที่สอดคล้องกับเซนทรอยด์นั้น การแทนเวกเตอร์ด้วยรหัสเซนทรอยด์ก็คือสิ่งที่เรียกว่าการควอนไทซ์เวกเตอร์(Quantization)
33.png

5.3、การควอนไทซ์แบบผลคูณ PQ(Product Quantization)
หลังจากควอนไทซ์เวกเตอร์แล้ว กลับมีโค้ดบุ๊กเพิ่มขึ้นมาอีกหนึ่งชุด แม้การใช้หน่วยความจำของตัวเวกเตอร์เองจะลดลงแน่นอน แต่โค้ดบุ๊กนี้ก็สร้างภาระการใช้หน่วยความจำขึ้นมาใหม่ และมีขนาดค่อนข้างมาก ปัญหานี้ยังไม่เด่นชัดในมิติต่ำ แต่ในสถานการณ์จริงที่เวกเตอร์มีหลายร้อยหรือหลายพันมิติ โค้ดบุ๊กนี้จะมีขนาดมหาศาลจนน่ากลัว เมื่อจำนวนคงที่ หากต้องการรักษาคุณภาพการควอนไทซ์ เวกเตอร์ที่กระจายตัวเบาบางมากขึ้นก็ยิ่งต้องใช้เวกเตอร์ตัวแทนคลัสเตอร์มากขึ้น。
34.png35.png36.png37.png39.png39.png


สำหรับเวกเตอร์ที่มีหลายร้อยหรือหลายพันมิติในการใช้งานจริง ข้อมูลจะเบาบางมาก ดังนั้นในปริภูมิมิติสูง เพื่อรับประกันคุณภาพของการควอนไทซ์ เราอาจต้องใช้คลัสเตอร์จำนวนมาก ตัวอย่างที่พบได้ทั่วไปดังภาพด้านล่าง:เวกเตอร์128มิติอาจต้องใช้ศูนย์กลางคลัสเตอร์จำนวน2ยกกำลัง64จุด ซึ่งจะทำให้สมุดรหัสที่ใช้บันทึกรหัสเซนทรอยด์มีขนาดใหญ่มาก และหน่วยความจำที่ใช้เก็บสมุดรหัสนี้ก็เกินกว่าหน่วยความจำที่ประหยัดได้จากการควอนไทซ์ไปมากแล้ว
40.pngวิธีแก้ปัญหานี้คือแบ่งเวกเตอร์มิติสูงออกเป็นเวกเตอร์ย่อยมิติต่ำหลายตัวก่อน แล้วจึงทำควอนไทเซชันกับเวกเตอร์ย่อยมิติต่ำเหล่านี้อย่างเป็นอิสระต่อกัน เช่น แบ่งเวกเตอร์มิติสูง 128 มิติออกเป็นเวกเตอร์ย่อย 8 ตัว ตัวละ 16 มิติ จากนั้นจึงฝึกการจัดกลุ่มอย่างเป็นอิสระต่อกันในเวกเตอร์ย่อย 8 ตัวที่มี 16 มิติ。
42.png42.png

ดังนั้นแต่ละเวกเตอร์จึงใช้ผลการฝึกของปริภูมิย่อย 8 แห่งมาควอนไทซ์เวกเตอร์ย่อย 8 ตัวที่สอดคล้องกับตนเองได้ และเวกเตอร์ย่อยแต่ละตัวมี 16 มิติ ซึ่งไม่สูงมาก ดังนั้นปริภูมิย่อยแต่ละแห่งที่มี 16 มิติ จึงต้องการเพียง 256 คลัสเตอร์ก็ให้ผลการควอนไทซ์ที่ค่อนข้างดีได้ รหัสของเวกเตอร์ย่อยแต่ละตัวจึงอยู่ในช่วง 0-255 เมื่อนำรหัสควอนไทซ์ของเวกเตอร์ย่อย 8 ตัวมารวมกัน ก็จะได้รหัสควอนไทซ์สุดท้ายของเวกเตอร์เดิม กล่าวคือ ตอนนี้เวกเตอร์หนึ่งตัวถูกควอนไทซ์เป็นรหัส 8 ค่า ในทำนองเดียวกัน ปริภูมิย่อยแต่ละแห่งจะสร้างสมุดรหัสย่อยของตนเองด้วย ระหว่างใช้งาน ให้นำรหัส 8 ค่าไปค้นหาเวกเตอร์ย่อย 8 ตัวที่มี 16 มิติจากสมุดรหัสย่อยแต่ละเล่ม แล้วรวมกันเพื่อคืนรูปเป็นเวกเตอร์ 128 มิติ
45.png45.png45.png46.png


ความคิดเห็น

กำลังส่ง

บทความยอดนิยม

เลือกธีมที่ชอบ

ธีมที่เลือกจะใช้ทั่วทั้งเว็บไซต์