- TF-IDF đo mức độ quan trọng của một từ đối với một tài liệu dựa trên hai tín hiệu: từ đó xuất hiện nhiều đến đâu trong tài liệu và hiếm đến đâu trong toàn bộ tập tài liệu.
- Một từ có TF cao nhưng xuất hiện ở gần như mọi tài liệu thường không có nhiều khả năng phân biệt; IDF được dùng để giảm trọng số của những từ như vậy.
- Sau khi tính TF-IDF, mỗi tài liệu có thể được biểu diễn thành một vector số để phục vụ tìm kiếm, đo độ tương đồng và các mô hình Machine Learning cổ điển.
- TF-IDF đơn giản, nhanh và dễ giải thích, nhưng không thực sự hiểu ngữ nghĩa, thứ tự từ hay quan hệ ngữ cảnh.
TF-IDF, viết tắt của Term Frequency–Inverse Document Frequency, là một kỹ thuật gán trọng số cho từ dựa trên mức độ quan trọng của từ đó trong một tài liệu so với toàn bộ tập tài liệu. Đây là một trong những biểu diễn văn bản cổ điển quan trọng nhất trong xử lý ngôn ngữ tự nhiên và truy hồi thông tin.
Điểm cốt lõi rất trực quan: một từ đáng chú ý khi nó xuất hiện nhiều trong tài liệu đang xét nhưng lại không xuất hiện tràn lan ở mọi tài liệu khác. TF-IDF biến trực giác đó thành một giá trị số có thể đưa trực tiếp vào thuật toán tìm kiếm, phân loại hoặc đo độ tương đồng.
1. TF-IDF thực sự đang đo điều gì?
Giả sử có một tập gồm hàng nghìn bài viết về công nghệ. Những từ như “và”, “của”, “có” hay thậm chí “công nghệ” có thể xuất hiện trong rất nhiều tài liệu. Việc một tài liệu chứa những từ đó chưa cung cấp nhiều thông tin để phân biệt nó với các tài liệu còn lại.
Ngược lại, nếu một bài viết lặp lại nhiều lần cụm “mạng_nơ_ron” trong khi cụm này chỉ xuất hiện ở một phần nhỏ của tập dữ liệu, “mạng_nơ_ron” có khả năng mô tả nội dung tài liệu tốt hơn. TF-IDF được xây dựng chính để biểu diễn sự khác biệt này bằng trọng số.
Ý tưởng về việc sử dụng tần suất trên toàn bộ collection để đánh giá tính đặc trưng của thuật ngữ được phát triển từ các nghiên cứu nền tảng của Karen Spärck Jones về term specificity. Một thuật ngữ xuất hiện trong ít tài liệu hơn thường có khả năng phân biệt tài liệu tốt hơn một thuật ngữ xuất hiện gần như khắp nơi [1].
![]() |
| Hình 1. Mô tả phương pháp TF-IDF |
TF trả lời: “Từ này quan trọng đến mức nào bên trong tài liệu hiện tại?” IDF trả lời: “Từ này hiếm đến mức nào trên toàn bộ tập tài liệu?” TF-IDF kết hợp cả hai.
TF-IDF vì thế không phải là xác suất, cũng không phải một phép đo trực tiếp về “ý nghĩa” của từ. Nó là một trọng số thống kê được xây dựng từ phân bố xuất hiện của từ trong corpus.
2. Hai thành phần TF và IDF
Term Frequency: tần suất từ trong tài liệu
Với một thuật ngữ t và tài liệu d, cách đơn giản nhất để tính tần suất thuật ngữ (Term Frequency – TF) là đếm số lần thuật ngữ xuất hiện:
Trong đó f(t,d) là số lần từ t xuất hiện trong tài liệu d. Nếu “transformer” xuất hiện 5 lần thì TF thô của từ này bằng 5.
Một biến thể khác chia số lần xuất hiện cho tổng số term trong tài liệu:
Ngoài hai dạng này còn có log-TF và một số dạng chuẩn hóa khác. Vì vậy, cần nhớ rằng TF-IDF không chỉ có duy nhất một công thức triển khai. Những thư viện khác nhau có thể sử dụng smoothing, cộng hằng số hoặc chuẩn hóa vector khác nhau.
Inverse Document Frequency: giảm trọng số từ quá phổ biến
Gọi N là tổng số tài liệu trong corpus và df(t) là số tài liệu có chứa term t. Một công thức IDF cổ điển là:
Nếu một từ xuất hiện trong tất cả tài liệu, df(t)=N, nên IDF bằng log(1)=0. Từ đó gần như không đóng góp vào biểu diễn TF-IDF theo công thức cổ điển. Ngược lại, term chỉ xuất hiện trong một số ít tài liệu sẽ có IDF lớn hơn.
Cơ số log có thể là e, 10 hoặc 2 tùy cách triển khai. Nếu sử dụng cùng một cơ số nhất quán, việc đổi cơ số chủ yếu thay đổi thang đo của trọng số chứ không thay đổi trực giác cốt lõi.
Kết hợp thành TF-IDF
Trọng số chỉ lớn khi term vừa có vai trò đáng kể trong tài liệu hiện tại, vừa đủ hiếm trong corpus. Đây là nguyên tắc trung tâm của nhiều mô hình trọng số thuật ngữ trong truy hồi thông tin cổ điển. Salton và Buckley cũng chỉ ra rằng lựa chọn cơ chế term weighting có ảnh hưởng trực tiếp tới chất lượng biểu diễn và truy hồi văn bản [1].
3. Ví dụ tính TF-IDF
Xét một corpus rất nhỏ gồm ba tài liệu đã được token hóa. Dấu gạch dưới biểu diễn những từ tiếng Việt nhiều âm tiết đã được ghép thành một token:
D₁: học_máy xử_lý dữ_liệu
D₂: học_máy phân_loại văn_bản
D₃: xử_lý ngôn_ngữ_tự_nhiên
Ta có N = 3. Xét ba term trong D₁: học_máy, xử_lý và dữ_liệu.
| Term | df(t) | IDF = ln(3/df) | TF trong D₁ | TF-IDF trong D₁ |
|---|---|---|---|---|
| học_máy | 2 | 0.405 | 1 | 0.405 |
| xử_lý | 2 | 0.405 | 1 | 0.405 |
| dữ_liệu | 1 | 1.099 | 1 | 1.099 |
Term dữ_liệu chỉ xuất hiện trong D₁ nên có IDF cao nhất. Trong khi đó, học_máy xuất hiện ở D₁ và D₂, còn xử_lý xuất hiện ở D₁ và D₃, nên hai term này ít đặc trưng cho D₁ hơn.
Đây chính là khác biệt quan trọng giữa TF và TF-IDF. Nếu chỉ dùng TF, ba term trong D₁ đều có trọng số bằng 1. Sau khi xét thêm toàn bộ corpus, TF-IDF cho biết “dữ_liệu” mang nhiều khả năng phân biệt D₁ hơn.
Khoảng trắng trong tiếng Việt thường phân tách âm tiết chứ không luôn tương ứng với ranh giới từ. Với dữ liệu thực tế, bước tách từ có thể ảnh hưởng mạnh đến vocabulary và ma trận TF-IDF. Ví dụ “học máy” có thể cần được biểu diễn như một đơn vị học_máy thay vì hai term độc lập.
4. Từ văn bản đến vector TF-IDF
Sau khi xác định vocabulary gồm m term, mỗi tài liệu được biểu diễn bằng một vector m chiều. Mỗi chiều tương ứng với một term và giá trị tại chiều đó là trọng số TF-IDF của term trong tài liệu.
Nếu vocabulary có 20.000 term thì mỗi tài liệu về mặt khái niệm là một vector 20.000 chiều. Tuy nhiên, một tài liệu chỉ sử dụng một phần rất nhỏ vocabulary nên phần lớn phần tử bằng 0. Vì vậy TF-IDF thường được lưu dưới dạng ma trận thưa thay vì ma trận dense thông thường.
Cách nhìn vector này gắn chặt với mô hình không gian vector (Vector Space Model), trong đó tài liệu và truy vấn được biểu diễn bằng các vector trọng số và có thể được so sánh bằng các phép đo như cosine similarity. Công trình kinh điển của Salton, Wong và Yang là một trong những nền tảng của hướng biểu diễn này [2].
Hình 2. Ví dụ một ma trận term–document sử dụng trọng số TF-IDF và bước biểu diễn tiếp theo trong LSI. Nguồn: Chen et al., Frontiers in Physiology, 2013, Figure 1 [5].
Khi cần tìm tài liệu giống một truy vấn, một cách cơ bản là biến cả truy vấn và tài liệu thành các vector TF-IDF rồi tính cosine similarity:
Cosine similarity tập trung vào hướng của vector thay vì độ dài tuyệt đối, nhờ đó giảm ảnh hưởng trực tiếp của việc một tài liệu đơn giản là dài hơn tài liệu khác. Đây là một trong những cách sử dụng TF-IDF phổ biến nhất trong các hệ thống tìm kiếm hoặc so khớp văn bản cơ bản.
5. Cài đặt TF-IDF bằng Python
Đầu tiên có thể tự cài đặt công thức cổ điển để quan sát rõ TF, document frequency và IDF.
from math import log
from collections import Counter
docs = [
["học_máy", "xử_lý", "dữ_liệu"],
["học_máy", "phân_loại", "văn_bản"],
["xử_lý", "ngôn_ngữ_tự_nhiên"]
]
N = len(docs)
df = Counter()
for doc in docs: for term in set(doc):
df[term] += 1
def tfidf(term, doc):
tf = doc.count(term)
idf = log(N / df[term]) return tf * idf
for term in docs[0]: print(term, round(tfidf(term, docs[0]), 3))
Kết quả của D₁ lần lượt xấp xỉ 0.405 cho học_máy, 0.405 cho xử_lý và 1.099 cho dữ_liệu, đúng với phép tính tay phía trên.
Trong dự án thực tế, không cần tự xây toàn bộ ma trận. scikit-learn cung cấp TfidfVectorizer để thực hiện tokenization cơ bản, xây vocabulary, tính IDF và trả về sparse matrix. Scikit-learn là thư viện Machine Learning phổ biến được mô tả trong công trình của Pedregosa và cộng sự trên Journal of Machine Learning Research [4].
from sklearn.feature_extraction.text import TfidfVectorizer
documents = [ "học_máy xử_lý dữ_liệu", "học_máy phân_loại văn_bản", "xử_lý ngôn_ngữ_tự_nhiên"
]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(documents)
print(vectorizer.get_feature_names_out()) print(X.toarray())
Mỗi hàng của X là một tài liệu và mỗi cột tương ứng với một term trong vocabulary. Các giá trị bằng 0 cho biết term không xuất hiện trong tài liệu; các giá trị dương là trọng số TF-IDF sau khi áp dụng quy tắc của thư viện.
Mặc định TfidfVectorizer sử dụng phiên bản IDF có smoothing và chuẩn hóa L2 cho vector. Đây là một ví dụ cho thấy khi đọc kết quả TF-IDF, cần kiểm tra chính xác công thức và tham số của implementation thay vì giả định mọi thư viện sử dụng công thức cổ điển giống nhau.
6. Khi nào TF-IDF hữu ích và giới hạn nằm ở đâu?
TF-IDF vẫn rất hữu ích dù các biểu diễn dựa trên embedding và Transformer đã phổ biến. Điểm mạnh lớn nhất là đơn giản, nhanh, thưa, dễ kiểm tra và dễ giải thích. Trong nhiều bài toán, đây là baseline hợp lý trước khi chuyển sang mô hình phức tạp hơn.
TF-IDF đặc biệt phù hợp khi:
- xây dựng baseline cho phân loại văn bản bằng Logistic Regression, Naive Bayes hoặc SVM;
- tìm kiếm tài liệu dựa nhiều vào sự trùng khớp từ khóa;
- đo lexical similarity giữa truy vấn và tài liệu;
- trích xuất các term có tính đặc trưng tương đối trong một corpus;
- dữ liệu không quá lớn hoặc tài nguyên tính toán bị hạn chế;
- cần biết rõ feature nào đang đóng góp vào mô hình.
Tuy nhiên, TF-IDF kế thừa nhiều hạn chế của mô hình túi từ (Bag of Words). Mỗi term về cơ bản là một chiều độc lập. Mô hình không tự hiểu rằng “ô tô” và “xe hơi” có nghĩa gần nhau nếu hai biểu thức không cùng xuất hiện dưới một feature.
| Đặc điểm | TF-IDF | Embedding ngữ nghĩa |
|---|---|---|
| Biểu diễn | Trọng số theo term | Vector dense học từ dữ liệu |
| Ngữ nghĩa | Rất hạn chế | Có khả năng biểu diễn quan hệ ngữ nghĩa |
| Thứ tự từ | Không nếu chỉ dùng unigram | Tùy mô hình, thường tốt hơn |
| Khả năng giải thích | Cao | Thấp hơn |
| Chi phí tính toán | Thấp | Thường cao hơn |
TF-IDF cũng không hiểu đa nghĩa. Từ “bank” trong “river bank” và “bank account” vẫn là cùng một feature nếu preprocessing không phân biệt ngữ cảnh. Tương tự, hai câu diễn đạt cùng ý bằng vocabulary khác nhau có thể có cosine similarity rất thấp.
Một điểm quan trọng khác là IDF phụ thuộc vào corpus. Khi tập tài liệu thay đổi đáng kể, document frequency cũng thay đổi và trọng số IDF có thể cần được tính lại. Vì vậy trong Machine Learning, vectorizer phải được fit trên tập train rồi dùng chính vocabulary và IDF đó để transform validation/test; không nên fit lại TF-IDF trên test set vì sẽ làm rò rỉ thông tin về phân bố dữ liệu.
Trong các hệ thống truy hồi hiện đại, TF-IDF cũng không phải điểm kết thúc. Các mô hình như BM25 phát triển thêm từ ý tưởng trọng số dựa trên term frequency và inverse document frequency bằng cách kiểm soát sự bão hòa của TF và ảnh hưởng của độ dài tài liệu. Các mô hình neural retrieval tiếp tục đi xa hơn bằng cách học biểu diễn ngữ nghĩa. Tuy vậy, hiểu TF-IDF vẫn là nền tảng tốt để hiểu tại sao một hệ thống tìm kiếm cần đánh giá khác nhau giữa term phổ biến và term mang tính phân biệt.
Kết luận. TF-IDF có thể được tóm tắt bằng một nguyên tắc rất đơn giản: một term quan trọng khi nó xuất hiện đáng kể trong tài liệu hiện tại nhưng không quá phổ biến trong toàn bộ corpus. Từ nguyên tắc đó, văn bản được chuyển thành vector số có thể sử dụng cho tìm kiếm, similarity và Machine Learning. Dù không mô hình hóa ngữ nghĩa sâu, TF-IDF vẫn là một baseline mạnh, minh bạch và cần nắm chắc trước khi học các phương pháp biểu diễn văn bản nâng cao hơn.
7. Tài liệu tham khảo
- K. Spärck Jones, “A statistical interpretation of term specificity and its application in retrieval,” Journal of Documentation, vol. 28, no. 1, pp. 11–21, 1972, doi: 10.1108/eb026526.
- G. Salton, A. Wong, and C. S. Yang, “A vector space model for automatic indexing,” Communications of the ACM, vol. 18, no. 11, pp. 613–620, 1975, doi: 10.1145/361219.361220.
- G. Salton and C. Buckley, “Term-weighting approaches in automatic text retrieval,” Information Processing & Management, vol. 24, no. 5, pp. 513–523, 1988, doi: 10.1016/0306-4573(88)90021-0.
- S. E. Robertson, “Understanding inverse document frequency: On theoretical arguments for IDF,” Journal of Documentation, vol. 60, no. 5, pp. 503–520, 2004, doi: 10.1108/00220410410560582.
- H. Chen, B. Martin, C. M. Daimon, and S. Maudsley, “Effective use of latent semantic indexing and computational linguistics in biological and biomedical applications,” Frontiers in Physiology, vol. 4, Art. no. 8, 2013, doi: 10.3389/fphys.2013.00008.
- F. Pedregosa et al., “Scikit-learn: Machine Learning in Python,” Journal of Machine Learning Research, vol. 12, pp. 2825–2830, 2011.
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: Kỹ thuật TF-IDF
