पाठ 12 / 27

Vector Indexes और Approximate Search

समझें कि बड़े संग्रह approximate nearest-neighbour indexes क्यों उपयोग करते हैं।

सटीक खोज scale नहीं होती

Query की हर vector से तुलना (brute force) सटीक है पर लाखों vectors के लिए धीमी। Approximate nearest neighbour (ANN) indexes जैसे HNSW (परतदार graph), IVF (clusters) और quantised रूप गति और स्मृति के बदले थोड़ा recall गँवाकर लगभग-सर्वोत्तम मिलान बहुत तेज़ पाते हैं। कुछ हज़ार chunks के लिए brute force ठीक और सबसे सरल है। बड़े systems vector database या vector-समर्थित search engine उपयोग करते हैं (जैसे pgvector, Elasticsearch/OpenSearch, Qdrant, Milvus, Pinecone, FAISS)। Recall-बनाम-latency settings अपने evaluation set पर tune करें।

आकार और लागत अंकगणित, चलाकर

मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। दस लाख 768-आयाम float32 vectors लगभग 3.07 GB लेते हैं; brute force की 100 queries को 76.8 अरब गुणा चाहिए; 8-bit quantisation vector भंडारण को चौथाई कर देती है।

import math

# brute-force nearest neighbour cost: queries * documents * dimensions multiplications
docs, dim, queries = 1_000_000, 768, 100
ops = docs * dim * queries
print("multiplications per 100 queries:", f"{ops:,}")
print("float32 index size (GB):", round(docs * dim * 4 / 1e9, 2))
print("with 8-bit quantisation (GB):", round(docs * dim * 1 / 1e9, 2))

Output:

multiplications per 100 queries: 76,800,000,000
float32 index size (GB): 3.07
with 8-bit quantisation (GB): 0.77

छोटे sets के लिए brute force ठीक है

लगभग 100,000 vectors से कम पर सादी सटीक खोज अक्सर काफ़ी तेज़ होती है और ANN tuning पूरी तरह हटा देती है।

त्वरित जाँच: ANN indexes गति के बदले क्या देते हैं?

  • सारी सटीकता
  • थोड़ा recall (वे सच्चा निकटतम पड़ोसी चूक सकते हैं)
  • Metadata रखने की क्षमता
  • भाषा समर्थन
Answer

थोड़ा recall (वे सच्चा निकटतम पड़ोसी चूक सकते हैं) — Approximate का अर्थ परिणाम लगभग, हमेशा ठीक नहीं, सच्चे शीर्ष मिलान होते हैं।