Có hai cách tiếp cận của lọc cộng tác theo thuật toán người láng giềng là dựa trên sự tương tự giữa các người dùng và dựa trên sự tương tự giữa mục tin.
2.4.1. a. Thuật toán người láng giềng dựa trên người dùng
Thuật toán người láng giềng dựa trên người dùng xác định độ tương tự giữa hai người dùng U 1 và U 2 thông qua việc so sánh các đánh giá của họ trên cùng mục tin. Sau đó dự đoán kết quả đánh giá mục tin i của người dùng U 1 dựa vào các đánh giá của người dùng tương tự U 2. Theo Herlocker & cộng sự (1999), độ tương tự giữa hai người dùng là được tính theo công thức Cosine hoặc công thức Pearson như
sau:
Hoàng Thái Hạnh - Lớp K18HTTTC 18
U1 U2 U3 U4 U5 U6 ii 5 5 2 1 1 ? *2 3 ? ? 1 ? 3 *3 ? 4 1 ? ? 1 Ũ 2 2 3 4 4 ?
Simcosine (ill, U2') cos(u1,U2) ∑ ÍEI(ru 1 í * r2i) (1)
√∑∈ √∑∈
Hoàng Thái Hạnh - Lớp K18HTTTC 19
Khóa luận tốt nghiệp Ứng dụng học máy trong xây dựng hệ khuyến nghị tự động
, .. _ʌ ∑i i ∈ (r∙* < ι - rri) * (⅛ - K) ( 2 )
SlTtlvearson ∖U-∣, U2) — . 2 =Γ ---T--- . _
∑.Mr ∑.rr.-i^-∖2
V ZJ i ∕ ∈V' U1í'U1) -√Zji ∕ ∈V ' U2i ' U2)
Trong đó:
+ i ∈ I là tổng các mục tin mà cả hai người dùng U1, U2 đã đánh giá. + và ilà những đánh giá của người dùng U 1, U 2cho mục tin i.
+rrvàrrr là trung bình các đánh giá của hai người dùng này.
Sau khi tính toán độ tương tự giữa các người dùng, để có thể dự đoán đánh giá của người dùng U 1 trên mục tin i, ta lấy trọng số trung bình của tất cả các đánh giá trên mục tin đó của người dùng tương tự U 2theo công thức sau (Resnick & cộng sự, 1994):
, , = _ +∑U2∈^im(U
1,U
2)*(r
U2i-ruJ
U 1 i U 1 + ∑U 2«> im VU 1 ,U 2 )| (3)
Với KU là tập hợp k người dùng có độ tương tự gần với người dùng U 1 (k láng giềng của ). Xét ví dụ sau:
rU4I = 3 = 3.67 r^^ι = 1 + 4 2 “2‘5 = 1.67 rU(Γι = 1 + 3 — 7 1 - 2 3
Sau khi tính được các giá trị trung bình đánh giá của người dùng, ta phải chuấn hóa dữ liệu bằng cách trừ mỗi ô màu xanh đi một số bằng chính giá trị trung bình tương ứng vừa tính được và thay các dấu “?” bằng giá trị “0”. Việc này rất quan trọng bởi:
- Ma trận sẽ xuất hiện các giá trị âm hoặc dương hoặc bằng “0” thể hiện tương ứng người dùng “thích” hoặc “không thích” hoặc chưa đánh giá mục tin khiến khi nhìn vào ma trận sẽ thấy trực quan hơn.
- Trên thực tế dữ liệu là rất lớn với hàng triệu người dùng, mục tin và phản hồi, nếu lưu toàn bộ các giá trị này trong một ma trận thì rất tốn bộ nhớ và thời gian. Nếu thay các dấu “?” bằng giá trị trung bình và lại trừ đi chính giá trị đó thì các ô này mang giá trị “0”, ta chỉ việc lưu ma trận với các giá trị khác “0” và vị trí của chúng. Như vậy không những tối ưu bộ nhớ mà việc tính toán ma trận tương tự sau này cũng dễ dàng và hiệu quả hơn.
Ma trận sau chuấn hóa dữ liệu như sau:
U1 U2 U3 M4 U5 M6
k 5 5 1 1 1 ?
Bảng 1. Ma trận User-Item-Feedback
Giả sử có các người dùng và các mục tin trên, các giá trị trong mỗi ô thể hiện số sao mà mỗi người dùng đã đánh giá cho mỗi mục tin với giá trị cao hơn thể hiện mức độ yêu thích cao hơn. Các dấu “?” là các giá trị cần phải dự đoán.
Trong ma trận thường có rất nhiều dấu “?” vì người dùng thường rất lười đánh giá. Do đó ta cần khắc phục bằng cách điền vào các giá trị sao cho không làm ảnh hưởng nhiều tới sự tương đồng giữa các người dùng. Nếu điền giá trị “0” thì giá trị này không phù hợp do 0 tương đương với mức yêu thích thấp nhất. Nếu điền giá trị “2.5” (trung bình cộng của mức đánh giá thấp nhất và cao nhất), thì với các người dùng dễ tính thường cho
Hoàng Thái Hạnh - Lớp K18HTTTC 20
Khóa luận tốt nghiệp Ứng dụng học máy trong xây dựng hệ khuyến nghị tự động 3, 4, 5 sao, mức 2.5 khá là tiêu cực. Còn với những người dùng khó tính thường chỉ cho các mức 1, 2, 3 sao thì mức 2.5 lại quá tích cực cho các mục tin mà họ không thích. [11]
Vì vậy giá trị thích hợp nhất là trung bình cộng các đánh giá do giá trị này sẽ giải quyết được những nhược điểm phía trên. Việc điền này chỉ phục vụ cho việc tính toán trong các bước trung gian chứ không phải là suy luận ra giá trị dự đoán cuối cùng.
5 + 3 + 2 3 5 + 4 + 2 3 2 It1I ~ U2I ~ U3I —
h 3 ? ? 1 ? 3 ⅛ ? 4 1 ? ? 1 ú 2 2 3 4 4 ? ị — rl 3.3 3 3.67 1.67 2 2.5 2 M1 U2 U3 M4 U5 M6 k 1.67 1.33 0.67 -1 -1.5 0 h -0.33 0 0 -1 0 1 ⅛ 0 0.33 0.67 0 0 -1 ú -1.33 -1.67 1.33 2 1.5 0
M1 «2 «3 M4 «5 M6 M1 1 0.95 -0.18 -0.76 -0.98 -0.11 «2 0.95 1 0.94 -0.69 -0.87 -0.22 «3 -0.18 0.94 1 0.5 0.87 -0.29 M4 -0.76 -0.69 0.5 1 0.87 -0.29 «5 -0.98 -0.87 0.87 0.87 1 0 «6 -0.11 -0.22 -0.29 -0.29 0 1
Bảng 2. Ma trận chuẩn hóa (theo điêm trung bình đánh giá của các user)
Hoàng Thái Hạnh - Lớp K18HTTTC 21
Khóa luận tốt nghiệp Ứng dụng học máy trong xây dựng hệ khuyến nghị tự động Tiếp theo ta tính độ tương tự giữa các người dùng theo công thức Cosine hoặc công thức Pearson. Ở đây em xin trình bày theo công thức Pearson (2):
1-67 * 1.33 + (-1.33) * (-1.67) simro.ς,r,β(M1,M2) = , _ _ „ _ _ _ = 0.95 √ 1.672 + ( - 0.3 3) 2 + ( - 1.3 3) 2 √ ( - 1.3 3) 2 + 0.3 3 2 + ( - 1.67) 2 1.67 * 0.67 +(-1.33) * 1.33 simro.ς,r,β(M1,M3) = — , = -0.18 √ 1.6 72 + ( - 0.3 3) 2 + ( - 1.3 3) 2 √ 0.672 + 0.6 72 + 1.3 3 2 , . λ- 1.67 * (—1) + (—0.33) * (—1) + (—1.33) * 2 _ c 0 s ln 1 √ 1.672 + ( - 0.3 3) 2 + ( - 1.3 3) 2 √ ( - 1) 2 + ( - 1) 2+ 2 2
U1 U2 U3 U4 U5 U6 ú 5 5 1 1 1 0.33 *2 3 3.21 2.5 1 2.17 3 3.73 4 1 2.8 3.17 1 ú 2 2 3 4 4 3.33
Bảng 3. Ma trận tương tự giữa các người dùng
Nhận xét:
- Độ tương tự giữa hai người dùng có bản chất như hàm số cosine của góc giữa hai vector nên sẽ là một số thuộc đoạn [-1; 1]. Khi giá trị bằng 1, đây là giá trị cao nhất thể hiện hai người dùng có sở thích hoàn toàn tương tự nhau. Khi giá trị bằng -1, ngược lại là giá trị thấp nhất, lúc này hai người dùng này sẽ có sở thích trái ngược nhau hoàn toàn.
- Ma trận tương tự là ma trận đối xứng vì hàm số cosine là hàm số chẵn. Cũng có thể giải thích là do người dùng U 1 nếu tương tự người dùng U 2 thì điều ngược lại cũng đúng. Các giá trị đối xứng nhau qua đường chéo màu hồng. Chúng đều bằng 1 vì đó là cosine của góc giữa 1 vector và chính nó ( C O S 0 = 1 ).
- Do ma trận ví dụ khá nhỏ, bằng trực quan ta có thể thấy U 1 tương tự U 2 (s ĩ m > 0) và không tương tự các người dùng còn lại (s im < 0) hay U 3 tương tự U4, U 5 và không tương tự các người dùng còn lại,...
Tiếp đến ta tính các giá trị còn thiếu trong ma trận 1a. Giả sử k = 2, tính dự đoán đánh giá của người dùng U 1cho mục tin i 3. Các bước để tính dự đoán như sau:
Hoàng Thái Hạnh - Lớp K18HTTTC 22
Khóa luận tốt nghiệp Ứng dụng học máy trong xây dựng hệ khuyến nghị tự động
1. Xác định các người dùng đã đánh giá mục tin í3là U2, U3, U6.
2. Xác định độ tương tự của người dùng U 1 với các người dùng này trong ma trận 1c lần lượt là 0.95; -0.18; -0.11.
3. Với k = 2, ta lấy hai giá trị độ tương tự lớn nhất với U 1 là 0.95; -0.11 tương ứng với hai người dùng U 2,U 6.
4. Xác định giá trị đã qua chuẩn hóa của hai người dùng U 2 , U 6 đã đánh giá cho mục tin í 3 trong ma trận bảng 2 lần lượt là 0.33 và -1.
5. Áp dụng công thlic ⅛1 , = ^Γ1+ --ɪɪ--- ( 3 ) , ta có:
____ 0.95 * 0.33 + (—0.11) * (—1)
L, ,• = 3.3 3 +---■.---—-÷---— --- ≈ 3.73
u 1,
3=3.3 3+ |0.9 5| + |_ 0 . ι 1∣ ≈3 . 7 3
Như vậy, dự đoán đánh giá của người dùng U 1 cho mục tin í 3 là 3.73. Thực hiện các bước tương tự để tính các giá trị trống còn lại ta được ma trận đầy đủ bảng 4 như sau:
U1 U2 U3 U4 U5 U6 Ĩ1 5 5 2 1 1 ? *2 3 ? ? 1 ? 3 *3 ? 4 1 ? ? 1 Ũ 2 2 3 4 4 ?
Bảng 4. Ma trận dự đoán đầy đủ (theo độ tương tự giữa các user)
3.4.1. b. Thuật toán người láng giềng dựa trên mục tin
Ngược lại với hướng tiếp cận trên, thuật toán người láng giềng dựa trên mục tin sẽ tính toán độ tương tự giữa các mục tin trước rồi mới đưa ra gợi ý những mục tin gần giống với mục tin yêu thích của người dùng hiện hành. Trên thực tế, hướng tiếp cận này được sử dụng nhiều hơn bởi một số hạn chế lớn của hướng tiếp cận dựa trên người dùng như:
- Trên 1 hệ thống, số lượng người dùng luôn lớn hơn số lượng mục tin rất nhiều. Do đó ma trận độ tương tự là rất lớn khiến cho việc lưu trữ ma trận này bất khả thi trong một vài trường hợp.
- Ma trận User-Item-Feedback thường là ma trận thưa mà với số lượng người dùng rất lớn so với số lượng mục tin sẽ dẫn tới chỉ có một vài phần tử đã biết. Như vậy khi có sự thay đổi về rating, việc tính toán ma trận tương tự vốn tốn nhiều thời gian và bộ nhớ sẽ phải thực hiện lại thường xuyên.
Hoàng Thái Hạnh - Lớp K18HTTTC 23
Khóa luận tốt nghiệp Ứng dụng học máy trong xây dựng hệ khuyến nghị tự động Còn với thuật toán người láng giềng dựa trên mục tin:
- Số lượng mục tin thường nhỏ hơn số lượng người dùng, vì vậy ma trận tương tự cũng sẽ nhỏ hơn thuận lợi cho việc tính toán, lưu trữ.
- Vì mỗi mục tin có thể được đánh giá bởi nhiều người dùng nên mỗi hàng của ma trận này sẽ có nhiều phần tử đã biết hơn số phần tử đã biết trong mỗi cột. Do vậy giá trị trung bình của mỗi hàng ít bị thay đổi hơn khi có sự thay đổi về rating dẫn dến việc cập nhật ma trận tương tự có thể được thực hiện ít thường xuyên hơn.
Cũng như cách tiếp cận dựa theo người dùng, độ tương tự giữa hai mục tin i 1 và i2
theo hướng tiếp cận dựa trên mục tin là S im ( i 1, i 2 ) được tính theo công thức Cosine hoặc công thức Pearson như sau:
Simcosine (ι1, ỉ2) cos(t1, t2) ∑u∈U(rui 1 * ri2)
√∑u∈ √∑u∈ , ∑u∈U(ru i-ŋ *(Tui2-rΓ2) Simnearson(UllU2) — r--- --- . _ Γ==---—---— . _ ∑ _„ír . -r~^∖2 ∑ ir . -7^2 √∑u U ∈ (r U i 1 r I1)√∑u U ∈ (r U i2 r I2) Trong đó:
+ U ∈ U là các người dùng đã đánh giá mục tin i 1, i 2. + ru ivà ru ilà đánh giá của người dùng U trên mục tin i 1, i 2.
+ 1Ị1 và 111 là trung bình đánh giá của tất cả các người dùng trên mục tin i 1, i 2. Sau khi tính toán độ tương tự giữa các mục tin, để có thể dự đoán đánh giá của người dùng trên mục tin , ta sử dụng công thức sau:
r... = r- +∑i∈sm ' ^Q⅛-π^ (3-)
u i 1 711 ∑ i2∈xjs im ( i 1 ,i 2 )|
Với Kilà tập k mục tin có độ tương tự gần với mục tin i 1(k láng giềng của i 1). Xét lại ví dụ ở mục a:
U1 U2 U3 U4 U5 U6 → f< k 5 5 1 1 1 ? 2.6 h 3 ? ? 1 ? 3 2.33 h ? 4 1 ? ? 1 2 ú 2 2 3 4 4 ? 3 U1 U2 U3 U4 U5 U6 k 2. 4 2.4 -1.6 -1.6 -1.6 0 h 0.67 0 0 -1.33 0 0.67 I3 0 2 -1 0 0 -1 ú -1 -1 0 1 1 0 k h I3 ú k 1 0.52 0.6 -0.91 h 0.52 1 -0.17 -0.21 ⅛ 0.6 -0.17 1 -0.41 ú -0.91 -0.21 -0.41 1
Thực hiện chuẩn hóa dữ liệu:
Hoàng Thái Hạnh - Lớp K18HTTTC 24
Khóa luận tốt nghiệp Ứng dụng học máy trong xây dựng hệ khuyến nghị tự động
___ 5+5+1+1+1
'■__—2.6
rI3
Sau khi điền vào các ô hồng và trừ đi các ô xanh một giá trị bằng trung bình cộng các đánh giá của mỗi mục tin tương ứng, ta có ma trận giá trị chuẩn hóa như sau:
ị
Bảng 5. Ma trận chuẩn hóa (theo điểm trung bình đánh giá của các item)
Để tính độ tương tự giữa các mục tin, sử dụng công thức (1’):
2.4 *0.67 + (-1.6) *(-1.33)
sιmc05j72g (ι1,12) /——-—-— ---——- - - ---——- - - ---_ /——-— ________________
1 √2 .42 + 2.42 + (- 1.6) 2 + (- 1.6) 2 + (- 1.6) 2√2 * 0.6 72 + (- 1.3 3) 2 = 0.52
M1 U2 U3 M4 U5 U6 k 5 5 1 1 1 2.41 h 3 3.72 1.33 1 0.81 3 h 4.32 4 1 1.05 0.75 1 ú 2 2 3 4 4 3.23
Bảng 6. Ma trận tương tự giữa các mục tin
Hoàng Thái Hạnh - Lớp K18HTTTC 25
Khóa luận tốt nghiệp Ứng dụng học máy trong xây dựng hệ khuyến nghị tự động Tiếp đến ta tính các giá trị còn thiếu trong ma trận 1a. Giả sử k = 2, tính dự đoán đánh giá của người dùng U1cho mục tin i3. Các bước để tính dự đoán như sau:
1. Xác định các người dùng U 1đã đánh giá mục tin ngoài i 3 là i 1, i 2 , i4.
2. Xác định độ tương tự của mục tin i 3với các mục tin này trong ma trận 2c lần lượt là 0.6; -0.17; -0.41.
3. Với k = 2, ta lấy hai giá trị độ tương tự lớn nhất với i 3là 0.6; -0.17 tương ứng với hai mục tin ,
4. Xác định giá trị đã qua chuẩn hóa của hai mục tin i 1, i 2đã được người dùng U1
đánh giá trong ma trận 2b lần lượt là 2.4 và 0.67.
∑ io∈K1S im ( í1 , i2 ) * (ru i-,-r7ζ 5. Áp dụng công thứcfui 1 = 1 1+V 7, I'XfV iZ---( 3 ) , ta có: ∑ i2∈K'i∣s im ( i1,i2 )l 0.6 * 2.4+(-0.17) * 0.67 η, V = 2.6 +---' , , ɪʌ---≈ 4 . 3 2 |0.6| + |- 0.1 7|
Như vậy, dự đoán đánh giá của người dùng U 1cho mục tin i 3là 4.32. Thực hiện các bước tương tự để tính các giá trị trống còn lại ta được ma trận đầy đủ 1d như sau:
3.4.1. c. Thuật toán người láng giềng với ngôn ngữ Python
- File ex.dat lưu dữ liệu đề bài:
Ma trận 1a được lưu thành 3 cột dữ liệu thể hiện lần lượt id của các user, item, rating (feedback). Ví dụ hàng 1 thể hiện U1đánh giá i15 sao.
SI
πe , Λ' 1 . H new 2 uJ I H new 3 J SI new - J H new 5 t3∣ Hweb.sql ũ Hex.dat EJ I
1 115. 2 12 3. 3 14 2. 4 2 15. 5 2 3 4. 6 2 4 2. 7 3 12. 3 3 1. 9 3 4 3. 10 4 11. 11 4 2 1. 12 444. 13 5 11. 14 544. 15 6 2 3. 16 6 3 l.| 1 import pandas as pd 2 import πuπιpy as πp
Sklearn .met ri C S. pairwise import COS in e_s Iinilarity
4 from SCipy iιrport sparse
5 class NBCF(Object):
6 l,""kh⅛ι tạo"""
tíef ____init____{self, data, tỉ,dist_func = COSiiie-Similarityj UiiNN= 1):