← Quay lại Blog
Công nghệ & AI 11/10/2026 · 7 phút đọc

Embedding Models: Chuyển Đổi Ngôn Ngữ Thành Vector Cho AI

Minh họa embedding models chuyển đổi văn bản thành vector trong không gian đa chiều

Embedding models biến từ, câu, đoạn văn thành vector số trong không gian đa chiều, cho phép máy tính đo độ tương đồng ngữ nghĩa giữa các văn bản. Đây là nền tảng của tìm kiếm ngữ nghĩa, hệ thống RAG, phân loại văn bản và gợi ý nội dung — những công nghệ cốt lõi trong AI hiện đại.

Embedding Model Là Gì Và Tại Sao Quan Trọng?

Máy tính không hiểu ngôn ngữ tự nhiên. Chúng chỉ hiểu số. Embedding model là cầu nối — biến văn bản thành vector, dãy số có ý nghĩa hình học.

Hai câu nghĩa gần nhau sẽ có vector gần nhau trong không gian. “Tôi đói bụng” và “Tôi muốn ăn” nằm gần hơn “Trời mưa to”. Đơn giản vậy thôi. Khoảng cách đo bằng cosine similarity hoặc Euclidean distance.

Khác với keyword search (tìm từ khóa giống hệt), semantic search hiểu ý nghĩa. Bạn gõ “cách giảm cân”, hệ thống trả về cả “phương pháp ăn kiêng” hay “luyện tập hiệu quả” — dù không có từ “giảm cân” nào.

Cơ Chế Hoạt Động: Từ Văn Bản Đến Vector

Encoder Architecture

Hầu hết embedding models dùng kiến trúc Transformer encoder (BERT, RoBERTa). Input đi qua:

  1. Tokenization: “Tôi yêu AI” → [101, 54321, 98765, 12345, 102] (token IDs)
  2. Embedding layer: Mỗi token thành vector 768 chiều
  3. Transformer layers: Self-attention học mối quan hệ giữa các từ
  4. Pooling: Gộp tất cả token embeddings thành một vector câu (mean pooling, CLS token, max pooling)

Output: Vector 384, 768, hay 1024 chiều tùy model.

Contrastive Learning

Models học bằng cách kéo câu tương đồng lại gần, đẩy câu khác xa nhau. Dataset huấn luyện gồm triplets:

  • Anchor: “Cách nấu phở”
  • Positive: “Hướng dẫn làm phở Hà Nội” (gần)
  • Negative: “Lập trình Python” (xa)

Loss function phạt nếu positive xa anchor, hoặc negative gần anchor.

Fine-tuning Cho Domain Cụ Thể

Pre-trained models huấn luyện trên Wikipedia, sách — không hiểu thuật ngữ y tế hay pháp lý. Cần fine-tune:

from sentence_transformers import SentenceTransformer, InputExample, losses
from torch.utils.data import DataLoader

model = SentenceTransformer('all-MiniLM-L6-v2')

# Dữ liệu domain cụ thể
train_examples = [
    InputExample(texts=['bệnh đái tháo đường', 'tiểu đường type 2'], label=0.9),
    InputExample(texts=['cảm cúm', 'viêm phổi'], label=0.3)
]

train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=16)
train_loss = losses.CosineSimilarityLoss(model)

model.fit(train_objectives=[(train_dataloader, train_loss)], epochs=1)

Chỉ cần vài trăm cặp câu tốt đã cải thiện đáng kể.

So Sánh Embedding Models Phổ Biến

ModelKích thướcChiềuNgôn ngữTốc độĐiểm mạnh
all-MiniLM-L6-v280MB384AnhRất nhanhNhỏ gọn, cân bằng tốc độ/chất lượng
bge-small-en-v1.5130MB384AnhNhanhChính xác hơn MiniLM cùng kích thước
mE5-large2.2GB1024100+ChậmĐa ngôn ngữ SOTA, chính xác cao
text-embedding-ada-002 (OpenAI)-1536100+APIChất lượng tốt, không cần tự host
PhoBERT400MB768ViệtTrung bìnhChuyên tiếng Việt

Nguyên tắc chọn:

  • Ứng dụng nhỏ, realtime → MiniLM
  • Độ chính xác cao, đa ngôn ngữ → mE5
  • Tiếng Việt thuần → PhoBERT
  • Không muốn tự host → OpenAI/Cohere API

Ứng Dụng Thực Tế

Thay vì SQL WHERE title LIKE '%keyword%', dùng vector search:

from sentence_transformers import SentenceTransformer
import numpy as np

model = SentenceTransformer('all-MiniLM-L6-v2')

docs = [
    "Cách chăm sóc cây sen đá",
    "Hướng dẫn trồng hoa hồng",
    "Công thức làm bánh flan"
]

doc_embeddings = model.encode(docs)

query = "trồng cây cảnh"
query_embedding = model.encode(query)

# Cosine similarity
similarities = np.dot(doc_embeddings, query_embedding) / (
    np.linalg.norm(doc_embeddings, axis=1) * np.linalg.norm(query_embedding)
)

# Top 2: "Cách chăm sóc cây sen đá" (0.68), "Hướng dẫn trồng hoa hồng" (0.65)

2. RAG (Retrieval-Augmented Generation)

Hệ thống chatbot doanh nghiệp:

  1. User hỏi: “Chính sách nghỉ phép công ty?”
  2. Embedding model encode câu hỏi thành vector
  3. Vector database (Pinecone, Weaviate) tìm top-K văn bản liên quan từ knowledge base
  4. LLM nhận context đã lọc, trả lời chính xác

