Chương 2. CƠ SỞ LÝ THUYẾT
2.2. Cơ sở lý thuyết
2.2.7. Hệ thống khuyến nghị
Các Recommendation Systems thường được chia thành hai nhóm lớn:
• Content-based: Khuyến nghị dựa trên đặc tính các sản phẩm người dùng đã mua
34
như hãng sản phẩm và loại sản phẩm. Chẳng hạn một user rất thích sử dụng sản phẩm của hãng Samsung thì khi đó sẽ gơi ý cho user đó sản phẩm trong cơ sở dữ liệu có chung đặc tính đều là sản phẩm của Samsung tới user này. Cách khuyến nghị này yêu cầu chúng ta phải sắp xếp các sản phẩm vào từng nhóm hoặc đi tìm các đặc trưng của từng sản phẩm. Tuy nhiên, có những sản phẩm không có nhóm cụ thể và việc xác định nhóm hoặc đặc trưng của từng sản phẩm đôi khi là rất khó.
• Collaborative Filtering: hệ thống sẽ gợi ý sản phẩm dựa trên sự tương quan giữa các users với nhau hoặc giữa sản phẩm với nhau thông qua điểm đánh giá của sản phẩm mà khách hàng đã đánh giá. Hệ thống khuyến nghị các sản phẩm sẽ được khuyến nghị đến user dựa trên sở thích của một user khác. Ví dụ: Khách hàng A, B, C đều thích các sản phẩm của Samsung vì khách hàng A,B,C đều đã mua và đánh giá tốt cho sản phẩm Samsung. Ngoài ra, hệ thống biết rằng khách hàng B, C cũng thích sản phẩm của Apple nhưng chưa có thông tin về việc liệu khách hàng A có thích sản phẩm Apple hay không. Khi dựa trên mối quan hệ User-User thì dựa trên sở thích của khách hàng B và C thì khi đó hệ thống sẽ dự đoán khách hàng A cũng sẽ thích sản phẩm Apple khi đó sẽ gợi ý cho khách hàng A những sản phẩm của Apple.
a. Content-based systems:
• Utility Matrix
Trong Recommendation Systems chúng ta có hai thực thể chính là user và sản phẩm. Mỗi user sẽ có mức độ quan tâm tới từng sản phẩm khác nhau. Mức độ quan tâm của khách hàng đối với sản phẩm nếu đã biết trước được gán cho một giá trị ứng với mỗi cặp user-item. Giả sử rằng mức độ quan tâm của khách hàng dành cho sản phẩm sẽ được đo bằng giá trị rating của khách hàng đó đối với sản phẩm. Tập hợp tất cả các ratings, bao gồm cả những giá trị chưa biết cần được dự đoán, tạo nên một ma trận gọi là Utility Matrix. Để xây dựng hệ thống khuyến nghị thì việc xây dựng Utility Matrix là vô cùng quan trọng vì nếu không có Utility Matrix thì hệ thống sẽ không hoạt động hoặc sẽ hoạt động kém chính xác.
Bảng 2.3: Ma trận Utility Matrix
A B C D E F
Samsung
5 ? 1 0 0 ?
Galaxy S7 Samsung
4 4 ? 1 ? 1
Note 8 Samsung
? 5 0 ? ? 2
Galaxy S10
Iphone 7 2 2 5 4 5 ?
Iphone 8 2 1 5 ? ? ?
Trong thực tế sẽ có những khách hàng sẽ ít hoặc sẽ không đánh giá cho bất kỳ sản phẩm nào cho nên số lượng dấu “?” của Utility Matrix sẽ rất nhiều. Tuy nhiên muốn hệ thống khuyến nghị đạt được độ chính xác cao thì số lượng “?” trong Utility Matrix càng ít thì đạt độ hiệu quả càng cao. Việc của hệ thống sẽ điền giá trị vào giá trị
“?” để ra được khuyến nghị cho người dùng
• Xây dựng Utility Matrix
Nếu không có Utility Matrix thì chúng ta sẽ khó mà gợi ý ra những sản phẩm đến cho khách hàng mà đảm bảo sản phẩm đó khách hàng sẽ thích ngoài trừ gợi ý những sản phẩm đạt được điểm đánh giá cao từ khách hàng. Vì vậy, trong các Recommender Systems, việc xây dựng Utility Matrix là tối quan trọng. Tuy nhiên, việc xây dựng ma trận này thường có gặp nhiều khó khăn. Có hai hướng tiếp cận phổ biến để xác định giá trị rating cho mỗi cặp user-item trong Utility Matrix:
1) Dựa vào điểm đánh giá của khách hàng dành cho sản phẩm. Tuy nhiên, cách tiếp cận này có một vài hạn chế, vì thường thì người dùng ít khi rate sản phẩm. Và nếu có, đó có thể là những đánh giá thiên lệch bởi những người sẵn sàng rate.
2) Hướng tiếp cận thứ hai là dựa trên những hoạt động của khách hàng. Nếu khách hàng nhấn click vào xem sản phẩm đó nhiều lần hoặc mua một sản phẩm thì cũng có thể khẳng định người dùng thích sản phẩm đó. Thường thì với cách này, ta chỉ xây dựng được một ma trận với các thành phần là 1 và 0, với 1 thể hiện người dùng thích sản phẩm, 0 thể hiện chưa có thông tin. Trong trường hợp này, 0 không có nghĩa là thấp hơn 1, nó chỉ có nghĩa là ngừời
dùng chưa cung cấp thông tin. Chúng ta cũng có thể xây dựng ma trận với các giá trị cao hơn 1 thông qua thời gian hoặc số lượt mà người dùng
xem một sản phẩm nào đó.
• Item profiles: đặc tính của sản phẩm
Hệ thống Content-based là dựa trên nội dung của mỗi sản phẩm, chúng ta cần xây dựng nội dung cho mỗi item. Nội dung này được biểu diễn dưới dạng toán học là một feature vector. Trong những trường hợp đơn giản, feature vector được trực tiếp trích xuất từ sản phẩm.
Ví dụ, xem xét các features của một sản phẩm mà có thể được sử dụng trong các Recommendation Systems:
1) Hãng của mỗi sản phẩm. Cùng là điện thoại nhưng có người thích điện thoại của Samsung, có người lại thích điện thoại của Apple.
2) Loại của mỗi sản phẩm. Cùng là một hãng nhưng có người thích điện thoại của hãng này hơn là máy tính bảng, người khác lại thích máy tính bảng hơn là điện thoại.
Trong Hình ở Utility Matrix phía trên, chúng ta đơn giản hoá bài toán bằng việc xây dựng một feature vector hai chiều cho mỗi sản phẩm: chiều thứ nhất là hãng Samsung, chiều thứ hai là hãng Samsung. Đặt các feature vector cho mỗi sản phẩm là x1, x2, x3, x4, x5. Giả sử các feature vector (ở dạng hàng) cho mỗi bài hát được cho trong bảng dưới đây:
37
Bảng 2.4: Tìm feature vector
A B C D E F Feature vector
Samsung
5 ? 1 0 0 ? X1 = [0.99,0.02]
Galaxy S7 Samsung
4 4 ? 1 ? 1 X2 = [0.91,0.11]
Note 8 Samsung
? 5 0 ? ? 2 X3 = [0.95,0.05]
Galaxy S10
Iphone 7 2 2 5 4 5 ? X4 = [0.01,0.99]
Iphone 8 2 1 5 ? ? ? X5 = [0.03,0.98]
User’s
⊝ 1 ⊝ 2 ⊝ 3 ⊝ 4 ⊝ 5 ⊝ 6 model
Bài toán đi tìm mô hình θi cho mỗi user có thể được coi là một bài toán Regression trong trường hợp ratings là một dải giá trị hoặc bài toán Classification trong trường hợp ratings là một vài trường hợp cụ thể. Dữ liệu training để xây dựng mỗi mô hình θi là các cặp (item profile, ratings) tương ứng với các items mà user đó đã đánh giá. Việc điền các giá trị còn thiếu trong ma trận Utility chính là việc dự đoán đầu ra cho các unrated items khi áp dụng mô hình θi lên chúng.
• Ưu điểm: hệ thống khuyến nghị được xây dựng dựa trên thuộc tính của mỗi sản phẩm không phụ thuộc vào các user khác. Đồng thời điều đó có thể tận dụng các thông tin đặc trưng của mỗi sản phẩm.
• Nhược điểm: thuộc tính của mỗi sản phẩm không phải lúc nào cũng có vì không phải lúc nào user cũng sẵn sàng đánh giá cho sản phẩm.
b. User-user Collaborative filtering
Similarity functions: việc quan trọng nhất phải làm trước tiên trong phương pháp khuyến nghị này là phải xác định được sự giống nhau giữa hai tài khoản. Dữ liệu duy nhất chúng ta có là ma trận Utility Matrix, vậy nên sự giống nhau này phải được xác định dựa trên các cột tương ứng với hai users trong ma trận này.
Bảng 2.5: Điểm đánh giá của User đối với sản phẩm
A B C D E F
Samsung
5 ? 1 0 0 ?
Galaxy S7 Samsung
4 4 ? 1 ? 1
Note 8 Samsung
? 5 0 ? ? 2
Galaxy S10
Iphone 7 2 2 5 4 5 ?
Iphone 8 2 1 5 ? ? ?
Giả sử có các users từ A đến F và các sản phẩm từ Samsung Galaxy S7 đến Iphone 8 trong đó các số trong mỗi ô vuông thể hiện số sao mà mỗi user đã đánh giá cho sản phẩm với số điểm đánh giá cao hơn thể hiện mức độ quan tâm cao hơn. Các dấu hỏi chấm là các giá trị mà hệ thống cần phải đi tìm. Đặt mức độ giống nhau của hai users ui,uj là sim(ui,uj).
Quan sát đầu tiên chúng ta có thể nhận thấy là các A, B thích Samsung Galaxy S7, Samsung Note 8, Samsung Galaxy S10 và không thích Iphone 7, Iphone8. Điều ngược lại xảy ra ở các users còn lại. Vì vậy, một similiarity function tốt cần đảm bảo:
sim(A,B)>sim(A,ui), ∀ui thuộc C, D, E, F
Chúng ta dùng công thức tính cos của góc giữa vector của 2 user từ đó để xác định mức độ quan tâm của A với sản phẩm Samsung Galaxy S10, chúng ta nên dựa trên số điểm của B lên sản phẩm này từ đó sẽ gợi ý sản phẩm đó cho A.
Để lấy được sự tương đồng giữa hai users, cách thường làm là xây dựng feature vector cho mỗi user rồi áp dụng một hàm có khả năng đo similarity giữa hai vectors đó. Điều khác biệt giữa việc xây dựng feature vector này khác với việc xây dựng item profiles ở phương pháp Content-based là được xây dựng trực tiếp dựa trên Utility Matrix chứ không dùng dữ liệu thuộc tính của sản phẩm để xây dưng. Với mỗi user, thông tin duy nhất chúng ta biết là các đánh giá mà user đó đã thực hiện, tức cột tương ứng với user đó trong Utility Matrix. Tuy nhiên, không phải lúc nào user đánh giá nhiều sản phẩm mà chỉ đánh giá một số lượng nhỏ sản phẩm nên thường sẽ thiếu rất nhiều đánh giá.
39
Chúng ta có thể thay dấu chấm hỏi bằng giá trị 2.5 là an toàn nhất vì đó là giá trị trung bình của đánh giá . Tuy nhiên, giá trị này có những khuyết điểm là những khách hàng dễ tính hoặc khó tính. Với các khách hàng dễ tính, quan tâm một sản phẩm tương ứng với 5 sao, không quan tâm có thể ít sao hơn 1 chút. Việc chọn giá trị 2.5 sẽ khiến cho các sản phẩm còn lại là quá tiêu cực đối với user đó. Điều ngược lại xảy ra với những user khó tính hơn khi chỉ cho 3 sao cho các items họ thích và ít sao hơn cho những items họ không thích.
Một giá trị khả dĩ hơn cho việc này là trung bình cộng của các ratings mà user tương ứng đã thực hiện. Việc này sẽ tránh được việc users quá khó tính hoặc dễ tính, tức lúc nào cũng có những items mà một user thích hơn so với những items khác.
• Chuẩn hoá dữ liệu
Bảng 2.6: Tính giá trị trung bình đánh giá của từng user
A B C D E F
Samsung
5 ? 1 0 0 ?
Galaxy S7 Samsung
4 4 ? 1 ? 1
Note 8 Samsung
? 5 0 ? ? 2
Galaxy S10
Iphone 7 2 2 5 4 5 ?
Iphone 8 2 1 5 ? ? ?
3.25 3 2.75 1.66 2.5 1.5
Hàng cuối cùng từ bảng là giá trị trung bình của ratings cho mỗi user. Giá trị cao tương ứng với các user dễ tính và ngược lại. Sau đó chúng ta sẽ lấy giá trị đánh giá của khách hàng trừ đi đánh giá trung bình còn giá trị chưa biết sẽ có giá trị là 0, ta sẽ được normalized Utility Matrix như bảng dưới:
40
A B C D E F
Samsung
1.75 0 -1.75 -1.66 -2.5 0
Galaxy S7 Samsung
0.75 1 0 -0.66 0 -0.5
Note 8 Samsung
0 2 -2.75 0 0 0.5
Galaxy S10
Iphone 7 -1.25 -1 2.25 2.34 2.5 0
Iphone 8 -1.25 -2 2.25 0 0 0
Sau khi trừ vậy chúng ta sẽ thu được 2 giá trị riêng biệt hoàn toàn là giá trị âm và giá trị dương. Giá trị dương sẽ phản ánh user quan tâm đến sản phẩm đó và ngược lại nếu là giá trị âm là không quan tâm sản phẩm đó. Còn giá trị 0 là giá trị thể hiện chưa biết là khách hàng có quan tâm đến sản phẩm hay không.
Sau khi đã chuẩn hoá dữ liệu như trên, một vài similiraty function thường được sử dụng là:
• Cosine Similarity
Chúng ta dùng công thức tính cos của góc giữa hai vector 4,6:
C0D0EFG0HI(KL,KM) = cos( 4, 6) =
4R 6
‖ 4‖6 . ‖ 6‖6
Trong đó 4,6 là vectors tương ứng với users 1, 2 đã được chuẩn hoá như ở trên.
Độ similarity của hai vector là 1 số trong đoạn [-1, 1]. Hàm số cos của một góc bằng 1 nghĩa là góc giữa hai vector bằng 0, tức độ tương đồng của hai vector hoàn toàn giống nhau và ngược lại nếu cho giá trị bằng -1 thì thể hiện độ tương đồ của hai vector hoàn toàn khác nhau. Điều này cho thấy khi sở thích của hai users hoàn toàn trái ngược nhau thi độ tương đồng giữa hai vector đó là thấp nhất.
Bảng 2.8: Ma trận Similarity matrix S
A B C D E F
A 1 0.55 - 0.67 - 0.82 - 0.826 -0.2
B 0.55 1 - 0.88 - 0.23 - 0.25 - 0.13
C - 0.67 - 0.88 1 0.42 0.55 0.26
D - 0.82 - 0.23 0.42 1 0.84 0.16
E - 0.826 - 0.25 0.55 0.84 1 0
F -0.2 - 0.13 0.26 0.16 0 1
Cosine_similarity của các users trong normalized Utility Matrix được biến đổi thành ma trận Similarity matrix. Similarity matrix S là một ma trận đối xứng vì cos là một hàm chẵn, và nếu user A giống user B thì điều ngược lại cũng đúng. Sẽ có những giá trị bằng 1 vì cos giữa 1 vecto thi có góc là cos(0) = 1. Chúng ta quan sát tất cả các vector còn lại thì nhận ra sẽ chưa thành hai nhóm riêng biệt:
- A với B có độ tương đồng giống nhau (độ giống nhau là số dương) do cả hai đều có xu hướng thích sản phẩm của Samsung.
- Các user B, C, D, E, F đều có độ tương đồng giống nhau vì các user đó đều có đánh giá tốt cho sản phẩm Apple.
- A với B có đô tương phản với các user còn lại vì A với B đánh giá không thích với sản phẩm của Apple và ngược lại.
• Rating prediction
Xác định mức độ quan tâm của một user lên một item dựa trên các users gần nhất, Collaborative Filtering chỉ quan tâm tới các users đã rated item đang xét.
Predicted rating thường được xác định là trung bình có trọng số của các ratings đã chuẩn hoá. Dựa trên cơ sở từ nguồn đại học Stanford [17], Zheng Wen [15] và Jeff Ullman [16] nhóm dùng công thức được sử dụng để dự đoán rating của u cho i là:
U = ∑KW∈ (\,]) V0,KW $ ,Y)
0,K ∑KW∈ (\,])^ $ , Y)^
Chúng ta sẽ dùng công thức trên để tìm ra độ quan tâm của user A dành cho sản phẩm Samsung Galaxy S10 dựa vào thực nghiệm lấy số nearest neighbors tăng dần ngưỡng cho đến khi nào kết quả giảm thì lấy ngưỡng là k=2. Các bước thực hiện là:
42
1) Xác định các users đã đánh giá cho Samsung Galaxy S10, đó là B C F.
2) Xác định similarities của A với các users này ta nhận được 0.55, −0.67,-0.2. Hai (k=2) giá trị lớn nhất là 0.55 và -0.2 tương ứng với B và F.
3) Xác định các normalized ratings của B, F cho Samsung Galaxy S10, ta thu được hai giá trị lần lượt là 2 và 0.5.
4) Dự đoán kết quả:
0L, 4=
0.55 ∗ 2 + (−0.2 ∗ 0.5)
0.55 + 0.2
5) Chúng ta được giá trị trương đồng của user A vs Samsung Galaxy S10 sau đó điền vào ma trận normalized utility. Sau đó ta lấy độ tương đồng đó cộng với trung bình đánh giá của user A là 3.25 thì ta được điểm dự đoán của User A cho sản phẩm Samsung Galaxy S10 là 4.58 điểm.