Tách từ tiếng Việt là bài toán xác định ranh giới giữa các từ trong một chuỗi văn bản. Khó khăn nằm ở chỗ khoảng trắng trong tiếng Việt thường phân cách các âm tiết, nhưng một từ hoàn chỉnh có thể gồm nhiều âm tiết như “sinh viên”, “đại học”, “công nghệ” hay “tự nhiên”.
Tách từ đúng giúp các hệ thống NLP dựa trên từ biểu diễn văn bản hợp lý hơn, đặc biệt trong tìm kiếm, TF-IDF, phân loại văn bản, gán nhãn từ loại và một số mô hình ngôn ngữ tiếng Việt. Tuy nhiên, với các Transformer sử dụng tokenizer dưới mức từ như subword hoặc SentencePiece, tách từ thủ công không phải lúc nào cũng là bước bắt buộc. Việc có cần tách từ trước hay không phụ thuộc vào mô hình và pipeline cụ thể.
- Khoảng trắng trong tiếng Việt không phải lúc nào cũng là ranh giới từ; nhiều từ gồm hai hoặc nhiều âm tiết.
- Word segmentation và tokenization có liên quan nhưng không hoàn toàn đồng nghĩa.
- Ba hướng chính gồm dựa trên từ điển, mô hình thống kê và mô hình học sâu.
- Trong thực tế có thể sử dụng Underthesea, VnCoreNLP hoặc PyVi, nhưng cách tiền xử lý phải phù hợp với mô hình phía sau.
Tách từ tiếng Việt thực sự là bài toán gì?
Tiếng Việt thường được xếp vào nhóm ngôn ngữ đơn lập hoặc thiên về phân tích. Vì vậy, không nên mô tả tiếng Việt là một ngôn ngữ chắp dính. Đặc điểm quan trọng đối với bài toán tách từ là một từ tiếng Việt có thể gồm một hoặc nhiều âm tiết, trong khi các âm tiết thường được viết cách nhau bằng khoảng trắng.
Ví dụ, câu:
Nếu chỉ dùng hàm chia theo khoảng trắng, ta nhận được các đơn vị “sinh”, “viên”, “nghiên”, “cứu”, “xử”, “lý”... Tuy nhiên, ở cấp độ từ, cách biểu diễn hợp lý hơn có thể là:
Dấu gạch dưới ở đây không phải một phần của cách viết tiếng Việt. Nó chỉ là quy ước thường được dùng trong dữ liệu NLP để biểu diễn rằng nhiều âm tiết thuộc cùng một từ.
Word segmentation khác tokenization như thế nào?
Hai thuật ngữ này thường bị dùng thay thế cho nhau nhưng về kỹ thuật không hoàn toàn giống nhau. Tách từ (word segmentation) tập trung vào việc xác định ranh giới từ. Tokenization là khái niệm rộng hơn: nó biến văn bản thành các token mà mô hình sẽ xử lý.
![]() |
| Quy trình Word Segmentation trong xử lý ngôn ngữ tự nhiên (NLP) |
Token có thể là từ, âm tiết, ký tự hoặc các đơn vị dưới mức từ. Vì vậy một tokenizer hiện đại không nhất thiết phải tạo ra token tương ứng với từ hoàn chỉnh.
| Khái niệm | Mục tiêu | Đơn vị đầu ra |
|---|---|---|
| Word segmentation | Xác định ranh giới từ | Từ |
| Whitespace splitting | Chia theo khoảng trắng | Thường gần với âm tiết trong tiếng Việt |
| Subword tokenization | Chia văn bản thành đơn vị phù hợp với vocabulary của mô hình | Subword |
Vì sao tách từ tiếng Việt khó hơn split theo khoảng trắng?
Nếu mỗi khoảng trắng luôn là ranh giới từ thì bài toán có thể giải quyết bằng một dòng code. Trong tiếng Việt, vấn đề phức tạp hơn vì ranh giới âm tiết và ranh giới từ không trùng nhau hoàn toàn.
Một từ có thể gồm nhiều âm tiết
Các chuỗi như “sinh viên”, “máy tính”, “học máy” hay “trí tuệ” đều chứa khoảng trắng nhưng có thể được xử lý như một từ trong các hệ thống tách từ.
Nếu một mô hình dựa trên từ coi “học” và “máy” là hai đơn vị độc lập thay vì “học_máy”, thống kê tần suất và biểu diễn đặc trưng của văn bản có thể thay đổi đáng kể.
Ranh giới từ phụ thuộc vào ngữ cảnh
Một chuỗi âm tiết đôi khi có thể được phân tích theo nhiều cách. Ví dụ, xét hai câu:
Trong câu thứ nhất, “bàn là” có thể được xem là một từ chỉ dụng cụ dùng để là quần áo. Trong câu thứ hai, “bàn” và “là” thuộc hai đơn vị khác nhau. Chỉ nhìn vào hai âm tiết “bàn là” là chưa đủ; hệ thống cần sử dụng ngữ cảnh xung quanh.
Từ mới, tên riêng và ngôn ngữ mạng xã hội
Từ vựng thay đổi liên tục. Văn bản thực tế có thể chứa tên sản phẩm, tên người, tên tổ chức, thuật ngữ chuyên ngành, từ viết tắt, từ mượn, hashtag hoặc cách viết không chuẩn.
Một hệ thống chỉ dựa vào từ điển cố định dễ gặp các chuỗi chưa từng có trong vocabulary. Đây là một trong những lý do các mô hình học từ dữ liệu và mô hình ngữ cảnh thường linh hoạt hơn các luật từ điển thuần túy.
Ba hướng chính để tách từ tiếng Việt
1. Phương pháp dựa trên từ điển
Phương pháp dựa trên từ điển sử dụng một tập từ đã biết và tìm cách ghép các âm tiết thành những từ có trong từ điển. Một thuật toán đơn giản là Maximum Matching: tại mỗi vị trí, ưu tiên chuỗi dài nhất xuất hiện trong từ điển.
Ví dụ, giả sử từ điển chứa:
Với câu “sinh viên nghiên cứu học máy”, thuật toán có thể thử ghép nhiều âm tiết liên tiếp và chọn chuỗi dài nhất tồn tại trong từ điển.
dictionary = {
"sinh viên",
"nghiên cứu",
"học máy"
}
def maximum_matching(text, dictionary, max_len=3):
syllables = text.split()
result = []
i = 0
while i < len(syllables):
matched = None
for size in range(
min(max_len, len(syllables) - i),
0,
-1
):
candidate = " ".join(syllables[i:i + size])
if candidate in dictionary:
matched = candidate
break
if matched is None:
matched = syllables[i]
result.append(matched.replace(" ", "_"))
i += len(matched.split())
return result
text = "sinh viên nghiên cứu học máy"
print(maximum_matching(text, dictionary))
Với từ điển trên, kết quả là các đơn vị sinh_viên, nghiên_cứu và học_máy. Ví dụ cho thấy nguyên lý của Maximum Matching nhưng cũng bộc lộ hạn chế lớn: hệ thống chỉ nhận ra những từ mà từ điển đã biết và khó giải quyết trường hợp nhập nhằng cần ngữ cảnh.
2. Phương pháp thống kê và gán nhãn chuỗi
Một cách tổng quát hơn là biến tách từ thành bài toán gán nhãn chuỗi. Thay vì cố gắng tìm từ trực tiếp, mô hình xác định vai trò của từng âm tiết trong cấu trúc từ.
Ví dụ, một hệ thống có thể sử dụng bộ nhãn B-M-E-S:
- B — Begin: âm tiết bắt đầu một từ nhiều âm tiết.
- M — Middle: âm tiết nằm giữa từ.
- E — End: âm tiết kết thúc từ.
- S — Single: một từ chỉ gồm một âm tiết.
Ví dụ với chuỗi “sinh viên học máy”:
| sinh | viên | học | máy |
| B | E | B | E |
Các mô hình như Conditional Random Fields (CRF) có thể học xác suất của chuỗi nhãn dựa trên đặc trưng của các âm tiết và ngữ cảnh xung quanh. Ưu điểm quan trọng của CRF là không chỉ dự đoán từng nhãn riêng lẻ mà còn mô hình hóa quan hệ giữa các nhãn liên tiếp.
3. Học sâu và mô hình ngữ cảnh
Các mô hình học sâu có thể học biểu diễn của âm tiết hoặc ký tự trực tiếp từ dữ liệu. BiLSTM, BiLSTM-CRF và các kiến trúc Transformer có khả năng khai thác ngữ cảnh rộng hơn so với phương pháp chỉ dựa vào từ điển.
Một pipeline gán nhãn chuỗi có thể được hình dung như sau:
Chuỗi âm tiết
BiLSTM / Transformer
B / M / E / S
Các từ đã tách
Ưu điểm của cách tiếp cận dựa trên ngữ cảnh là mô hình có thể đưa ra quyết định khác nhau cho cùng một chuỗi âm tiết nếu phần còn lại của câu thay đổi. Đây là điều các luật Maximum Matching đơn giản khó thực hiện.
Tách từ có còn cần thiết khi dùng Transformer?
Đây là điểm dễ gây nhầm lẫn nhất khi xây dựng hệ thống NLP hiện đại. Transformer không đồng nghĩa với việc luôn phải tách từ trước, cũng không có nghĩa tách từ đã trở nên vô ích.
Nhiều mô hình sử dụng subword tokenizer. Tokenizer này có thể tiếp tục chia một chuỗi thành các đơn vị nhỏ hơn từ dựa trên vocabulary đã học. Vì vậy, đầu vào cuối cùng của mô hình không nhất thiết tương ứng với các từ ngôn ngữ học.
Đối với các pipeline cổ điển như Bag-of-Words, TF-IDF hoặc các hệ thống tìm kiếm lexical dựa mạnh vào từ, word segmentation thường có ảnh hưởng trực tiếp tới vocabulary và thống kê tần suất.
Với embedding model hoặc hệ thống RAG dùng Transformer, word segmentation không mặc định là bước bắt buộc. Embedding model thường có tokenizer riêng. Tuy nhiên, nếu hệ thống kết hợp BM25, keyword extraction hoặc các đặc trưng cấp từ, tách từ vẫn có thể là một phần quan trọng của pipeline.
| Pipeline | Tách từ trước? | Lý do |
|---|---|---|
| TF-IDF / Bag-of-Words | Thường hữu ích | Feature phụ thuộc trực tiếp vào đơn vị token |
| BM25 tiếng Việt | Thường nên xem xét | Thống kê term frequency phụ thuộc vào cách xác định term |
| Transformer | Phụ thuộc mô hình | Cần theo đúng tokenizer và preprocessing của pretrained model |
| RAG dùng dense embedding | Không mặc định bắt buộc | Embedding model thường có tokenizer riêng |
| RAG hybrid BM25 + dense | Có thể quan trọng | Nhánh lexical chịu ảnh hưởng của word segmentation |
Thực hành tách từ tiếng Việt bằng Python
Trong ứng dụng thực tế, thông thường không cần tự huấn luyện một word segmenter từ đầu. Các thư viện tiếng Việt đã cung cấp sẵn giao diện để xử lý văn bản.
Underthesea
Underthesea cung cấp hàm word_tokenize và có thể trả kết quả dưới dạng danh sách từ hoặc dạng văn bản, trong đó các âm tiết thuộc cùng một từ được nối bằng dấu gạch dưới.
from underthesea import word_tokenize
text = "Sinh viên nghiên cứu xử lý ngôn ngữ tự nhiên."
tokens = word_tokenize(text)
segmented_text = word_tokenize(text, format="text")
print(tokens)
print(segmented_text)
Biến tokens chứa các đơn vị từ mà bộ tách nhận diện. Với format="text", các âm tiết thuộc cùng một từ được nối lại để thuận tiện cho những pipeline cần văn bản đã word-segment.
VnCoreNLP
VnCoreNLP là một bộ công cụ NLP tiếng Việt cung cấp nhiều tác vụ như word segmentation, gán nhãn từ loại, nhận dạng thực thể và phân tích cú pháp. Đây là lựa chọn thường gặp khi cần một pipeline ngôn ngữ học gồm nhiều bước thay vì chỉ tách từ.
PyVi
PyVi cung cấp giao diện tương đối đơn giản cho một số tác vụ xử lý tiếng Việt, trong đó có word segmentation. Với những dự án nhỏ hoặc pipeline cần tích hợp nhanh, đây cũng là một lựa chọn có thể thử nghiệm.
Cách đánh giá và sử dụng word segmentation đúng trong pipeline NLP
Một bộ tách từ không nên chỉ được đánh giá bằng vài câu ví dụ. Nếu có tập dữ liệu gán nhãn chuẩn, có thể xem các ranh giới từ hoặc các token dự đoán như những đối tượng cần so sánh với ground truth.
Các chỉ số Precision, Recall và F1 có thể được tính ở mức từ hoặc ranh giới tùy cách thiết kế bộ đánh giá:
Trong đó Correct là số đơn vị được dự đoán đúng theo tiêu chuẩn đánh giá, Predicted là số đơn vị hệ thống sinh ra và Gold là số đơn vị trong dữ liệu chuẩn.
Tuy nhiên, chất lượng word segmentation cuối cùng nên được xem cùng với tác vụ downstream. Hai bộ tách từ có F1 gần nhau vẫn có thể tạo ra kết quả khác nhau đối với tìm kiếm, sentiment analysis hoặc NER nếu chúng thường sai ở những loại từ khác nhau.
Văn bản thô → chuẩn hóa → tách từ nếu cần → tokenizer của mô hình → mô hình downstream → đánh giá cuối cùng.
Cũng cần tránh tiền xử lý quá mức. Việc xóa dấu câu, viết thường toàn bộ, bỏ stopword hoặc tách từ trước khi đưa vào Transformer không phải lúc nào cũng giúp mô hình. Mỗi bước biến đổi đều có khả năng làm mất thông tin và chỉ nên được sử dụng khi phù hợp với thuật toán phía sau.
Kết luận
Tách từ tiếng Việt không phải là thao tác chia câu theo khoảng trắng mà là bài toán xác định những âm tiết nào cấu thành cùng một từ. Các phương pháp có thể đi từ Maximum Matching dựa trên từ điển đến CRF, BiLSTM và Transformer sử dụng ngữ cảnh để xử lý các trường hợp nhập nhằng.
Quan trọng hơn, word segmentation không phải bước bắt buộc cho mọi hệ thống NLP hiện đại. Với mô hình cấp từ hoặc truy hồi lexical, nó có thể rất quan trọng; với Transformer và dense embedding, cần tuân theo tokenizer và quy trình tiền xử lý của chính mô hình. Hiểu rõ sự khác nhau giữa âm tiết, từ, token và subword giúp thiết kế pipeline tiếng Việt chính xác hơn thay vì áp dụng một bước tách từ cho mọi bài toán.
Nội dung gốc thuộc tác giả. Vui lòng không đăng lại toàn văn khi chưa được phép, trừ trường hợp pháp luật hoặc giấy phép áp dụng cho phép. Nội dung của bên thứ ba tuân theo quyền và giấy phép tương ứng.
Nguồn gốc: Tách từ trong tiếng Việt Word Segmentation