Embedding chính xác → context đúng → LLM trả lời đúng.

3. Duplicate Detection

Tìm câu hỏi trùng trong forum:

  • User A: “Laptop bị nóng máy khi chạy game”
  • User B: “Máy tính bị quá nhiệt khi chơi game”

Vector distance < 0.1 → gợi ý “câu hỏi tương tự đã có câu trả lời”.

4. Recommendation Systems

YouTube, Spotify gợi ý dựa trên embedding:

  • Encode tiêu đề video/bài hát thành vector
  • User xem video A → tìm top-N video có embedding gần A
  • Kết hợp với collaborative filtering

Tối Ưu Hiệu Năng

Chọn Kích Thước Vector Hợp Lý

384 chiều đủ cho 90% bài toán. 1024 chiều tốn gấp 3 lần RAM và chậm gấp đôi, nhưng chỉ tăng 2-3% accuracy.

Benchmark search 1 triệu vectors:

  • 384-dim, HNSW index: ~5ms/query
  • 1024-dim, HNSW index: ~12ms/query

Nếu latency quan trọng, chọn model nhỏ.

Quantization

Giảm từ float32 (4 bytes/số) xuống int8 (1 byte):

from sentence_transformers import SentenceTransformer
import onnxruntime

model = SentenceTransformer('all-MiniLM-L6-v2')
model.save('model_onnx/', model_name='model.onnx')

# Quantize
!python -m onnxruntime.quantization.preprocess --input model.onnx --output model_quant.onnx

Giảm 75% kích thước, tăng 3x tốc độ, accuracy giảm <1%.

Caching

Câu truy vấn lặp lại nhiều (“cách reset password”) → cache embedding:

import redis
import pickle

r = redis.Redis()

def get_embedding_cached(text):
    cached = r.get(text)
    if cached:
        return pickle.loads(cached)
    
    emb = model.encode(text)
    r.setex(text, 3600, pickle.dumps(emb))  # TTL 1h
    return emb

Giảm 90% latency cho query phổ biến.

Hạn Chế Và Giải Pháp

1. Context Length Limit

Hầu hết models giới hạn 512 tokens (~400 từ). Văn bản dài bị cắt mất thông tin.

Giải pháp: Chunking — chia thành đoạn 300-400 từ, embed riêng, lưu metadata liên kết. Khi search, gộp kết quả từ các chunks cùng document.

2. Out-of-Domain Performance

Model train trên tin tức không hiểu code:

Query: "python list comprehension"
Top result: "python snake habitat" (sai!)

Giải pháp: Fine-tune trên domain data hoặc dùng model chuyên dụng (CodeBERT cho code).

3. Multilingual Tradeoff

Multilingual models hy sinh một phần chất lượng mỗi ngôn ngữ để cover nhiều ngôn ngữ. mE5-large tốt cho tiếng Việt, nhưng PhoBERT (monolingual) vẫn chính xác hơn 5-10% trên dataset tiếng Việt thuần.

Quyết định: Nếu chỉ tiếng Việt → monolingual. Multi-lingual nếu cần search xuyên ngôn ngữ.

Tương Lai: Matryoshka Embeddings

Model mới (mE5, OpenAI text-embedding-3) hỗ trợ multi-resolution embeddings:

  • Cùng một model tạo ra vector 1024-dim
  • Có thể cắt xuống 512, 256, 128 dim với accuracy degradation kiểm soát được

Lợi ích:

  • Ứng dụng mobile dùng 256-dim (nhẹ)
  • Server dùng 1024-dim (chính xác)
  • Cùng một model, không cần train lại

Đây là hướng đi chuẩn trong 2-3 năm tới.

Tóm Lại

Embedding models là xương sống của AI ngôn ngữ hiện đại. Không flashy như ChatGPT, nhưng không có chúng thì không có search ngữ nghĩa, không có RAG, không có recommendation chính xác.

Checklist triển khai:

  1. Chọn model phù hợp kích thước/ngôn ngữ
  2. Fine-tune nếu domain đặc thù
  3. Tối ưu với quantization, caching
  4. Monitor accuracy vs latency
  5. Lên kế hoạch scale với vector database

Hiểu đúng embedding — bạn sẽ xây được hệ thống AI bền vững, chính xác, tiết kiệm chi phí.

Đọc thêm:

Câu hỏi thường gặp

Embedding model khác gì với LLM thông thường?

LLM tạo ra văn bản mới, còn embedding model chuyển văn bản thành vector số để đo độ tương đồng ngữ nghĩa. Embedding model nhỏ hơn, nhanh hơn và chuyên dụng cho tìm kiếm, phân loại.

Kích thước vector embedding bao nhiêu là đủ?

384 chiều cho ứng dụng nhỏ, 768 chiều cho độ chính xác cao, 1024-1536 chiều cho model SOTA. Càng lớn càng chính xác nhưng tốn RAM và chậm hơn.

Có thể dùng embedding model tiếng Việt không?

Có. Multilingual models như mE5, LaBSE hỗ trợ tiếng Việt tốt. Hoặc dùng PhoBERT cho bài toán chuyên sâu tiếng Việt.

Embedding model nào miễn phí và hiệu quả?

all-MiniLM-L6-v2 (nhỏ, nhanh), bge-small-en-v1.5 (cân bằng), mE5-large (đa ngôn ngữ). Tất cả đều mã nguồn mở, chạy local được.

#embedding#ai#machine-learning#nlp#vector#semantic-search