1. Motivation
→ Chuyển từ sang vector số. Tại sao phải là vector:
- So sánh mức độ tương đồng giữa các từ (similarity)
- Mở rộng phân tích từ ngữ không chỉ theo nghĩa tuyệt đối (synonym/antonym), mà theo ngữ cảnh sử dụng
- Giải quyết bài toán xử lý ngôn ngữ tự nhiên (NLP): dịch máy, chatbot, phân loại cảm xúc,…
Word similarity
“Mèo” và “chó” không đồng nghĩa, nhưng cả hai cùng được nuôi, cùng đáng yêu → có mức độ tương đồng về ngữ nghĩa
Đồng nghĩa (Synonymy) và Tương đồng ngữ nghĩa (Similarity)
| Loại quan hệ | Ví dụ | Giải thích |
| 🟢 Đồng nghĩa (Synonym) | achieve – accomplish (8.57) | Gần như thay thế được cho nhau |
| 🔴 Trái nghĩa (Antonym) | accept – reject (0.83) | Trái ngược về nghĩa |
| 🔵 Tương đồng (Similarity) | water – ice (6.47) | Không giống nhau hoàn toàn, nhưng liên hệ chặt về mặt ý nghĩa (cùng là trạng thái của nước) |
| → Những mối quan hệ này được chấm điểm trên thang điểm 0–10 trong tập dữ liệu SimLex-999 | ||
| https://fh295.github.io/simlex.html | ||
| Việc đánh giá sự tương đồng ngữ nghĩa sẽ đơn giản hơn so với việc phải xác định rõ từ đó là đồng nghĩa hay trái nghĩa (word sense disambiguation). | ||
| → Giúp giảm độ phức tạp của bài toán NLP |
The meaning of a word
Hiểu từ ngữ không chỉ qua mặt chữ, mà qua ngữ cảnh sử dụng Ví dụ 1: Từ “xà pô chê” là một từ khó với nhiều người Việt – ít người biết từ này. Để dễ đoán hơn ta thử thêm ngữ cảnh: là loại quả mọng, màu nâu, hình cầu hoặc hình quả trứng, đường kính 4-8 cm và chứa từ 2-10 hạt. Khi còn xanh quá có vị chát, khi chín vị tương tự đường đen. 🧠 Điều này cho thấy:
- Người học (và cả máy tính) không thể hiểu ý nghĩa của một từ chỉ qua bề ngoài của từ đó.
- Phải có mô tả, ngữ cảnh, hình ảnh hoặc mối liên kết với các từ khác → embedding vector phải học từ ngữ cảnh.
Vậy việc biểu diễn từ thành vector giúp:
- Các từ có ngữ nghĩa gần giống nhau sẽ có vector gần nhau
- Từ ít gặp cũng có thể hiểu được nếu ngữ cảnh đủ rõ → Ví dụ: Nếu máy học từ “xà pô chê” xuất hiện gần các từ như “quả mọng”, “ngọt”, “nhiệt đới” → vector sẽ nằm gần các từ như “măng cụt”, “vải”, “chôm chôm”
Semantic vector (Vector ngữ nghĩa)
Mỗi từ được ánh xạ thành một vector số (vector ngữ nghĩa)
→ Ví dụ: từ “are” =
[10, 3]Hình ảnh mô tả không gian 2 chiều (2D) đơn giản hóa – nhưng trong thực tế, vector embedding có thể có hàng trăm chiều (100D, 300D, 768D,…)
. Embeddings
Embeddings là tập hợp các vector ngữ nghĩa.
Embeddings học được từ bài toán phân loại (Classification)
→ Các từ nằm gần nhau là những từ có ngữ nghĩa hoặc cách dùng tương đồng
-
Ví dụ trong hình:
- Nhóm tiêu cực:
bad,terrible,sucks,so bad,worst - Nhóm tích cực:
amazing,fantastic,wonderful,very good - Nhóm ngữ pháp chức năng:
are,is,that,thanCâu hỏi:
- Nhóm tiêu cực:
-
Tại sao cần biểu diễn từ thành vector số thay vì dùng chữ luôn?
→ Máy tính không hiểu chữ cái như con người. Với nó, “good” chỉ là một dãy ký tự
g-o-o-dkhông có ý nghĩa.Nhưng nếu ta chuyển từ đó thành dãy số (vector), máy có thể:
- So sánh khoảng cách giữa các từ
- Nhận ra từ nào gần nghĩa, từ nào trái nghĩa
- Tìm được ngữ cảnh phù hợp (VD: “good job” vs “good morning”)
-
Nếu “sucks” và “terrible” nằm gần nhau, điều gì máy đã học được?
→ Máy đã học được rằng:
- Hai từ này thường xuất hiện trong ngữ cảnh giống nhau (VD: review phim dở, đồ ăn tệ, trải nghiệm xấu)
- Chúng đều mang nghĩa tiêu cực
-
Trong thực tế, từ “good” có thể có bao nhiêu chiều? Việc tăng số chiều giúp ích gì?
→ Tùy!
- Từ “good” có thể có 50, 100, 300 hoặc 768 chiều, tuỳ vào mô hình bạn dùng (Word2Vec, GloVe, BERT,…).
- Tăng số chiều giúp biểu diễn từ chính xác hơn, nhưng cũng khiến mô hình nặng hơn, dễ bị quá khớp (overfitting) nếu không đủ dữ liệu.
| Mô hình | Số chiều (dimensions) |
| Word2Vec | 50 – 300 |
| GloVe | 100 – 300 |
| fastText | 100 – 300 |
| BERT | 768 |
| GPT / LLM | 768 – 4096 |
| Lợi ích khi tăng số chiều: |
- Từ được hiểu rõ hơn: Phân biệt được nhiều ngữ cảnh khác nhau của từ “good”
- Mối quan hệ ngữ nghĩa rõ: “good” gần “great” nhưng xa “bad” và hơi xa “awesome”
- Học được sắc thái ngôn ngữ: “Good job” ≠ “Good luck” ≠ “Good grief” Tuy nhiên khi tăng quá nhiều chiều:
- Dữ liệu ít + chiều cao → mô hình dễ overfit
- Mô hình càng nhiều chiều → cần nhiều tài nguyên tính toán hơn
Embedding Types:
TF-IDF
✍️ Ví dụ:
Từ “eat” có vector: 📌 Đặc điểm:
- Vector thưa (Sparse Vector): rất nhiều giá trị bằng 0
- Chiều dài vector = số lượng từ trong từ điển, có thể là 10.000 hoặc 100.000+
- Không học được ngữ nghĩa, chỉ dựa trên tần suất từ xuất hiện
- Không có khả năng tổng quát hoá ngữ nghĩa (semantic generalization)
- ✅ Dễ tính, phù hợp cho baseline hoặc mô hình đơn giản
Word2Vec Embedding
✍️ Ví dụ:
Từ “eat” có vector: 📌 Đặc điểm:
- Vector đầy đủ (Dense Vector): mọi giá trị ≠ 0
- Chiều dài cố định, ví dụ 100, 300, 512 (do ta định nghĩa)
- Học ngữ nghĩa qua ngữ cảnh: nếu từ “eat” thường đi với “food”, “rice”, “hungry” → các vector này sẽ nằm gần nhau
- Được huấn luyện qua bài toán dự đoán từ trong ngữ cảnh (context window)
- ✅ Ứng dụng rất rộng trong NLP hiện đại (chatbot, dịch máy, phân tích cảm xúc,…) Cơ chế hoạt động: Có 2 cách huấn luyện phổ biến trong Word2Vec:
- CBOW (Continuous Bag of Words): Đoán từ trung tâm dựa vào các từ xung quanh
- Skip-gram: Đoán các từ xung quanh từ từ trung tâm
Hai phương pháp này sẽ được đề cập sau.
So sánh tổng hợp
| Thuộc tính | TF-IDF | Word2Vec |
| Dạng vector | Thưa (nhiều số 0) | Đầy đủ (dense) |
| Cơ chế tạo vector | Đếm số lần xuất hiện từ | Học từ ngữ cảnh xung quanh |
| Hiểu được ngữ nghĩa? | ❌ | ✅ |
| Dễ triển khai? | ✅ (baseline) | Cần huấn luyện |
| Tính mở rộng ngữ nghĩa | Kém | Tốt |
Term-document matrix
Term-Document Matrix là ma trận thể hiện số lần mỗi từ (term) xuất hiện trong mỗi tài liệu (document). Có nhiều cách đếm từ khác nhau, ảnh hưởng đến kết quả cuối cùng khi áp dụng trong tìm kiếm, phân cụm, hoặc phân loại văn bản. Các cách đếm từ:
Các mô hình Embedding khác
bkai-foundation-models/vietnamese-bi-encoder
1. Sentence Transformers (Phổ biến nhất)
-
**sentence-transformers/all-MiniLM-L6-v2**→ Nhẹ, đa ngôn ngữ, chạy tốt trên CPU. Dùng cho cả tiếng Anh, Việt (ổn nhưng không tối ưu cho tiếng Việt).
-
**sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2**→ Hỗ trợ đa ngôn ngữ (trong đó có tiếng Việt), dùng được cho search, semantic similarity.
2. OpenAI Embeddings (API, không free)
-
**text-embedding-ada-002**→ Chất lượng rất cao, tối ưu RAG, tốc độ nhanh, nhưng phải trả tiền, không chạy local.
3. Việt hoá/Local hóa
-
**bkai-foundation-models/vietnamese-bi-encoder**→ Đã đề cập ở trên, tối ưu tiếng Việt.
-
**nguyenvulebinh/vi-multi-task-sentence-transformer**→ Tối ưu cho ngôn ngữ tiếng Việt, dùng tốt cho semantic search.
4. Mô hình lớn, mạnh (nhưng nặng)
-
**BAAI/bge-base-en**hoặc**BAAI/bge-base-vi**→ Chất lượng embedding rất cao, dùng nhiều cho search, rerank. Có bản Việt hóa và đa ngôn ngữ.
-
**intfloat/e5-large-v2**→ Đỉnh cao cho semantic search nhưng khá nặng.
5. Mô hình open-source khác
-
**multi-qa-MiniLM-L6-cos-v1**→ Dùng nhiều cho QA hệ thống, open-source, nhẹ.
-
**distiluse-base-multilingual-cased-v1**→ Hỗ trợ nhiều ngôn ngữ, nhẹ, phổ biến.