Embedding drift khi đổi embedding model. Cách xử lý migration?

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.

Xem toàn bộ AI Engineering cùng filter theo level & chủ đề con.

Mở danh sách AI Engineering