Chuyển tới nội dung chính

Cosine, Jaccard và hệ số chồng lấn

Sửa cả hai câuBa mẫu số hiện rõTính lại thật

Cosine, Jaccard và hệ số chồng lấn

Hai câu giống nhau đến đâu? Câu trả lời phụ thuộc vào việc bạn đếm cái gì và chia cho cái gì. Ba độ đo dưới đây cùng chạy trên một cặp câu và vẫn cho ba con số khác nhau.

Sau khi tách token, cách đơn giản nhất để biểu diễn một câu là đếm: mỗi từ trong từ vựng là một chiều, giá trị là số lần từ đó xuất hiện. Câu thành một vector, và câu hỏi "hai câu giống nhau đến đâu" thành câu hỏi hình học "hai vector này gần nhau đến đâu". Nhưng có nhiều cách trả lời, và chúng không đồng ý với nhau.

Ba cách hay gặp nhất, tất cả đều là một phân số. Tử số của cả ba đều là phần chung, cái khác nhau nằm ở mẫu số: cosine chia cho tích hai độ dài vector, Jaccard chia cho số từ trong hợp hai tập, còn chồng lấn chia cho tập nhỏ hơn trong hai tập.

Cosine, Jaccard và chồng lấn · đo hai câu giống nhau tới đâu
cosine 0.753Jaccard 0.615chồng lấn 0.800
Hai câu chung phần lớn từ nên cả ba độ đo đều cao, và ba con số vẫn khác nhau vì chúng chia cho ba mẫu số khác nhau.
cosine trên vector đếm
0.753
9 / (3.606 × 3.317)
Jaccard trên tập từ
0.615
8 / 13 (giao trên hợp)
hệ số chồng lấn
0.800
8 / 10 (giao trên tập nhỏ hơn)
Vector đếm theo từ vựng gộp (13 từ khác nhau)
TừĐếm ở AĐếm ở BTích từng thành phần
con111 × 1 = 1
của111 × 1 = 1
giúp111 × 1 = 1
hiểu111 × 1 = 1
học111 × 1 = 1
máy212 × 1 = 2
ngôn101 × 0 = 0
ngữ101 × 0 = 0
người111 × 1 = 1
nói010 × 1 = 0
sâu010 × 1 = 0
tiếng010 × 1 = 0
tính111 × 1 = 1
Tích vô hướng A · B (tổng cột bên phải)9
Độ dài |A||B| (căn tổng bình phương)3.6063.317
Giao (8 từ): concủagiúphiểuhọcmáyngườitính
Hợp: 13 từ · tập A có 10 từ khác nhau, tập B có 11 từ khác nhau.
Lát cắt hai chiều: chọn hai từ để làm hai trục
góc 18.4°cosine của lát cắt 0.949
01212máyhọc18.4°A (2, 1)B (1, 1)
Góc 18.4° ứng với cosine 0.949 trong lát cắt này. Con số đó bằng đúng cosine đầy đủ 0.753 khi từ vựng gộp chỉ có hai từ, còn nói chung thì khác, vì cosine đầy đủ tính trên cả 13 chiều.

Hãy làm đúng ba việc trong sim, theo thứ tự.

Một: để ô số lần lặp ở ×2 rồi bấm nút ⧉ Lặp câu A. Câu A bị nối vào chính nó, mọi ô trong cột đếm ở A tăng gấp đôi, độ dài |A| cũng gấp đôi. Vậy mà cosine đứng yên tại chỗ. Lý do nằm ngay trong công thức: tử số tăng gấp đôi, mẫu số cũng tăng gấp đôi vì |A| nằm trong đó, hai cái triệt tiêu nhau. Nói cho gọn thì cosine chỉ nhìn hướng của vector chứ không nhìn độ dài của nó. Jaccard và chồng lấn cũng không đổi, nhưng vì lý do khác hẳn: chúng làm việc trên tập từ, mà lặp lại một câu thì tập từ y nguyên. Dòng "trước lần lặp gần nhất" ghi lại cả ba con số cũ để bạn đối chiếu.

