Trong chương này, luận văn đã trình bày về phương pháp lọc cộng tác dựa trên sản phẩm, minh họa quá trình xử lý để đưa ra các kết quả tư vấn dựa trên các thuật toán khác nhau. Vấn đề là cần đánh giá chất lượng thuật toán để có thể đưa ra tư vấn chính xác nhất, các yếu tố nào có thể nâng cao được chất lượng tư vấn. Trong chương tiếp theo, luận văn sẽ thử nghiệm các thuật toán tư vấn với bộ dữ liệu tư vấn phim, để đưa ra các kết quả tư vấn, so sánh đánh giá các thuật toán áp dụng trong quá trình tư vấn.
Chương 3
MÔ PHỎNG VÀ ĐÁNH GIÁ CÁC THUẬT TOÁN TƯ VẤN 3.1 Dữ liệu thử nghiệm và phương pháp đánh giá
3.1.1 Mô tả dữ liệu
Mô hình đề xuất được thử nghiệm trên bộ dữ liệu MovieLens. Đây là cơ sở dữ liệu được xây dựng bởi nhóm nghiên cứu GroupLens của trường đại học Minnesota. MovieLans có 943 người dùng, 1682 bộ phim, 100.000 đánh giá, các mức đánh giá cho từ 1 đến 5, mức độ thưa thớt của đánh giá người dùng được tính 1-100000/ (943x1682) = 0.9370. Đánh giá của người dùng được chia thành 5 mức (1, 2, 3, 4, 5), hai mức đánh giá cao thể hiện một người rất thích sản phẩm, mức đánh giá càng thấp thể hiện người dùng không thích sản phẩm đó. Để hạn chế ảnh hưởng của tình trạng dữ liệu quá thưa thớt, dữ liệu chỉ lựa chọn những người dùng có đánh giá ít nhất cho 20 bộ phim.
Các đặc trưng nội dung được phân cụm theo thể loại phim cũng được nhóm GroupLens cung cấp. Trước tiên, toàn bộ tập người dùng được chia thành hai phần, một phần Utrain được sử dụng làm dữ liệu huấn luyện, phần còn lại Utest được sử dụng để kiểm tra. Tập Utrain chứa 80% đánh giá và tập Utetst chứa 20% đánh giá.
Dữ liệu huấn luyện được sử dụng để xây dựng mô hình theo thuật toán mô tả ở trên. Với mỗi người dùng u thuộc tập dữ liệu kiểm tra, các đánh giá (đã có) của người dùng được chia làm hai phần Ou và Pu. Ou được coi là đã biết, trong khi đó Pu là đánh giá cần dự đoán từ dữ liệu huấn luyện và Ou.
3.1.2 Phương pháp đánh giá chất lượng của hệ thống tư vấn
- Sử dụng độ đo MAE (chương 2, mục 2.4.1) để đánh giá chất lượng của tư vấn phim khi áp dụng các thuật toán tính độ tương tự Consine, Adjusted conisine, correlation, Adjusted Euclipdean .
- Sử dụng độ đo chính xác để đánh giá chất lượng của tư vấn phim tương ứng khi áp dụng các thuật toán tính độ tương tự Cosine, Adjusted cosine, correlation, Adjusted Euclipdean.
- Đánh giá độ đo sai số tuyệt đối dựa vào số lượng lân cận tham gia vào quá trình dự đoán dánh giá.
3.1.3 Môi trường và công cụ
- Hệ điều hành Windows 7 32bit, CPU: Corei3 2.26 GHz Ram 2Gb - Ngôn ngữ lập trình: Java
3.2. Cài đặt thuật toán
Dữ liệu MovieLens được lưu trên file định dạng txt, mỗi dòng là 1 đánh giá của 1 người dùng với 1 sản phẩm theo thứ tự UserID, ItemID, Rating. Chương trình dựa vào dữ liệu xây dựng ma trận đánh giá, từ ma trận đánh giá và thuật toán tính độ tương tự để đưa ra ma trận tương tự, từ ma trận tương tự đề xuất danh sách lân cận để tham gia vào quá trình dự đoán đánh giá của 1 người dùng với 1 sản phẩm.
3.2.1 Cài đặt thuật toán tính độ tương tự
- Tính độ tương tự Cosine:
// Input: mảng đánh giá của 2 sản phẩm // Output: Độ tương tự Cosine của 2 sản phẩm
public static float TinhDoTuongTuCosine(float a[],float b[]) {
float kq=0, ab = 0,a2=0,b2=0; for (int i=0; i< a.length;i++) {
if((a[i]!=0) && (b[i]!=0)) { ab = a[i]*b[i] + ab; a2 = a[i]*a[i] + a2; b2 = b[i]*b[i] + b2; } }
kq=(float) (ab / (Math.sqrt(a2) * Math.sqrt(b2))); return kq;
- Tính độ tương tự Cosine điều chỉnh (Adjusted Cosine Similarity):
// Input: mảng đánh giá của 2 sản phẩm
// Output: Độ tương tự Cosine điều chỉnh của 2 sản phẩm
public static float TinhDoTuongTuCosineDieuChinh(float a[],float b[]) {
Float tb, kq=0, ab = 0,a2=0,b2=0; for (int i=0; i< a.length;i++) {
tb= tbDanhGia(i+1); if((a[i]!=0) && (b[i]!=0)) { ab = (a[i]-tb)*(b[i]-tb) + ab; a2 = (a[i]-tb)*(a[i]-tb)+a2; b2 = (b[i]-tb)*(b[i]-tb)+b2; } }
kq=(float) (ab / (Math.sqrt(a2) * Math.sqrt(b2))); return kq;
}
- Tính độ tương tự Euclidean (Adjusted Euclidean Distance):
// Input: mảng đánh giá của 2 sản phẩm
// Output: Độ tương tự Euclidean của 2 sản phẩm
public static float DoTuongTuAdjutedEuclidean(float a[],float b[]) {
float kq=1, Tongab = 0,dolech=0, Vmax=5, Vmin=1; for (int i=0; i< a.length;i++)
{
if((a[i]!=0) && (b[i]!=0)) {
Vmin=DanhGiaNhoNhat(i+1); Tongab=(a[i]-b[i])*(a[i]-b[i]);
dolech = (Vmax-Vmin)*(Vmax-Vmin); }
}
kq= 1- (float) (Math.sqrt(Tongab) / Math.sqrt(dolech)); return kq;
}
- Tính độ tương tự tương quan (Correlation-based similarity):
public static float DoTuongTuTuongQuan(float a[],float b[]) {
float kq=0,tb1,tb2, ab = 0,a2=0,b2=0; tb1=trungbinhR(a);
tb2=trungbinhR(b);
for (int i=0; i< a.length;i++) {
if((a[i]!=0) && (b[i]!=0)) { ab = (a[i]-tb1)*(b[i]-tb2) + ab; a2 = (a[i]-tb1)*(a[i]-tb1)+a2; b2 = (b[i]-tb2)*(b[i]-tb2)+b2; } }
kq=(float) (ab / (Math.sqrt(a2) * Math.sqrt(b2))); return kq;
}
3.2.2 Cài đặt thuật toán dự đoán tư vấn
- Tư vấn dựa trên đánh giá trung bình :
public float DuDoanDanhGiaTrungBinh(int userID,int ItemID) {
float dudoan=0, Stuongtu=0, float S=0; int i,N=0; DanhSachItemTuongTu dsItem = MT_DoTuongTu.getDanhSachLanCan(ItemID, nguongLanCan); if (dsItem==null) return 0;
ItemSim [] listSim = new ItemSim[dsItem.sophantu]; listSim = dsItem.getdanhsachItem(); for(int j=0; j< listSim.length;j++) { i = listSim[j].ItemID; if ((ItemID!=i)&&(MT_DanhGia.tri[userID][i]!=0)) { S = S + MT_DanhGia.tri[userID][i]; N++; } } dudoan= S/N; return dudoan }
- Dự đoán dựa trên đánh giá tổng trọng số (Weighted Sum)
public float DuDoanWeightedSum(int userID, int ItemID) { float dudoan=0; float Stuongtu=0; float S=0; int i; if((MT_DoTuongTu.simi.equals("adjustedcosine"))|| (MT_DoTuongTu.simi.equals("correlation")))
return dudoanWeightedSumAdjusted(userID, ItemID); DanhSachItemTuongTu dsItem = MT_DoTuongTu.getDanhSachLanCan(ItemID, nguongLanCan); if (dsItem==null) return 0;
ItemSim [] listSim = new ItemSim[dsItem.sophantu]; listSim = dsItem.getdanhsachItem(); for(int j=0; j< listSim.length;j++) { i = listSim[j].ItemID; if ((ItemID!=i)&&(MT_DanhGia.tri[userID][i]!=0)) { S = S + MT_DanhGia.tri[userID][i]*MT_DoTuongTu.tri[ItemID][i]; Stuongtu = Stuongtu + Math.abs(MT_DoTuongTu.tri[ItemID][i]); }
}
dudoan= S/Stuongtu; return dudoan
}
- Dự đoán dựa trên tổng trọng số với đánh giá trung bình của người dùng:
public float DuDoanWeightedSumAdjusted(int userID, int ItemID) {
float dudoan=0, Stuongtu=0, float S=0; int i;
DanhSachItemTuongTu dsItem =
MT_DoTuongTu.getDanhSachLanCan(ItemID, nguongLanCan); if (dsItem==null)
return 0;
listSim = dsItem.getdanhsachItem(); for(int j=0; j< listSim.length;j++) { i = listSim[j].ItemID; if ((ItemID!=i)&&(MT_DanhGia.tri[userID][i]!=0)) { S=S+MT_DoTuongTu.tri[ItemID][i]*(MT_DanhGia.tri[userID][i]- tbDanhGiaUser(userID));
Stuongtu = Stuongtu + Math.abs(MT_DoTuongTu.tri[ItemID][i]); }
}
dudoan= tbDanhGiaUser(userID) + S/Stuongtu; return dudoan;
}
- Dự đoán dựa trên tổng trọng số với đánh giá trung bình lên sản phẩm:
public float DuDoanWeightedSumAdjusted(int userID, int ItemID) { float dudoan=0; float Stuongtu=0; float S=0; int i; DanhSachItemTuongTu dsItem = MT_DoTuongTu.getDanhSachLanCan(ItemID, nguongLanCan); if (dsItem==null) return 0;
ItemSim [] listSim = new ItemSim[dsItem.sophantu]; listSim = dsItem.getdanhsachItem();
for(int j=0; j< listSim.length;j++) {
i = listSim[j].ItemID;
{
S=S+MT_DoTuongTu.tri[ItemID][i]*(MT_DanhGia.tri[userID][i]- tbDanhGiaUser(userID));
Stuongtu = Stuongtu+ Math.abs(MT_DoTuongTu.tri[ItemID][i]); }
}
dudoan= tbDanhGiaUser(userID) + S/Stuongtu; return dudoan;
}
3.3 Kết quả thử nghiệm
3.3.1 Thử nghiệm tư vấn với số lượng lân cận khác nhau:
+ Thuật toán dự đoán: Weighted Sum + Dữ liệu đầu vào: 80.000 đánh giá + Số dự đoán: 20.000
+ Sai số độ chính xác: 0.5 Kết quả:
Bảng 3.1: Độ sai số MAE với số lượng lân cận khác nhau
Số lân cận MAE
Cosine Correlation AdjustedEuclidean Adjusted Cosine
1 1.1627 1.1683 1.0752 1.0746 5 0.9300 0.9501 0.8922 0.8726 10 0.8730 0.8903 0.8603 0.8257 50 0.8251 0.8323 0.8313 0.7804 100 0.8371 0.8394 0.8358 0.7773 150 0.8458 0.8465 0.8389 0.7763 200 0.8503 0.8503 0.8407 0.7736 250 0.8522 0.8519 0.8416 0.7724 300 0.8533 0.8528 0.8419 0.7709 350 0.8536 0.8531 0.8420 0.7705 400 0.8538 0.8533 0.8421 0.7704 All 0.8540 0.8535 0.8422 0.7704
Hình 3.1: Biểu đồ sai số lỗi tuyệt đối của hệ thống tư vấn với số lân cận khác nhau Kết quả hình 3.1 cho chúng ta thấy rằng MAE khi tính toán dự đoán với số lượng lân cận ít sẽ rất cao, và khi số lượng lân cân tăng dần đến 50 thì MAE giảm, nhưng khi số lượng lân cận lớn hơn 50 thì chúng ta nhận thấy MAE thay đổi rất nhỏ hoặc trong một số trường hợp làm MAE tăng lên. Qua kết quả chúng ta nhận thấy số lượng lân cận từ 50-100 sẽ cho chất lượng dự đoán tốt hơn.
3.3.2 Thử nghiệm với tư vấn với các độ tương tự khác nhau
+ Số lượng lân cận: 50
+ Thuật toán dự đoán: Weighted Sum + Dữ liệu đầu vào: 80.000 đánh giá + Số dự đoán: 20.000
+ Sai số độ chính xác: 0.5 Kết quả:
Bảng 3.2: Độ sai số MAE với các thuật toán tính độ tương tự khác nhau
Độ đo Cosine Correlation
EuclideanDistanc
e Ajusted Cosine
MAE 0.8131 0.8190 0.8206 0.7622
Độ chính xác 0.3765 0.3740 0.3652 0.4021
Hình 3.2: Biểu đồ sai số MAE của hệ thống tư vấn với các thuật toán tính độ tương tự
Kết quả hình 3.2 và 3.3 cho chúng ta thấy rằng với dự đoán áp dụng thuật toán tính độ tương tự Adjusted Cosine sẽ cho độ sai số MAE thấp và độ chính xác cao hơn khi áp dụng các thuật toán tính toán độ tương tự khác. Kết quả này tương đồng với kết quả mô phỏng trong bài báo [1]. Kết quả cho thấy khi tính toán độ tương tự, sử dụng tính toán trung bình đánh giá sản phẩm sẽ cho kết quả tư vấn tốt hơn.
3.3.3 Thử nghiệm tư vấn với các công thức dự đoán:
+ Số lượng lân cận: 50
+ Dữ liệu đầu vào: 80.000 đánh giá + Số dự đoán: 20.000
+ Sai số độ chính xác: 0.5 Kết quả dự đoán:
Bảng 3.3: Sai số MAE của hệ thống tư vấn với các thuật toán dự đoán
Cosine Correlation Euclidean
Distance Ajusted Cosine MAE ĐCX MAE ĐCX MAE ĐCX MAE ĐCX
Trung bình Đánh Giá 0.810 0.369 0.856 0.366 0.820 0.359 0.779 0.386 WeightedSum 0.810 0.376 0.816 0.374 0.817 0.365 0.759 0.412 WeightedSumAverage 0.760 0.414 0.740 0.413 0.754 0.405 0.752 0.420
Hình 3.5: Biểu đồ độ chính xác của hệ thống tư vấn với các thuật toán dự đoán Kết quả hình 3.4 và 3.5 cho chúng ta thấy thuật toán dự đoán tổng trọng số với trung bình đánh giá sản phẩm có độ MAE thấp và độ chính xác cao hơn các phương pháp còn lại. Kết quả cũng cho thấy sự chênh lệch lớn về độ sai số và độ chính xác số của thuật toán dự đoán theo phương pháp trung bình đánh giá với các các thuật toán dự đoán khác.
3.4 Kết luận chương 3
- Qua mô hình thử nghiệm, kết quả cho thấy hệ thống tư vấn với phương pháp lọc cộng tác dựa trên sản phẩm sử dụng thuật toán tính độ tự Adjusted Cosine có chất lượng tốt hơn các thuật toán khác.
- Có sự ảnh hưởng của số lượng lân cận tham gia vào dự đoán đánh giá sản phẩm, đối với dữ liệu thử nghiệm MovieLens số lân cận từ 50 đến 100 cho chất lượng dự đoán tốt hơn.
- Phương pháp tính dự đoán sử dụng tổng trọng số với trung bình đánh giá sản phẩm có độ lỗi thấp hơn.
- Kết quả thử nghiệm phụ thuộc vào chất lượng của các dữ liệu, độ chính xác của các đánh giá.
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Hệ thống tư vấn là một hệ thống đang phát triển trong rất nhiều lĩnh vực đặc biệt là thương mại điện tử. Hệ thống tư vấn ngày càng được nâng cao về chất lượng và giảm thời gian xử lý nhằm đáp ứng nhu cầu tư vấn sản phẩm, dịch vụ cho người dùng.
Luận văn đã trình bày ứng dụng phương pháp lọc cộng tác dựa trên sản phẩm trong hệ thống tư vấn. Mục tiêu là tìm hiểu đánh giá các thuật toán trong hệ thống tư vấn, qua đó nâng cao được chất lượng tư vấn.
Luận văn tìm hiểu quá trình tư vấn của hệ thống tư vấn, các vấn đề khi giải quyết bài toán tư vấn trong thực tế, mô phỏng và thử nghiệm được phương pháp lọc cộng tác dựa trên sản phẩm với các giải thuật khác nhau, từ đó đánh giá kết quả tư vấn của thuật toán.
Luận văn đưa ra những yếu tố ảnh hưởng đến chất lượng hệ thống tư vấn như độ thưa thớt dữ liệu, số lân cận, giải thuật tính độ tương tự và phương pháp dự đoán.
Tuy nhiên, luận văn vẫn còn nhiều điểm hạn chế, luận văn chỉ đang ở mức độ nghiên cứu, tìm hiểu, mô phỏng thử nghiệm, chưa cài đặt ứng dụng trong hệ thống tư vấn thực tế. Những hạn chế này đã đưa ra một số hướng mở cho đề tài tiếp tục phát triển như sau:
- Tiếp tục tìm hiểu một số thuật toán liên quan đến hệ thống tư vấn
- Tiếp tục nghiên cứu một số giải thuật tính độ tương tự và giải thuật dự đoán - Xây dựng ứng dụng thực tế để áp dụng giải thuật lọc cộng tác vào hệ thống tư vấn sản phẩm dịch vụ cụ thể.
TÀI LIỆU THAM KHẢO
1. Badrul Sarwar, George Karypis, Joseph Konstan, and John Riedl (2001),
“Item-Based Collaborative Filtering Recommendation”, WWW10, pp. 285-295.
2. Dietmar Jannach, Markus Zanker, Alexander Felfernig, Gerhard Friedrich
(2011), Recommender Systems, Cambridge University Press, pp. 185-195.
3. FaQing Wu, Liang He, Lei Ren, WeiWei Xia, “An Effective Similarity Measure for Collaborative Filtering” (2008), Granular Computing, pp. 659 - 664.
4. Francesco Ricci, Lior Rokach and Bracha Shapira (2011), Recommender Systems Handbook, Ben-Gurion University of the Negev, pp. 566-618.
5. Gediminas Adomavicius, Alexander Tuzhilin (2005), “Toward the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions”. IEEE Transactions On Knowledge And Data Engineering, Vol. 17, No. 6, (June 2005), pp. 734-749.
6. Greg Linden, Brent Smith, and Jeremy York (2003), “Item-to-Item Collaborative Filtering”, IEEE Internet Computing , 7(1), pp. 76-80.
7. Huifeng Sun, Yong Peng, Junliang Chen, Chuanchang Liu, Yuzhuo Sun (2011), “A New Similarity Measure Based on Adjusted Euclidean Distance for Memory-based Collaborative Filtering”, JSW, 6 (6), pp. 993-1000.
8. Jun Wang , Arjen P. de Vries, Marcel J.T. Reinders (2006), “Unifying User-
based and Item-based Collaborative Filtering Approaches by Similarity
Fusion”, Proceedings of the 29th Annual International ACM SIGIR Conference
on Research and Development in Information Retrieval, pp. 501-508.
9. Mohammad Khabbaz, Laks V.S. Lakshmanan (2011),”Top-k Algorithms for
Item-based Collaborative Filtering”,14th International Conference on Extending Database Technology, pp. 213-224.
10. Yueping Wu, Jianguo Zheng, ”Collaborative Filtering Recommendation
Algorithm Based on Improved Similarity Measure Method”, Informatics and