Table of Contents10 sections
1. Vector là gì
Một vector là một danh sách số mô tả vị trí trong không gian. Trong mặt phẳng 2 chiều, vector có dạng (x, y):

Vector (3, 4) nghĩa là: đi 3 đơn vị theo trục x, 4 đơn vị theo trục y. Đơn giản vậy thôi — một vector chỉ là tọa độ của một điểm trong không gian.
2. Khoảng cách giữa hai vector
Cho hai điểm A(1, 1) và B(4, 5):

Khoảng cách đường thẳng giữa hai điểm — hay Euclidean distance:
d(A, B) = √( (4−1)² + (5−1)² )
= √( 9 + 16 )
= √25
= 5Công thức này mở rộng tự nhiên lên N chiều bằng cách thêm số hạng:
d(A, B) = √( (a₁−b₁)² + (a₂−b₂)² + ... + (aₙ−bₙ)² )3. Đo góc giữa hai vector — Cosine similarity
Ngoài khoảng cách thẳng, ta còn có thể đo góc giữa hai vector từ cùng gốc tọa độ.

Từ công thức tích vô hướng:
A · B = |A| × |B| × cos(θ)Biến đổi ra:
cos(θ) = (A · B) / (|A| × |B|)Đây chính là Cosine similarity — đo mức độ "cùng hướng" giữa hai vector. Giá trị từ -1 đến 1:
Giá trị | Ý nghĩa hình học | Ví dụ |
|---|---|---|
| Cùng hướng hoàn toàn |
|
| Vuông góc nhau |
|
| Ngược chiều nhau |
|
Tính thử: Cho A = (1, 2) và B = (2, 4):
A · B = 1×2 + 2×4 = 10
|A| = √(1² + 2²) = √5
|B| = √(2² + 4²) = √20
cosine_sim = 10 / (√5 × √20) = 10 / 10 = 1.0Kết quả 1.0 dù B dài gấp đôi A — vì chúng cùng hướng.
Cosine similarity đo hướng, không đo độ dài.
4. Euclidean hay Cosine — khi nào dùng cái nào?
Xét hai vector trong mặt phẳng:

Euclidean distance:
AvàBcách nhau khá xa vìAcó độ dài lớn hơnCosine similarity: gần
1.0vì chúng cùng hướng
Khi làm việc với văn bản, một câu ngắn và một đoạn dài về cùng chủ đề không nên bị coi là "xa nhau" chỉ vì độ dài khác nhau. Cosine similarity xử lý tốt điều này — đó là lý do nó được dùng phổ biến hơn trong vector search ngữ nghĩa.
5. Mở rộng lên N chiều
Cho đến đây, mọi thứ đều trong không gian 2D — vẽ được, nhìn thấy được. Bước tiếp theo chỉ là tăng số chiều lên.
# 2 chiều — vẽ được
vector = (3, 4)
# 3 chiều — còn vẽ được
vector = (1, 2, 3)
# N chiều — không vẽ được, nhưng toán giống hệt
vector = (0.023, -0.847, 0.412, 0.091, ..., -0.334)
# chiều 1 chiều 2 chiều 3 chiều 4 ... chiều NEuclidean distance và cosine similarity đều áp dụng nguyên xi — chỉ có thêm nhiều số hạng hơn trong phép tính. Không gian N chiều không thể vẽ được, nhưng toán học vận hành hoàn toàn giống.
6. Văn bản trở thành vector như thế nào
Một embedding model — mạng neural được train trên hàng tỷ câu văn — nhận vào một đoạn text và trả về vector N chiều:
"con mèo thích ngủ" → [0.023, -0.847, 0.412, ..., -0.334] ← N số
"chú mèo hay nằm" → [0.021, -0.831, 0.408, ..., -0.341] ← N số
"deploy lên EC2" → [0.891, 0.234, -0.671, ..., 0.512] ← N sốModel học được: những câu xuất hiện trong cùng ngữ cảnh thì nên có vector gần nhau. Không ai định nghĩa thủ công từng chiều — chúng tự hình thành qua quá trình train.
Kết quả:
cosine_sim("con mèo thích ngủ", "chú mèo hay nằm") ≈ 0.94 ← gần
cosine_sim("con mèo thích ngủ", "deploy lên EC2") ≈ 0.07 ← xa7. Không gian ngữ nghĩa
Khi embed toàn bộ một bộ tài liệu, mỗi đoạn văn trở thành một điểm trong không gian N chiều. Các đoạn có ý nghĩa liên quan tự nhiên nằm gần nhau — hệt như các điểm gần nhau trên mặt phẳng 2D:

8. Vector search — tìm kiếm bằng khoảng cách
Câu hỏi của người dùng cũng được embed thành vector bằng cùng model, rồi đặt vào cùng không gian đó. Việc còn lại là tìm các tài liệu có vector gần nhất với vector câu hỏi — đúng bài toán khoảng cách, chỉ trong N chiều.
Câu hỏi: "tối nay ăn gì ngon mà không phải nấu"
→ vector_query = [0.18, 0.29, ...]
Tính cosine similarity với toàn bộ DB:
"quán bún bò mở cửa đến 11 giờ đêm" → 0.89 ← top 1
"gọi đồ ăn về thì nên order chỗ nào" → 0.83 ← top 2
"deploy lên EC2" → 0.05
"cách train mô hình embedding" → 0.03
→ Trả về top 2: ["quán bún bò mở cửa đến 11 giờ đêm", "gọi đồ ăn về thì nên order chỗ nào"]Không có từ "ăn ngon" hay "không nấu" nào xuất hiện trong tài liệu — nhưng vector của chúng cùng hướng trong không gian ngữ nghĩa nên vẫn được tìm thấy.
9. Phép toán vector giữ nguyên ý nghĩa
Vì vector chỉ là con số, phép cộng trừ bình thường vẫn chạy được — và đôi khi cho ra kết quả có ý nghĩa đáng ngạc nhiên:
embed("Paris") − embed("Pháp") + embed("Nhật Bản") ≈ embed("Tokyo")
embed("bác sĩ") − embed("bệnh viện") + embed("tòa án") ≈ embed("luật sư")Không ai lập trình điều này. Model chỉ được train để đoán từ xuất hiện cùng ngữ cảnh — nhưng sau khi train xong, không gian vector tự hình thành các cấu trúc như vậy. Phép cộng trừ trên số thực tình cờ khớp với phép suy luận tương tự trong ngôn ngữ.
Đây là một quan sát thú vị, nhưng không phải quy tắc — không phải lúc nào cũng hoạt động, và không ai biết chính xác tại sao nó lại đúng trong nhiều trường hợp.
Tóm tắt
Vector search về bản chất là bài toán hình học: chuyển mọi thứ thành tọa độ, rồi đo khoảng cách.
Hỏi "cà phê ngon ở đâu gần đây?" — hệ thống không đi tìm trang nào có chữ "cà phê ngon", mà đặt câu hỏi đó vào không gian ngữ nghĩa và tìm những tài liệu có vector gần nhất. Kết quả có thể là một bài review quán cóc góc phố không có từ "cà phê" nào — nhưng vector của nó lại nằm sát bên vector câu hỏi của bạn.
Vector search nghe có vẻ phức tạp — nhưng bên dưới tất cả những lớp công nghệ đó, vẫn chỉ đang hỏi: hai thứ này có gần nhau không? Câu hỏi đó không mới. Chỉ là lần này không gian để hỏi rộng hơn một chút — N chiều, thay vì tờ giấy kẻ ô ngày xưa.
