หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ฐานข้อมูลเวกเตอร์จัดเก็บและจัดการข้อมูลในรูปแบบของเวกเตอร์ซึ่งเป็นอาร์เรย์เชิงตัวเลขของจุดข้อมูล
ฐานข้อมูลแบบดั้งเดิมไม่เหมาะกับการจัดการข้อมูลมิติสูงที่กลายเป็นเรื่องธรรมดามากขึ้นในการวิเคราะห์ข้อมูล อย่างไรก็ตามฐานข้อมูลเวกเตอร์ถูกออกแบบมาเพื่อจัดการข้อมูลหลายมิติเช่นข้อความรูปภาพและเสียงโดยแสดงเป็นเวกเตอร์ ฐานข้อมูลเวกเตอร์มีประโยชน์สําหรับงานเช่นการเรียนรู้ของเครื่องการประมวลผลภาษาธรรมชาติและการจดจําภาพซึ่งเป้าหมายคือการระบุรูปแบบหรือความคล้ายคลึงกันในชุดข้อมูลขนาดใหญ่
บทความนี้ให้ข้อมูลพื้นฐานเกี่ยวกับฐานข้อมูลเวกเตอร์และอธิบายแนวคิดว่าคุณสามารถใช้ Eventhouse เป็นฐานข้อมูลเวกเตอร์ใน Real-Time Intelligence ใน Microsoft Fabric ได้อย่างไร สําหรับตัวอย่างที่ใช้งานได้จริง โปรดดู บทช่วยสอน: ใช้ Eventhouse เป็นฐานข้อมูลเวกเตอร์ที่มีการฝัง LLM และ บทช่วยสอน: ใช้ Eventhouse เป็นฐานข้อมูลเวกเตอร์ที่มีการฝัง SLM
แนวคิดหลัก
แนวคิดหลักต่อไปนี้ถูกใช้ในฐานข้อมูลเวกเตอร์:
ความคล้ายคลึงกันของเวกเตอร์
ความคล้ายคลึงกันของเวกเตอร์คือการวัดว่าเวกเตอร์สองตัวหรือมากกว่านั้นแตกต่างกัน (หรือคล้ายกัน) การค้นหาความคล้ายคลึงกันของเวกเตอร์เป็นเทคนิคที่ใช้ในการค้นหาเวกเตอร์ที่คล้ายกันในชุดข้อมูล คุณเปรียบเทียบเวกเตอร์โดยใช้เมตริกระยะทาง เช่น ระยะทางแบบยุคลิดหรือความคล้ายคลึงกันของโคไซน์ เวกเตอร์สองตัวที่ใกล้กว่านั้นยิ่งคล้ายกันมาก
Embeddings
การฝังเป็นวิธีทั่วไปในการแสดงข้อมูลในรูปแบบเวกเตอร์สําหรับการใช้งานในฐานข้อมูลเวกเตอร์ การฝังคือการแสดงข้อมูลทางคณิตศาสตร์ เช่น คํา เอกสารข้อความ หรือรูปภาพ ที่รวบรวมความหมายของข้อมูล คุณสร้างการฝังตัว โดยใช้อัลกอริทึมที่วิเคราะห์ข้อมูล และสร้างชุดของค่าตัวเลขที่แสดงถึงคุณลักษณะหลักของข้อมูล ตัวอย่างเช่น การฝังสําหรับคําอาจแสดงความหมาย บริบท และความสัมพันธ์กับคําอื่นๆ การฝังเป็นวิธีทั่วไปในการแสดงข้อมูลในรูปแบบเวกเตอร์สําหรับการใช้งานในฐานข้อมูลเวกเตอร์ การฝังคือการแสดงข้อมูลทางคณิตศาสตร์ เช่น คํา เอกสารข้อความ หรือรูปภาพ ที่รวบรวมความหมายของข้อมูล คุณสร้างการฝังตัว โดยใช้อัลกอริทึมที่วิเคราะห์ข้อมูล และสร้างชุดของค่าตัวเลขที่แสดงถึงคุณลักษณะหลักของข้อมูล ตัวอย่างเช่น การฝังสําหรับคําอาจแสดงความหมาย บริบท และความสัมพันธ์กับคําอื่นๆ Eventhouse รองรับสองวิธีในการสร้างการฝังโดยตรงใน KQL:
ปลั๊กอิน ai_embeddings: เรียกใช้ปลายทาง OpenAI Azure ภายนอกเพื่อสร้างการฝังโดยใช้โมเดลภาษาขนาดใหญ่ (LLM) วิธีนี้สร้างการฝังที่มีคุณภาพสูงสุดและเหมาะที่สุดสําหรับปริมาณงานการค้นหาความหมายการผลิต
slm_embeddings_fl(): เรียกใช้โมเดลภาษาขนาดเล็ก (SLM) ภายในแซนด์บ็อกซ์ Kusto Python สร้างการฝังโดยไม่มีปลายทางภายนอก วิธีนี้ไม่ต้องใช้ทรัพยากร Azure OpenAI และไม่มีค่าใช้จ่ายต่อการฝังตัว
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการฝังตัวใน Azure OpenAI โปรดดู ทําความเข้าใจการฝังใน Azure OpenAI Service
เลือกวิธีการฝัง
ใช้ตารางต่อไปนี้เพื่อเลือกวิธีการที่เหมาะกับสถานการณ์ของคุณมากที่สุด:
| ข้อควรพิจารณา | ปลั๊กอิน ai_embeddings (LLM) | slm_embeddings_fl() (เอสแอลเอ็ม) |
|---|---|---|
| คุณภาพของโมเดล | คุณภาพสูงสุด; ใช้โมเดล Azure OpenAI เช่นtext-embedding-3-large |
คุณภาพดี; ใช้ SLM โอเพนซอร์ส เช่น harrier-v1-270m, jina-v2-smallและ e5-small-v2 |
| การพึ่งพาภายนอก | ต้องใช้ทรัพยากร Azure OpenAI ที่มีโมเดลการฝังตัวที่ปรับใช้ | ไม่มี; โมเดลทํางานในเครื่องในแซนด์บ็อกซ์ Python |
| ค่า | ราคาต่อคําขอตามการใช้งาน Azure OpenAI | ไม่มีค่าใช้จ่ายต่อการฝัง |
| ปริมาณงาน | อยู่ภายใต้ขีดจํากัดอัตราของ Azure OpenAI ต้องใช้ตรรกะการแบทช์และลองใหม่ | จํากัดด้วยทรัพยากรการประมวลผลแบบคลัสเตอร์เท่านั้น ปรับขนาดตามธรรมชาติด้วยขนาดคลัสเตอร์ |
| การตั้งค่า | ต้องมีการปรับใช้ Azure OpenAI การกําหนดค่านโยบายคําบรรยายภาพ และการตั้งค่าข้อมูลประจําตัว | ต้องเปิดใช้งานปลั๊กอิน Python และอัปโหลดสิ่งประดิษฐ์ SLM ไปยังเลคเฮาส์ |
| ความยาวบริบทสูงสุด | ขึ้นอยู่กับโมเดลที่ปรับใช้ (เช่น 8,192 โทเค็นสําหรับ text-embedding-3-large) |
มากถึง 32,768 โทเค็นที่มี harrier-v1-270m, 8,192 กับ jina-v2-small และ 512 กับ และ e5-small-v2 |
| เหมาะสําหรับ | การค้นหาความหมายการผลิตที่คุณภาพการฝังเป็นสิ่งสําคัญที่สุด | เวิร์กโฟลว์ที่คํานึงถึงความเป็นส่วนตัว การสร้างต้นแบบอย่างรวดเร็ว การฝังแบทช์ปริมาณมาก หรือสถานการณ์ที่ไม่มีการเข้าถึง Azure OpenAI |
เวิร์กโฟลว์ทั่วไป
เวิร์กโฟลว์ทั่วไปสําหรับการใช้ฐานข้อมูลเวกเตอร์มีดังนี้:
- ฝังข้อมูล: แปลงข้อมูลเป็นรูปแบบเวกเตอร์โดยใช้โมเดลการฝัง
- จัดเก็บเวกเตอร์: จัดเก็บเวกเตอร์แบบฝังตัวในฐานข้อมูลเวกเตอร์ คุณสามารถส่งข้อมูลแบบฝังตัวไปยัง Eventhouse เพื่อจัดเก็บและจัดการเวกเตอร์ได้
- คิวรีแบบฝังตัว: แปลงข้อมูลคิวรีเป็นรูปแบบเวกเตอร์โดยใช้แบบจําลองการฝังตัวเดียวกันกับที่ใช้ในการฝังข้อมูลที่จัดเก็บไว้
- เวกเตอร์คิวรี่: ใช้การค้นหาความคล้ายคลึงกันของเวกเตอร์เพื่อค้นหารายการในฐานข้อมูลที่คล้ายกับคิวรี
Eventhouse เป็นฐานข้อมูลเวกเตอร์
หัวใจสําคัญของการค้นหาความคล้ายคลึงกันของเวกเตอร์คือความสามารถในการจัดเก็บ จัดทําดัชนี และสืบค้นข้อมูลเวกเตอร์ Eventhouses มีโซลูชันสําหรับการจัดการและวิเคราะห์ข้อมูลปริมาณมาก โดยเฉพาะอย่างยิ่งในสถานการณ์ที่จําเป็นต้องมีการวิเคราะห์และการสํารวจแบบเรียลไทม์ ความสามารถนี้ทําให้ Eventhouse เป็นตัวเลือกที่ยอดเยี่ยมสําหรับการจัดเก็บและค้นหาเวกเตอร์
ส่วนประกอบต่อไปนี้ของ Eventhouse ช่วยให้คุณสามารถใช้เป็นฐานข้อมูลเวกเตอร์ได้:
- ชนิดข้อมูล แบบไดนามิก ซึ่งสามารถจัดเก็บข้อมูลที่ไม่มีโครงสร้างเช่น อาร์เรย์ และกระเป๋าคุณสมบัติได้ ใช้ชนิดข้อมูลนี้เพื่อจัดเก็บค่าเวกเตอร์ คุณสามารถเพิ่มค่าเวกเตอร์ได้โดยการจัดเก็บเมตาดาต้าที่เกี่ยวข้องกับวัตถุต้นฉบับเป็นคอลัมน์แยกต่างหากในตารางของคุณ
- ประเภท
Vector16ที่ออกแบบมาสําหรับการจัดเก็บเวกเตอร์ของตัวเลขทศนิยมด้วยความแม่นยํา 16 บิต การเข้ารหัสนี้ใช้แทนBfloat1664 บิตเริ่มต้น ใช้การเข้ารหัสนี้เพื่อจัดเก็บการฝังเวกเตอร์ เนื่องจากช่วยลดความต้องการในการจัดเก็บข้อมูลได้สี่เท่า และเร่งฟังก์ชันการประมวลผลเวกเตอร์ เช่น series_dot_product() และ series_cosine_similarity() ได้อย่างมาก - ฟังก์ชัน series_cosine_similarity ซึ่งคุณสามารถใช้เพื่อค้นหาความคล้ายคลึงกันของเวกเตอร์ที่ด้านบนของเวกเตอร์ที่จัดเก็บไว้ใน Eventhouse
ปรับให้เหมาะสมสําหรับมาตราส่วน
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพการค้นหาความคล้ายคลึงกันของเวกเตอร์ โปรดดูบล็อก
เมื่อต้องการเพิ่มประสิทธิภาพและเวลาในการค้นหาที่ได้สูงสุด ให้ทําตามขั้นตอนเหล่านี้:
- ตั้งค่าการเข้ารหัสของคอลัมน์ที่ฝังตัวเป็น Vector16 การเข้ารหัส 16 บิตของสัมประสิทธิ์เวกเตอร์ (แทนค่าเริ่มต้น 64 บิต)
- จัดเก็บตารางเวกเตอร์การฝังบนโหนดคลัสเตอร์ทั้งหมดที่มีอย่างน้อยหนึ่งส่วนต่อโปรเซสเซอร์ เมื่อต้องการทําเป้าหมายนี้ ให้ทําตามขั้นตอนเหล่านี้:
- จํากัดจํานวนของเวกเตอร์การฝังต่อการแชร์โดยการเปลี่ยนแปลง นโยบายการแชร์ของ ShardEngineMaxRowCount ของ นโยบายการแชร์ การตั้งค่านี้จะกระจายข้อมูลของคุณไปยังทรัพยากรการประมวลผลที่มีอยู่ทั้งหมดเพื่อการค้นหาที่รวดเร็วขึ้น
- เปลี่ยน RowCountUpperBoundForMerge ของนโยบายการผสาน จําเป็นต้องมีนโยบายการผสานเพื่อระงับขอบเขตการผสานหลังจากการนําเข้า
ขั้นตอนการปรับให้เหมาะสมตามตัวอย่าง
ในตัวอย่างต่อไปนี้ คุณกําหนดตารางเวกเตอร์แบบคงที่สําหรับการจัดเก็บเวกเตอร์ 1 ล้าน คุณกําหนดนโยบายการฝังเป็น Vector16 และตั้งค่านโยบายการแบ่งส่วนข้อมูลและการผสานเพื่อเพิ่มประสิทธิภาพตารางสําหรับการค้นหาความคล้ายคลึงกันของเวกเตอร์ สําหรับตัวอย่างนี้ สมมติว่าคลัสเตอร์มี 20 โหนด และแต่ละโหนดมีตัวประมวลผล 16 ตัว ส่วนแบ่งของตารางควรมีมากที่สุด 1,000,000/(20*16)=3,125 แถว
เรียกใช้คําสั่ง KQL ต่อไปนี้ทีละรายการเพื่อสร้างตารางว่างและตั้งค่านโยบายและการเข้ารหัสที่จําเป็น:
.create table embedding_vectors(vector_id:long, vector:dynamic) // This is a sample selection of columns, you can add more columns .alter column embedding_vectors.vector policy encoding type = 'Vector16' // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }' // Balanced data on all nodes and, multiple extents per node so the search can use all processors .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }' // Suppress merging extents after ingestionนําเข้าข้อมูลไปยังตารางที่สร้างและกําหนดในขั้นตอนก่อนหน้า