So sánh tf và tf-idf năm 2024
This post was inspired back when I was trying to compute the TF-IDF matrix by hand using the standard formula, after computing TF and IDF first and then multiplying the two I did realize, there was something different compared to the one I obtained with Scikit-learn on my sample corpus, there I realized the difference between the Scikit-learn version and most standard and traditional version. Without further ado, let’s understand the differences. What is the standard definition of TF-IDF?TF-IDF definition: “term frequency-inverse document frequency, is a numerical statistic that is intended to reflect how important a word is to a document in a collection or corpus.[2] Objective: The goal of using TF-IDF instead of the raw frequencies of occurrence of a token in a given document is to scale down the impact of tokens that occur very frequently in a given corpus and that are hence empirically less informative than features that occur in a small fraction of the training corpus. How to Compute to it? It is simply a product of two weights, the TF and the IDF weight:
Here, there is a small example of what IDF means practically: The example has 4 terms: (a, boat, mobile and mobilegeddon). Vậy tại sao BOW được sử dụng? Một trong những vấn đề lớn nhất với tài liệu là nó lộn xộn và không có cấu trúc. Đồng thời các thuật toán học máy ưu tiên các đầu vào có độ dài cố định, có cấu trúc, được xác định rõ ràng. Vì vậy bằng cách sử dụng kỹ thuật BOW, chúng ta có thể chuyển đổi các tài liệu có độ dài thay đổi thành một tài liệu có vector độ dài cố định. Ví dụ sau sẽ cho thấy cơ chế hoạt động của phương pháp này: Trích xuất đặc trưng 3 câu sau bằng phương pháp BOW. Hình 1: Cho tập hợp các document (d1, d2, d3) Trả lời Bước 1: thông qua bước tokenization ta có thể biến đổi thành các câu trong hình 2. Hình 2: Kết quả sau khi tokenization. Cho rằng mỗi câu là một tài liệu (d1, d2 hoặc d3) riêng biệt và xây dựng một danh sách từ vựng (vocabulary) của tất cả các từ từ 3 câu trên. Kết quả sẽ nhận được các từ như sau: Hình 3: tập từ vựng thu được. Bước 2: xây dựng vector. Dựa vào tần suất xuất hiện từ (các từ này là duy nhất trong tập) trong câu “hôm_qua tôi học lập_trình”, ta xây dựng được vector như sau: Hình 4: Vector thể hiện sự xuất hiện của các từ trong tài liệu d1. Thực hiện tương tự với các câu còn lại, ta cũng nhận được các vector như sau:
Sau đó ta thu được bảng ma trận kết quả từ phương pháp BOW. Bảng này dành cho các giải thuật học máy. Hình 5: bảng ma trận kết quả từ BOW. 2. Phương pháp TF-IDF: Hình 6: Tổng quan cách tính TF-IDF. Phương pháp TF-IDF là cách đo trọng số để thể hiện sự quan trọng của các từ trong tập dữ liệu. Được tính theo công thức: Ý nghĩa và cách tính mỗi thành phần TF(t, d) và IDF(t, D) sẽ được trình bày ở các mục sau. 2.1. TF ( Term Frequency): Đo lường tần suất xuất hiện của một từ trong một tài liệu (document). Và một vài cách để tính toán TF như sau: Cách 1: TF(t, d) = No. of times term ‘t’ occurs in a document hoặc: Cách 2: TF(t, d) = (No. of times term ‘t’ occurs in a document) / (No. Of terms in a document) hoặc Cách 3: TF(t, d) = (No. of times term ‘t’ occurs in a document) / (Frequency of most common term in a document). Viết lại dưới dạng công thức: Trong đó:
Lưu ý: sklearn sử dụng cách đầu tiên (No. Of times a term ‘t’ appears in a document) 2.2 IDF (Inverse Document Frequency): Đo lường độ quan trọng của một từ trong toàn bộ tập hợp các tài liệu. Đối với từng tài liệu, việc một từ xuất hiện nhiều lần sẽ có mức độ cao hơn. Tuy nhiên, đối với toàn bộ tập tài liệu, một từ xuất hiện ở nhiều tài liệu thì sẽ trở nên không còn quan trọng nữa. Đó là lý do vì sao cần phải giảm đi mức độ quan trọng của những từ đó bằng cách sử dụng IDF. Để tính giá trị IDF ta sẽ có vài cách như sau: Cách 1: IDF (t, D) =1 + log e [ n / DF(t) ] hoặc: Cách 2: IDF(t, D) = log e [ n / DF(t) ] Trong đó:
Lưu ý 1: Khi chúng ta tính IDF, nếu từ t không xuất hiện ở bất kỳ tài liệu nào thì mẫu số của IDF sẽ bằng 0. Do vậy, để tránh phép chia cho 0, chúng ta có thể thay đổi mẫu số của IDF bằng cách cộng 1 vào cho nó. Lưu ý 2: Với tài liệu : 2.3. Ví dụ 1— Cách tính TF-IDF Dùng phương pháp TF-IDF để phân tích các tài liệu sau: Hình 7: Cho tập hợp các document (d1, d2, d3) Trả lời:
Trong ví dụ này tôi sử dụng cách 3 (trong mục 2.1) để tính các giá trị TF(t, d). Ta thu được bảng kết quả ở hình 8. Hình 8: Bảng kết quả tính TF.
Trong ví dụ này tôi sử dụng cách 2 (trong mục 2.2) để tính các giá trị IDF(t, D). Ta thu được bảng kết quả ở hình 9. Hình 9: Bảng kết quả tính IDF.
2.4. Ví dụ 2 - Cách tính TF-IDF Cho corpus gồm 2 tài liệu như sau: d1: A quick brown fox jumps over the lazy dog. What a fox! d2: A quick brown fox jumps over the lazy fox. What a fox! Hỏi: từ “fox” có liên quan như thế nào đối với tài liệu corpus D? Trả lời: Có thể trả lời bằng 1 trong 2 cách như sau Cách 1: trả lời ngắn gọn Tương tự ví dụ 1, tôi sử dụng cách 3 (trong mục 2.1) để tính các giá trị TF(t, d). Ta được kết quả:
TF-IDF = TF( “fox”, d1) * IDF(t,D) = 2/2 * log(2/2) = 0
TF-IDF = TF( “fox”, d2) * IDF(t,D) = 3/3 * log(3/3) = 0 \=> Từ “fox” không có độ quan trọng trong các dữ liệu corpus D. Cách 2: Trả lời đầy đủ bằng bảng
3. Hiện thực một vài chương trình
Lưu ý: trong sklearn kết quả sẽ khác so với những ví dụ 1 và ví dụ 2 trong mục 2.2 và 2.3 bởi vì normalization và cách tính TF(t, d) và IDF(t, D) khác (xem ). Nhưng cách nào cũng đúng. 4. Tài liệu tham khảo [1] Quản Thành Thơ. Mạng nơ-ron nhân tạo: từ hồi quy đến học sâu. DHBK TPHCM. [2] Prof. Andew Ng. Natural language processing. Coursera [3] https://www.analyticsvidhya.com/blog/2021/11/how-sklearns-tfidfvectorizer-calculates-tf-idf-values/ [4] https://melaniewalsh.github.io/Intro-Cultural-Analytics/05-Text-Analysis/03-TF-IDF-Scikit-Learn.html |