ฐานข้อมูลเวกเตอร์เป็นฐานข้อมูลประเภทหนึ่งที่เก็บและดึงข้อมูลตามเวกเตอร์ ในทางคณิตศาสตร์ เวกเตอร์คือปริมาณที่มีขนาดและทิศทาง ในบริบทของฐานข้อมูล เวกเตอร์จะใช้เพื่อแสดงวัตถุหรือจุดข้อมูลในพื้นที่หลายมิติ
ลองนึกภาพฐานข้อมูลที่แต่ละระเบียนแสดงด้วยเวกเตอร์ ตัวอย่างเช่น สมมติว่าเรามีฐานข้อมูลรูปภาพ และแต่ละรูปภาพจะแสดงด้วยเวกเตอร์ที่รวบรวมคุณลักษณะต่างๆ เช่น สี พื้นผิว และรูปร่าง ด้วยฐานข้อมูลเวกเตอร์ เราสามารถดำเนินการต่างๆ ได้ เช่น การค้นหารูปภาพที่คล้ายกันหรือการค้นหารูปแบบในข้อมูล
นี่คือตัวอย่างโค้ดง่ายๆ ใน Python โดยใช้ไลบรารี Faiss ซึ่งเป็นไลบรารียอดนิยมสำหรับการค้นหาความคล้ายคลึงกันอย่างมีประสิทธิภาพในฐานข้อมูลเวกเตอร์:
import faiss # Generate some random vectors vectors = [ [1.2, 0.5, 0.8], [0.7, 1.0, 0.2], [0.9, 0.4, 1.1], # ... ] # Create an index for the vectors index = faiss.IndexFlatL2(len(vectors[0])) # L2 distance metric # Add the vectors to the index index.add(vectors) # Search for similar vectors query_vector = [1.0, 0.6, 0.9] k = 2 # Number of nearest neighbors to retrieve distances, indices = index.search([query_vector], k) print("Nearest neighbors:") for distance, index in zip(distances[0], indices[0]): print(f"Index: {index}, Distance: {distance}")
ในตัวอย่างนี้ เราสร้างดัชนีเวกเตอร์โดยใช้ไลบรารี Faiss และเพิ่มเวกเตอร์แบบสุ่มลงไป จากนั้น เราทำการค้นหาเพื่อนบ้านที่ใกล้ที่สุดของเวกเตอร์แบบสอบถามที่กำหนด ผลลัพธ์จะแสดงดัชนีและระยะทางของเวกเตอร์ที่ใกล้ที่สุดที่พบในฐานข้อมูล
ระดับ 2 (กลาง): ฐานข้อมูลเวกเตอร์เป็นฐานข้อมูลชนิดพิเศษที่ออกแบบมาเพื่อจัดเก็บและเรียกค้นข้อมูลที่แสดงเป็นเวกเตอร์ได้อย่างมีประสิทธิภาพ เวกเตอร์ในบริบทนี้ คือการแสดงทางคณิตศาสตร์ของวัตถุหรือจุดข้อมูลในพื้นที่หลายมิติ ขนาดของพื้นที่สอดคล้องกับคุณลักษณะหรือคุณลักษณะต่างๆ ที่กำหนดวัตถุ
ตัวอย่างเช่น พิจารณาฐานข้อมูลโปรไฟล์ลูกค้า โดยที่ลูกค้าแต่ละรายจะแสดงด้วยเวกเตอร์ของคุณลักษณะ เช่น อายุ รายได้ และประวัติการซื้อ ด้วยการแสดงข้อมูลเป็นเวกเตอร์ เราจึงสามารถดำเนินการค้นหาความคล้ายคลึงหรือการดำเนินการจัดกลุ่มเพื่อค้นหาลูกค้าที่คล้ายกันหรือตรวจจับรูปแบบในข้อมูลได้
นี่คือตัวอย่างโค้ดเพิ่มเติมที่ใช้ไลบรารี Annoy ซึ่งเป็นไลบรารียอดนิยมอีกไลบรารีหนึ่งสำหรับการค้นหาเพื่อนบ้านที่ใกล้ที่สุดโดยประมาณในฐานข้อมูลเวกเตอร์:
from annoy import AnnoyIndex # Generate some random vectors vectors = [ [1.2, 0.5, 0.8], [0.7, 1.0, 0.2], [0.9, 0.4, 1.1], # ... ] # Create an index for the vectors index = AnnoyIndex(len(vectors[0])) # Euclidean distance metric for i, vector in enumerate(vectors): index.add_item(i, vector) # Build the index index.build(10) # 10 trees for efficient search # Search for similar vectors query_vector = [1.0, 0.6, 0.9] k = 2 # Number of nearest neighbors to retrieve indices = index.get_nns_by_vector(query_vector, k) print("Nearest neighbors:") for index in indices: print(f"Index: {index}, Vector: {vectors[index]}")
ในตัวอย่างนี้ เราใช้ไลบรารี Annoy เพื่อสร้างดัชนีสำหรับเวกเตอร์และเพิ่มทีละรายการ ดัชนีจะถูกสร้างขึ้นเพื่อเพิ่มประสิทธิภาพการค้นหา จากนั้นเราสามารถค้นหาเพื่อนบ้านที่ใกล้ที่สุดได้โดยระบุเวกเตอร์การสืบค้น และไลบรารีจะส่งคืนดัชนีของเวกเตอร์ที่ใกล้เคียงที่สุดที่พบในฐานข้อมูล
ระดับ 3 (ขั้นสูง): ฐานข้อมูลเวกเตอร์คือระบบฐานข้อมูลพิเศษที่ใช้ประโยชน์จากเทคนิคการจัดทำดัชนีขั้นสูงเพื่อจัดเก็บและดึงข้อมูลมิติสูงที่แสดงเป็นเวกเตอร์อย่างมีประสิทธิภาพ ในฐานข้อมูลเหล่านี้ เวกเตอร์ถูกใช้เพื่อแสดงวัตถุหรือจุดข้อมูลในพื้นที่หลายมิติ โดยที่แต่ละมิติสอดคล้องกับคุณลักษณะหรือคุณลักษณะของวัตถุ
โดยทั่วไปฐานข้อมูลเวกเตอร์จะใช้โครงสร้างการจัดทำดัชนีที่ซับซ้อนและอัลกอริธึมการค้นหาเพื่อให้สามารถค้นหาความคล้ายคลึงกันได้อย่างรวดเร็ว การสืบค้นเพื่อนบ้านที่ใกล้ที่สุด และการดำเนินการจัดกลุ่มข้อมูลเวกเตอร์ เทคนิคเหล่านี้มีจุดมุ่งหมายเพื่อเอาชนะความท้าทายที่เกิดจากคำสาปแห่งมิติ ซึ่งประสิทธิภาพของวิธีการจัดทำดัชนีแบบดั้งเดิมจะลดลงอย่างรวดเร็วเมื่อจำนวนมิติเพิ่มขึ้น
นี่คือตัวอย่างการใช้ไลบรารี Milvus ซึ่งเป็นระบบฐานข้อมูลเวกเตอร์ที่ล้ำสมัย:
from milvus import Milvus, IndexType, MetricType # Connect to the Milvus server milvus = Milvus(host='localhost', port='19530') # Create a collection for the vectors collection_name = 'my_collection' milvus.create_collection({ 'collection_name': collection_name, 'dimension': 3, # Number of dimensions in the vectors 'index_file_size': 1024, 'metric_type': MetricType.L2, # L2 distance metric }) # Insert vectors into the collection vectors = [ [1.2, 0.5, 0.8], [0.7, 1.0, 0.2], [0.9, 0.4, 1.1], # ... ] milvus.insert(collection_name=collection_name, records=vectors) # Create an index for the collection index_param = { 'index_type': IndexType.IVF_FLAT, # Inverted File with Flat index 'params': {'nlist': 100}, # Number of cells in the index } milvus.create_index(collection_name=collection_name, index_param=index_param) # Search for similar vectors query_vector = [1.0, 0.6, 0.9] k = 2 # Number of nearest neighbors to retrieve results = milvus.search(collection_name=collection_name, query_records=[query_vector], top_k=k) print("Nearest neighbors:") for result in results: print(f"Vector: {result[0].vector}, Distance: {result[0].distance}")
ในตัวอย่างขั้นสูงนี้ เราใช้ไลบรารี Milvus เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ Milvus และสร้างคอลเลกชันสำหรับเวกเตอร์ เราแทรกเวกเตอร์ลงในคอลเลกชันและสร้างดัชนีโดยใช้อัลกอริทึม Inverted File with Flat (IVF_FLAT) สุดท้ายนี้ เราทำการค้นหาความคล้ายคลึงกันโดยระบุเวกเตอร์การสืบค้น และ Milvus จะส่งคืนเพื่อนบ้านที่ใกล้ที่สุดพร้อมกับระยะทางของพวกเขา
ฐานข้อมูลเวกเตอร์ เช่น Milvus ได้รับการออกแบบมาเพื่อจัดการข้อมูลเวกเตอร์ขนาดใหญ่อย่างมีประสิทธิภาพ และมอบความสามารถในการจัดทำดัชนีที่มีประสิทธิภาพสำหรับงานค้นหาในมิติสูง มีการใช้กันอย่างแพร่หลายในการใช้งานต่างๆ เช่น การดึงรูปภาพและวิดีโอ การประมวลผลภาษาธรรมชาติ และระบบการแนะนำ