# Model बदलाव, Re-Indexing और Drift — Embeddings और Vector Search

Source: https://www.geekswithgeeks.com/hi/embeddings/e-drift

> Search तोड़े बिना embedding model के upgrades सँभालें।

## नया मॉडल यानी नया space

अलग मॉडलों के, या एक मॉडल के अलग संस्करणों के भी, vectors **अलग spaces** में रहते हैं। उन्हें चुपचाप मिलाना बकवास लौटाता है। नीचे का उदाहरण space की घुमाई हुई प्रति से यह बात दिखाता है: हर space के भीतर दूरियाँ पूरी तरह संगत हैं, इसलिए "model B" query से "model B" खोजना चलता है, पर "model A" query की "model B" दस्तावेज़ों से तुलना असंबंधित परिणाम देती है। इसलिए: हर vector के साथ **मॉडल नाम और संस्करण** रखें; मॉडल बदलते समय पुराना index सेवा देते रहते हुए **पूरे corpus को नए index** में **दोबारा embed** करें, दोनों की golden set पर तुलना करें, फिर बदलें; और वापस जाने की क्षमता रखें। **डेटा drift** पर भी नज़र रखें: समय के साथ नई शब्दावली, उत्पाद और भाषाएँ गुणवत्ता घटा सकती हैं, इसलिए evaluation set निर्धारित समय पर दोबारा चलाएँ।

## दो embedding spaces मिलाना, चलाकर

मैंने यह Python virtual environment में numpy 2.5.3, scikit-learn 1.9.1 और faiss-cpu 1.15.1 के साथ चलाया, निश्चित random seeds के साथ ताकि संख्याएँ दोहराई जाएँ। "Model B" वही डेटा है जिसे random orthogonal matrix से घुमाया गया है। मॉडल A और मॉडल B दोनों के भीतर सही दस्तावेज़ (7) मिलता है। मॉडल-A query को मॉडल-B दस्तावेज़ों से मिलाने पर दस्तावेज़ 68 मिलता है, जो अर्थहीन है।

```python
import numpy as np
rng = np.random.default_rng(0)
docs = rng.normal(size=(300, 16)); docs /= np.linalg.norm(docs, axis=1, keepdims=True)
q = docs[7] + 0.05 * rng.normal(size=16); q /= np.linalg.norm(q)

Q, _ = np.linalg.qr(rng.normal(size=(16, 16)))                 # "model B" = a rotated copy of the same space
docs_b, q_b = docs @ Q, q @ Q
print("model A, query A vs docs A :", int(np.argmax(docs @ q)), "(correct: 7)")
print("model B, query B vs docs B :", int(np.argmax(docs_b @ q_b)), "(rotation keeps distances: still 7)")
print("MIXED, query A vs docs B   :", int(np.argmax(docs_b @ q)), "(meaningless)")

```

Output:

```
model A, query A vs docs A : 7 (correct: 7)
model B, query B vs docs B : 7 (rotation keeps distances: still 7)
MIXED, query A vs docs B   : 68 (meaningless)
```

## हर vector के साथ मॉडल नाम रखें

Metadata में मॉडल-संस्करण field मिश्रित-मॉडल ग़लतियाँ पकड़ने योग्य और re-indexing audit-योग्य बनाता है।

**Quiz:** नया embedding model कैसे लाएँ?

- [ ] मॉडल कभी न बदलें
- [ ] पुराने और नए vectors एक index में मिलाएँ
- [ ] मॉडल बदलें और पुराने vectors रखें
- [x] पुराने के बग़ल में नया index बनाएँ, तुलना करें, फिर बदलें

*Answer:* पुराने के बग़ल में नया index बनाएँ, तुलना करें, फिर बदलें. समानांतर index गुणवत्ता जाँचने और सुरक्षित वापस जाने देता है।
