Embedding và Vector Retrieval
Mở đầu
Máy tính hiểu "mèo và chó giống nhau, khác xe hơi" thế nào? Với người là common sense, với máy "mèo", "chó", "xe hơi" chỉ là 3 chuỗi text không liên quan. Embedding giải bài toán này — biến text thành vector số, để máy hiểu được "xa-gần" về semantic.
Bạn sẽ học:
- Hiểu trực giác: Embedding là gì, sao vector "mèo" + "chó" gần nhau
- Tính similarity: cosine, Euclidean
- Index principle: vector DB tìm trong triệu vector trong vài ms thế nào
- Tech selection: vector DB mainstream
- End-to-end pipeline: text → vector → retrieval
| Chương | Nội dung |
|---|---|
| 1 | Embedding concept |
| 2 | Similarity calculation |
| 3 | Vector index |
| 4 | Vector database |
| 5 | End-to-end pipeline |
0. Toàn cảnh: cầu nối text → số
NLP có thách thức nền tảng: máy chỉ biết số, không biết chữ.
Cách sớm: gán mỗi từ 1 ID (One-Hot), vd "mèo"=001, "chó"=010, "xe hơi"=100. Vấn đề chí mạng: mọi từ cách đều nhau. "Mèo" tới "chó" = "mèo" tới "xe hơi" → trái trực giác.
Embedding cách mạng: map mỗi từ thành dense low-dim vector, từ semantic gần tự gom nhóm. Trong space đó, "mèo" + "chó" sát nhau, "xe hơi" xa — máy "hiểu" semantic.
Từ One-Hot đến Embedding
- One-Hot: dim = vocab size (vạn dim), mỗi vector 1 số 1, còn 0, sparse + không semantic
- Embedding: dim thường 768~1536, mỗi số có nghĩa, dense + giàu semantic
- Đột phá: Word2Vec (2013) chứng minh "nghĩa từ định nghĩa được bằng context", mở kỷ nguyên Embedding
1. Embedding concept: text → toạ độ
Core idea: dùng nhóm số (vector) biểu diễn nghĩa của 1 từ/câu.
Tưởng 2D coordinate. Đặt "mèo" ở (0.2, 0.7), "chó" (0.3, 0.6), "xe hơi" (0.9, 0.1). "Mèo" + "chó" gần, "xe hơi" xa. Đây là trực giác — semantic similarity = khoảng cách space.
词嵌入空间可视化
语义相近的词语在向量空间中距离更近,形成自然聚类
💡 嵌入模型将文本映射到高维向量空间(通常 768~1536 维)。这里我们将其简化为二维来展示核心思想:语义相近的词语,向量距离也更近。
3 tính chất Embedding
- Semantic clustering: từ nghĩa giống tự gom (động vật, thức ăn, công nghệ)
- Analogy: phép vector biểu thị quan hệ semantic, kinh điển: king - man + woman ≈ queen
- Dimension meaning: mỗi dim implicit encode 1 feature (là động vật? size? sentiment?)
| Encoding | Dim | Semantic | App |
|---|---|---|---|
| One-Hot | Vocab (~50000) | Không | NLP cổ |
| Word2Vec | 100~300 | Word level | Similarity, analogy |
| BERT Embedding | 768 | Context | Sentence, QA |
| OpenAI text-embedding-3 | 1536~3072 | Deep | RAG, semantic search |
2. Similarity: 2 vector "gần" cỡ nào?
Có vector, câu hỏi: đo similarity 2 vector thế nào? Như đo 2 thành phố — đo đường thẳng, hoặc direction.
向量相似度计算器
拖动向量端点,观察不同相似度指标的实时变化
💡余弦相似度只关注方向,不关注长度,适合文本语义比较;欧氏距离同时考虑方向和大小,适合需要绝对距离的场景。
2 metric chính
- Cosine Similarity: đo direction 2 vector, range [-1, 1]. 1 = cùng chiều, 0 = vuông góc, -1 = ngược. Chọn đầu cho text vì không bị ảnh hưởng bởi length.
- Euclidean Distance: đường thẳng giữa 2 endpoint, range [0, ∞). 0 = trùng, càng lớn càng khác. Hợp scenario cần "absolute size".
| Metric | Trực giác | Range | Use |
|---|---|---|---|
| Cosine | Direction, ignore length | [-1, 1] | Text semantic, recommendation |
| Euclidean | Direct distance | [0, ∞) | Image feature, clustering |
| Dot product | Direction × length | (-∞, +∞) | Vector đã normalize, tính nhanh |
| Manhattan | Đi dọc axis | [0, ∞) | High-dim sparse vector |
3. Vector index: retrieve trong triệu vector trong ms
Giả sử có 1M document, mỗi cái 1536-dim vector. User hỏi, cần tìm 10 gần nhất. Cách đơn giản: tính từng cái — 1M phép vector 1536-dim, quá chậm.
Vector index giải: đánh đổi space-time, prebuild index → speed từ O(n) → ~O(log n).
向量索引策略对比
对比暴力搜索与近似最近邻搜索的效率差异
| 策略 | 时间复杂度 | 精确度 | 适用场景 |
|---|---|---|---|
| 暴力搜索 | O(n) | 100% | 小数据集 (<10K) |
| ANN (IVF) | O(n/k) | ~95% | 大数据集 (>100K) |
| HNSW | O(log n) | ~98% | 高性能检索 |
Brute-force vs ANN
- Flat (brute-force): so từng cái, 100% accurate nhưng chậm. Data <100k OK.
- IVF (Inverted File Index): chia vector space thành regions (clustering), query chỉ search region gần. Như thư viện phân theme.
- HNSW (Hierarchical Navigable Small World): graph multi-layer, từ coarse-grained đến fine-grained. Như world map → country map → street map.
- PQ (Product Quantization): nén high-dim vector thành short code, đánh đổi accuracy lấy memory. Hợp data cực lớn.
| Index | Build speed | Query speed | Recall | Memory | Scale |
|---|---|---|---|---|---|
| Flat | Không cần | Chậm | 100% | Cao | <100k |
| IVF | Trung | Nhanh | 95%+ | Trung | 100k-10M |
| HNSW | Chậm | Rất nhanh | 99%+ | Cao | 100k-10M |
| PQ | Trung | Nhanh | 90%+ | Rất thấp | >10M |
| IVF-PQ | Trung | Nhanh | 92%+ | Thấp | >100M |
4. Vector DB: storage engine cho vector
Có vector + index, cần nơi store + manage. Traditional DB (MySQL, PostgreSQL) tốt cho structured data, nhưng yếu cho similarity search high-dim. Vector DB thiết kế riêng cho scenario này.
主流向量数据库对比
点击卡片查看详细信息,了解不同向量数据库的特点与适用场景
场景推荐
Capability core
- High-efficient storage: format optimize cho high-dim float vector
- ANN retrieval: built-in HNSW, IVF
- Metadata filter: search + filter theo tag/time
- Realtime update: dynamic CRUD, không rebuild index
- Horizontal scaling: distributed, scale tỷ vector
| DB | Type | Feature | Scenario |
|---|---|---|---|
| Pinecone | Managed cloud | Zero-ops, ready-to-use | Prototype, mid-prod |
| Milvus | Open distributed | High-perf, scalable | Large prod |
| Chroma | Open lightweight | Embedded, API clean | Local dev, small project |
| Weaviate | Open cloud-native | Built-in vectorize, GraphQL | Cần auto-vectorize |
| Qdrant | Open high-perf | Rust, filter mạnh | Cần filter phức tạp |
| pgvector | PG extension | Reuse PG infra | Team đã có PostgreSQL |
5. End-to-end pipeline
Nối các component → hệ vector retrieval đầy đủ.
Có 2 luồng: offline write (doc → vector → store) và online query (question → vector → search).
嵌入生成流水线
逐步体验从文本到向量的完整转换过程
Offline write
- Doc loading: load text từ source (PDF, web, DB)
- Preprocessing: clean, denoise, normalize (bỏ HTML tag, char đặc biệt)
- Chunking: cắt text dài thành chunk (200~500 tokens)
- Vectorize: gọi embedding model (vd OpenAI text-embedding-3-small) → vector
- Store: lưu vector + text + metadata vào vector DB
Online query
- Receive query: user gõ câu hỏi
- Query vectorize: cùng model embed
- Similarity search: trong DB tìm Top-K similar chunk
- Postprocess: rerank, dedup, metadata filter
- Return: relevant chunk → caller (hoặc LLM gen answer)
| Stage | Key choice | Khuyến nghị |
|---|---|---|
| Embedding model | Accuracy vs cost vs speed | OpenAI text-embedding-3-small (tốt giá) |
| Chunking | Granularity vs semantic | Recursive chunking, 200~500 tokens |
| Vector DB | Scale vs ops cost | Project nhỏ: Chroma, prod: Pinecone/Milvus |
| Similarity | Semantic vs exact | Cosine (chọn đầu cho text) |
| Top-K | Recall vs noise | Retrieve 20, rerank Top 5 |
Tổng kết
Embedding + vector retrieval = cầu nối "ngôn ngữ người" ↔ "máy hiểu", và là infrastructure cho RAG, semantic search, recommendation.
Key:
- Bản chất Embedding: map text vào high-dim space, semantic similarity → khoảng cách space
- Similarity: cosine cho direction (text), Euclidean cho absolute distance
- Index = key performance: HNSW + IVF làm retrieval ms với triệu vector
- Vector DB: project nhỏ Chroma/pgvector, prod Pinecone/Milvus
- End-to-end: từ doc loading đến retrieval, mỗi stage ảnh hưởng kết quả
2026 update
- OpenAI text-embedding-3-large: 3072 dim, best public quality
- Cohere embed-v4: multimodal, strong on non-English
- BGE-M3 (open-source): tốt VN dev cần multilingual
- Matryoshka embeddings: dim adaptive (256/512/1024)
- Hybrid search: combine BM25 + vector (Pinecone, Weaviate)
- VN dev: cho RAG tiếng Việt, dùng
BAAI/bge-m3hoặc Cohere