Tìm hiểu hệ thống gợi ý dựa trên kỹ thuật lọc cộng tác user user và ứng dụng

49 161 0
Tìm hiểu hệ thống gợi ý dựa trên kỹ thuật lọc cộng tác user  user và ứng dụng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tốc độ phát triển của thương mại điện tử trên thế giới đặc biệt là những nước đang phát triển như Việt Nam hiện nay, mô hình kinh doanh qua mạng ngày càng 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 và dịch vụ được đăng tải lên mạng internet thông qua các hệ thống giao dịch điện tử ngày càng khổng lồ dẫn đến tình trạng quá tải thông tin.

ĐẠ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 Giangr viên hướng dẫn: Nhóm Thực Hiện: 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 giáo ThS – 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 cô 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! Thái Nguyên, Ngày tháng 12 năm 2021 Sinh viên thực MỞ ĐẦU • Lý chọn đề tà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 q 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 demo 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 DANH MỤC HÌNH ẢNH 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ự đố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 độ u thích người dùng sản phẩm, từ dự đoá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 khơng phả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ự đoá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 tư vấn 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) Sản phẩm … � i … 2 0 0 0 0 0 N gư ời dù ng u N � 3dụ ma5trận đánh giá?tổng quát Hình 2: Ví 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ọ Việc giải toán tư vấn thực theo qui trình xây dựng hệ tư vấn mục 1.1.3 1.1.3 Qui trình xây dựng hệ tư vấn Qui trình tổng quát để giải tốn tư vấn thơng thường gồm có giai đoạn thể sau: Giai đoạn 1: Thu thập thông tin Ba loại thông tin thường thu thập cho hệ tư vấn, gồm có: - Người dùng (User) biểu diễn thơng qua đặc trưng thông tin cá nhân Thông qua biểu diễn này, hệ thống cho phép xây dựng hồ sơ người dùng (user’s profile) nhằm lưu trữ lại dấu vết đặc trưng nội dung sản phẩm sử dụng người dùng - Sản phẩm (Item) biểu diễn thông qua đặc trưng thông tin sản phẩm Thông qua biểu diễn này, hệ thống cho phép xây dựng hồ sơ sản phẩm (item’s profile) nhằm lưu trữ lại dấu vết đặc trưng người dùng sử dụng sản phẩm - Phản hồi người dùng với sản phẩm (Feedback), biểu diễn thông qua giá trị đánh giá người dùng với sản phẩm Giai đoạn 2: Xây dựng mơ hình Giai đoạn xây dựng mơ hình tư vấn thực nhiều hướng tiếp cận khác nhằm so sánh, đánh giá mối liên hệ thông tin thu thập giai đoạn Một số hướng tiếp cận điển hình biết đến như: dựa vào kinh nghiệm, học máy, lý thuyết xấp xỉ, Mỗi hướng tiếp cận khai thác thông tin đầu vào theo cách khác hình thành phương pháp tư vấn khác Giai đoạn 3: Dự đoán đánh giá / Đưa tư vấn Dữ liệu đầu giai đoạn dùng để dự đoán đánh giá người dùng với sản phẩm chưa có đánh giá trước chọn � sản phẩm phù hợp người dùng thời để gợi ý cho họ đ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(u1,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ự đố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.23|≈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ế 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 toá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 xun 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ự đố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ử 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 quát 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 ... dùng dựa phương pháp lọc cộng tác 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 ý. .. 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... thức dựa nội dung dựa cộng tác cách tách biệt với kết hợp dự đoán chúng - Kết hợp vài đặc tính dựa nội dung vào phương pháp dựa cộng tác - Kết hợp vài đặc tính dựa cộng tác vào phương pháp dựa

Ngày đăng: 11/12/2021, 23:09

Mục lục

    DANH MỤC HÌNH ẢNH

    1.1 Tổng quản về 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

    1.1.3 Qui trình xây dựng hệ tư vấn

    Giai đoạn 1: Thu thập thông tin

    Giai đoạn 2: Xây dựng mô hình

    Giai đoạn 3: Dự đoán đánh giá / Đưa ra tư vấn

    1.2. Các phương pháp lọc tin

    1.2.1. Phân loại hệ thống tư vấn