Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 45 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
45
Dung lượng
1,36 MB
Nội dung
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG KHOA CÔNG NGHỆ THÔNG TIN o0o - BÀI TẬP LỚN HỆ THỐNG GỢI Ý CÔNG NGHỆ THÔNG TIN ĐỀ TÀI: Tìm hiểu Hệ thống gợi ý dựa kỹ thuật lọc cộng tác User-User ứng dụng Giảng viên hướng dẫn Nhóm Thực Hiện : NGUYỄN TUẤN ANH : Hà Văn Thông Ngô Hà Như Nguyễn Đức Dũng Thái Nguyên, ngày … tháng 12 năm 2021 LỜI CẢM ƠN Đầu tiên, em xin gửi lời cảm ơn chân thành tri ân sâu sắc quý thầy cô trường Đại học Công nghê thông tin Truyền thông Thái Ngun nói chung thầy khoa Cơng nghệ thơng tin trường nói riêng tạo điều kiện cho chúng em thực báo cáo tiểu luận Và đặc biệt chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy giáo ThS Nguyễn Tuấn Anh người trực tiếp giúp đỡ, quan tâm, hướng dẫn em hoàn thành tốt báo cáo thời gian qua Sau cùng, em xin kính chúc quý thầy dồi sức khỏe, đạt nhiều thành tích cao công tác giảng dạy Chúc Trường Đại học Công nghệ thông tin Truyền thông Thái Nguyên niềm tin, nên tảng vững cho nhiều hệ sinh viên bước đường học tập Trong q trình làm báo cáo tiểu luận khó tránh khỏi sai sót, mong thầy bỏ qua Đồng thời trình độ lý luận kinh nghiệm thực tiễn hạn chế nên báo cáo khơng tránh khỏi thiếu sót, em mong nhận ý kiến đóng góp thầy, để em học hỏi thêm nhiều kinh nghiệm để hoàn thành tốt báo cáo thực tập tới Em xin chân thành cảm ơn! MỞ ĐẦU • Lý chọn đề tài Với tốc độ phát triển thương mại điện tử giới đặc biệt nước phát triển Việt Nam nay, mơ hình kinh doanh qua mạng ngày phổ biến khắp nơi Lượng sách, báo, tạp chí, tài liệu, hình ảnh, âm thanh, video, sản phẩm dịch vụ đăng tải lên mạng internet thông qua hệ thống giao dịch điện tử ngày khổng lồ dẫn đến tình trạng q tải thơng tin Lượng liệu q lớn gây khơng khó khăn cho người dùng việc đưa nên mua hay xem sản phẩm phù hợp với nhu cầu Nhằm hạn chế ảnh hưởng trình q tải thơng tin người dùng thúc đẩy lĩnh vực nghiên cứu lọc thông tin Lọc thông thông tin loại bỏ thông tin không quan trọng cung cấp thông tin thích hợp đến với người dùng Lọc thơng tin xem phương pháp hiệu hạn chế tình trạng q tải thơng tin quan tâm Xuất phát từ nhu cầu thực tế hệ thống gợi ý đời, Hệ thống gợi ý (Recommender systems) phân lớp hệ thống lọc thông tin Hệ thống đưa gợi ý sản phẩm theo nhu cầu cá nhân người dùng dựa hành vi thực khứ, dựa tổng hợp ý kiến người dùng khác Vì vậy, cần thiết phải sử dụng hệ thống gợi ý : Hệ thống gợi ý phát triển theo nhiều cách tiếp cận khác Một hướng tiếp cận tập trung nghiên cứu áp dụng thành công nhiều hệ gợi ý phương pháp lọc cộng tác (Collaborative filtering) Thực chất, lọc cộng tác hình thức tư vấn tự động cách dựa tương tự người dùng sản phẩm hệ thống đưa dự đoán quan tâm người dùng tới sản phẩm, đưa gợi ý sản phẩm cho người dùng • Mục tiêu nghiên cứu Nghiên cứu ứng dụng phương pháp lọc cộng tác tốn Tập trung vào phân tích, so sánh, đánh giá hiệu phương pháp lọc cộng tác users – users ứng dụng tốn lập trình • Đối tượng phạm vi nghiên cứu Đối tượng: Phương pháp lọc cộng tác,lập trình Python: Khảo sát đánh giá hiệu thuật toán lọc cộng tác dựa người dùng thuật tốn • Phương pháp nghiên cứu - Đọc tài liệu, phân tích, tổng hợp - Thu thập liệu, thống kê, phân tích liệu - Mô đánh giá kết Kết hợp nghiên cứu lý thuyết, tìm hiểu tình hình ứng dụng, đánh giá khả ứng dụng đề xuất giải pháp • Ý nghĩa khoa học thực tiễn đề tài Nghiên cứu phương pháp lọc cộng tác Chứng minh khả ứng dụng lọc cộng tác users – users cho ví dụ xây dựng mã nguồn Với mục tiêu trên, luận văn trình bày ba chương Chương 1: Cơ sở lý thuyết Chương giới thiệu sở lý thuyết hệ thống gợi ý Chương 2: Phương pháp thuật lọc cộng tác user – user Chương trình bày phương pháp lọc cộng tác user – user Chương 3: Ứng dụng phương pháp lọc cộng tác user – user để xây dựng mã nguồn Python Chương cài đặt mã nguồn thử nghiệm phương pháp lọc cộng tác user – user MỤC LỤC LỜI CẢM ƠN MỞ ĐẦU CHƯƠNG I: CƠ SỞ LÝ THUYẾT 1.1 Tổng quản hệ thống gợi ý 1.1.1 Giới thiệu hệ thống gợi ý 1.1.2 Bài toán tư vấn người dùng .9 1.1.3 Qui trình xây dựng hệ tư vấn 11 1.2 Các phương pháp lọc tin .12 1.2.1 Phân loại hệ thống tư vấn .12 1.2.2 Phương pháp tư vấn dựa nội dung 13 1.2.3 Phương pháp tư vấn dựa lọc cộng tác 19 1.2.4 Tư vấn dựa cách tiếp cận kết hợp .25 1.3 Kiến trúc tổng quát hệ thống lọc thông tin .27 1.4 Ứng dụng phương pháp lọc tin hệ thống tư vấn 28 1.5 Kết luận chương 30 CHƯƠNG II: HỆ THỐNG GỢI Ý DỰA TRÊN PHƯƠNG PHÁP LỌC USER – USER 31 2.1 Giới thiệu Hệ thống gợi ý 31 2.1.1 Lọc dựa kỹ thuật lọc cộng tác user - user 31 2.2 chức .32 2.3 Mức độ 35 2.3 Một số hạn chế User-user CF: .36 CHƯƠNG III: LẬP TRÌNH LỌC CỘNG TÁC TRÊN PYTHON .37 4.1 Class CF 37 4.2 Áp dụng 42 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .44 TÀI LIỆU THAM KHẢO 45 DANH MỤC HÌNH ẢNH Hình 1: ứng dụng hệ thống gợi ý Hình 2: Ví dụ ma trận đánh giá tổng qt 10 Hình 3: Phân loại hướng tiếp cận xây dựng hệ thống gợi ý .13 Hình 4: Minh họa phương pháp tư vấn dựa lọc nội dung 14 Hình 5: Minh họa phương pháp tư vấn dựa lọc cộng tác 20 Hình 6: Quy trình hệ thống tư vấn dựa lọc cộng tác .21 Hình 7: Kiến trúc tổng quát hệ thống lọc thông tin 27 Hình 8: Hệ thống gợi ý sản phẩm Amazon 30 Hình 9: Sơ đồ gợi ý sản phẩm hướng tiếp cận lọc dựa kỹ thuật lọc cộng tác 31 Hình 10: Ví dụ mô tả User-user Collaborative Filtering a) Utility Matrix ban đầu b) Utility Matrix chuẩn hoá c) User similarity matrix d) Dự đốn (normalized) ratings cịn thiếu e) Ví dụ cách dự đốn normalized rating u1u1 cho i1i1 f) Dự đốn (denormalized) ratings cịn thiếu 33 CHƯƠNG I: CƠ SỞ LÝ THUYẾT 1.1 Tổng quản hệ thống gợi ý 1.1.1 Giới thiệu hệ thống gợi ý Hệ thống gợi ý (Recommender Systems – RS) phân tích thơng tin sở thích người dùng (user) sản phẩm (item) để cung cấp khuyến nghị item phù hợp với mong muốn sở thích người dùng Trên thực tế, hệ thống gợi ý cố gắng thu thập sở thích người dùng mơ hình hóa tương tác người dùng sản phẩm Hệ thống gợi ý sử dụng thông tin sản phẩm tri thức chuyên gia hay tri thức khai phá liệu học từ hành vi người dùng để đưa gợi ý sản phẩm mà họ thích hàng ngàn hàng vạn sản phẩm có hệ thống Các website thương mại điện tử ví dụ như: sách, phim, nhạc, báo, sử dụng hệ thống gợi ý để cung cấp thông tin giúp cho người dùng định lựa chọn sản phẩm Các sản phẩm gợi ý dựa số lượng sản phẩm bán, dựa thông tin cá nhân người dùng, dựa phân tích hành vi mua hàng trước người dùng để đưa dự đoán hành vi mua hàng tương lai khách hàng Các dạng gợi ý bao gồm: gợi ý sản phẩm tới người tiêu dùng, thơng tin sản phẩm mang tính cá nhân hóa, tổng kết ý kiến cộng đồng, cung cấp chia sẻ, phê bình, đánh giá mang tính cộng đồng liên quan tới yêu cầu, mục đích người dùng Rất nhiều hệ thống lớn thu thập thông tin phản hồi từ khách hàng cách tường minh, Ebay, Amazon, LastFM, NetFlix, Youtube, người dùng trực tiếp đánh giá sản phẩm, bình chọn từ ★ (khơng thích) đến ★ ★★★ (rất thích); hay Youtube thu thập thơng tin qua like/disklike, hệ thống khác Thông qua việc thu thập phản hồi tường minh, hệ thống dễ dàng xác định mức độ yêu thích người dùng sản phẩm, từ dự đốn sản phẩm mà người dùng thích để gợi ý cho họ Tuy nhiên, điều gây bất lợi người dùng lúc sẵn sàng/vui lịng để lại phản hồi họ, hệ thống phải nên tự xác định người dùng cần thơng qua phản hồi tiềm ẩn Một số ứng dụng hệ tư vấn tiếng giới giới thiệu Hình 1.1 Hình 1: ứng dụng hệ thống gợi ý Trong kỹ thuật lọc cộng tác CF (Collaborative Filtering), việc đưa khuyến nghị sản phẩm người dùng xác định dựa quan điểm người dùng có sở thích với người dùng Hệ thống lọc cộng tác biểu diễn người dùng dựa đánh giá họ tập sản phẩm Hệ thống lựa chọn người dùng sở thích tùy thuộc vào độ đo tương tự tương quan Sau đó, đưa dự đốn sản phẩm chưa người dùng đánh giá quan tâm Cuối hệ thống gợi ý sản phẩm với mức độ dự đoán cao cho người dùng mục tiêu Kỹ thuật CF khẳng định thành công nhiều nghiên cứu thực nghiệm nhiều ứng dụng thực tế Hệ thống gợi ý dạng hệ hỗ trợ định, cung cấp giải pháp mang tính cá nhân hóa mà khơng phải trải qua q trình tìm kiếm phức tạp Hệ gợi ý học từ người dùng gợi ý sản phẩm tốt số sản phẩm phù hợp 1.1.2 Bài toán gợi ý người dùng Cho tập hợp hữu hạn gồm 𝑁 người dùng 𝑈 = {𝑢1 , 𝑢1 , … , 𝑢𝑁 } 𝑀 sản phẩm 𝑃 = {𝑝1 , 𝑝2 , … , 𝑝𝑀 } Mỗi người dùng 𝑢𝑖 ∈ 𝑈 (với 𝑖 = 1, 2, … , 𝑁) biểu diễn thông qua |𝑇| đặc trưng nội dung 𝑇 = {𝑡1, 𝑡2, … , 𝑡|𝑇|} Các đặc trưng 𝑡𝑞 ∈ 𝑇 thông thường thông tin cá nhân người dùng Ví dụ 𝑢𝑖 ∈ 𝑈 người dùng đặc trưng nội dung biểu diễn người dùng 𝑢𝑖 T={giới tính, độ tuổi, nghề nghiệp, trình độ,…} Mỗi sản phẩm 𝑝𝑥 ∈ 𝑃 (với 𝑥 = 1, 2, … 𝑀) hàng hóa, phim, ảnh, tạp chí, tài liệu, sách, báo, dịch vụ dạng thông tin mà người dùng cần đến Mỗi sản phẩm 𝑝𝑥 ∈ 𝑃 biểu diễn thông qua |𝐶| đặc trưng nội dung 𝐶 = { 𝑐1, 𝑐2, …, 𝑐|𝐶|} Các đặc trưng 𝑐𝑠 ∈ 𝐶 nhận từ phương pháp trích chọn đặc trưng lĩnh vực truy vấn thơng tin Ví dụ 𝑝𝑥 ∈ 𝑃 phim đặc trưng nội dung biểu diễn phim 𝑝𝑥 𝐶 = {thể loại phim, nước sản xuất, hãng phim, diễn viên, đạo diễn, …} Mối quan hệ tập người dùng 𝑈 tập sản phẩm 𝑃 biểu diễn thông qua ma trận đánh giá 𝑅 = [𝑟𝑖𝑥 ] với 𝑖 = 1, 2, … , 𝑁; 𝑥 = 1, 2, … , 𝑀 (Hình 1.2) Người dùng Sản phẩm … i … 𝑀 2 0 0 0 0 0 0 0 ? u N 𝑎 Hình 2: Ví dụ ma trận đánh giá tổng quát Giá trị 𝑟𝑖𝑥 thể đánh giá người dùng 𝑢𝑖 ∈ 𝑈 cho số sản phẩm 𝑝𝑥 ∈ 𝑃 Thông thường giá trị 𝑟𝑖𝑥 nhận giá trị thuộc miền 𝐹 = { 1, 2, … , 𝑔} thu thập trực tiếp cách hỏi ý kiến người dùng thu thập gián tiếp thông qua chế phản hồi người dùng Những giá trị 𝑟𝑖𝑥 = hiểu người dùng 𝑢𝑖 ∈ 𝑈 chưa biết đến không đánh giá sản phẩm 𝑝𝑥 ∈ 𝑃, ô điền ký tự “?” giá trị cần hệ tư vấn đưa dự đoán đánh giá Tiếp đến, ta ký hiệu 𝑃𝑖 𝑃 tập sản phẩm 𝑝𝑥 ∈ 𝑃 đánh giá người dùng 𝑢𝑖 ∈ 𝑈 𝑢𝑎 ∈ 𝑈 gọi người dùng thời, người dùng cần tư vấn hay người dùng tích cực Khi đó, tồn hai dạng tốn điển hình hệ tư vấn là: - Dự đoán đánh giá người dùng 𝑢𝑎 với sản phẩm chưa có đánh giá trước - Tư vấn danh sách ngắn sản phẩm phù hợp với người dùng thời Cụ thể người dùng 𝑢𝑎, hệ tư vấn chọn 𝐾 sản phẩm 𝑝𝑥 ∈ (𝑃\𝑃𝑎) phù hợp với người dùng 𝑢𝑎 để gợi ý cho họ CHƯƠNG II: HỆ THỐNG GỢI Ý DỰA TRÊN PHƯƠNG PHÁP LỌC USER – USER 2.1 Giới thiệu hệ thống gợi ý 2.1.1 Lọc dựa kỹ thuật lọc cộng tác user - user Lọc cộng tác gợi ý sản phẩm u thích người có độ tương quan phù hợp Hình 9: Sơ đồ gợi ý sản phẩm hướng tiếp cận lọc dựa kỹ thuật lọc cộng tác 2.2 chức Công việc quan trọng phải làm trước tiên User-user Collaborative Filtering phải xác định giống (similarity) hai users Dữ liệu có Utility matrix YY, nên giống phải xác định dựa cột tương ứng với hai users ma trận Xét ví dụ Hình Hình 1: Ví dụ utility matrix dựa số user rate cho item Một cách trực quan, hành vi u0u0 giống với u1u1 u2,u3,u4,u5,u6u2,u3,u4,u5 ,u6 Từ dự đốn u0u0 quan tâm tới i2i2 u1u1 quan tâm tới item Giả sử có users từ u0u0 đến u6u6 items từ i0i0 đến i4i4 số vng thể số mà user rated cho item với giá trị cao thể mức độ quan tâm cao Các dấu hỏi chấm giá trị mà hệ thống cần phải tìm Đặt mức độ giống hai users ui,ujui,uj sim(ui,uj)sim(ui,uj) Quan sát nhận thấy u0,u1u0,u1 thích i0,i1,i2i0,i1,i2 khơng thích i3,i4i3,i4 cho Điều ngược lại xảy users cịn lại Vì vậy, similiarity function tốt cần đảm bảo: sim(u0,u1)>sim(u0,ui), ∀i>1.sim(u0,u1)>sim(u0,ui), ∀i>1 Từ đó, để xác định mức độ quan tâm u0u0 lên i2i2, nên dựa hành vi u1u1 lên sản phẩm Rất may u1u1 thích i2i2 nên hệ thống cần recommend i2i2 cho u0u0 Câu hỏi đặt là: hàm số similarity tốt? Để đo similarity hai users, cách thường làm xây dựng feature vector cho user áp dụng hàm có khả đo similarity hai vectors Chú ý việc xây dựng feature vector khác với việc xây dựng item profiles Content-based Recommendation Systems Các vectors xây dựng trực tiếp dựa Utility matrix không dùng liệu ngồi item profiles Với user, thơng tin biết ratings mà user thực hiện, tức cột tương ứng với user Utility matrix Tuy nhiên, khó khăn cột thường có nhiều mising ratings user thường rated số lượng nhỏ items Cách khắc phục cách đó, ta giúp hệ thống điền giá trị cho việc điền không làm ảnh hưởng nhiều tới giống hai vector Việc điền phục vụ cho việc tính similarity khơng phải suy luận giá trị cuối Vậy dấu ‘?’ nên thay giá trị để hạn chế việc sai lệch nhiều? Một lựa chọn bạn nghĩ tới thay dấu ‘?’ giá trị ‘0’ Điều khơng thực tốt giá trị ‘0’ tương ứng với mức độ quan tâm thấp Một giá trị an tồn 2.5 trung bình cộng 0, mức thấp nhất, 5, mức cao Tuy nhiên, giá trị có hạn chế users dễ tính khó tính Với users dễ tính, thích tương ứng với sao, khơng thích chút, chẳng hạn Việc chọn giá trị 2.5 khiến cho items lại negative user Điều ngược lại xảy với user khó tính cho cho items họ thích cho items họ khơng thích Một giá trị cho việc trung bình cộng ratings mà user tương ứng thực Việc tránh việc users q khó tính dễ tính, tức lúc có items mà user thích so với items khác Hãy xem ví dụ Hình 2a) 2b) Hình 10: Ví dụ mơ tả User-user Collaborative Filtering a) Utility Matrix ban đầu b) Utility Matrix chuẩn hoá c) User similarity matrix d) Dự đốn (normalized) ratings cịn thiếu e) Ví dụ cách dự đốn normalized rating u1u1 cho i1i1 f) Dự đoán (denormalized) ratings cịn thiếu Chuẩn hố liệu: Hàng cuối Hình 2a) giá trị trung bình ratings cho user Giá trị cao tương ứng với user dễ tính ngược lại Khi đó, tiếp tục trừ từ rating giá trị thay giá trị chưa biết 0, ta normalized utility matrix Hình 2b) Bạn thắc mắc bước chuẩn hoá lại quan trọng, câu trả lời đây: Việc trừ trung bình cộng cột khiến trong cột có giá trị dương âm Những giá trị dương tương ứng với việc user thích item, giá trị âm tương ứng với việc user không thích item Những giá trị tương ứng với việc chưa xác định liệu user có thích item hay không Về mặt kỹ thuật, số chiều utility matrix lớn với hàng triệu users items, lưu toàn giá trị ma trận khả cao khơng đủ nhớ Quan sát thấy số lượng ratings biết trước thường số nhỏ so với kích thước utility matrix, tốt lưu ma trận dạng sparse matrix, tức lưu giá trị khác không vị trí chúng Vì vậy, tốt hết, dấu ‘?’ nên thay giá trị ‘0’, tức chưa xác định liệu user có thích item hay khơng Việc khơng tối ưu nhớ mà việc tính toán similarity matrix sau hiệu Sau chuẩn hoá liệu trên, vài similiraty function thường sử dụng là: Cosine Similarity: Đây hàm sử dụng nhiều nhất, quen thuộc với bạn Nếu bạn không nhớ cơng thức tính coscos góc hai vector u1,u2u1,u2 chương trình phổ thơng, cơng thức: cosine_similarity(u1,u2)=cos(u1,u2)=uT1u2||u1||2.||u2||2 (1)cosine_similarity(u1,u2)=cos(u 1,u2)=u1Tu2||u1||2.||u2||2 (1) Trong u1,2u1,2 vectors tương ứng với users 1, chuẩn hoá Có tin vui python có hàm hỗ trợ tính tốn hàm số cách hiệu Độ similarity hai vector số đoạn [-1, 1] Giá trị thể hai vector hoàn toàn similar Hàm số coscos góc nghĩa góc hai vector 0, tức vector tích số dương với vector lại Giá trị coscos -1 thể hai vector hoàn toàn trái ngược Điều hợp lý , tức hành vi hai users hoàn toàn ngược thi similarity hai vector thấp Ví dụ cosine_similarity users Hình 2b) cho Hình 2c) Similarity matrix SS ma trận đối xứng coscos hàm chẵn, user A giống user B điều ngược lại Các ô màu xanh đường chéo coscos góc vector nó, tức cos(0)=1cos(0)=1 Khi tính tốn bước sau, không cần quan tâm tới giá trị Tiếp tục quan sát vector hàng tương ứng với u0,u1,u2u0,u1,u2, thấy vài điều thú vị: u0u0 gần với u1u1 u5u5 (độ giống dương) users lại Việc similarity cao u0u0 u1u1 dễ hiểu hai có xu hướng quan tâm tới i0,i1,i2i0,i1,i2 items lại Việc u0u0 gần với u5u5 đầu vơ lý u5u5 đánh giá thấp items mà u0u0 đánh giá cao (Hình 2a)); nhiên nhìn vào ma trận utility chuẩn hố Hình 2b), ta thấy điều hợp lý Vì item mà hai users cung cấp thông tin i1i1 với giá trị tương ứng tích cực u1u1 gần với u0u0 xa users lại u2u2 gần với u3,u4,u5,u6u3,u4,u5,u6 xa users lại Từ similarity matrix này, phân nhóm users làm hai nhóm (u0,u1)(u0,u1) (u2,u3,u4,u5,u6)(u2,u3,u4,u5,u6) Vì ma trận SS nhỏ nên dễ dàng quan sát thấy điều này; số users lớn hơn, việc xác định mắt thường khơng khả thi Việc xây dựng thuật tốn phân nhóm users (users clustering) trình bày viết Có ý quan trọng số lượng users lớn, ma trận SS lớn nhiều khả khơng có đủ nhớ để lưu trữ, lưu nửa số phần tử ma trận đối xứng Với trường hợp đó, user, cần tính lưu kết hàng similarity matrix, tương ứng với việc độ giống user users cịn lại 2.3 Mức độ Việc xác định mức độ quan tâm user lên item dựa users gần Khi làm việc với large-scale problems, thấy thêm phương pháp lười học Knearest neighbors (KNN) sử dụng nhiều tính đơn giản Tất nhiên, khơng thể trực tiếp sử dụng KNN mà cần phải làm thêm nhiều bước trung gian Tương tự KNN, Collaborative Filtering, missing rating xác định dựa thông tin kk neighbor users Tất nhiên, quan tâm tới users rated item xét Predicted rating thường xác định trung bình có trọng số ratings chuẩn hố Có điểm cần lưu ý, KNN, trọng số xác định dựa distance điểm, distance số khơng âm Trong đó, CF, trọng số xác định dựa similarity hai users, trọng số nhỏ Hình 2c) Cơng thức phổ biến sử dụng để dự đoán rating uu cho ii là: ^yi,u=∑uj∈N(u,i)¯yi,ujsim(u,uj)∑uj∈N(u,i)|sim(u,uj)| (2)y^i,u=∑uj∈N(u,i)y¯i,ujsim(u,uj)∑ uj∈N(u,i)|sim(u,uj)| (2)(sự khác biết so với trung bình có trọng số mẫu số có sử dụng trị tuyệt đối để xử lý số âm) N(u,i)N(u,i) tập hợp kk users neighborhood (tức có similarity cao nhất) uu mà rated ii Hình 2d) thể việc điền giá trị cịn thiếu normalized utility matrix Các màu đỏ thể giá trị dương, tức items mà users quan tâm Ở đây, tơi lấy ngưỡng 0, hồn tồn chọn ngưỡng khác Một ví dụ việc tính normalized rating u1u1 cho i1i1 cho Hình 2e) với số nearest neighbors k=2k=2 Các bước thực là: Xác định users rated i1i1, u0,u3,u5u0,u3,u5 Xác định similarities u1u1 với users ta nhận 0.83,−0.40,−0.230.83,−0.40,−0.23 Hai (k=2k=2) giá trị lớn 0.830.83 −0.23−0.23 tương ứng với u0u0 u5u5 Xác định normalized ratings u0,u5u0,u5 cho i1i1, ta thu hai giá trị 0.750.75 0.50.5 Dự đoán kết quả: ^yi1,u1=0.83×0.75+(−0.23)×0.50.83+|−0.23|≈0.48y^i1,u1=0.83×0.75+(−0.23)×0.50.83+|−0.2 3|≈0.48 Việc quy đổi giá trị ratings chuẩn hố thang thực cách cộng cột ma trận ^YY^ với giá trị rating trung bình user tính Hình 2a) Việc hệ thống định recommend items cho user xác định nhiều cách khác Có thể xếp unrated items theo thứ tự tự lớn đến bé predicted ratings, chọn items có normalized predicted ratings dương - tương ứng với việc user có nhiều khả thích 2.3 Một số hạn chế lợi ích User-user CF: Trên thực tế, số lượng users lớn số lượng items nhiều Kéo theo Similarity matrix lớn với số phần tử phải lưu giữ nửa bình phương số lượng users (chú ý ma trận đối xứng) Việc này, đề cập trên, khiến cho việc lưu trữ ma trận nhiều trường hợp không khả thi Ma trận Utility YY thường sparse Với số lượng users lớn so với số lượng items, nhiều cột ma trận sparse, tức có vài phần tử khác Lý users thường lười rating Cũng việc này, user thay đổi rating rate thêm items, trung bình cộng ratings vector chuẩn hoá tương ứng với user thay đổi nhiều Kéo theo đó, việc tính tốn ma trận Similarity, vốn tốn nhiều nhớ thời gian, cần thực lại Ngược lại, tính tốn similarity giữacác items recommend items gần giống với item u thích user có lợi ích sau: Vì số lượng items thường nhỏ số lượng users, Similarity matrix trường hợp nhỏ nhiều, thuận lợi cho việc lưu trữ tính tốn bước sau Vì số lượng phần tử biết Utility matrix số hàng ( items) số cột (users), nên trung bình, hàng ma trận có nhiều phần tử biết số phần tử biết cột Việc dễ hiểu item rated nhiều users Kéo theo đó, giá trị trung bình hàng bị thay đổi có thêm vài ratings Như vậy, việc cập nhật ma trận Similarity Matrix thực thường xuyên CHƯƠNG III: LẬP TRÌNH LỌC CỘNG TÁC TRÊN PYTHON Lập trình theo hướng Hướng Đối Tượng cho class CF Class sử dụng cho chung cho Items – Items User-user CF Dưới mơ tả liệu biết cho ví dụ Thứ tự ba cột user_id, item_id, rating Ví dụ, hàng nghĩa u_0 rates i_0 số Khi làm việc với Users – Users CF, cần đổi vị trí hai cột để nhận ma trận chuyển vị 4.1 Class CF Khởi tạo Class CF: Dữ liệu đầu vào hàm khởi tạo class CF ma trận Utility Y_data lưu dạng ma trận với cột, k số lượng điểm lân cận sử dụng để dự đoán kết dist_func hàm similarity hai vectors, mặc định cosine_similarity lấy từ sklearn.metrics.pairwise Bạn đọc thử với giá trị k hàm dist_func khác Biến uuCF thể việc sử dụng User-user CF (1) hay Item-item CF(0) import pandas as pd import numpy as np from sklearn.metrics.pairwise import cosine_similarity from scipy import sparse class CF(object): """docstring for CF""" def init (self, Y_data, k, dist_func = cosine_similarity, uuCF = 1): self.uuCF = uuCF # user-user (1) self.Y_data = Y_data if uuCF else Y_data[:, [1, 0, 2]] self.k = k # self.dist_func = dist_func self.Ybar_data = None self.n_users = int(np.max(self.Y_data[:, 0])) + self.n_items = int(np.max(self.Y_data[:, 1])) + Khi có liệu mới, cập nhận Utility matrix cách thêm hàng vào cuối Utility Matrix Để cho đơn giản, giả sử khơng có users hay items mới, khơng có ratings bị thay đổi def add(self, new_data): """Cập nhật ma trận Y_data có xếp hạng Để đơn giản, giả sử khơng có người dùng mục """ self.Y_data = np.concatenate((self.Y_data, new_data), axis = 0) Tính tốn normalized utility matrix Similarity matrix def normalize_Y(self): users = self.Y_data[:, 0] # tất người dùng - col Y_data self.Ybar_data = self.Y_data.copy() self.mu = np.zeros((self.n_users,)) for n in xrange(self.n_users): ids = np.where(users == n)[0].astype(np.int32) item_ids = self.Y_data[ids, 1] ratings = self.Y_data[ids, 2] m = np.mean(ratings) if np.isnan(m): m = # để tránh mảng trống với giá trị null self.Ybar_data[ids, 2] = ratings - self.mu[n] # tạo thành ma trận xếp hạng dạng ma trận thưa thớt Thưa thớt quan trọng # cho nhớ hiệu tính tốn Ví dụ: # người dùng = triệu, # #item = 100k, hình dạng ma trận xếp hạng (100k, triệu), # bạn khơng có đủ nhớ để lưu trữ thơng tin Sau đó, thay vào đó, chúng tơi lưu trữ Chỉ # nonzeros tất nhiên, vị trí chúng self.Ybar = sparse.coo_matrix((self.Ybar_data[:, 2], (self.Ybar_data[:, 1], self.Ybar_data[:, 0])), (self.n_items, self.n_users)) self.Ybar = self.Ybar.tocsr() def similarity(self): self.S = self.dist_func(self.Ybar.T, self.Ybar.T) Thực lại hàm phía có thêm liệu def refresh(self): """Chuẩn hóa liệu tính tốn lại ma trận tương tự (sau số xếp hạng thêm vào) self.normalize_Y() self.similarity() def fit(self): """ self.refresh() Dự đoán kết quả: Hàm pred hàm dự đoán rating mà User u cho item i cho trường hợp User-user CF Vì trường hợp Item-item CF, cần hiểu ngược lại nên hàm pred thực đổi vị trí hai biến pred Để cho API đơn giản, cho pred phương thức private, gọi class CF; pred phương thức public, thứ tự biến đầu vào (user, item), phương pháp sử dụng User-user CF hay Item-item CF def pred(self, u, i, normalized = 1): """ dự đoán xếp hạng người dùng u cho mục i (chuẩn hóa) bạn cần un """ # Step 1: tìm tất người dùng xếp hạng i ids = np.where(self.Y_data[:, 1] == i)[0].astype(np.int32) # Step 2: users_rated_i = (self.Y_data[ids, 0]).astype(np.int32) # Step 3: tìm điểm tương đồng người dùng người khác sim = self.S[u, users_rated_i] # Step 4: tìm K người dùng khơng giống a = np.argsort(sim)[-self.k:] # mức độ tương tự tương ứng nearest_s = sim[a] # xếp hạng mục i r = self.Ybar[i, users_rated_i[a]] if normalized: # thêm sô nhỏ , ví dụ, 1-8 để tránh chia cho return (r*nearest_s)[0]/(np.abs(nearest_s).sum() + 1e-8) return (r*nearest_s)[0]/(np.abs(nearest_s).sum() + 1e-8) + self.mu[u] def pred(self, u, i, normalized = 1): """ Dự đoán xếp hạng người dùng u cho mục i """ if self.uuCF: return self. pred(u, i, normalize) return self. pred(i, u, normalize) Tìm tất items nên gợi ý cho user u trường hợp User-user CF, tìm tất users có khả thích item u trường hợp Item-item CF def recommend(self, u, normalized = 1): """Xác định tất mục nên đề nghị cho người dùng u (uuCF = 1) tất người dùng quan tâm đến mục u (uuCF = 0) Quyết định đưa dựa tất tơi: self.pred (u, i)> Giả sử xem xét mục mà chưa đánh giá u """ ids = np.where(self.Y_data[:, 0] == u)[0] items_rated_by_u = self.Y_data[ids, 1].tolist() recommended_items = [] for i in xrange(self.n_items): if i not in items_rated_by_u: rating = self. pred(u, i) if rating > 0: recommended_items.append(i) return recommended_items In toàn kết quả: def print_recommendation(self): """in tất mục nên đề xuất cho người dùng """ print 'giới thiệu: ' for u in xrange(self.n_users): recommended_items = self.recommend(u) if self.uuCF: print ' Recommend item(s):', recommended_items, 'to user', u else: print ' Recommend item', u, 'to user(s) : ', recommended_items Source code cho class tìm thấy 4.2 Áp dụng Áp dụng với User-user CF : # data file r_cols = ['user_id', 'item_id', 'rating'] ratings = pd.read_csv('ex.dat', sep = ' ', names = r_cols, encoding='latin-1') Y_data = ratings.as_matrix() rs = CF(Y_data, k = 2, uuCF = 1) rs.fit() rs.print_recommendation() Kết quả: Recommendation: Recommend item(s): [2] to user Recommend item(s): [1] to user Recommend item(s): [] to user Recommend item(s): [4] to user Recommend item(s): [4] to user Recommend item(s): [0, 3, 4] to user Recommend item(s): [1] to user Kết quả: Recommendation: Recommend item to user(s) : [] Recommend item to user(s) : [1] Recommend item to user(s) : [0] Recommend item to user(s) : [5] Recommend item to user(s) : [3, 4, 5] KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Kết luận: Luận văn đạt kết sau: - Trình bày khái qt hệ thống tư vấn theo phương pháp lọc cộng tác toán xây dựng hệ thống gợi ý sản phẩm bán hàng - Giới thiệu phương pháp lọc công tác dựa sản phẩm, phân tích q trình xử lý để đưa kết tư vấn dựa thuật toán khác - Thử nghiệm cài đặt thử nghiệm phương pháp lọc cộng tác sản phẩm cho website bán hàng thời trang Hướng phát triển: Hướng mở đề tài tiếp tục phát triển: - Nghiên cứu phương pháp lọc cộng tác phương pháp đa nhiệm ứng dụng - Phương pháp kết hợp lọc cộng tác lọc nội dung dựa mơ hình đồ thị - Nghiên cứu phát triển phương pháp lọc cộng tác mờ dựa người dùng TÀI LIỆU THAM KHẢO [1] [1] Recommendation Systems - Stanford InfoLab [2] [2] Collaborative Filtering - Stanford University [3] [3] Recommendation systems - Machine Learning - Andrew Ng [4] [4] Ekstrand, Michael D., John T Riedl, and Joseph A Konstan “Collaborative filtering recommender systems.” Foundations and Trends® in Human–Computer Interaction 4.2 (2011): 81-173 ... gợi ý dựa phương pháp lọc cộng tác user – user CHƯƠNG II: HỆ THỐNG GỢI Ý DỰA TRÊN PHƯƠNG PHÁP LỌC USER – USER 2.1 Giới thiệu hệ thống gợi ý 2.1.1 Lọc dựa kỹ thuật lọc cộng tác user - user Lọc cộng. .. 30 CHƯƠNG II: HỆ THỐNG GỢI Ý DỰA TRÊN PHƯƠNG PHÁP LỌC USER – USER 31 2.1 Giới thiệu Hệ thống gợi ý 31 2.1.1 Lọc dựa kỹ thuật lọc cộng tác user - user 31 2.2... tế hệ thống gợi ý đời, Hệ thống gợi ý (Recommender systems) phân lớp hệ thống lọc thông tin Hệ thống đưa gợi ý sản phẩm theo nhu cầu cá nhân người dùng dựa hành vi thực khứ, dựa tổng hợp ý kiến