หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
Cosmos DB in Fabric นําเสนอการจัดทําดัชนีและการค้นหาเวกเตอร์ที่มีประสิทธิภาพ คุณลักษณะนี้ออกแบบมาเพื่อจัดการเวกเตอร์หลายมิติและหลายมิติทําให้สามารถค้นหาเวกเตอร์ได้อย่างมีประสิทธิภาพและแม่นยําในทุกขนาด ตอนนี้คุณสามารถจัดเก็บเวกเตอร์ในเอกสารควบคู่ข้อมูลของคุณได้โดยตรง เอกสารแต่ละเอกสารในฐานข้อมูลของคุณสามารถประกอบด้วยข้อมูล schema-free แบบดั้งเดิมเท่านั้น แต่ยังประกอบด้วยเวกเตอร์มิติสูงหลายแบบที่เป็นคุณสมบัติอื่น ๆ ของเอกสาร Colocation ของข้อมูลและเวกเตอร์นี้ช่วยให้การทําดัชนีและการค้นหามีประสิทธิภาพเนื่องจากเวกเตอร์ถูกเก็บไว้ในหน่วยตรรกะเดียวกับข้อมูลที่เป็นตัวแทน การเก็บข้อมูลเวกเตอร์และข้อมูลเข้าด้วยกันทําได้ง่ายด้วยการจัดการข้อมูล สถาปัตยกรรมแอปพลิเคชัน AI และประสิทธิภาพการทํางานของเวกเตอร์
Cosmos DB ใน Fabric มีความยืดหยุ่นที่นําเสนอในการเลือกวิธีการทําดัชนีเวกเตอร์:
การค้นหาเพื่อนบ้านแบบ "flat" หรือ k-nearest (บางครั้งเรียกว่า brute-force) สามารถให้การเรียกคืนข้อมูลได้ 100% สําหรับการค้นหาเวกเตอร์ที่มีขนาดเล็กและโฟกัส โดยเฉพาะอย่างยิ่งเมื่อรวมกับตัวกรองคิวรีและคีย์พาร์ติชัน
ดัชนีแบนแบบเชิงปริมาณที่บีบอัดเวกเตอร์โดยใช้วิธีการวัดปริมาณตาม DiskANN เพื่อประสิทธิภาพที่ดีขึ้นในการค้นหา kNN
DiskANN ซึ่งเป็นชุดของอัลกอริทึมการจัดทําดัชนีเวกเตอร์ที่ทันสมัยซึ่งพัฒนาโดย Microsoft Research ให้มีประสิทธิภาพและความแม่นยําสูงในการค้นหาเวกเตอร์แบบหลายแบบในทุกมาตราส่วน
การค้นหาเวกเตอร์ใน Cosmos DB สามารถรวมกับตัวกรองคิวรี NoSQL ที่รองรับและดัชนีอื่น ๆ ทั้งหมดที่สนับสนุนโดยใช้ WHERE ส่วนคําสั่ง การผสมผสานนี้ช่วยให้เวกเตอร์ของคุณค้นหาให้เป็นข้อมูลที่เกี่ยวข้องมากที่สุดกับแอปพลิเคชันของคุณ
คุณลักษณะนี้ช่วยเพิ่มขีดความสามารถหลักของ Cosmos DB ทําให้สามารถจัดการข้อมูลเวกเตอร์และข้อกําหนดการค้นหาในแอปพลิเคชัน AI ได้มากขึ้น
ร้านค้าเวกเตอร์คืออะไร?
เวกเตอร์จัดเก็บหรือเวกเตอร์ฐานข้อมูลเป็นฐานข้อมูลที่ออกแบบมาเพื่อจัดเก็บและจัดการการฝังเวกเตอร์ซึ่งเป็นตัวแทนทางคณิตศาสตร์ของข้อมูลในพื้นที่มิติสูง ในพื้นที่นี้ แต่ละมิติจะสอดคล้องกับคุณลักษณะของข้อมูล และอาจใช้มิติหลายหมื่นมิติเพื่อแสดงข้อมูลที่ซับซ้อน ตําแหน่งเวกเตอร์ในพื้นที่นี้แสดงถึงลักษณะของเวกเตอร์ คํา วลี หรือเอกสารและรูปภาพ เสียง และข้อมูลประเภทอื่น ๆ ทั้งหมดสามารถทําให้เป็นเวกเตอร์ได้
ที่เก็บเวกเตอร์ทํางานอย่างไร
ในที่เก็บเวกเตอร์ อัลกอริทึมการค้นหาเวกเตอร์จะถูกใช้เพื่อจัดทําดัชนีและการฝังคิวรี บางอัลกอริทึมการค้นหาเวกเตอร์ที่รู้จักกันดีได้แก่ ลําดับชั้นนําทางขนาดเล็กโลก (HNSW), แฟ้มผกผัน (IVF), DiskANN และอื่น ๆ การค้นหาเวกเตอร์เป็นวิธีช่วยให้คุณค้นหารายการที่คล้ายกันโดยยึดตามลักษณะข้อมูลแทนที่จะเป็นการจับคู่ที่แน่นอนในเขตข้อมูลคุณสมบัติ เทคนิคนี้มีประโยชน์ในแอปพลิเคชัน เช่น การค้นหาข้อความที่คล้ายกัน การค้นหารูปภาพที่เกี่ยวข้อง การให้คําแนะนํา หรือแม้แต่การตรวจหาสิ่งผิดปกติ ใช้เพื่อสืบค้นการ ฝังเวกเตอร์ ของข้อมูลที่คุณสร้างขึ้นโดยใช้โมเดลแมชชีนเลิร์นนิงโดยใช้ API การฝังตัว ตัวอย่างของการฝัง API คือ Azure OpenAI Embeddings หรือการกอดใบหน้าบน Azure การค้นหาเวกเตอร์วัดระยะห่างระหว่างเวกเตอร์ข้อมูลและเวกเตอร์คิวรีของคุณ เวกเตอร์ข้อมูลที่ใกล้เคียงกับเวกเตอร์คิวรี่ของคุณมากที่สุดคือรายการที่พบว่าใกล้เคียงกันมากที่สุด
ในฐานข้อมูลเวกเตอร์รวมใน Cosmos DB ใน Fabric การฝังสามารถจัดเก็บ ทําดัชนี และคิวรีควบคู่ไปกับข้อมูลต้นฉบับ วิธีนี้ช่วยลดค่าใช้จ่ายเพิ่มเติมในการจําลองข้อมูลในฐานข้อมูลเวกเตอร์บริสุทธิ์ที่แยกต่างหาก ยิ่งไปกว่านั้น สถาปัตยกรรมนี้ยังช่วยให้เวกเตอร์สามารถฝังตัวและข้อมูลต้นฉบับร่วมกันได้ดียิ่งขึ้น ซึ่งอํานวยความสะดวกในการดําเนินการข้อมูลแบบหลายโมดอล และช่วยให้มีความสอดคล้อง ขนาด และประสิทธิภาพการทํางานที่มากขึ้น
นโยบายเวกเตอร์คอนเทนเนอร์
การดําเนินการค้นหาเวกเตอร์ด้วย Cosmos DB ใน Fabric ต้องการให้คุณกําหนดนโยบายเวกเตอร์สําหรับคอนเทนเนอร์ นโยบายนี้ให้ข้อมูลที่จําเป็นสําหรับกลไกจัดการฐานข้อมูลเพื่อดําเนินการค้นหาความคล้ายคลึงกันที่มีประสิทธิภาพสําหรับเวกเตอร์ที่พบในเอกสารของคอนเทนเนอร์ การกําหนดค่านี้ยังแจ้งนโยบายการทําดัชนีเวกเตอร์ของข้อมูลที่จําเป็นคุณควรเลือกที่จะระบุ ข้อมูลต่อไปนี้จะรวมอยู่ในนโยบายเวกเตอร์มี:
path: คุณสมบัติที่มีเวกเตอร์ (จําเป็น)datatype: ชนิดข้อมูลของคุณสมบัติเวกเตอร์ ชนิดที่สนับสนุนคือfloat32(ค่าเริ่มต้น) และint8uint8dimensions: มิติหรือความยาวของแต่ละเวกเตอร์ในเส้นทาง เวกเตอร์ทั้งหมดในเส้นทางควรมีขนาดเท่ากัน (ค่าเริ่มต้น1536)distanceFunction: เมตริกที่ใช้ในการคํานวณระยะทาง/ความคล้ายคลึงกัน เมตริกที่สนับสนุนคือ:cosineซึ่งมีค่าจาก $-1$ (อย่างน้อยที่คล้ายกัน) ถึง $+1$ (คล้ายกันมากที่สุด)dot productซึ่งมีค่าจาก $-\infty$ (อย่างน้อยที่คล้ายกัน) ถึง $+\infty$ (คล้ายกันมากที่สุด)euclideanซึ่งมีค่าจาก $0$ (คล้ายกับมากที่สุด) ไปยัง $+\infty$ (คล้ายกันน้อยที่สุด)
Note
แต่ละเส้นทางที่ไม่ซ้ํากันสามารถมีนโยบายได้มากที่สุดหนึ่งนโยบาย อย่างไรก็ตาม สามารถระบุหลายนโยบายได้หากทุกนโยบายกําหนดเป้าหมายเป็นเส้นทางอื่น
นโยบายเวกเตอร์คอนเทนเนอร์สามารถอธิบายได้ว่าเป็นวัตถุ JSON นี่คือสองตัวอย่างของนโยบายเวกเตอร์คอนเทนเนอร์ที่ถูกต้อง:
นโยบายที่มีเส้นทางเวกเตอร์เดียว
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
}
]
}
นโยบายที่มีสองเส้นทางเวกเตอร์
{
"vectorEmbeddings": [
{
"path": "/vector1",
"dataType": "float32",
"distanceFunction": "cosine",
"dimensions": 1536
},
{
"path": "/vector2",
"dataType": "int8",
"distanceFunction": "dotproduct",
"dimensions": 100
}
]
}
สําหรับข้อมูลเพิ่มเติมและตัวอย่างของการตั้งค่านโยบายเวกเตอร์คอนเทนเนอร์ ดูตัวอย่างนโยบายการทําดัชนีเวกเตอร์
นโยบายการทําดัชนีเวกเตอร์
ดัชนีเวกเตอร์เพิ่มประสิทธิภาพเมื่อทําการค้นหาเวกเตอร์โดยใช้VectorDistanceฟังก์ชันระบบ การค้นหาเวกเตอร์มีเวลาแฝงที่ต่ํากว่า ปริมาณงานที่สูงกว่า และปริมาณการใช้ RU น้อยลงเมื่อใช้ดัชนีเวกเตอร์ คุณสามารถระบุประเภทของนโยบายดัชนีเวกเตอร์เหล่านี้ได้:
| Description | ขนาดสูงสุด | |
|---|---|---|
flat |
จัดเก็บเวกเตอร์บนดัชนีเดียวกันกับคุณสมบัติที่จัดทําดัชนีอื่น ๆ | 505 |
quantizedFlat |
วัดเวกเตอร์ (บีบอัด) ก่อนจัดเก็บในดัชนี นโยบายนี้สามารถปรับปรุงเวลาแฝงและปริมาณงานที่ต้นทุนความแม่นยําเล็กน้อย | 4096 |
diskANN |
สร้างดัชนีตาม DiskANN สําหรับการค้นหาโดยประมาณที่รวดเร็วและมีประสิทธิภาพ | 4096 |
Note
quantizedFlatดัชนีและdiskANNต้องการให้แทรกเวกเตอร์อย่างน้อย 1,000 ตัว ค่าต่ําสุดนี้คือเพื่อให้แน่ใจว่าความถูกต้องของกระบวนการวัดปริมาณ หากมีเวกเตอร์น้อยกว่า 1,000 เวกเตอร์ การสแกนเต็มรูปแบบจะดําเนินการแทนและนําไปสู่ค่าใช้จ่าย RU ที่สูงขึ้นสําหรับคิวรีการค้นหาเวกเตอร์
สองสามประเด็นที่ควรทราบ:
flatประเภทดัชนี และquantizedFlatใช้ดัชนีของ Cosmos DB เพื่อจัดเก็บและอ่านเวกเตอร์แต่ละตัวในระหว่างการค้นหาเวกเตอร์ เวกเตอร์ค้นหาด้วยflatดัชนีเป็นการค้นหาที่มีพลังเดรัจฉานและสร้างความแม่นยํา% หรือการเรียกคืน 100 รายการ นั่นคือรับประกันว่าพวกเขาจะค้นหาเวกเตอร์ที่คล้ายกันที่สุดในชุดข้อมูล อย่างไรก็ตาม มีข้อจํากัดของ505มิติสําหรับเวกเตอร์บนดัชนีแบนดัชนี
quantizedFlatจัดเก็บเวกเตอร์ที่วัดจํานวน (บีบอัด) บนดัชนี เวกเตอร์ค้นหาด้วยquantizedFlatดัชนียังเป็นการค้นหาแรงเดรัจฉาน อย่างไรก็ตามความแม่นยําอาจน้อยกว่า 100% เล็กน้อยเนื่องจากเวกเตอร์จะถูกวัดก่อนที่จะเพิ่มลงในดัชนี อย่างไรก็ตาม เวกเตอร์ที่ค้นหาควรquantized flatมีความล่าช้าต่ํากว่า ปริมาณงานที่สูงกว่า และค่าใช้จ่าย RU ต่ํากว่าการค้นหาเวกเตอร์บนflatดัชนี ดัชนีนี้เป็นตัวเลือกที่ดีสําหรับสถานการณ์ที่มีขนาดเล็กหรือสถานการณ์ที่คุณกําลังใช้ตัวกรองคิวรีเพื่อจํากัดการค้นหาเวกเตอร์ให้แคบลงเป็นเวกเตอร์ที่ค่อนข้างเล็กquantizedFlatแนะนําให้ใช้เมื่อจํานวนเวกเตอร์ที่จะทําดัชนีอยู่ที่ประมาณ 50,000 หรือน้อยกว่าต่อพาร์ติชันจริง อย่างไรก็ตาม คําแนะนํานี้เป็นเพียงแนวทางทั่วไปและประสิทธิภาพการทํางานจริงควรได้รับการทดสอบเนื่องจากแต่ละสถานการณ์อาจแตกต่างกันดัชนีเป็น
diskANNดัชนีแยกต่างหากที่กําหนดไว้โดยเฉพาะสําหรับเวกเตอร์โดยใช้ DiskANN ซึ่งเป็นชุดอัลกอริธึมการจัดทําดัชนีเวกเตอร์ประสิทธิภาพสูงที่พัฒนาโดย Microsoft Research ดัชนี DiskANN สามารถเสนอเวลาแฝงต่ําสุด บางระดับ อัตราความเร็วสูงสุด และคิวรีค่าใช้จ่าย RU ต่ําสุด ในขณะที่ยังคงรักษาความแม่นยําสูง โดยทั่วไป DiskANN มีประสิทธิภาพสูงสุดของดัชนีทุกประเภทหากมีเวกเตอร์มากกว่า 50,000 ต่อพาร์ติชันจริง
นี่คือตัวอย่างของนโยบายดัชนีเวกเตอร์ที่ถูกต้อง:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "diskANN"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Important
เส้นทางเวกเตอร์จะถูกเพิ่มไปยัง excludedPaths ส่วนของนโยบายการทําดัชนีเพื่อให้แน่ใจว่าประสิทธิภาพการทํางานที่ดีที่สุดสําหรับการแทรก ไม่เพิ่มเส้นทางเวกเตอร์เพื่อให้ excludedPaths ได้ค่าธรรมเนียมหน่วยคําขอที่สูงขึ้นและเวลาแฝงสําหรับการแทรกเวกเตอร์
Important
อักขระตัวแทนการ์ด (*, []) ยังไม่ได้รับการรองรับในนโยบายเวกเตอร์หรือดัชนีเวกเตอร์ในขณะนี้
ทําการค้นหาเวกเตอร์ด้วยคิวรีโดยใช้ VECTORDISTANCE
เมื่อคุณสร้างคอนเทนเนอร์ที่มีนโยบายเวกเตอร์ที่ต้องการแล้วและแทรกข้อมูลเวกเตอร์ลงในคอนเทนเนอร์คุณสามารถดําเนินการค้นหาเวกเตอร์โดยใช้ฟังก์ชันในตัวVECTORDISTANCEในคิวรีได้ ตัวอย่างของคิวรี NoSQL ที่ฉายคะแนนความคล้ายคลึงกันเป็นนามแฝง scoreและเรียงลําดับตามลําดับของคล้ายกับน้อยที่สุด:
SELECT TOP 10
c.title,
VECTORDISTANCE(c.contentVector, [1,2,3]) AS score
FROM
container c
ORDER BY
VECTORDISTANCE(c.contentVector, [1,2,3])
Important
ใช้ TOP N ส่วนคําสั่งใน SELECT คําสั่งของคิวรีเสมอ มิฉะนั้นการค้นหาเวกเตอร์จะพยายามส่งกลับผลลัพธ์เพิ่มเติมมากมายทําให้คิวรีมีต้นทุนหน่วยคําขอมากขึ้น (RUs) และมีเวลาแฝงที่สูงกว่าที่จําเป็น