Đây là tính chất thật sự hữu ích chứ không phải mẹo toán. Một bài báo dài và một đoạn tóm tắt của chính nó có vector đếm chênh nhau rất xa về độ lớn, nhưng hướng thì gần nhau, nên cosine vẫn nhận ra chúng cùng chủ đề.

Hai: bấm Câu ngắn nằm trong câu dài. Hệ số chồng lấn nhảy lên đúng 1, còn Jaccard chỉ 0.357, tức 5/14. Không có cái nào sai cả, chúng trả lời hai câu hỏi khác nhau. Chồng lấn hỏi "câu ngắn có nằm trọn trong câu kia không", nên nó chia cho tập nhỏ hơn và bỏ qua toàn bộ phần thừa của câu dài. Jaccard hỏi "hai tập trùng nhau bao nhiêu phần của tất cả những gì hai bên nói", nên phần thừa đó vào thẳng mẫu số. Nếu bạn dùng chồng lấn để lọc trùng lặp, một câu ba từ sẽ trùng khớp hoàn hảo với một bài viết dài, và đó thường không phải điều bạn muốn.

Ba: đổi hai ô chọn từ dưới hình vẽ. Hình đó không phải minh hoạ trang trí, nó là một lát cắt thật của không gian đếm: trục ngang là số lần từ thứ nhất xuất hiện, trục dọc là từ thứ hai, mỗi câu thành một mũi tên. Đổi từ là đổi luôn hai mũi tên, và góc giữa chúng tính lại theo. Góc nhỏ thì cosine gần 1, góc 90 độ thì cosine bằng 0. Con số dưới hình bằng đúng cosine đầy đủ khi từ vựng gộp chỉ có hai từ, còn bình thường thì khác, vì cosine đầy đủ đo trên tất cả các chiều chứ không riêng hai chiều bạn đang nhìn.

Vài điều nên nhớ đúng:

  • Cosine ở đây luôn nằm trong đoạn từ 0 tới 1. Cosine nói chung chạy từ -1 tới 1, nhưng số đếm thì không bao giờ âm, nên tích vô hướng không thể âm và góc không thể vượt quá 90 độ. Muốn thấy trường hợp âm bạn phải đợi tới vector nhúng, nơi các thành phần có dấu.
  • Mẫu số bằng 0 phải được định nghĩa, không được để máy trả về NaN. Câu rỗng thì |A| bằng 0, phép chia không có nghĩa. Ở đây quy ước cả ba độ đo trả về 0 trong tình huống đó, và góc thì báo là không xác định thay vì vẽ bừa một mũi tên.
  • Cả ba đều mù trước từ đồng nghĩa. Bấm Cùng nghĩa, khác chữ: hai câu nói gần như cùng một điều, cả ba độ đo vẫn chấm 0 tròn trĩnh, chỉ vì không có ký tự nào trùng nhau. Đây chính là chỗ các bài sau bước vào: thay vì mỗi từ một chiều riêng biệt, người ta học một vector nhúng trong đó xe hơiô tô nằm cạnh nhau, rồi vẫn lấy cosine, nhưng lần này lấy trên vector nhúng.
Điều rút ra

Ba độ đo dùng chung một tử số và khác nhau ở mẫu số, nên hỏi "cosine hay Jaccard đúng hơn" là hỏi sai. Câu hỏi đúng là bạn muốn chuẩn hoá theo cái gì: theo độ dài vector, theo toàn bộ những gì hai bên nói, hay theo bên nói ít hơn. Còn chuyện cả ba đều không hiểu từ đồng nghĩa thì không mẫu số nào cứu được, phải đổi cách biểu diễn.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Nhân đôi một câu bằng cách nối nó vào chính nó. Cosine giữa câu đó và câu kia thay đổi thế nào?
  2. 2Câu A có 5 từ khác nhau, tất cả đều xuất hiện trong câu B vốn có 14 từ khác nhau. Jaccard và hệ số chồng lấn bằng bao nhiêu?
  3. 3Vì sao cosine trên vector đếm không bao giờ âm, dù cosine của hai vector bất kỳ có thể xuống tới âm 1?