Embedding drift xảy ra khi model embedding mới có distribution/dimension khác với model cũ → vector cũ trong DB không so sánh được với query embedding mới, search quality crash.
Dạng drift:
1. Dimension mismatch — text-embedding-ada-002 (1536d) → text-embedding-3-large (3072d): không thể cosine similarity được.
2. Same dimension, different space — cả hai 1536d nhưng train với data/method khác nhau → gần nhau về số nhưng "gần về ngữ nghĩa" khác nhau.
3. Provider version upgrade — OpenAI update ada-002 silently (đã từng xảy ra) → vector cũ sai so với vector mới.
Vấn đề tại sao phải migration:
- Model mới chất lượng cao hơn (MTEB score tốt hơn).
- Model cũ bị deprecate (OpenAI retire models).
- Cost: model mới rẻ hơn (text-embedding-3-small rẻ hơn ada-002 nhiều lần).
- Compliance / privacy (chuyển sang self-hosted).
Chiến lược migration:
1. Full re-embed (tiêu chuẩn)
- Chạy batch re-embed toàn bộ corpus với model mới.
- Lưu vào collection mới song song (không overwrite).
- Deploy query mới dùng model mới → search collection mới.
- Drop collection cũ sau khi validate.
- Chi phí: thời gian + API cost (có thể lớn — 10M doc × $0.00002/token × 500 token/doc = $100).
2. Dual-write / Shadow deployment
- Ghi cả embedding cũ và mới vào DB trong giai đoạn transition.
- Query song song hai collection → so sánh quality.
- Cutover khi confidence đủ.
- Dùng khi corpus update thường xuyên.
3. Progressive migration
- Corpus lớn, không thể re-embed ngay → migrate theo tier ưu tiên (active docs trước, archive sau).
- Query hit cả hai, merge với weighting.
4. Matryoshka / Dimension truncation
- text-embedding-3 hỗ trợ truncate dimension (256, 512, 1024, 1536) — vẫn meaningful.
- Khi chuyển giữa chiều cao ↔ thấp của cùng model Matryoshka, chỉ cần truncate vector hiện có, không re-embed.
Xử lý lúc chạy song song 2 model:
- Lưu thêm field embedding_version trong metadata.
- Query router biết dùng model/collection nào dựa trên version target.
- Fallback: nếu doc chưa có embedding mới → on-the-fly re-embed.
Validate chất lượng sau migration:
1. A/B retrieval quality — golden query set → so top-K doc retrieve ở 2 version. Recall@k giảm là red flag.
2. End-to-end RAG metrics — RAGAS faithfulness, answer_correctness.
3. User metrics — click-through, satisfaction score, CSAT (nếu có).
4. Canary rollout — 1% → 10% → 50% → 100%; rollback nhanh khi drop.
Prevent drift proactively:
- Pin model version — dùng endpoint có version cụ thể (text-embedding-3-small-2024-xx), không dùng latest alias.
- Shadow eval pipeline — định kỳ run query set qua model mới → so với production. Phát hiện drift sớm.
- Versioned store — index vector theo version; support multi-version coexist.
- Immutable corpus backup — giữ raw text để re-embed khi cần.
Khi self-host embedding: đóng gói model version trong Docker image, không auto-update — embedding khác giữa các build là lỗi ngầm rất khó debug.