TF-IDF (Term Frequency – Inverse Document Frequency)
1. Tổng quan
A. Định nghĩa
Kỹ thuật trọng số hóa định lượng mức độ một từ đại diện tốt đến đâu cho một văn bản cụ thể trong một tập văn bản (corpus). Một từ càng xuất hiện thường xuyên trong một văn bản (TF) mà lại xuất hiện hiếm trên toàn bộ tập văn bản (IDF) thì càng được gán trọng số cao.
TF-IDF là một phương thức tính trọng số cổ điển nhưng vẫn mạnh mẽ, được sáng chế để chuyển văn bản thành vector số trong truy hồi thông tin (IR) và khai phá văn bản. Vì máy tính không thể xử lý trực tiếp câu ngôn ngữ tự nhiên, phải gán cho mỗi từ một giá trị thực biểu thị "từ này quan trọng đến đâu trong văn bản này", để biểu diễn văn bản như một điểm trong không gian vector. TF-IDF khác biệt quyết định với việc đếm tần suất đơn thuần ở chỗ nó xác định giá trị này bằng tích của hai trục khác nhau: tần suất bên trong văn bản (thông tin cục bộ) và độ hiếm trên toàn corpus (thông tin toàn cục).
B. Bối cảnh ra đời và sự cần thiết
Cách đơn giản nhất để biểu diễn văn bản bằng vector là mô hình BoW (Bag-of-Words), chỉ đếm tần suất xuất hiện của từ. Tuy nhiên cách này sinh ra méo mó chí tử. Vì các từ dừng (stopword)—như "the/of/and" trong tiếng Anh hay các tiểu từ tiếng Hàn "eun/neun/i/ga"—xuất hiện với số lượng lớn trong hầu hết mọi văn bản, nếu chỉ nhìn tần suất thì những từ thường gặp này trông như thể là từ khóa đại diện cho văn bản. Trong khi thực tế chính những từ như vậy lại không mang chút thông tin nào để phân biệt các văn bản.
TF-IDF giải quyết vấn đề này bằng trực giác rành mạch rằng "những từ thường gặp xuất hiện rải rác khắp nhiều văn bản thì không có sức phân biệt". Một từ xuất hiện đều đặn ở mọi văn bản thì vô dụng trong việc phân biệt văn bản này với văn bản khác nên IDF cắt giảm trọng số của nó, còn ngược lại một từ xuất hiện tập trung chỉ ở một văn bản cụ thể thì được gán trọng số lớn. Kết quả là từ khóa (keyword) đặc trưng cho mỗi văn bản tự nhiên nổi bật lên. Nhờ ưu điểm đơn giản, nhanh và cho kết quả con người diễn giải trực quan được, TF-IDF đã trở thành kỹ thuật chuẩn lâu đời cho xếp hạng công cụ tìm kiếm, phân loại văn bản, trích xuất từ khóa và gợi ý.
C. Các lĩnh vực ứng dụng chính
Vì TF-IDF là bước tiền xử lý đa dụng biến văn bản thành vector từ khóa, phạm vi ứng dụng của nó rất rộng. Công cụ tìm kiếm xếp hạng văn bản theo tổng điểm TF-IDF của các từ truy vấn; phân loại văn bản·lọc thư rác dùng vector này làm đặc trưng đầu vào cho các bộ phân loại như naive Bayes·SVM. Trích xuất từ khóa·thẻ tự động rút các từ có TF-IDF cao nhất trong văn bản và trình bày làm thẻ tóm tắt, còn gợi ý dựa trên nội dung tìm "bài viết tương tự" bằng độ tương tự cosine giữa các văn bản. Việc một công thức trọng số duy nhất trở thành nền chung xuyên suốt tìm kiếm·phân loại·trích xuất·gợi ý giải thích sức sống bền bỉ của TF-IDF.
Đằng sau việc kỹ thuật này trở thành chuẩn mực trên thực tế của truy hồi thông tin từ thập niên 1970 là tính thực dụng rằng "có thể xấp xỉ mức độ quan trọng chỉ bằng thống kê mà không cần học". Ở thời đại trước học sâu, cả dữ liệu huấn luyện quy mô lớn lẫn tài nguyên tính toán đều khan hiếm, nên TF-IDF—vốn tính ra mức quan trọng của từ chỉ bằng tổng hợp tần suất mà không cần huấn luyện mô hình riêng—là một lựa chọn rất hấp dẫn. Ngoài ra, vì kết quả có thể giải thích "vì sao từ này quan trọng trong văn bản này" chỉ bằng hai con số là tần suất và độ hiếm, nó rất hợp với môi trường thực tiễn đòi hỏi căn cứ cho kết quả tìm kiếm. Tính minh bạch và nhẹ nhàng này là lý do cốt lõi khiến TF-IDF không bị loại bỏ ngay cả ngày nay.
2. Thành phần và công thức tính
TF-IDF được định nghĩa là tích của hai yếu tố, mỗi số hạng điều chỉnh mức quan trọng của từ từ một hướng khác nhau. Sơ đồ khái niệm dưới đây cho thấy toàn bộ cấu trúc về cách hai trục kết hợp để tạo ra trọng số cuối cùng và vector văn bản.
flowchart LR
subgraph local["Thông tin cục bộ"]
T1["Tần suất của từ t trong văn bản d"] --> T2["Chuẩn hóa TF·log scale"]
end
subgraph global["Thông tin toàn cục"]
D1["Số văn bản df chứa từ t"] --> D2["IDF = log(N/df)"]
end
T2 --> W["TF-IDF = TF × IDF"]
D2 --> W
W --> VEC["Vector trọng số từ theo từng văn bản"]
VEC --> USE["Tương tự·xếp hạng·phân loại"]
Định nghĩa và ý nghĩa trực quan của từng số hạng như sau. TF (Term Frequency) là mức quan trọng cục bộ đo một từ được dùng thường xuyên đến đâu bên trong một văn bản. IDF (Inverse Document Frequency) là sức phân biệt toàn cục đo từ đó hiếm đến đâu trên toàn corpus; gọi N là tổng số văn bản và df(t) là số văn bản mà từ t xuất hiện, thì IDF(t) = log(N / df(t)). Trọng số cuối cùng là tích của hai đại lượng này.
| Hạng mục | Định nghĩa | Ý nghĩa trực quan |
|---|---|---|
| TF(t,d) | Tần suất xuất hiện của từ t trong văn bản d (hoặc tần suất chuẩn hóa) | Được dùng thường xuyên đến đâu trong văn bản này → mức quan trọng cục bộ |
| IDF(t) | log( N / df(t) ), N=tổng số văn bản, df=số văn bản chứa t | Hiếm đến đâu trên toàn corpus → sức phân biệt |
| TF-IDF | TF(t,d) × IDF(t) | Tần suất cục bộ × độ hiếm toàn cục |
Có hai lý do lấy log trong IDF. Thứ nhất, N/df trở nên quá lớn khi có nhiều văn bản, nên log nén sự tăng đó một cách thoải mái và cân bằng thang đo với TF. Thứ hai, từ càng thường gặp (df↑) thì giá trị càng nhỏ đi một cách mượt mà, và nếu xuất hiện ở mọi văn bản (df=N) thì log 1 = 0, nên trọng số của từ không có sức phân biệt tự nhiên bị khử về 0.
Lý do nhân hai số hạng thay vì cộng cũng xuất phát từ nguyên lý. Để trở thành từ khóa, một từ phải "xuất hiện thường xuyên trong văn bản này (TF cao) đồng thời hiếm ở các văn bản khác (IDF cao)". Nếu một trong hai gần 0 thì từ không có giá trị làm từ khóa, nên phép nhân—chỉ cho giá trị lớn khi cả hai điều kiện đồng thời thỏa—mới đúng về mặt logic. Nếu là phép cộng thì dù một bên bằng 0, giá trị bên kia vẫn còn nguyên, sinh ra vấn đề "từ thường gặp nhưng xuất hiện nhiều trong văn bản này" bị đánh giá quá cao.
Trong thực tế nhiều biến thể được dùng. Với TF, thường không dùng tần suất thô mà áp dụng log scaling (1 + log TF) hoặc chuẩn hóa theo tần suất lớn nhất. Vì khó coi một từ xuất hiện 3 lần là quan trọng gấp đúng 3 lần văn bản chỉ xuất hiện 1 lần, điều này phản ánh sự giảm dần lợi ích cận biên (bão hòa) của tần suất. Với IDF, một biến thể làm trơn (smoothing) cộng 1 vào mẫu số để ngăn mẫu số bùng nổ khi df bằng 0—tức dạng log(N / (1 + df)) + 1—được dùng rộng rãi. Đây chính là biến thể làm trơn·chuẩn hóa mà TfidfVectorizer của scikit-learn chọn mặc định, và vì công thức chi tiết khác nhau chút ít giữa các cài đặt, an toàn hơn là đặt ý nghĩa vào thứ hạng tương đối thay vì độ lớn tuyệt đối của giá trị.
3. Quá trình tính toán (ví dụ)
Việc tính toán là dòng chảy đơn giản: tính riêng TF và IDF rồi nhân lại. Sơ đồ quy trình dưới đây cho thấy chi tiết các bước từ corpus thô đến vector trọng số cuối cùng.
flowchart TD
P0["Corpus thô"] --> P1["Tiền xử lý: tách từ·loại từ dừng·rút gốc từ"]
P1 --> P2["Tính TF theo từng văn bản"]
P1 --> P3["Tổng hợp df theo từng từ → IDF = log(N/df)"]
P2 --> P4["TF-IDF = TF × IDF"]
P3 --> P4
P4 --> P5["Văn bản = vector trọng số từ"]
P5 --> P6["Độ tương tự cosine·khớp truy vấn"]
Trước hết cần nhấn mạnh rằng bước tiền xử lý chi phối chất lượng kết quả. Chỉ sau khi tách từ cắt câu thành đơn vị từ, loại bỏ từ dừng, và rút gốc·nguyên mẫu hợp nhất các dạng biến đổi thành một, thì việc tổng hợp TF·df mới có ý nghĩa. Nếu bước này sơ sài, "run/ran/running" bị đếm thành những từ khác nhau, tần suất của cùng một nghĩa bị phân tán, và trọng số của từ khóa bị đánh giá thấp đi tương ứng.
Hãy xác nhận nguyên lý bằng con số cụ thể. Giả sử tổng cộng có N=3 văn bản, và từ "AI" xuất hiện trong 2 trong số đó (df=2).
- IDF(AI) = log(3/2) = log(1.5) ≈ 0.176 (dựa trên logarit thập phân cơ số 10; nếu đề bài cho sẵn giá trị log thì dùng nguyên như vậy).
- Nếu "AI" xuất hiện 3 lần trong văn bản 1 (TF=3) → TF-IDF = 3 × 0.176 ≈ 0.528
- Nếu một từ dừng như "and" xuất hiện 5 lần trong cùng văn bản 1 nhưng có mặt ở cả ba văn bản (df=3) → IDF = log(3/3) = log 1 = 0, do đó TF-IDF = 5 × 0 = 0
Sự đối lập này bộc lộ cốt lõi của TF-IDF. Trọng số của từ dừng có tần suất cao hơn ("and", TF=5) trở thành 0, còn trọng số của từ khóa có tần suất thấp ("AI", TF=3) sống sót ở mức 0.528. Đây chính là nơi nguyên lý "một từ thường gặp không phải là từ khóa" được cài đặt thành công thức. Nếu một từ chỉ xuất hiện ở một trong ba văn bản (df=1) thì IDF = log(3/1) = log 3 ≈ 0.477, đạt sức phân biệt lớn nhất. Như vậy một quan hệ đơn điệu giảm thành lập: df càng nhỏ (càng hiếm) thì IDF càng lớn, và df càng gần N (càng thường gặp) thì IDF càng hội tụ về 0.
Bằng cách biểu diễn mỗi văn bản thành vector các giá trị TF-IDF theo từng từ như vậy, ta có thể tính độ tương tự cosine, đo độ tương tự bằng góc mà hai vector văn bản tạo thành, hoặc điểm khớp truy vấn-văn bản, tính bằng tích trong của vector truy vấn và vector văn bản. Lý do dùng độ tương tự cosine là để loại bỏ ảnh hưởng của độ dài văn bản. Tích trong đơn thuần càng lớn khi văn bản càng dài, nhưng sau khi chuẩn hóa vector và chỉ nhìn góc, ta có thể so sánh thuần túy "chúng chỉ cùng một hướng đến đâu", tức sự tương tự của cấu thành từ ngữ. Nguyên lý cơ bản mà công cụ tìm kiếm xếp hạng văn bản cho một truy vấn, gom cụm tin tức nhóm các bài viết tương tự, và hệ gợi ý tìm văn bản tương tự đều bắt rễ ở phép tính vector-độ tương tự này.
4. Đặc điểm, hạn chế và giải pháp thay thế
Sức mạnh của TF-IDF nằm ở chỗ là một phương thức thống kê không cần huấn luyện nên tính toán nhẹ và nhanh, và con người có thể diễn giải vì sao mỗi từ có trọng số đó. Tuy nhiên hạn chế căn bản là vì chỉ xử lý từ như các ký hiệu nguyên tử độc lập với nhau nên hoàn toàn không hiểu ngữ nghĩa (semantics).
| Phân loại | Nội dung | Lý do |
|---|---|---|
| Ưu điểm | Đơn giản·tốc độ cao, dễ diễn giải, hiệu quả trích từ khóa | Dựa trên tần suất thống kê nên không cần huấn luyện |
| Hạn chế | Không phản ánh ngữ nghĩa·ngữ cảnh·trật tự từ | Chỉ xem từ như token nguyên tử |
| Hạn chế | Không xử lý được từ đồng nghĩa·đa nghĩa | Xem "xe" và "ô tô" là hai từ khác nhau |
| Hạn chế | Vector thưa (sparse) chiều cao | Số chiều bằng cỡ từ vựng, phần lớn là 0 |
| Thay thế | Embedding như Word2Vec·BERT | Học ngữ cảnh·ngữ nghĩa bằng vector dày đặc |
Ví dụ, "bank" trong "bank deposit" (tiền gửi ngân hàng) và "bank" trong "river bank" (bờ sông) có nghĩa hoàn toàn khác nhau, nhưng TF-IDF xử lý chúng như cùng một từ vì viết giống nhau và không phân biệt được ngữ cảnh (vấn đề đa nghĩa). Ngược lại, "ô tô" và "xe hơi" về thực chất cùng nghĩa nhưng lại bị xem là hai từ khác nhau nên không nắm đúng độ tương tự (vấn đề đồng nghĩa). Ngoài ra, "con mèo đuổi con chuột" và "con chuột đuổi con mèo" có cấu thành từ giống nhau nên vector TF-IDF đồng nhất trong khi nghĩa lại trái ngược. Điều này bộc lộ hạn chế căn bản rằng TF-IDF hoàn toàn bỏ qua trật tự từ (word order) và cấu trúc câu.
Ngoài ra, số chiều vector lớn bằng cỡ từ điển từ vựng, nhưng một văn bản chỉ xuất hiện một phần rất nhỏ trong số đó, nên sinh ra vector thưa chiều cao (sparse vector) với đa số phần tử bằng 0, làm giảm hiệu quả bộ nhớ·tính toán. Trong vector hàng chục nghìn đến hàng trăm nghìn chiều, thường chỉ vài trăm phần tử có giá trị thực. Để khắc phục các vấn đề ngữ nghĩa·ngữ cảnh·chiều này, đã xuất hiện embedding (Word2Vec, GloVe)—học từ thành vector dày đặc (dense vector) chiều thấp vài trăm chiều và đặt các từ gần nghĩa nhau ở gần nhau trong không gian vector—và embedding ngữ cảnh (BERT, Transformer)—biểu diễn cùng một từ bằng các vector khác nhau tùy ngữ cảnh.
5. Chuyên sâu: BM25 và tìm kiếm lai (hybrid) trong RAG
TF-IDF trông như một kỹ thuật lỗi thời, nhưng hậu duệ trực hệ và các kỹ thuật phái sinh của nó vẫn được dùng ở tuyến đầu ngày nay. Tiêu biểu nhất là BM25 (Okapi BM25). BM25 bù đắp tinh tế cho các điểm yếu của TF-IDF bằng cách đưa vào số hạng bão hòa tần suất (term frequency saturation) ngăn TF tăng vô hạn, và chuẩn hóa độ dài văn bản để một văn bản dài không được ưu ái chỉ vì nó dài. Nhờ vậy BM25 được chọn làm hàm xếp hạng mặc định của các công cụ tìm kiếm chủ đạo như Elasticsearch·OpenSearch·Lucene, và đóng vai trò đường cơ sở (baseline) mạnh của các phương pháp dựa trên tần suất thuần túy trong nhiều benchmark truy hồi thông tin.
BM25 có hai tham số điều chỉnh: k₁ (thường 1.2–2.0) định mức độ bão hòa tần suất, và b (thường 0.75) định cường độ chuẩn hóa độ dài văn bản. k₁ càng lớn thì trọng số bổ sung khi một từ xuất hiện nhiều lần càng được giữ lâu, và b càng gần 1 thì hình phạt lên độ dài văn bản càng mạnh. Khác với TF-IDF vốn là công thức nhân cố định, việc BM25 có thể điều chỉnh hành vi xếp hạng theo đặc tính của corpus là lý do lớn cho sự chấp nhận trong thực tế.
Gần đây, trong các pipeline RAG (Retrieval-Augmented Generation) của AI sinh tạo, họ TF-IDF/BM25 lại được chú ý. Tìm kiếm vector dựa trên ngữ nghĩa (embedding) nắm tốt từ đồng nghĩa·ngữ cảnh nhưng yếu ở khớp từ khóa chính xác với danh từ riêng·mã sản phẩm·con số, còn ngược lại BM25 mạnh ở khớp từ khóa nhưng không hiểu nghĩa. Ví dụ, nếu người dùng truy vấn "mã lỗi ORA-00942", tìm kiếm embedding có thể trôi dạt sang các văn bản nghĩa tương tự như "lỗi cơ sở dữ liệu", nhưng BM25 bắt đúng văn bản chứa mã đó. Vì thế tìm kiếm lai (hybrid search), chạy cả hai phương thức cùng lúc và hợp nhất điểm số bằng kỹ thuật như RRF (Reciprocal Rank Fusion), trên thực tế đã trở thành chuẩn mực. Đó là chiến lược nâng độ chính xác tìm kiếm bằng cách bù trừ lẫn nhau điểm yếu của mỗi bên, và là kỹ thuật cốt lõi trong thực tế để LLM tìm đúng các văn bản làm căn cứ.
Nhìn vào ứng dụng công nghiệp thực tế, các hệ thống tìm kiếm thương mại điện tử·tài liệu kỹ thuật quy mô lớn đặt BM25 lên các trường mà khớp chính xác là quyết định—tên sản phẩm·số model·số điều luật—và embedding vào việc nắm ý định của truy vấn ngôn ngữ tự nhiên, rồi hợp nhất hai kết quả. Các chatbot cơ sở tri thức nội bộ cũng thường kết hợp tìm kiếm từ khóa để không bỏ sót các thuật ngữ riêng của quy chế·sổ tay công ty. Như vậy hậu duệ của TF-IDF đã lùi lại với tư cách một kỹ thuật độc lập, nhưng vẫn là thành phần thiết yếu với tư cách một trục của cấu hình lai.
6. Điểm cần cân nhắc và hàm ý
- Tiền xử lý chi phối chất lượng: Chất lượng của tách từ·loại bỏ từ dừng·rút gốc từ (stemming)·rút nguyên mẫu (lemmatization)·chuẩn hóa quyết định kết quả TF-IDF. Đặc biệt tiếng Hàn là ngôn ngữ chắp dính nên các tiểu từ·đuôi từ gắn vào, do đó phân tích hình thái bắt buộc phải đi trước; nếu lơ là điều này thì cùng một từ bị phân tán thành nhiều dạng và trọng số bị méo.
- Vẫn là công nghệ nền còn hiệu lực: Dù embedding ngữ nghĩa đã phát triển, TF-IDF/BM25 không cần dữ liệu huấn luyện·GPU, có thể diễn giải và là đường cơ sở đáng tin cậy. Trong tình huống cold-start, corpus quy mô nhỏ, hay lĩnh vực coi trọng khả năng giải thích, chúng có thể thực dụng hơn cả embedding.
- Lai ghép là xu thế chủ đạo: Tìm kiếm từ khóa (BM25) và tìm kiếm ngữ nghĩa (embedding) không phải hàng thay thế mà là hàng bổ trợ. Trong RAG·tìm kiếm doanh nghiệp, cấu trúc lai kết hợp cả hai có lợi ở cả độ chính xác lẫn chi phí, nên theo góc nhìn của Kỹ sư chuyên nghiệp, điều đúng đắn là thiết kế "kết hợp thế nào" chứ không phải "thay thế bằng gì".
- Đánh đổi chi phí·khả năng mở rộng: TF-IDF có chi phí lập chỉ mục·truy vấn thấp và dễ cập nhật tăng dần, trong khi embedding tốn kém lớn cho suy luận mô hình·vận hành vector-DB. Phải chọn kỹ thuật bằng cách tổng hợp quy mô corpus, lượng truy vấn, yêu cầu độ trễ (latency) và yêu cầu khả năng giải thích.
- Dư địa chuyên biệt hóa theo lĩnh vực: Điều chỉnh từ điển từ dừng·các biến thể trọng số·trọng số theo trường (tiêu đề vs thân bài) cho phù hợp lĩnh vực có thể nâng mạnh hiệu năng của TF-IDF/BM25, nên bản thân việc là một thuật toán minh bạch có thể tinh chỉnh chính là một thế mạnh thực tiễn.
- Tầm quan trọng của đánh giá·kiểm chứng: Tổ hợp biến thể trọng số và tiền xử lý nào là tốt nhất khác nhau theo từng lĩnh vực, nên bắt buộc phải kiểm chứng định lượng bằng các chỉ số chất lượng tìm kiếm như độ chính xác (Precision)·độ bao phủ (Recall)·NDCG. Vì tinh chỉnh "trông có vẻ tốt về lý thuyết" thường làm giảm hiệu năng trên log truy vấn thực tế, việc chạy thử nghiệm A/B song song với đánh giá ngoại tuyến là nguyên tắc thực tiễn theo góc nhìn của Kỹ sư chuyên nghiệp.
Tài liệu tham khảo
- scikit-learn — TfidfVectorizer / Text feature extraction: https://scikit-learn.org/stable/modules/feature_extraction.html#tfidf-term-weighting
- Elasticsearch — Practical BM25: https://www.elastic.co/blog/practical-bm25-part-2-the-bm25-algorithm-and-its-variables
- Wikipedia — tf–idf: https://en.wikipedia.org/wiki/Tf%E2%80%93idf
Tóm tắt một câu: TF-IDF là kỹ thuật tính mức quan trọng của từ bằng TF (tần suất trong văn bản) × IDF (log N/df) để gán trọng số cao cho các từ khóa xuất hiện thường xuyên trong một văn bản cụ thể nhưng hiếm trên toàn tập; nó có ưu điểm tự động khử các từ thường gặp về 0 nhưng không phản ánh được ngữ nghĩa·ngữ cảnh nên đã phát triển thành embedding·BM25, và ngày nay là công nghệ đường cơ sở cốt lõi được dùng song song với tìm kiếm ngữ nghĩa trong tìm kiếm lai của RAG.