Mỗi hàng trên tương ứng với feature vector của một bộ phim.
Kết quả dự đoán: Dự đốn rating cho user có id là 100, kết quả dự đốn là:
Hình 6.6: Kết quả dự đốn theo Content – based Tính tốn RMSE cho tập dữ liệu train và dữ liêu test, kết quả là:
Hình 6.7: RMSE của Content – based
c. Neighborhood - based Recommendation System
Neighborhood – based là một trong hai phương pháp phổ biển của Collaborative Filtering. Ý tưởng cơ bản là xác định mức độ quan tâm của một user tới một item dựa trên các users khác gần giống với user này. Việc gần giống nhau giữa các users có thể được xác định thông qua mức độ quan tâm của các users này tới các items khác mà hệ thống đã biết. Ví dụ, A và B đều thích phim Cơ bé lọ lem, tức đều rate bộ phim này 5 sao. Đồng thời cũng đã biết A thích phim Hoa Mộc Lan, vậy nhiều khả năng B cũng thích bộ phim này.
Ở đây, trong hệ thống gợi ý Neighborhood – based Collaborative Filtering hai câu hỏi quan trọng nhất đó là:
- Làm thế nào xác định được mức độ giống nhau giữa các users?
- Khi đã xác định được các users gần giống nhau rồi, làm thế nào dự đoán được mức độ quan tâm của một user lên một item?
Việc xác định mức độ quan tâm của mỗi user tới một item dựa trên mức độ quan tâm của các users tương tự tới item đó cịn được gọi là User – user Collaborative Filtering. Có một hướng tiếp cận khác là Item – item Collaborative Filtering. Trong hướng tiếp cận này, thay vì xác định sự giống nhau giữa các users, hệ thống sẽ xác định sự giống nhau giữa các item. Từ đó, hệ thống gợi ý những items gần giống với những items mà user có mức độ quan tâm cao.
Hình 6.8: Bảng số sao user u rate cho item i
Giả sử có các user từ u0 đến u6 và các item từ i0 đến i4, trong đó các số trong mỗi ơ vng thể hiện số sao mà mỗi user đã rate cho item với giá trị càng cao thể hiện mức độ quan tâm cao. 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 2 user ui, uj là sim(ui, uj)
Quan sát qua ta có thể nhận thấy là u0 , u1 thích i0, i1, i2 và khơng thích i3 , i4 cho lắm. Điều ngược lại xảy ra ở các user cịn lại. Vì vậy, một similarity function tốt cần được đảm bảo: sim(u0, u1) > sim(u0, ui), ∀i > 1.
Từ đó, để xác định mức độ quan tâm của u0 lên i2, chúng ta nên dựa trên hành vi của u1 lên sản phẩm này. Vì u1 thích i2 nên hệ thống cần gợi ý i2 cho u0.
Câu hỏi đặt ra là: hàm số similarity như thế nào là tốt? Để đo similarity giữa 2 user, cách thường làm là xây dựng feature vector cho mỗi user rồi áp dụng 1 hàm có khả năng đo similarity giữa 2 vector đó. Chú ý rằng việc feature vector này khác với việc xây dựng item profile như trong Content-based System. Các vector này được xây dựng trực tiếp dựa trên utility matrix chứ khơng dùng dữ liệu ngồi như item profile. Với mỗi user, thông tin duy nhất mà chúng ta biết là các rating mà user đó đã thực hiện, tức cột tương ứng vì mỗi user thường chỉ rate một số lượng rất nhỏ các item. Cách khắc phục là bằng cách nào đó, ta giúp hệ thống điền các giá trị này sao cho việc điền không làm ảnh hưởng nhiều tới sự giống nhau giữa 2 vector. Việc điền này chỉ phục vụ cho việc tính similarity chứ khơng phải là suy luận ra giá trị cuối cùng.
Vậy mỗi dấu ‘?’ nên được thay bằng giá trị nào để hạn chế việc sai lệch quá nhiều? Một lựa chọn có thể nghĩ tới là thay các dấu ‘?’ bằng giá trị ‘0’. Điều này khơng thực sự tốt vì giá trị ‘0’ tương ứng với mức độ quan tâm thấp nhất. Một giá trị an tồn hơn là 2.5 vì nó là trung bình cộng của 0, mức thấp nhất, và 5, mức cao nhất. Tuy nhiên, giá trị này có hạn chế đối với những user dễ tính hoặc khó tính. Với các user dễ tính, thích tương ứng với 5 sao, khơng thích có thể ít sao hơn 1 chút, 3 sao chẳng hạn. Việc chọn giá trị 2.5 sẽ khiến cho các item còn lại là negative đố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 item họ thích và ít sao hơn cho những item họ khơng thích. Để giải quyết vấn đề này, ta có thể chọn 1 giá trị khả dĩ hơn là trung bình cộng các rating mà user tương ứng đã thực hiện. Việc này tránh được việc user q khó tính hoặc q dễ tính, tức lúc nào cũng có những item mà 1 user thích hơn so với những item khác.
Các bước thực hiện:
- Xây dựng Utility Matrix ban đầu (Hình 6.9 a) - Chuẩn hóa Utility Matrix (Hình 6.9 b)
- Xây dựng User Similarity Matrix (Hình 6.9 c)
- Dự đốn các rating (normalized) cịn thiếu (Hình 6.9 d) - Ví dụ về cách dự đốn normalized rating của u1 cho i1. - Dự đốn các rating (denormalized) cịn thiếu (Hình 6.9 f)
Hình 6.9: Mơ tả các bước thực hiện User – user Collaborative Filtering
Xây dựng Utility Matrix ban đầu: Đọc dữ liệu items từ file u.item, dữ liệu train từ ub.base,
dữ liệu test từ ub.test. Thứ tự của các cột trong mỗi dòng dữ liệu là user_id, item_id, rating.
Chuẩn hóa dữ liệu: Hàng cuối cùng trong Hình 4.10 a) là giá trị trung bình của rating cho
mỗi user. Giá trị cao tương ứng với các user dễ tính và ngược lại. Khi đó nếu tiếp tục trừ từ mỗi rating đi giá trị này và thay các giá trị chưa biết bằng 0, ta sẽ được ma trận chuẩn hố như Hình 4.10 b). Đây là một bước quan trọng vì:
- Việc trừ đi trung bình cộng của mỗi cột khiến trong mỗi cột có những giá trị dương và âm. Những giá trị dương tương ứng với việc user thích item, những giá trị âm tương ứng với việc user
khơng thích item. Những giá trị bằng 0 tương ứng với việc chưa xác định được liệu user có thích item hay khơng.
- Về mặt kỹ thuật, số chiều của Utility Matrix là rất lớn với hàng triệu users và items, nếu lưu toàn bộ các giá trị này trong một ma trận thì khả năng cao là sẽ khơng đủ bộ nhớ. Quan sát lưu toàn bộ các giá trị này trong một ma trận thì khả năng cao là sẽ khơng đủ bộ nhớ. Quan sát thấy rằng vì số lượng ratings biết trước thường là một số rất nhỏ so với kích thước của Utility Matrix, sẽ tốt hơn nếu chúng ta lưu ma trận này dưới dạng sparse matrix, tức chỉ lưu các giá trị khác khơng và vị trí của chúng. Vì vậy, tốt hơn hết, các dấu ‘?’ nên được thay bằng giá trị “0”, tức chưa xác định liệu user có thích item hay khơng. Việc này không những tối ưu bộ nhớ mà việc tính tốn Similarity Matrix sau này cũng hiệu quả hơn.
Xây dựng User Similarity Matrix: Áp dụng phương pháp tính độ tương tự Cosine
Similarity, lần lượt đi tính độ tương tự giữa các user vector ở Hình 6.9 b) ta được ma trận User similarity matrix S như Hình 6.9 c).
User 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. Các ô màu xanh trên đường chéo đều bằng 1 vì đó là cos của góc giữa một vector và chính nó, tức cos(0) = 1. Khi tính tốn ở các bước sau, ta khơng cần quan tâm tới các giá trị 1 này. Tiếp tục quan sát các vector hàng tương ứng với u0, u1, u2 ta sẽ thấy một vài điều thú vị:
- u0 gần với u1 và u5 (độ giống nhau là dương) hơn các user còn lại. Việc similarity cao giữa u0 và u1 là dễ hiểu vì cả 2 đều có xu hướng quan tâm tới i0, i1, i2 hơn cái item còn lại. Việc u0 gần với u5 thoạt đầu có vẻ vơ lý vì u5 đánh giá thấp các item mà u0 đánh giá cao; tuy nhiên khi nhìn vào ma trận đã chuẩn hố ở hình b), ta thấy rằng điều này là hợp lý.Vì item duy nhất mà cả 2 đã cung cấp thông tin là i1 với các giá trị tương ứng đều là tích cực.
-u1 gần với u0 và xa các user còn lại.
-u2 gần với u3, u4, u5, u6 và xa các user còn lại.
Dự đốn các rating (normalized) cịn thiếu: Công thức phổ biến được sử dụng để dự đốn
Trong đó: N(u,i) là tập hợp k users trong neighborhood (có similarity cao nhất) của u mà đã rated i.
Ví dụ: Tính normalize rating của u1 cho i1 được cho trong hình e) với số nearest neighbors là k = 2. Các bước thực hiện như sau:
- Xác định các user đã rate i1, đó là u0, u3, u5.
- Xác định similarity của u1 và các user này, ta nhận được 0.83, -0.40, -0.23. Hai (k = 2) giá trị lớn nhất là 0.83 và -0.23 tương ứng với u0 và u5.
- Xác định các normalized rating của u0 và u5 cho i1, ta thu được 2 giá trị lần lượt là 0.75 và 0.5.
- Dự đoán kết quả:
Dự đốn các rating (denormalized) cịn thiếu: Việc quy đổi các giá trị ratings đã chuẩn
hố về thang 5 có thể được thực hiện bằng cách cộng các cột của ma trận Hình 6.9 d) với giá trị rating trung bình của mỗi user như đã tính trong Hình 6.9 a).
Kết quả dự đốn:
Hình 6.10: Kết quả dự đốn theo Neighborhood – based Collaborative Filtering Tính tốn RMSE cho tập dữ liệu train và dữ liêu test, kết quả là:
Hình 6.11: RMSE của Neighborhood – based Collaborative Filtering
6.2. Đánh giá 6.2.1. So sánh kết quả 6.2.1. So sánh kết quả
Trên bộ dữ liệu MoviesLens100K, với dữ liệu train từ file ua.base và dữ liệu test từ ua.test.
Bảng 6.1: So sánh kết quả RMSE
Bảng 6.2: Nhận xét Content – based và Neighborhood – based
6.3. Áp dụng vào BabyCare 6.3.1. Đề xuất sản phẩm
Trong ứng dụng có thẻ Product, trong trang product này người dùng sẽ được gợi ý những sản phẩm đang được nhiều người bình chọn tích cực nhất, gợi ý này sẽ áp dụng thuật toán Neighborhood-based Collaborative Filtering dựa vào số ratings của các user cho sản phẩm. Khi người dùng nhấn vào thẻ này thì ứng dụng sẽ gửi yêu cầu lấy sản phẩm được nhiều người bình chọn tích cực nhất và hiển thị lên màn hình.
Hình 6.12: Màn hình gợi ý sản phẩm được nhiều người bình chọn tích cực nhất nhất
Ở trang product người dùng có thể click vào những sản phẩm mình muốn, sau khi click, ứng dụng sẽ hiển thị một trang bao gồm sản phẩm vừa chọn và các sản phẩm khác cùng loại, có cùng các tiêu chí như địa chỉ cửa hàng, tên sản phẩm, loại sản phẩm,…
Gợi ý này áp dụng Content-based Filtering để tính tốn độ tương đồng giữa sản phẩm mà người dùng đang xem so với các sản phẩm khác trên hệ thống.
Sau khi nhận được danh sách top sản phẩm có độ tương đồng cao nhất, hệ thống trả về danh sách sản phẩm hiển thị ở mục “Because you love children’s car”.
Chương 7. KẾT LUẬN, HƯỚNG PHÁT TRIỂN TRIỂN
7.1. Kết quả thu được
● Bước đầu vận dụng thành công được Flutter vào phát triển đồ án môn học. ● Sử dụng Firebase làm cơ sở dữ liệu
● Xác định rõ được các bậc bố mẹ hay người chăm sóc trẻ là đối tượng chủ yếu của ứng dụng phần mềm.
● Những bước đầu tiên nhóm đã lên ý tưởng và lập kế hoạch cho design pattern một cách chi tiết và từ đó phát triển phần mềm theo hướng UI/UX đẹp mắt.
● Nhóm đã hồn thanh gần như hồn chỉnh phần giao diện người dùng và một nhỏ back-end nhờ vào sự hướng dẫn của thầy.
● Người dùng có thể sử dụng chức năng chăm sóc trẻ nhỏ hiệu quả.
● App cung cấp các tip về kiến thức chăm sóc trẻ nhỏ. Người dùng hỏi về các Tip thông qua chatbot một cách dễ dàng.
● Ứng dụng được các thuật toán Recommend là content-base và get-weighted-rating vào recommend sản phẩm cho người dùng khi người dùng mua hàng
7.2. Khó khăn
● Việc thực hiện các chức năng phía back-end rất khó để có thể thiết lập và kết nối với front- end.
● Bố cục code còn thiếu kinh nghiệm sắp xếp và quản lý.
● Khó khăn trong việc tìm hiểu firebase để kết nối cơ sở dữ liệu.
● Quá trình hoạt động của ứng dụng chưa được mượt mà, do cơ sở dữ liệu được gửi từ server lên chậm vì server là server miễn phí.
7.3. Phương hướng phát triển
● Hoàn thiện về cơ sở dữ liệu và các chức năng ở back-end. ● Cải thiện tốc độ xử lý, hướng tới trải nghiệm mượt mà.
● Thêm các tính năng gợi ý dinh dưỡng cụ thể về những loại thức ăn.
● Thêm chức năng gợi ý địa điểm tiêm phòng kèm với dẫn đường đến các địa điểm ● Vận dụng các công nghệ mới để mang lại nhiều chức năng thiết thực và hữu ích hơn.
TÀI LIỆU THAM KHẢO
[1] Dart language developers. “Dart documentation”. https://dart.dev/guides. Accessed June 1, 2021.
[2] Flutter Samples. “Dart. 2018. Reprint, Flutter, 2022”. https://github.com/flutter/samples/. Accessed June 2, 2021.
[3] Flutter framework developers. “Flutter documentation”. https://docs.flutter.dev/. Accessed June 2, 2021.
[4] Many sponsors. “Stack Overflow - Where Developers Learn, Share, & Build Careers.”. https://stackoverflow.com/. Accessed June 16, 2021.
[5] Google developers & sponsors. “YouTube – Online video sharing & social media platform”. https://www.youtube.com/. Accessed June 30, 2021.
[6] Google developers. “Firebase documentation.” https://firebase.google.com/docs . Accessed August 12, 2021.
[7] Vũ Hữu Tiệp (May 24, 2017). “Neighborhood-Based Collaborative Filtering”. https://machinelearningcoban.com/2017/05/24/collaborativefiltering/. Accessed January 12, 2022.
[8] Vũ Hữu Tiệp (May 17, 2017). “Content-Based Collaborative Filtering”. https://machinelearningcoban.com/2017/05/17/contentbasedrecommendersys/. Accessed January 12, 2022.