Download as pdf or txt
Download as pdf or txt
You are on page 1of 83

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC

Đề tài:

PHÁT TRIỂN VÀ ĐÁNH GIÁ CÁC MÔ HÌNH


HỌC MÁY TRONG HỆ THỐNG GỢI Ý

Sinh viên thực hiện: HOÀNG ANH


Lớp ĐT10 – K64
Giảng viên hướng dẫn: TS. DƯƠNG TẤN NGHĨA

Hà Nội, 8-2023
ĐẠI HỌC BÁCH KHOA HÀ NỘI
TRƯỜNG ĐIỆN – ĐIỆN TỬ

ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC

Đề tài:

PHÁT TRIỂN VÀ ĐÁNH GIÁ CÁC MÔ HÌNH


HỌC MÁY TRONG HỆ THỐNG GỢI Ý

Sinh viên thực hiện: HOÀNG ANH


Lớp ĐT10 – K64
Giảng viên hướng dẫn: TS. DƯƠNG TẤN NGHĨA
Cán bộ phản biện:

Hà Nội, 8-2023
ĐÁNH GIÁ QUYỂN ĐỒ ÁN TỐT NGHIỆP
(Dùng cho cán bộ phản biện)

Giảng viên đánh giá: ........................................................................................................


Họ và tên sinh viên: ........................................................ MSSV: ....................................
Tên đồ án: .........................................................................................................................
..........................................................................................................................................
Chọn các mức điểm phù hợp cho sinh viên trình bày theo các tiêu chí dưới đây:
Rất kém (1); Kém (2); Đạt (3); Giỏi (4); Xuất sắc (5)
Có sự kết hợp giữa lý thuyết và thực hành (20)
Nêu rõ tính cấp thiết và quan trọng của đề tài, các vấn đề và các giả thuyết
1 (bao gồm mục đích và tính phù hợp) cũng như phạm vi ứng dụng của đồ 1 2 3 4 5
án
2 Cập nhật kết quả nghiên cứu gần đây nhất (trong nước/quốc tế) 1 2 3 4 5
3 Nêu rõ và chi tiết phương pháp nghiên cứu/giải quyết vấn đề 1 2 3 4 5
4 Có kết quả mô phỏng/thưc nghiệm và trình bày rõ ràng kết quả đạt được 1 2 3 4 5
Có khả năng phân tích và đánh giá kết quả (15)
Kế hoạch làm việc rõ ràng bao gồm mục tiêu và phương pháp thực hiện
5 1 2 3 4 5
dựa trên kết quả nghiên cứu lý thuyết một cách có hệ thống
Kết quả được trình bày một cách logic và dễ hiểu, tất cả kết quả đều được
6 1 2 3 4 5
phân tích và đánh giá thỏa đáng.
Trong phần kết luận, tác giả chỉ rõ sự khác biệt (nếu có) giữa kết quả đạt
7 được và mục tiêu ban đầu đề ra đồng thời cung cấp lập luận để đề xuất 1 2 3 4 5
hướng giải quyết có thể thực hiện trong tương lai.
Kỹ năng viết quyển đồ án (10)
Đồ án trình bày đúng mẫu quy định với cấu trúc các chương logic và đẹp
mắt (bảng biểu, hình ảnh rõ ràng, có tiêu đề, được đánh số thứ tự và được
8 giải thích hay đề cập đến trong đồ án, có căn lề, dấu cách sau dấu chấm, 1 2 3 4 5
dấu phẩy v.v), có mở đầu chương và kết luận chương, có liệt kê tài liệu
tham khảo và có trích dẫn đúng quy định
Kỹ năng viết xuất sắc (cấu trúc câu chuẩn, văn phong khoa học, lập luận
9 1 2 3 4 5
logic và có cơ sở, từ vựng sử dụng phù hợp v.v.)
Thành tựu nghiên cứu khoa học (5) (chọn 1 trong 3 trường hợp)
Có bài báo khoa học được đăng hoặc chấp nhận đăng/đạt giải SVNC khoa
10a học giải 3 cấp Viện trở lên/các giải thưởng khoa học (quốc tế/trong nước) 5
từ giải 3 trở lên/ Có đăng ký bằng phát minh sáng chế
Được báo cáo tại hội đồng cấp Viện trong hội nghị sinh viên nghiên cứu
10b khoa học nhưng không đạt giải từ giải 3 trở lên/Đạt giải khuyến khích 2
trong các kỳ thi quốc gia và quốc tế khác về chuyên ngành như TI contest.
10c Không có thành tích về nghiên cứu khoa học 0
Điểm tổng /50
Điểm tổng quy đổi về thang 10
Nhận xét khác của cán bộ phản biện
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................
..........................................................................................................................................

Ngày: … / … / 20…
Người nhận xét
(Ký và ghi rõ họ tên)
LỜI NÓI ĐẦU

Sau đây là khóa luận tốt nghiệp của Hoàng Anh – 20192682, lớp Điện tử 10 – K64.
Với đề tài “Phát triển và đánh giá các mô hình học máy trong hệ thống gợi ý” với mục
đích nghiên cứu, tìm hiểu, phát triển, đánh giá các mô hình trong bài toán
“Recommendation System” – RS.

Em xin chân thành cảm ơn các thầy cô giáo trong trường Điện - Điện Tử và Viện
Điện Tử - Viễn Thông đã truyền thụ em kiến thức, giúp em có được cơ sở lý thuyết vững
vàng cũng như đã tạo nhiều điều kiện giúp em trong suốt quá trình học tập.

Và đặc biệt em xin gửi lời cảm ơn chân thành nhất đến TS. Dương Tấn Nghĩa -
trường Điện - Điện tử người đã trực tiếp hướng dẫn em trong suốt quá trình làm khoá
luận.

Do thời gian làm khóa luận hạn chế, cũng như khả năng của bản thân còn nhiều
thiếu sót. Kính mong các thầy cô lượng thứ và góp ý để em có thể hoàn thành tốt khóa
luận tốt nghiệp.
LỜI CAM ĐOAN

Tôi là Hoàng Anh, mã số sinh viên 20192682, sinh viên lớp Điện tử 10, khóa 64. Người hướng
dẫn là TS. Dương Tấn Nghĩa. Tôi xin cam đoan toàn bộ nội dung được trình bày trong đồ án Phát triển
và đánh giá các mô hình học máy trong hệ thống gợi ý là kết quả quá trình tìm hiểu và nghiên cứu của
tôi. Các dữ liệu được nêu trong đồ án là hoàn toàn trung thực, phản ánh đúng kết quả đo đạc thực tế.
Mọi thông tin trích dẫn đều tuân thủ các quy định về sở hữu trí tuệ; các tài liệu tham khảo được liệt kê
rõ ràng. Tôi xin chịu hoàn toàn trách nhiệm với những nội dung được viết trong đồ án này.

Hà nội, ngày 01 tháng 08 năm 2023


Người cam đoan

Hoàng Anh
MỤC LỤC

DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT ...................................................................... ii

DANH MỤC HÌNH VẼ .......................................................................................................... iv

DANH MỤC BẢNG BIỂU ...................................................................................................... v

CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG GỢI Ý .......................................................... 1

1.1 Hệ thống gợi ý ................................................................................................................ 1


1.1.1 Các khái niệm chung ............................................................................................... 1
1.1.2 Xây dựng hệ thống gợi ý ......................................................................................... 3
1.1.3 Khó khăn trong việc xây dựng hệ thống gợi ý ........................................................ 4
1.1.4 Hai dạng bài toán chủ yếu của RS ........................................................................... 5

1.2 Các kỹ thuật trong RS .................................................................................................... 5


1.2.1 Kỹ thuật lọc dựa trên nội dung (Content-based Filtering) ...................................... 7
1.2.2 Kỹ thuật lọc cộng tác (CF) .................................................................................... 12
1.2.3 Kỹ thuật Phân rã Ma trận (MF) ............................................................................. 14
1.2.4 Kỹ thuật phân cụm K-Nearest Neighbors (kNN) .................................................. 15
1.2.5 Kỹ thuật hệ thống gợi ý lai (Hybrid Recommendation Systems) ......................... 18
1.2.6 Kỹ thuật không cá nhân hóa (non-personalization)............................................... 20

1.3 Các kiến trúc học sâu (Deep Learning) trong hệ thống gợi ý .................................... 21
1.3.1 Tổng quan về DL ................................................................................................... 21
1.3.2 Mô hình Restricted Bolzmann Machine (RBM) ................................................... 22
1.3.3 Mô hình Auto-Encoder .......................................................................................... 24

1.4 Giải quyết bài toán Dữ liệu lớn (Big Data) ................................................................. 26
1.4.1 Hadoop .................................................................................................................. 26
1.4.2 Apache Spark ......................................................................................................... 28
1.4.3 So sánh giữa Spark và Hadoop.............................................................................. 31

CHƯƠNG 2. ÁP DỤNG CÁC THUẬT TOÁN ................................................................... 32

2.1 Bộ dữ liệu ..................................................................................................................... 32


2.1.1 Bộ dữ liệu Movielens 100k ................................................................................... 32
2.1.2 Bộ dữ liệu Movielens 1M ...................................................................................... 33

2.2 Thông số đánh giá ........................................................................................................ 34


2.2.1 RMSE và MAE ..................................................................................................... 34
2.2.2 Hit Rate (HR) ......................................................................................................... 34
2.2.3 Average Reciprocal Hit Rate (ARHR) ................................................................... 34
2.2.4 Cumulative Hit Rate (cHR).................................................................................... 35
2.2.5 Coverage ................................................................................................................ 35
2.2.6 Diversity ................................................................................................................. 35

2.3 Thực nghiệm ................................................................................................................. 36


2.3.1 Môi trường ............................................................................................................. 36
2.3.2 Đối tượng đánh giá................................................................................................. 36

2.4 Các mô hình được thực nghiệm ................................................................................... 38


2.4.1 kNN ........................................................................................................................ 38
2.4.2 SVD và SVD++ ..................................................................................................... 44
2.4.3 RBM ....................................................................................................................... 48
2.4.4 Auto-Encoder cho RS............................................................................................. 51
2.4.5 Hybrid RS .............................................................................................................. 53

2.5 Đánh giá kết quả ........................................................................................................... 55


2.5.1 Đánh giá từng thuật toán ........................................................................................ 55
2.5.2 Đánh giá tổng hợp .................................................................................................. 58

2.6 Thực nghiệm trên Pyspark ........................................................................................... 61

KẾT LUẬN ............................................................................................................................. 64

Kết luận chung .................................................................................................................... 64

Hướng phát triển ................................................................................................................ 64

TÀI LIỆU THAM KHẢO ...................................................................................................... 65


DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT

Ký hiệu chữ viết tắt Chữ viết đầy đủ

RS Recommendation Systems/Recommender System

CF Collaborative Filtering

kNN K-Nearest Neighbors

MF Matrix Factorization

DL Deep Learning

ML Machine Learning

RBM Restricted Boltzmann Machine

ANN Artificial Neural Network

SVD Singular Value Decomposition

SVD++ Singular Value Decomposition Plus Plus

HDFS Hadoop Distributed File System

YARN Yet-Another-Resource-Negotiator

SQL Structured Query Language

RDD Resilient Distributed Datasets

RMSE Root Mean Squared Error

MAE Mean Absolute Error

HR Hit Rate

ARHR Average Reciprocal Hit Rate

cHR Cumulative Hit Rate

ALS Alternating Least Square

ii
DBN DBN

HybridRS Hybrid Recommendation System

AI` Artificial Intelligence

Movielens100k Movielens 100.000 đánh giá

Movielens1M Movielens 1.000.000 đánh giá

MLLib Machine Learning Library

iii
DANH MỤC HÌNH VẼ

Hình 1.1 Ma trận biểu diễn dữ liệu trong RS .................................................................. 1


Hình 1.2 Ví dụ về ma trận đánh giá tổng quát ................................................................ 2
Hình 1.3 Các cách tiếp cận hệ thống gợi ý khác ............................................................. 7
Hình 1.4 Minh họa hệ thống lọc dựa trên nội dung ........................................................ 8
Hình 1.5 Mô hình phân rã ma trận ................................................................................ 14
Hình 1.6 Ví dụ về khoảng cách Manhattan ................................................................... 16
Hình 1.7 Mối liên hệ giữa AI, ML và DL ..................................................................... 22
Hình 1.8 Mô hình minh họa cho RBM ......................................................................... 23
Hình 1.9 Mô hình Auto-Encoder ................................................................................... 24
Hình 1.10 Cấu trúc HFDS ............................................................................................. 27
Hình 1.11 Cấu trúc cơ bản của Spark ............................................................................ 29
Hình 1.12 Các thành phần cơ bản của Spark ................................................................ 29
Hình 2.1 Phân bổ xếp hạng do người dùng đánh giá .................................................... 33
Hình 2.2 Phân bổ xếp hạng trong bộ dữ liệu Movielens 1M ........................................ 33
Hình 2.3 Sự khác nhau giữa Collaborative Filtering và Conten-Based Filtering ......... 39
Hình 2.4 Mô tả thuật toán SVD .................................................................................... 45
Hình 2.5 Quá trình truyền ngược trong RBM ............................................................... 48
Hình 2.6 Ý tưởng cho mã hóa các đánh giá .................................................................. 48
Hình 2.7 Mô hình thuật toán Auto-Encoder cho RS ..................................................... 51
Hình 2.8 Thông số RMSE và MAE cho của các mô hình cho bộ dữ liệu Movielens 100k
....................................................................................................................................... 59
Hình 2.9 Thông số RMSE và MAE cho của các mô hình cho bộ dữ liệu Movielens 1M
....................................................................................................................................... 60
Hình 2.10 Thời gian chạy giữa các mô hình với hai bộ dữ liệu Movielens 100k và
Movielens 1M ............................................................................................................... 60
Hình 2.11 Hiện tượng tràn RAM khi chạy mô hình trên tập dữ liệu 20M.................... 62

iv
DANH MỤC BẢNG BIỂU

Bảng 1.1 So sánh Spark và Hadoop ..............................................................................31


Bảng 2.1 Danh sách những bộ phim được người dùng được khảo sát đánh giá cao ....37
Bảng 2.2 Danh sách những bộ phim được người dùng được khảo sát quan tâm nhất ..38
Bảng 2.3 Các thông số đánh giá thuật toán kNN Content-Based Filtering ...................40
Bảng 2.4 Top-10 bộ phim được gợi ý bởi thuật toán kNN Content-Based Filtering ....40
Bảng 2.5 Các thông số đánh giá thuật toán User_kNN .................................................42
Bảng 2.6 Top-10 bộ phim được gợi ý bởi thuật toán Item_kNN ..................................42
Bảng 2.7 Các thông số đánh giá thuật toán Item_kNN .................................................43
Bảng 2.8 Top-10 bộ phim được gợi ý bởi thuật toán Item_kNN ..................................44
Bảng 2.9 Các thông số đánh giá thuật toán SVD ..........................................................45
Bảng 2.10 Các thông số đánh giá thuật toán SVD tinh chỉnh .......................................45
Bảng 2.11 Các thông số đánh giá thuật toán SVD++ ....................................................46
Bảng 2.12 Top-10 bộ phim gợi ý bởi thuật toán SVD...................................................46
Bảng 2.13 Top-10 bộ phim gợi ý bởi thuật toán SVD tinh chỉnh .................................47
Bảng 2.14 Top-10 bộ phim gợi ý bởi thuật toán SVD++ ..............................................47
Bảng 2.15 Các thông số đánh giá thuật toán RBM .......................................................49
Bảng 2.16 Các thông số đánh giá thuật toán RBM tinh chỉnh ......................................50
Bảng 2.17 Top-10 bộ phim được gợi ý từ thuật toán RBM...........................................50
Bảng 2.18 Top-10 bộ phim được gợi ý từ thuật toán RBM tinh chỉnh .........................51
Bảng 2.19 Các thông số đánh giá thuật toán Auto-Encoder ..........................................52
Bảng 2.20 Top-10 bộ phim được gợi ý từ thuật toán Auto-Encoder .............................53
Bảng 2.21 Các thông số đánh giá thuật toán Hybrid RS ...............................................54
Bảng 2.22 Top-10 bộ phim được gợi ý từ thuật toán Hybrid RS ..................................54
Bảng 2.23 Bảng thông số đánh giá các thuật toán trên bộ dữ liệu Movielens 100k .....58
Bảng 2.24 Bảng thông số đánh giá các thuật toán trên bộ dữ liệu Movielens 1M ........59
Bảng 2.25. Kết quả thu được khi chạy mô hình ALS trên Pyspark ..............................63

v
TÓM TẮT ĐỒ ÁN

Trong kỷ nguyên chuyển đổi số và thương mại điện tử hiện nay, để tối ưu hóa lợi
nhuận, tìm kiếm và tiếp cận được các khách hàng tìm năng, các hệ thống gợi ý
(Recommendations System - RS) trở thành yếu tố sống còn của các doanh nghiệp. Đặc
biệt với các công ty lớn (Facebook, Google, Amazon…) khi sở hữu trong tay lượng dữ
liệu khổng lồ về khách hàng và hàng hóa, thì việc khai thác thông tin từ đó để tạo ra
được những hệ thống gợi ý cho người dung những sản phẩm phù hợp, sẽ góp phần nâng
cao trải nghiệm khách hàng, tiết kiếm được chi phí quảng cáo, bán được nhiều sản phẩm
hơn để từ đó sinh ra nguồn lợi nhuận khổng lồ từ maketing và thương mại điện tử.

Đồ án này nhằm mục đích xây dựng và tối ưu hóa các mô hình phổ biến cho bài
toán hệ thống gợi ý trên tập dữ liệu MovieLens. Để từ đó kiểm tra và so sánh khả năng
dự đoán của các loại mô hình này. Ngoài ra để đánh giá việc lượng dữ liệu có tác động
như thế nào tới khả năng gợi ý, trong đồ án này có sử dụng công nghệ PySpark nhằm
tăng lượng dữ liệu, hướng tới việc thực thi trên các tập dữ liệu lớn trong thực tế.

Báo cáo trình bày chi tiết về lý thuyết của các mô hình, các bước cài đặt xây dựng
môi trường, xây dựng mô hình và tối ưu tham số cho các mô hình. Kết quả khi thực
nghiệm so sánh đánh giá của mỗi thuật toán trên tập dữ liệu Movielens 100k và
Movielens 1M. Kết quả khi thực thi với PySpark trên hai tập dữ liệu Movielens 100k và
Movielens 20M.

vi
ABSTRACT

In the current era of digital transformation and e-commerce, in order to optimize


profits, find and reach potential customers, recommendation systems (RS) become a
vital element. businesses. Especially for large companies (Facebook, Google,
Amazon...) when possessing a huge amount of data about customers and goods, it is
important to exploit information from there to create recommendation systems for
customers. Using the right products will contribute to improving customer experience,
saving advertising costs, selling more products, thereby generating huge profits from
marketing and e-commerce.

This project aims to build and optimize popular models for the recommendation
system problem on the MovieLens dataset. To then test and compare the predictive
ability of these types of models. In addition, to evaluate how the amount of data affects
the recommendability, in this project, PySpark technology is used to increase the amount
of data, towards the performance on large data sets in practice. economic.

The report details the theory of the models, the steps of setting up the environment,
building the model and optimizing the parameters for the models. Experimental results
compare the evaluation of each algorithm on the dataset Movielens 100k and Movielens
1M. Results when executing with PySpark on two datasets Movielens 100k and
Movielens 20M.

vii
PHẦN MỞ ĐẦU

Hệ thống gợi ý là một dạng của hệ thống lọc thông tin (information filtering), nó
được sử dụng để dự đoán sở thích (preferences) hay xếp hạng (ratings) mà người dùng
có thể dành cho một mục thông tin (item) nào đó mà họ chưa xem xét tới trong quá khứ
(thông tin có thể là bài hát, bộ phim, đoạn video clip, sách, bài báo,..).

Các hệ thống gợi ý được đào tạo để hiểu sở thích, đặc điểm của con người và sản
phẩm bằng cách sử dụng dữ liệu được thu thập về các tương tác của họ. Chúng bao gồm
số lần hiển thị, số lần nhấp, lượt thích và mua hàng. Do khả năng dự đoán sở thích và
mong muốn của người tiêu dùng ở mức độ cá nhân hóa cao, các hệ thống gợi ý được
các nhà cung cấp sản phẩm yêu thích. Họ có thể hướng người tiêu dùng đến bất kỳ sản
phẩm hoặc dịch vụ nào mà họ quan tâm, từ sách đến video, các lớp học về sức khỏe đến
quần áo.

Một vài hệ thống gợi ý nổi tiếng ở các lĩnh vực như là Netflix (phim ảnh), Youtube
(các video nội dung ngắn - trung), và hệ thống bán hàng trực tuyến Amazon. Hệ thống
gợi ý không chỉ đơn thuần là một dạng Hệ thống thông tin mà nó còn là cả một lĩnh vực
nghiên cứu hiện đang rất được các nhà khoa học quan tâm. Kể từ năm 2007 đến nay,
hàng năm đều có hội thảo chuyên về hệ thống gợi ý của ACM (ACM RecSys) cũng như
các tiểu bang dành riêng cho RS trong các hội nghị lớn khác như ACM KDD, ACM
CIKM,..

Rất nhiều hệ thống lớn thu thập thông tin phản hồi từ khách hàng một cách tường
minh, như Ebay, Amazon, LastFM, NetFlix, Youtube,... ở đó người dùng sẽ trực tiếp
đánh giá trên sản phẩm, như 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, và các 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 của người
dùng trên sản phẩm, từ đó dự đoán các sản phẩm tiếp theo mà người dùng có thể thích
để gợi ý cho họ. Tuy nhiên, điều này có thể gây bất lợi do không phải người dùng lúc
nào cũng sẵn sàng/vui lòng để lại các phản hồi của họ, vì vậy hệ thống phải nên tự xác
định người dùng cần gì thông qua phản hồi tiềm ẩn.

viii
CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG GỢI Ý

1.1 Hệ thống gợi ý

1.1.1 Các khái niệm chung

Trong RS, thông thường người ta quan tâm đến ba thông tin:

• User (người dùng).


• Item (có thể là sản phẩm, bộ phim, bài hát, bài báo,.. tùy hệ thống).
• Feedback (phản hồi/đánh giá) của người dùng trên mục tin đó (thường là các xếp
hạng/đánh giá – rating biểu diễn mức độ thích/quan tâm của họ).

Hình 1.1 Ma trận biểu diễn dữ liệu trong RS

Các thông tin này được biểu diễn thông qua một ma trận. Ở đó, mỗi dòng là một
người dùng, mỗi cột là một bộ phim, và mỗi ô là một giá trị phản hồi (ví dụ, xếp hạng)
biểu diễn “mức độ thích” của người dùng trên bộ phim tương ứng. Các ô có giá trị là
những bộ phim mà các người dùng đã xếp hạng trong quá khứ. Những ô trống là những
bộ phim chưa được xếp hạng (điều đáng lưu ý là mỗi người dùng chỉ xếp hạng cho một
vài bộ phim trong quá khứ, do vậy có rất nhiều ô trống trong ma trận này – còn gọi là
ma trận thưa – sparse matrix).

Nhiệm vụ chính của RS là dựa vào các ô đã có giá trị trong ma trận trên (dữ liệu thu
được từ quá khứ), thông qua mô hình đã được xây dựng dự đoán các ô còn trống (của
người dùng hiện hành), sau đó sắp xếp kết quả dự đoán (chẳng hạn từ cao xuống thấp)
và chọn ra Top-N bộ phim theo thứ tự, từ đó gợi ý chúng cho người dùng.

1
𝐶 = {𝑐1 , 𝑐2 , … , 𝑐|𝐶| }. Cho tập hợp hữu hạn gồm N người dùng 𝑈 = {𝑢1 , … , 𝑢𝑁 } và
M sản phẩm 𝑃 = {𝑝1 , 𝑝2 , … , 𝑝𝑀 }.

Mỗi người dùng 𝑢𝑖 ∈ 𝑈 (với 𝑖 = 1, 2, … , 𝑁) được biểu diễn thông qua |𝑇| đặc trưng nội

dung 𝑇 = {𝑡1 , 𝑡2 , … , 𝑡|𝑇| }. Các đặc trưng 𝑡𝑞 ∈ 𝑇 thông thường là thông tin cá nhân của mỗi

người dùng. Ví dụ 𝑢i ∈ 𝑈 là một người dùng thì các đặc trưng nội dung biểu diễn người dùng
𝑢i có thể là T={giới tính, độ tuổi, nghề nghiệp, trình độ,…}.

Mỗi sản phẩm 𝑝𝑥 ∈ 𝑃 (với 𝑥 = 1, 2, … 𝑀) có thể là hàng hóa, phim, ảnh, tạp chí, tài
liệu, sách, báo, dịch vụ hoặc bất kỳ dạng thông tin nào mà người dùng cần đến. Mỗi sản

phẩm 𝑝𝑥 ∈ 𝑃 được biểu diễn thông qua |𝐶| đặc trưng nội dung 𝐶 = {𝑐1 , 𝑐2 , … , 𝑐|𝐶| }. Các

đặc trưng 𝑐𝑠 ∈ 𝐶 nhận được từ các phương pháp trích chọn đặc trưng trong lĩnh vực truy
vấn thông tin. Ví dụ 𝑝𝑥 ∈ 𝑃 là một phim thì các đặc trưng nội dung biểu diễn phim 𝑝𝑥 có
thể là 𝐶 = {thể loại phim, nước sản xuất, hãng phim, diễn viên, đạo diễn, …}. Mối quan
hệ giữa tập người dùng 𝑈 và tập sản phẩm 𝑃 được biểu diễn thông qua ma trận đánh giá 𝑅 =
[𝑟𝑖𝑥 ] với 𝑖 = 1, 2, … , 𝑁; 𝑥 = 1, 2, … , 𝑀.

Hình 1.2 Ví dụ về ma trận đánh giá tổng quát

Giá trị 𝑟𝑖𝑥 thể hiện đánh giá của người dùng 𝑢𝑖 ∈ 𝑈 cho một số sản phẩm 𝑝𝑥 ∈ 𝑃.
Thông thường giá trị 𝑟𝑖𝑥 nhận một giá trị thuộc miền 𝐹 = { 1, 2, … , 𝑔} được thu thập trực
tiếp bằng cách hỏi ý kiến người dùng hoặc thu thập gián tiếp thông qua cơ chế phản hồi
của người dùng. Những giá trị 𝑟𝑖𝑥 = 0 được hiểu là người dùng 𝑢𝑖 ∈ 𝑈 chưa biết đến hoặc
không đánh giá sản phẩm 𝑝𝑥 ∈ 𝑃, những ô điền ký tự “?” là giá trị cần hệ gợi ý đưa ra

2
dự đoán đánh giá. Tiếp đến, ta ký hiệu 𝑃𝑖 ∈ 𝑃 là tập các sản phẩm 𝑝𝑥 ∈ 𝑃 được đánh giá
bởi người dùng 𝑢𝑖 ∈ 𝑈 và 𝑢𝑎 ∈ 𝑈 được gọi là người dùng hiện thời, người dùng cần
được gợi ý hay người dùng tích cực. Khi đó, tồn tại hai dạng bài toán điển hình của hệ
gợi ý là:

• Dự đoán đánh giá của người dùng 𝑢a với các sản phẩm chưa có đánh giá
trước đó.
• Gợi ý danh sách ngắn các sản phẩm phù hợp với người dùng hiện thời. Cụ
thể đối với người dùng 𝑢a, hệ thống gợi ý sẽ chọn ra 𝐾 sản phẩm mới 𝑝𝑥 ∈
(𝑃\𝑃𝑎) phù hợp với người dùng 𝑢𝑎 nhất để gợi ý cho họ.

1.1.2 Xây dựng hệ thống gợi ý

Qui trình tổng quát để giải quyết bài toán gợi ý thông thường gồm có 3 giai đoạn
chính.

Giai đoạn 1. Thu thập thông tin. Ba loại thông tin chính thường được thu thập cho
hệ thống gợi ý, gồm có:

• Người dùng biểu diễn thông qua các đặc trưng là 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 nhằm lưu
trữ lại dấu vết các đặc trưng nội dung sản phẩm đã từng được sử dụng bởi
người dùng.
• Sản phẩm biểu diễn thông qua các đặc trưng là thông tin về 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 nhằm lưu trữ
lại dấu vết các đặc trưng người dùng đã từng sử dụng sản phẩm.
• Phản hồi của người dùng với sản phẩm biểu diễn thông qua các giá trị đánh
giá của 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 gợi ý có thể thực hiện bằng nhiều hướng tiếp cận
khác nhau nhằm so sánh, đánh giá mối liên hệ giữa các thông tin thu thập được ở giai
đoạn 1. Một số hướng tiếp cận điển hình được 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 sẽ khai thác thông tin đầu vào theo những
cách khác nhau hình thành những phương pháp gợi ý khác nhau.

3
Giai đoạn 3. Dự đoán đánh giá/ Đưa ra gợi ý:

Dữ liệu đầu ra của giai đoạn 2 sẽ được dùng để dự đoán các đánh giá của người
dùng với các sản phẩm chưa có đánh giá trước đó và chọn ra 𝐾 sản phẩm mới phù hợp
nhất đối với người dùng hiện thời để gợi ý cho họ.

1.1.3 Khó khăn trong việc xây dựng hệ thống gợi ý

• Xây dựng nhãn: Các nhãn có thể được thể hiện một cách tường minh như
việc mua sản phẩm hay không, việc đánh giá số sao của người dùng cho sản
phẩm, hay việc chấp nhận kết bạn hay không. Những nhãn này còn được gọi
là phản hồi tường minh (explicit feedback). Tuy nhiên, không phải hệ thống
gợi ý nào cũng phục vụ cho việc mua bán sản phẩm hay không phải người
dùng nào cũng sẵn sàng bỏ thời gian ra đánh giá sản phẩm. Rất nhiều trường
hợp, nhãn được xây dựng dựa trên những phản hồi ẩn (implicit feedback) từ
người dùng. Ví dụ, người dùng có thể không mua hàng nhưng họ đã click vào
sản phẩm hoặc dành thời gian đọc về thông tin sản phẩm. Đôi khi, người dùng
không click nhưng đã dừng lại ở phần quảng cáo sản phẩm đó trong một thời
gian đủ lớn và bật âm thanh lớn để nghe về sản phẩm cũng là một tín hiệu
hữu ích.
• Dữ liệu lệch: Một khó khăn trong việc xây dựng các mô hình gợi ý là việc
nhãn thường bị lệch một cách nghiêm trọng. Số lượng mẫu có nhãn dương
(có đánh giá tốt, có click, có mua hàng, v.v.) thường rất nhỏ so với lượng mẫu
không có phản hồi. Và việc không có phản hồi chưa chắc đã có nghĩa rằng
người dùng không quan tâm tới sản phẩm. Sự chênh lệch nhãn này khiến việc
xây dựng mô hình trở lên phức tạp hơn. Việc chọn phương pháp đánh giá
cũng hết sức quan trọng.
• Hiện tượng đuôi dài: Không những bị lệch về lượng mẫu có và không có
phản hồi mà lượng phản hồi cho các sản phẩm cũng chênh nhau đáng kể. Sẽ
có những sản phẩm phổ biến có rất nhiều dữ liệu những cũng có nhiều lần số
sản phẩm ít phổ biến có rất ít phản hồi.
• Vòng phản hồi (feedback loop): Đôi khi, việc gợi ý cho người dùng dựa
hoàn toàn vào phản hồi của họ lại không thực sự thú vị. Nếu một người xem
một video về chó mèo và rồi hệ thống gợi ý đúng về các video chó mèo khác

4
và người đó tiếp tục xem thì dần dần người đó sẽ hoàn toàn nhận được các
gợi ý về chó mèo mà không có thể loại nào khác. Với các hệ thống gợi ý, nhãn
thu được bị ảnh hưởng một phần từ những gì mà hệ thống đã gợi ý trong quá
khứ. Nếu tiếp tục phụ thuộc hoàn toàn vào nhãn thì kết quả gợi ý sẽ dần hội
tụ về một lượng nhỏ các video. Vòng phản hồi này có tác động tiêu cực tới
trải nghiệm người dùng và cần được hạn chế.

1.1.4 Hai dạng bài toán chủ yếu của RS

Có 2 dạng bài toán chính trong RS là dự đoán xếp hạng (rating prediction) của các
hệ thống có phản hồi tường minh như đã trình bày ở trên và dự đoán mục thông tin (item
prediction/recommendation) là việc xác định xác suất mà người dùng thích mục tin
tương ứng.

Trong RS, giá trị phản hồi rui của mỗi người dùng trên mục tin sẽ được ghi nhận

lại để làm cơ sở cho việc dự đoán các giá trị kế tiếp. Giá trị rui có thể được xác định một

cách tường minh (explicit feedbacks) như thông qua việc đánh giá/xếp hạng (ví dụ,
rating từ  đến ; hay like (1) và dislike (0),…) mà người dùng u đã bình

chọn cho bộ phim i; hoặc rui có thể được xác định một cách không tường minh thông

qua số lần click chuột, thời gian mà u đã duyệt/xem i,… Tùy theo hệ thống mà giá trị
này sẽ có ý nghĩa khác nhau, ví dụ nó có thể dùng để đo độ “phù hợp” hay “mức độ
thích” (thường là các đánh giá trên các sản phẩm) trong các hệ thống thương mại điện
tử hay “năng lực/kết quả thực hiện” của người dùng trong các hệ thống.

1.2 Các kỹ thuật trong RS


Các giải thuật trong RS có rất nhiều, nhưng ta có thể phân thành các nhóm chính cơ
bản sau đây: [1]

• Nhóm giải thuật lọc nội dung (Content-based Filtering): Gợi ý các bộ phim
dựa vào hồ sơ (profiles) của người dùng hoặc dựa vào nội dung/thuộc tính
(attributes) của những bộ phim tương tự như bộ phim mà người dùng đã chọn
trong quá khứ.
• Nhóm giải thuật lọc cộng tác (CF): Gợi ý các bộ phim dựa trên sự tương quan
(similarity) giữa các người dùng và/hoặc bộ phim. Có thể hiểu rằng đây là

5
cách gợi ý tới một người dùng dựa trên những người dùng có hành vi tương
tự.
o Phương pháp láng giềng (Neighborhood-based, còn gọi là Memory-
based), trong đó hoặc là dựa trên dữ liệu quá khứ của người dùng
“tương tự - similarity” (user-based approach), hoặc là dựa trên dữ liệu
quá khứ của những bộ phim “tương tự” (item-based approach)
o Dựa trên mô hình (Model-based): Nhóm này liên quan đến việc xây
dựng các mô hình dự đoán dựa trên dữ liệu thu thập được trong quá
khứ. Như mô hình Bayesian, các mô hình nhân tố tiềm ẩn (Latent
factor models) - trong đó kỹ thuật phân rã ma trận (Matrix
factorization) là một điển hình.
• Nhóm lai (Hybrid Algorithm): Là sự kết hợp của hai cách trên
• Nhóm kỹ thuật không cá nhân hóa (non-personalization)

Lọc thông tin là lĩnh vực nghiên cứu các quá trình phân bổ thông tin thích hợp và
gỡ bỏ thông tin không thích hợp đến với mỗi người dùng. Lọc thông tin cho các hệ gợi
ý được tiếp cận theo hai xu hướng chính, đó là lọc dựa vào nội dung sản phẩm và lọc
dựa vào thói quen sử dụng sản phẩm của người hay còn được gọi là lọc cộng tác. So với
lọc theo nội dung, lọc cộng tác cho lại kết quả tốt hơn và có thể lọc bất kỳ dạng thông
tin nào. Tuy nhiên, lọc cộng tác gặp phải vấn đề dữ liệu thưa, người dùng mới và sản
phẩm mới cần được tiếp tục nghiên cứu giải quyết. Kết hợp giữa lọc cộng tác và lọc nội
dung để nâng cao chất lượng dự đoán và tránh hiện trạng dữ liệu thưa của lọc cộng tác
được tập trung nghiên cứu nhiều trong thời gian gần đây. Các phương pháp lọc kết hợp
hiện nay vẫn hạn chế trong biểu diễn và ước lương mức độ ảnh hưởng của mỗi đặc trưng
nội dung đến thói quen sử dụng sản phẩm của người dùng.

Có rất nhiều cách để dự đoán, ước lượng hạng/điểm cho các sản phẩm như sử dụng
học máy, lý thuyết xấp xỉ, các thuật toán dựa trên kinh nghiệm, … Các hệ thống gợi ý
thường được phân thành ba loại theo các phương pháp lọc tin.

Gợi ý dựa trên nội dung: Cách tiếp cận lọc nội dung tạo ra một hồ sơ cho mỗi
người dùng hoặc sản phẩm để mô tả bản chất của nó. Ví dụ, một hồ sơ phim có thể bao
gồm các thuộc tính liên quan đến thể loại của nó, các diễn viên tham gia, sự phổ biến của
phòng vé, v.v. Hồ sơ người dùng có thể bao gồm thông tin nhân khẩu học hoặc câu trả
lời được cung cấp trên bảng câu hỏi phù hợp. Các hồ sơ cho phép các chương trình liên

6
kết người dùng với các sản phẩm phù hợp. Tất nhiên, chiến lược dựa trên nội dung yêu
cầu thu thập thông tin bên ngoài có thể không có sẵn hoặc khó thu thập.

Gợi ý dựa trên cộng tác: Cách này chỉ dựa trên hành vi của người dùng trước
đây. Ví dụ: Giao dịch trước đó hoặc xếp hạng sản phẩm, mà không yêu cầu tạo hồ sơ rõ
ràng. Chiến thuật này phân tích mối liên quan giữa người dùng và các thuộc tính của sản
phẩm để định nghĩa quan hệ giữa người dùng – sản phẩm.

Ưu điểm của lọc cộng tác so với lọc nội dung là không bị giới hạn miền, dẫn đến
có thể giải quyết các khía cạnh dữ liệu thường khó nắm bắt và khó khăn để đưa vào khi
sử dụng lọc nội dung. Tuy nhiên không hiệu quả khi phải xử lý với dữ liệu mới được
thêm vào, điều mà lọc nội dung lại hiệu quả hơn.

Gợi ý dựa trên cách tiếp cận kết hợp: Kết hợp hai phương pháp tiếp cận dựa trên
nội dung và cộng tác.

Hình 1.3 Các cách tiếp cận hệ thống gợi ý khác

1.2.1 Kỹ thuật lọc dựa trên nội dung (Content-based Filtering)

Lọc theo nội dung là phương pháp thực hiện dựa trên việc so sánh nội dung thông
tin hay mô tả hàng hóa, để tìm ra những sản phẩm tương tự với những gì mà người dùng
đã từng quan tâm để giới thiệu cho họ những sản phẩm này. Các phương pháp tiếp cận
cho lọc theo nội dung được chia thành hai phương pháp chính: lọc nội dung dựa vào bộ

7
nhớ và lọc nội dung dựa vào mô hình. Những vấn đề cần tiếp tục nghiên cứu của lọc nội
dung là vấn đề trích chọn đặc trưng và người dùng mới.

Với phương pháp gợi ý dựa trên nội dung, độ phù hợp r(u, i) của sản phẩm i với
người dùng u được đánh giá dựa trên độ phù hợp r(u, i’) trong đó và “tương tự” như i.
Ví dụ, để gợi ý một bộ phim cho người dùng u, hệ thống gợi ý sẽ tìm các đặc điểm của
những bộ phim từng được u đánh giá cao như diễn viên, đạo diễn, … sau đó chỉ những
bộ phim tương tự với sở thích của u mới được giới thiệu.

Hướng tiếp cận dựa trên nội dung bắt nguồn từ những nghiên cứu về thu thập thông
tin và lọc thông tin. Do đó, rất nhiều hệ thống dựa trên nội dung hiện nay tập trung vào
gợi ý các đối tượng chứa dữ liệu văn bản như tin tức, website. Những tiến bộ so với
hướng tiếp cận cũ của phương pháp tìm kiếm thông tin là do có sử dụng hồ sơ về người
dùng (chứa thông tin về sở thích, nhu cầu,...). Hồ sơ này được xây dựng dựa trên những
thông tin được người dùng cung cấp trực tiếp (khi trả lời khảo sát) hoặc gián tiếp (do
khai phá thông tin từ các giao dịch của người dùng).

Hình 1.4 Minh họa hệ thống lọc dựa trên nội dung

Giả sử ta xem Content(i) là một thông tin riêng của sản phẩm, nghĩa là một tập các
đặc tính đặc trưng cho sản phẩm i. Nó thường được tính toán thông qua việc trích rút từ
tập các đặc tính của sản phẩm i (nội dung của nó) và ứng với mỗi mục đích gợi ý sẽ xác
định ra sản phẩm thích hợp. Dễ dàng nhận thấy những hệ thống gợi ý dựa trên nội dung
thường thiết kế cho hầu hết những sản phẩm được gợi ý dựa trên văn bản và nội dung
của những hệ thống này được mô tả như là một từ khóa.

Một trong những thước đo phổ biến để xác định mức độ quan trọng của từ khóa trong
việc truy vấn thông tin là đo tần suất xuất hiện của mục từ trong tài liệu (Term Frequency)

8
và tần số nghịch đảo của tần suất xuất hiện các tài liệu (Inverse Document Frequency)
được định nghĩa như sau:
Giả sử N là tổng số tài liệu được gợi ý cho người dùng và từ khóa 𝑘𝑗 xuất hiện trong
𝑛𝑖 của chúng (𝑛𝑖 là tổng số tài liệu có từ khóa k). Giả sử 𝑓𝑖,𝑗 là số lần từ khóa 𝑘𝑖 xuất hiện
trong tài liệu 𝑑𝑗. 𝑇𝐹𝑖,𝑗 là tần số xuất hiện từ khóa 𝑘𝑖 trong tài liệu 𝑑𝑗:

𝑓𝑖,𝑗 (1.1)
𝑇𝐹𝑖,𝑗 =
𝑚𝑎𝑥𝑧 𝑓𝑧,𝑗

Trong đó, 𝑚𝑎𝑥𝑧 𝑓𝑧,𝑗 là số lần xuất hiện cao nhất của từ khóa 𝑘𝑧 trong toàn tập tài
liệu 𝑑𝑗. Tuy nhiên, những từ khóa xuất hiện trong nhiều tài liệu có thể không được phân
biệt với nhau giữa tài liệu liên quan và không liên quan. Vì vậy, tần số nghịch đảo tần
suất xuất hiện của các tài liệu 𝐼𝐷𝐹𝑖 được đưa ra để phân biệt giữa các từ khóa này và
thường dùng kết hợp với tần suất xuất hiện của từ khóa (𝑇𝐹𝑖,𝑗 mang lại tầm quan trọng
cho từ khóa):

𝑁 (1.2)
𝐼𝐷𝐹𝑖 = log
𝑖

Vậy sự kết hợp của TF và IDF sẽ xác định mức độ quan trọng của từ khóa 𝑘𝑖 cần

xét.

𝑤𝑖,𝑗 = 𝑇𝐹𝑖,𝑗 × 𝐼𝐷𝐹𝑖 (1.3)

Và nội dung của tài liệu 𝑑𝑗 được xác định như sau:

𝐶𝑜𝑛𝑡𝑒𝑛𝑡(𝑑𝑗 ) = (𝑤1𝑗 , 𝑤2𝑗 , … , 𝑤𝑘𝑗 ) (1.4)

Như đã nói ở trên, hệ thống dựa trên nội dung thường được dùng để gợi ý những sản
phẩm đã được người dùng đó trước đây ưa thích. Cụ thể, những sản phẩm được tiến cử
đem so sánh trọng số với các sản phẩm mà người dùng trước đây đã sử dụng và từ đó tìm
ra sản phẩm phù hợp nhất để gợi ý.

ContentBasedProfile(u) là hồ sơ cá nhân của người dùng u chứa những thị hiếu và


sở thích của người dùng. Hồ sơ cá nhân thu được thông qua việc phân tích nội dung của
những sản phẩm và trọng số do người dùng đánh giá trước đó, nó thường được xây dựng
bằng cách sử dụng kỹ thuật phân tích từ khóa từ việc truy vấn thông tin. Chẳng hạn,

9
ContentBasedProfile(u) có thể được định nghĩa như là một véc tơ của những mức độ
quan trọng mỗi mức này sẽ biểu diễn tầm quan trọng của từ khóa 𝑘𝑖 với người dùng u
và nó có thể được tính toán từ các véctơ nội dung đã được đánh trọng số cụ thể thông
qua các kỹ thuật khác nhau.

Theo như nhận xét trong hệ thống gợi ý hướng dựa trên nội dung có một số hạn chế
sau:

• Giới hạn trong phân tích nội dung: Nếu hai sản phẩm khác nhau được biểu
diễn cùng một tập đặc trưng thì chúng không thể phân biệt được. Vì vậy khi
những tài liệu dựa trên văn bản thường được biểu diễn dưới những từ khóa
quan trọng, thì những hệ thống dựa trên nội dung không thể phân biệt được
cái nào hợp, cái nào không hợp nếu chúng cùng sử dụng một thuật ngữ.

• Quá chuyên môn hóa: Khi hệ thống chỉ có thể gợi ý những sản phẩm có
trọng số cao dựa trên những thông tin của người dùng, thì người dùng sẽ bị
giới hạn trong việc gợi ý những sản phẩm khác có liên quan sản phẩm trên
mà đã được đánh trọng số. Chẳng hạn, một người không có kinh nghiệm với
các món ăn của người Huế thì ngay cả những cửa hàng lớn nhất kiểu Huế
trong thành phố cũng không bao giờ được gợi ý. Đây là một vấn đề đã được
nghiên cứu trong nhiều lĩnh vực, nó thường được ấn định bằng việc giới thiệu
một cách ngẫu nhiên. Chẳng hạn, việc sử dụng những thuật toán di truyền
được gợi ý như là khả năng giải quyết các vấn đề về ngữ cảnh của việc lọc
thông tin. Thêm vào đó, vấn đề liên quan đến việc quá chuyên môn hóa còn
là những hệ thống dựa trên nội dung không thể gợi ý những sản phẩm mà
khác với những gì mà người dùng đã biết trước đó. Trong trường hợp nào
đó, những sản phẩm không nên được gợi ý nếu chúng có quá nhiều điểm
tương tự với những gì mà người dùng đã gặp, như một bài báo tin tức tuy là
khác nhau nhưng đưa về cùng một sự kiện. Vì vậy, một vài hệ thống gợi ý
dựa trên nội dung không chỉ lọc ra những sản phẩm có quá nhiều điểm khác
với sở thích của người dùng mà còn lọc cả chính những sản phẩm có quá
nhiều điểm giống của người dùng trước đó. Nói tóm lại, tính đa dạng của
việc gợi ý thường là những đặc điểm mô tả trong hệ thống gợi ý. Lý tưởng
nhất là người dùng sẽ tự đưa ra trọng số của những lựa chọn thay cho việc
đưa ra một tập các khả năng lựa chọn.

10
• Vấn đề người dùng mới: Người dùng phải đánh giá đầy đủ cho những sản
phẩm trước khi hệ thống gợi ý dựa trên nội dung có thể hiểu những sở thích
của người dùng và từ đó đưa ra cho người dùng những gợi ý tin cậy. Vì vậy,
với người dùng mới, thông tin về việc đánh trọng số rất ít nên khó có thể đảm
bảo việc gợi ý sẽ tốt.

• Vấn đề thông tin sản phẩm mới: Lọc nội dung phân tích các đặc điểm của
sản phẩm để so sánh với những sản phẩm mà người dùng đã đánh giá trước
đó, với những sản phẩm có thông tin không đầy đủ hoặc quá đặc biệt, rất khó
để đưa ra 1 gợi ý chính xác với các sản phẩm như vậy.

Phương pháp lọc dựa trên nội dung dựa trên mô tả về mặt hàng và hồ sơ về các tùy
chọn của người dùng. Trong hệ thống gợi ý dựa trên nội dung, từ khóa được sử dụng để
mô tả các mục và hồ sơ người dùng được xây dựng để chỉ ra loại mục mà người dùng
này thích. Nói cách khác, các thuật toán này cố gắng gợi ý các mục tương tự với các
mục mà người dùng đã thích trong quá khứ (hoặc đang kiểm tra trong hiện tại). Cụ thể,
các mục đề cử khác nhau được so sánh với các mục được đánh giá trước đây bởi người
dùng và các mục phù hợp nhất được gợi ý. Cách tiếp cận này có nguồn gốc từ việc thu
thập thông tin và nghiên cứu lọc thông tin.

Để tóm tắt các tính năng của các mục trong hệ thống, một thuật toán trình bày mục
được áp dụng. Một thuật toán được sử dụng rộng rãi là biểu diễn tf – idf (còn được gọi
là biểu diễn không gian vectơ).

Để tạo hồ sơ người dùng, hệ thống chủ yếu tập trung vào hai loại thông tin:

• Một mô hình ưu tiên của người dùng.

• Lịch sử tương tác của người dùng với hệ thống gợi ý.


Về cơ bản, các phương thức này sử dụng một hồ sơ mặt hàng (ví dụ, một tập hợp
các thuộc tính và tính năng rời rạc) mô tả mục trong hệ thống. Hệ thống tạo hồ sơ dựa
trên nội dung của người dùng dựa trên vectơ trọng số của các đối tượng địa lý. Trọng số
biểu thị tầm quan trọng của từng tính năng đối với người dùng và có thể được tính từ
các vectơ nội dung được xếp hạng riêng lẻ bằng nhiều kỹ thuật. Các phương pháp đơn
giản sử dụng các giá trị trung bình của vector hạng mục trong khi các phương pháp phức
tạp khác sử dụng các kỹ thuật máy học như Bayesian Classifiers , phân tích cụm , cây
quyết định và mạng thần kinh nhân tạo để ước tính xác suất người dùng sẽ thích mục
đó.

11
Phản hồi trực tiếp từ người dùng, thường dưới dạng nút thích hoặc không thích , có
thể được sử dụng để gán trọng số cao hơn hoặc thấp hơn về tầm quan trọng của các
thuộc tính nhất định (sử dụng phân loại Rocchio hoặc các kỹ thuật tương tự khác).

Một vấn đề quan trọng với lọc dựa trên nội dung là liệu hệ thống có thể tìm hiểu các
tùy chọn của người dùng từ hành động của người dùng liên quan đến một nguồn nội
dung hay không và sử dụng chúng trên các loại nội dung khác. Khi hệ thống bị hạn chế
gợi ý nội dung cùng loại với người dùng đang sử dụng, giá trị từ hệ thống gợi ý thấp
hơn đáng kể so với các loại nội dung khác từ các dịch vụ khác có thể được gợi ý. Ví dụ:
giới thiệu các bài viết tin tức dựa trên việc duyệt tin tức hữu ích nhưng sẽ hữu ích hơn
nhiều khi bạn có thể gợi ý âm nhạc, video, sản phẩm, cuộc thảo luận, v.v. từ các dịch vụ
khác nhau dựa trên duyệt tin tức.

1.2.2 Kỹ thuật lọc cộng tác (CF)

Mục đích của giải thuật lọc cộng tác là gợi ý những sản phẩm mới hoặc dự đoán
một sản phẩm hợp lý cho người dùng, dựa trên những sở thích trước đây và lựa chọn từ
những sở thích của những người dùng khác.

Một cách tiếp cận để thiết kế các hệ thống gợi ý được sử dụng rộng rãi là lọc cộng
tác. Các phương pháp lọc cộng tác dựa trên việc thu thập và phân tích một lượng lớn
thông tin về hành vi, hoạt động hoặc sở thích của người dùng và dự đoán những gì người
dùng sẽ thích dựa trên sự tương đồng của họ với người dùng khác. Một lợi thế quan
trọng của phương pháp lọc cộng tác là nó không dựa vào nội dung phân tích máy và do
đó nó có khả năng gợi ý chính xác các mục phức tạp như phim mà không yêu cầu “hiểu
biết” về mục đó. Nhiều thuật toán đã được sử dụng để đo lường sự giống nhau của người
dùng hoặc sự tương đồng về mặt hàng trong các hệ thống giới thiệu. Ví dụ, cách tiếp
cận hàng xóm gần nhất (k-nearest neighbor) và Pearson Correlation được Allen triển
khai lần đầu tiên.

Lọc cộng tác dựa trên giả định rằng những người đã đồng ý trong quá khứ sẽ đồng
ý trong tương lai và rằng họ sẽ thích các loại mặt hàng tương tự như họ thích trong quá
khứ. Khi xây dựng mô hình từ hành vi của người dùng, sự phân biệt thường được thực
hiện giữa các hình thức thu thập dữ liệu rõ ràng và tiềm ẩn.

12
Ví dụ về thu thập dữ liệu rõ ràng bao gồm:

• Yêu cầu người dùng xếp hạng một mục trên thang trượt.
• Yêu cầu người dùng tìm kiếm.
• Yêu cầu người dùng xếp hạng một bộ sưu tập các mục từ yêu thích đến
ít yêu thích nhất.
• Trình bày hai mục cho một người dùng và yêu cầu anh ta/ cô ấy chọn
một trong số chúng tốt hơn.
• Yêu cầu người dùng tạo danh sách các mục mà anh/ cô ấy thích.

Ví dụ về thu thập dữ liệu ngầm bao gồm:

• Quan sát các mục mà người dùng xem trong cửa hàng trực tuyến.
• Phân tích thời gian xem mục / người dùng.
• Lưu giữ một bản ghi các mục mà người dùng mua trực tuyến.
• Lấy danh sách các mục mà người dùng đã nghe hoặc xem trên máy tính
của họ.
• Phân tích mạng xã hội của người dùng và khám phá những lượt thích và
không thích tương tự.

Hệ thống gợi ý so sánh dữ liệu đã thu thập với dữ liệu tương tự và khác nhau được
thu thập từ những người khác và tính toán danh sách các mục được gợi ý cho người
dùng. Một số ví dụ thương mại và phi thương mại được liệt kê trong bài viết về các hệ
thống lọc cộng tác.

Một trong những ví dụ nổi tiếng nhất về lọc cộng tác là lọc cộng tác theo từng mục
(những người mua x cũng mua y), một thuật toán được phổ biến rộng rãi bởi hệ thống
gợi ý của Amazon.com. Các ví dụ khác bao gồm:

• Last.fm gợi ý âm nhạc dựa trên so sánh thói quen nghe của những người
dùng tương tự, trong khi Readgeek so sánh xếp hạng sách cho các gợi ý.
• Facebook , MySpace , LinkedIn và các mạng xã hội khác sử dụng tính
năng lọc cộng tác để giới thiệu bạn bè, nhóm và các kết nối xã hội khác
(bằng cách kiểm tra mạng kết nối giữa người dùng và bạn bè của họ).
Twitter sử dụng nhiều tín hiệu và tính toán trong bộ nhớ để giới thiệu cho
người dùng của họ rằng họ nên “theo dõi”.

13
Các phương pháp lọc cộng tác thường gặp phải ba vấn đề: Cold Start, khả năng mở
rộng và sự thưa thớt.

• Cold Start: Các hệ thống này thường yêu cầu một lượng lớn dữ liệu hiện
có của người dùng để đưa ra các gợi ý chính xác.
• Khả năng mở rộng: Trong nhiều môi trường mà các hệ thống này đưa ra
các khuyến nghị, có hàng triệu người dùng và sản phẩm. Do đó, một
lượng lớn công suất tính toán thường là cần thiết để tính toán các gợi ý.
• Sparsity: Số lượng các mặt hàng được bán trên các trang web thương mại
điện tử lớn là cực kỳ lớn. Những người dùng tích cực nhất sẽ chỉ đánh
giá một tập con nhỏ của cơ sở dữ liệu tổng thể. Do đó, ngay cả những
mặt hàng phổ biến nhất cũng có rất ít xếp hạng.

1.2.3 Kỹ thuật Phân rã Ma trận (MF)

Kỹ thuật phân rã ma trận là việc chia một ma trận lớn R thành hai ma trận có kích
thước nhỏ hơn là P và Q, sao cho ta có thể xây dựng lại R từ hai ma trận nhỏ hơn này
̂ ~ PQT (trong đó 𝑹
càng chính xác càng tốt theo công thức 𝑹 ̂ ∈ ℝ𝒎×𝒏 là ma trận đánh
giá dự đoán có cùng kích thước với R).

Hình 1.5 Mô hình phân rã ma trận

Với 𝐏 ∈ ℝ𝒎×𝒏 là một ma trận mà mỗi dòng u là một vectơ bao gồm k nhân tố tiềm
ẩn (latent factors) mô tả người dùng u.

𝐐 ∈ ℝ𝒎×𝒏 là một ma trận mà mỗi hàng i là một vectơ bao gồm k nhân tố tiềm
ẩn (latent factors) mô tả bộ phim i.

14
Nếu ta gọi puk và qik là các phần tử tương ứng của hai ma trận P và Q, khi đó xếp
hạng của người dùng u trên bộ phim i được dự đoán bởi công thức:
𝐾

ui = ∑ puk q ik = PQ
r̂ T (1.5)
𝑘=1

Phép phân tích suy biến (Singular Value Decomposition) được viết tắt là SVD là
một dạng MF khái quát hơn so với phép phân tích riêng đã trình bày ở trên. Theo đó
phương pháp này cũng nhằm phân rã một ma trận thành tích của ba ma trận số thực hoặc
số phức. Trong đó hai ma trận ở vị trí đầu tiên và cuối cùng là ma trận trực giao có thể
không là khả nghịch của nhau và ở giữa là ma trận đường chéo có thể không vuông.
T
Amn = Umm Σmm Vnn (1.6)

Với Amn ∈ ℝ𝒎×𝒏 , Umm ∈ ℝ𝒎×𝒎 , Σmm ∈ ℝ𝒎×𝒎 , Vnn ∈ ℝ𝒏×𝒏 (kích thước ma trận
để dưới chân ma trận). Trong công thức trên thì Umm và Vnn là các ma trận trực giao
còn Σmm là ma trận đường chéo.

1.2.4 Kỹ thuật phân cụm K-Nearest Neighbors (kNN)

Trong lý thuyết học máy và xác suất thống kê, thuật toán k - mẫu gần nhất (k-nearest
neighbors) là một thuật toán phi tham số (non - parametric), học giám sát (supervised
learning), lười (lazy learning), sử dụng cho cả hai mục đích là hồi quy và phân lớp.

Thuật toán được Evelyn Fix và Joseph Hodges công bố đầu tiên vào năm 1951 và
được Thomas Cover mở rộng sau này vào năm 1967. Tính "lười" của kNN được thể
hiện ở 2 tính chất: hàm mục tiêu được xấp xỉ tại các địa phương, và kNN không có giai
đoạn huấn luyện. Mọi tính toán được thực hiện khi nó cần dự đoán kết quả của dữ liệu
mới.

Bản chất của kNN chính là tính toán khoảng cách từ điểm cần xét đến k điểm lân
cận, nên nếu các features có scale khác nhau, hoặc có đơn vị khác nhau, ta có thể thực
hiện chuẩn hoá (normalize) dữ liệu để có thể đẩy mạnh hiệu suất của thuật toán. Tuỳ
thuộc vào mục đích phân loại hay hồi quy mà đầu ra của kNN sẽ khác nhau:

• Với bài toán phân loại, đầu ra của kNN là lớp của bản ghi cần phân loại.
Một bản ghi được xác định lớp theo nguyên tắc biểu quyết đa số. Theo
đó, lớp của bản ghi được xác định theo k bản ghi gần nhất với bản ghi

15
đang được xét theo nguyên tắc số đông với k đảm bảo điều kiện là số
nguyên dương, thường đủ nhỏ.
• Với bài toán hồi quy, đầu ra của kNN chính là giá trị dự đoán của của
hàm mất mát tại bản ghi đang được xét. Giá trị dự đoán này là trung bình
nhãn của k mẫu gần nhất.

Dữ liệu huấn luyện là tập hợp những điểm dữ liệu đã được gắn nhãn (với bài toán
phân lớp), và tập các điểm dữ liệu với giá trị tương ứng (với bài toán hồi quy). Một đặc
trung của thuật toán kNN chính là sự nhạy cảm với hình dạng của dữ liệu.

Độ đo khoảng cách:

• Khoảng cách Manhattan: Ta có thể hiểu khoảng cách Manhattan là tổng


khoảng cách các thành phần toạ độ giữa 2 điểm.

Hình 1.6 Ví dụ về khoảng cách Manhattan

𝑑 = ∑‖𝑥𝑖 − 𝑦𝑖 ‖
(1-7)
𝑖=1

• Khoảng cách Euclid: Ta có thể hiểu khoảng cách Euclid là khoảng cách
đường chim bay giữa 2 điểm.

𝑑 = √(∑(𝑥𝑖 − 𝑦𝑖 )2 ) (1.8)
𝑖=1

16
• Khoảng cách Cosine: Ta có độ đo tương đồng Cosine được tính theo công
thức sau:

𝑎⃗ ∙ 𝑏⃗⃗
cos(𝜃) =
‖𝑎⃗‖‖𝑏⃗⃗‖ (1.9)

Vì cos(𝜃) ∈ [−1,1]:
Giá trị −1 biểu thị không có mối quan hệ
Giá trị 0 biểu thị mối quan hệ độc lập tuyến tính
Giá trị 1 biểu thị mối quan hệ tương đồng

Khoảng cách Cosine không tính khoảng cách giữa 2 điểm theo toạ độ, mà nó đo góc
giữa 2 vector đại diện 2 điểm đó: Khoảng cách Cosine = 1 - Độ đo Cosine.

Chọn số k phù hợp: Giá trị k cho thuật toán kNN quy định thuật toán phải quan sát
k số điểm lân cận xung quanh điểm được xét nhằm phân loại. Nếu k = 1 , ta gắn nhãn
điểm được xét trùng với điểm gần nhất trong tập huấn luyện. Chọn k là một công việc
quan trọng, do các giá trị khác nhau của k có thể dẫn tới hiện tượng over hoặc underfit.
Thường, lựa chọn số k là phụ thuộc vào dữ liệu. Giá trị k lớn đồng nghĩa với việc ta
giảm thiểu được nhiễu khi thực hiện phân lớp, nhưng sẽ khiến ranh giới giữa các lớp trở
nên mờ nhoà hơn. Ta có thể chọn được số k tốt thông qua các thủ thuật heuristic: Scikit-
learn cung cấp chức năng GridSearchCV hoặc RandomizeSearchCV, cho phép chúng ta
dễ dàng kiểm tra nhiều giá trị k khác nhau. Ngoài 2 thủ thuật trên, ta còn có thể sử dụng
cross - validation để có thể lọc k. Độ chính xác của thuật toán kNN có thể bị giảm đột
ngột nếu có các đặc trưng nhiễu hoặc đặc trưng không liên quan, hoặc mức độ đo của
các yếu tố không đồng đều, không tương xứng với mức độ tương quan với nhãn. Thông
thường, khi ta làm việc với bài toán phân lớp nhị phân, ta nên để k lẻ để tránh trường
hợp hoà.

Ưu và nhược điểm của kNN:

Ưu điểm:

• Đơn giản và dễ giải thích.


• Không dựa trên bất kỳ giả định nào, vì thế nó có thể được sử dụng trong
các bài toán phi tuyến tính.
• Hoạt động tốt trong trường hợp phân loại với nhiều lớp.
• Sử dụng được trong cả phân loại và hồi quy.

17
Nhược điểm:

• Trở nên rất chậm khi số lượng điểm dữ liệu tăng lên vì mô hình cần lưu
trữ tất cả các điểm dữ liệu.
• Tốn bộ nhớ.
• Nhạy cảm với các dữ liệu bất thường (nhiễu).

1.2.5 Kỹ thuật hệ thống gợi ý lai (Hybrid Recommendation Systems)

Nghiên cứu gần đây đã chứng minh rằng một phương pháp lai, kết hợp lọc cộng
tác và lọc dựa trên nội dung có thể hiệu quả hơn trong một số trường hợp. Các phương
pháp lai có thể được thực hiện theo nhiều cách:

• Bằng cách đưa ra các dự đoán dựa trên nội dung và dựa trên lọc cộng tác
riêng biệt và sau đó kết hợp chúng.
• Bằng cách thêm các khả năng dựa trên nội dung vào phương pháp cộng
tác (và ngược lại).
• Bằng cách thống nhất các phương pháp tiếp cận thành một mô hình.

Một số nghiên cứu thực nghiệm so sánh hiệu suất của phương pháp lai với các
phương pháp cộng tác thuần túy và chứng minh rằng các phương pháp lai có thể cung
cấp các khuyến nghị chính xác hơn các phương pháp thuần túy. Những phương pháp
này cũng có thể được sử dụng để khắc phục một số vấn đề thường gặp trong hệ thống
gợi ý.

Có bảy kỹ thuật lai cơ bản (hybridization techniques):

• Có trọng số (Weighted): Điểm số của các thành phần gợi ý khác nhau
được kết hợp theo số lượng. [2]
• Chuyển đổi (Switching): Hệ thống chọn giữa các thành phần gợi ý và áp
dụng hệ thống được chọn. [3]
• Hỗn hợp (Mixed): Các khuyến nghị từ những người giới thiệu khác nhau
được trình bày cùng nhau để đưa ra gợi ý. [4]
• Kết hợp tính năng (Feature Combination): Các tính năng được lấy từ các
nguồn tri thức khác nhau được kết hợp với nhau và được đưa ra cho một
thuật toán gợi ý duy nhất. [5]

18
• Tính năng tăng cường (Feature Augmentation): Một kỹ thuật gợi ý được
sử dụng để tính toán một tính năng hoặc tập hợp các tính năng, sau đó là
một phần của đầu vào cho kỹ thuật tiếp theo. [6]
• Cascade: Các khuyến nghị được ưu tiên nghiêm ngặt, với những ưu tiên
thấp hơn phá vỡ các mối quan hệ trong việc tính điểm của những người
cao hơn. [7]
• Cấp độ meta (Meta-level): Một kỹ thuật gợi ý được áp dụng và tạo ra
một số loại mô hình, sau đó là đầu vào được sử dụng bởi kỹ thuật tiếp
theo. [8]

Một vài hệ thống gợi ý sử dụng phương pháp kết hợp phương pháp dựa trên cộng
tác và dựa trên nội dung nhằm tránh những hạn chế của những hệ thống gợi ý dựa trên
cộng tác và dựa trên nội dung. Cách thức nhằm kết hợp phương pháp dựa trên cộng tác
và dựa trên nội dung thành hệ thống gợi ý kết hợp có thể phân loại như sau:

• Thực thi những phương thức dựa trên nội dung và dựa trên cộng tác một cách
tách biệt cùng với đó là kết hợp những dự đoán của chúng.
• Kết hợp một vài đặc tính dựa trên nội dung vào trong phương pháp dựa trên
cộng tác.
• Kết hợp một vài đặc tính dựa trên cộng tác vào trong phương pháp dựa trên
nội dung.
• Xây dựng một số mô hình hợp nhất tổng quát kết hợp những đặc tính dựa
trên nội dung và dựa trên cộng tác.

Tất cả những phương pháp tiếp cận trên được sử dụng trong những nghiên cứu về
hệ gợi ý sau:

• Kết hợp những gợi ý riêng rẽ: Một phương pháp để xây dựng những hệ thống
gợi ý kết hợp là thực hiện chia hệ thống gợi ý dựa trên nội dung và dựa trên
cộng tác. Như vậy có thể có hai kịch bản khác nhau. Đầu tiên, kết hợp đầu ra
đã thu được (những đánh giá) từ những hệ thống gợi ý riêng biệt thành một
hệ thống gợi ý cuối cùng sử dụng hoặc là sự kết hợp tuyến tính những đánh
giá hoặc là một lược đồ bầu chọn. Nói một cách khác, chúng ta có thể sử dụng
một trong những hệ thống gợi ý cụ thể đó, tại một thời điểm để sử dụng chúng
tốt hơn dựa vào tiêu chuẩn “chất lượng” gợi ý.

19
• Thêm những đặc tính dựa trên nội dung vào mô hình cộng tác: Một vài hệ
thống gợi ý kết hợp sử dụng phương pháp “cộng tác thông qua nội dung”
được mô tả dựa trên những kỹ thuật cộng tác truyền thống và lưu trữ hồ sơ cá
nhân dựa trên nội dung của mỗi người dùng. Hồ sơ cá nhân dựa trên nội dung
này không có những sản phẩm phổ biến được đánh giá, nó thường được dùng
để tính toán độ tương quan giữa hai người dùng. Nó cho phép vượt qua những
vấn đề liên quan đến sự thưa thớt của những ứng dụng cộng tác thuần nhất
trước đây, điển hình là không có nhiều cặp người dùng có số lượng những sản
phẩm chung. Lợi thế khác của phương pháp này là người dùng được gợi ý
một sản phẩm không chỉ khi sản phẩm đó có mức đánh giá cao do những
người dùng có cùng hồ sơ cá nhân mà còn cả khi sản phẩm này được đánh
giá cao dựa trên những hồ sơ cá nhân của người dùng đó.
• Thêm những đặc tính cộng tác vào mô hình dựa trên nội dung: Phương pháp
phổ biến nhất trong kiểu này là việc sử dụng kỹ thuật giảm chiều
(dimensionality reduction) trong nhóm những hồ sơ cá nhân dựa trên nội
dung. Chẳng hạn, sử dụng chỉ mục ngữ nghĩa latent (LSI) để tạo ra cái nhìn
cộng tác của tập những hồ sơ cá nhân người dùng; ở đó những hồ sơ này
được biểu diễn bởi những véc tơ, và kết quả của việc cải thiện hiệu năng
được so sánh với phương pháp tiếp cận dựa trên nội dung thuần nhất.
• Phát triển mô hình gợi ý hợp nhất: Nhiều nghiên cứu được đưa ra theo
phương pháp tiếp cận này trong những năm gần đây. Chẳng hạn, gợi ý ra việc
sử dụng những đặc tính dựa trên nội dung và dựa trên cộng tác (ví dụ, tuổi
hoặc giới tính của người dùng hoặc các thể loại phim) trong việc phân loại
dựa trên luật đơn.

1.2.6 Kỹ thuật không cá nhân hóa (non-personalization)

Trong kỹ thuật này, do chúng khá đơn giản, dễ cài đặt nên nên thường được các
website/hệ thống tích hợp vào, gồm cả các website thương mại, website tin tức, hay giải
trí. Chẳng hạn như trong các hệ thống bán hàng trực tuyến, người ta thường gợi ý các
sản phẩm được xem/mua/bình luận/.. nhiều nhất; gợi ý các sản phẩm mới nhất; gợi ý
các sản phẩm cùng loại/ cùng nhà sản xuất/..; gợi ý các sản phẩm được mua/chọn cùng
nhau. Một ví dụ khá điển hình là thông qua luật kết hợp (như Apriori), Amazon đã áp
dụng khá thành công để tìm ra các sản phẩm hay được mua cùng nhau.

20
Tuy vậy, bất lợi của các phương pháp này là không cá nhân hóa cho từng người
dùng, nghĩa là tất cả các người dùng đều được gợi ý giống nhau khi chọn cùng sản phẩm.
[1]

1.3 Các kiến trúc học sâu (Deep Learning) trong hệ thống gợi ý

1.3.1 Tổng quan về DL

DL (học sâu) có thể được xem là một lĩnh vực con của ML (học máy) – ở đó các
máy tính sẽ học và cải thiện chính nó thông qua các thuật toán. DL được xây dựng dựa
trên các khái niệm phức tạp hơn rất nhiều, chủ yếu hoạt động với các mạng nơ-ron nhân
tạo để bắt chước khả năng tư duy và suy nghĩ của bộ não con người.

DL là một phương pháp của ML. Mạng nơ-ron nhân tạo trong DL được xây dựng
để mô phỏng khả năng tư duy của bộ não con người.

Một mạng nơ-ron bao gồm nhiều lớp (layer) khác nhau, số lượng layer càng nhiều
thì mạng sẽ càng “sâu”. Trong mỗi lớp là các nút mạng (node) và được liên kết với
những lớp liền kề khác. Mỗi kết nối giữa các node sẽ có một trọng số tương ứng, trọng
số càng cao thì ảnh hưởng của kết nối này đến mạng nơ-ron càng lớn.

Mỗi nơ-ron sẽ có một hàm kích hoạt, về cơ bản thì có nhiệm vụ “chuẩn hoá” đầu ra
từ nơ-ron này. Dữ liệu được người dùng đưa vào mạng nơ-ron sẽ đi qua tất cả lớp và trả
về kết quả ở lớp cuối cùng, gọi là lớp đầu ra.

Trong quá trình huấn luyện mô hình mạng nơ-ron, các trọng số sẽ được thay đổi và
nhiệm vụ của mô hình là tìm ra bộ giá trị của trọng số sao cho phán đoán là tốt nhất.

Các hệ thống DL yêu cầu phần cứng phải rất mạnh để có thể xử lý được lượng dữ
liệu lớn và thực hiện các phép tính phức tạp. Nhiều mô hình DL có thể mất nhiều tuần,
thậm chí nhiều tháng để triển khai trên những phần cứng tiên tiến nhất hiện nay.

21
Hình 1.7 Mối liên hệ giữa AI, ML và DL

Khi mà khả năng tính toán của các máy tính ngày càng được nâng lên một tầm cao
mới và lượng dữ liệu ngày càng khổng lồ, ML (ML) đã tiến thêm một bước dài và một
lĩnh vực mới được ra đời gọi là DL. ML là một tập hợp con của AI cung cấp cho máy
tính khả năng tự động học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập
trình cụ thể. Do đó, học máy là một phương pháp giúp máy móc giải quyết vấn đề bằng
cách đạt được khả năng suy nghĩ. Trong khi đó DL lại tập trung giải quyết các vấn đề
liên quan đến mạng thần kinh nhân tạo nhằm nâng cấp các công nghệ như nhận diện
giọng nói, thị giác máy tính và xử lý ngôn ngữ tự nhiên. Chỉ trong thời gian ngắn, DL
đã giúp máy tính làm được rất nhiều công việc phức tạp như: chỉnh màu cho ảnh đen
trắng, thêm âm thanh vào phim câm, dịch máy tự động, phân loại các đối tượng trong
ảnh, tạo chữ viết tay tự động, tạo phụ đề cho hình ảnh,... Ngoài ra còn rất nhiều lĩnh vực
khác đã được đơn giản hóa và nâng cao hiệu quả hoạt động với sự trợ giúp của DL.

1.3.2 Mô hình Restricted Bolzmann Machine (RBM)

Khi AI vẫn còn là một lĩnh vực chưa được phát triển, RBM không được phát minh
bởi một người tên là Boltzmann, mà là cái tên đề cập đến hàm phân phối Boltzmann mà
họ đã sử dụng cho chức năng lấy mẫu của mình (Sampling Function). RBM thực sự
được ghi nhận bởi Geoffrey Hinston, giáo sư tại Đại học Carnegie Mellon với ý tưởng
có từ năm 1985. Là một mô hình tiên phong trong học máy và thiết kế mạng thần kinh
(neuron network).

22
RBM không có thông tin liên lạc giữa các lớp trong mô hình, đó là “hạn chế” của
mô hình. Các chuyên gia giải thích rằng RBM nút đưa ra quyết định “ngẫu nhiên”, hoặc
là chúng được xác định một cách ngẫu nhiên. Trọng lượng khác nhau thay đổi cấu trúc
của đầu vào, và chức năng kích hoạt xử lý khác nhau giữa các nút. Giống như các loại
hệ thống tương tự, thuật toán Boltzmann hạn chế hoạt động với các lớp đầu vào, lớp ẩn
và lớp ra để đạt được kết quả học máy. Các RBM cũng đã được hữu ích trong việc tạo
ra mô hình phức tạp hơn bằng cách chồng RBM riêng lẻ với nhau.

Hình 1.8 Mô hình minh họa cho RBM

RBM thực sự là một trong những mạng thần kinh đơn giản nhất, nó chỉ có hai lớp,
một lớp hiển thị (1 visible layer) và một lớp ẩn (1 hidden layer). Chúng ta đào tạo nó
bằng cách cung cấp dữ liệu đào tạo của mình vào lớp hiển thị trong một lần chuyển tiếp
(forward pass), đồng thời đào tạo các trọng số và độ lệch giữa chúng trong quá trình lan
truyền ngược (backpropagation). Một chức năng kích hoạt chẳng hạn như ReLU được
sử dụng để tạo đầu ra từ mỗi nơ-ron ẩn. Gọi là Restricted Boltzmann Machine vì các
neuron trong cùng một lớp không thể giao tiếp trực tiếp với nhau mà chỉ có kết nối giữa
hai lớp khác nhau.

RBM là một thuật toán, hữu ích cho việc giảm kích thước, phân loại, hồi quy, lọc
cộng tác, học tính năng và lập mô hình chủ đề, là các mô hình đồ họa xác suất có thể
được hiểu là mạng thần kinh ngẫu nhiên. Chúng đã thu hút nhiều sự chú ý khi xây dựng
các khối cho hệ thống học tập nhiều lớp được gọi là mạng lưới niềm tin sâu sắc (DBN).
Trong những năm gần đây, các mô hình mở rộng hoặc mượn các khái niệm từ RBM đã
trở nên phổ biến để phân tích và tạo mẫu với ứng dụng bao gồm phân loại, xử lý và tạo
hình ảnh. Và dựa trên ANN tổng hợp ngẫu nhiên. RBM có thể hoạt động ở cả chế độ có

23
giám sát và không được giám sát. Trong RBM, các nút từ mỗi nhóm đơn vị có thể chia
sẻ một kết nối đối xứng. Tuy nhiên, không có kết nối nào giữa các nút trong cùng một
nhóm đơn vị. Các RBM có thể được sử dụng để tạo mạng học sâu bằng cách xếp chồng
nhiều RBM. Các mạng học sâu được hình thành sau này có thể được điều chỉnh bằng
cách sử dụng các mạng lan truyền ngược và giảm độ dốc. Các RBM có thể được sử dụng
trong các ứng dụng thực tế khác nhau, ví dụ: học tính năng, phân loại dữ liệu và giảm
kích thước của dữ liệu được thu thập.

1.3.3 Mô hình Auto-Encoder

Hình 1.9 Mô hình Auto-Encoder

Auto-Encoder là mạng ANN có khả năng học hiệu quả các biểu diễn của dữ liệu đầu
vào mà không cần nhãn, nói cách khác, giả sử từ một hình ảnh có thể tái tạo ra một bức
ảnh có liên quan chặt chẽ với bức ảnh đầu vào đó. Đầu vào loại mạng này không có
nhãn, tức là mạng có khả năng học không giám sát (Unsupervised Learning). Đầu vào
được mạng mã hóa để chỉ tập trung vào các đặc trưng quan trọng nhất, tùy vào bài toán
cụ thể. Các biểu diễn thường có chiều nhỏ hơn so với đầu vào của Autoencoder, đó là lý
do Autoencoder có thể dùng trong các bài toán giảm chiều dữ liệu hoặc trích xuất đặc
trưng.

24
Autoencoder bao gồm 3 phần chính:

• Encoder: Module có nhiệm vụ nén dữ liệu đầu vòa thành một biễu diễn được
mã hóa, thường nhỏ hơn một vài bậc so với dữ liệu đầu vào. Bao gồm một
tập gợp các convolutional blocks, theo sau là các polling modules giúp cho
việc nén đầu vào của mô hình thành một phần nhỏ gọn hơn, được gọi là
Bottleneck. Ở đây thì ngoài việc sử dụng các Convolutional + Pooling thì có
thể chỉ cần sử dụng các khối fully connected tùy vào đầu vào và bài toán yêu
cầu. Ví dụ bài toán làm mờ chữ số viết tay, thì chỉ cần một vài lớp Fully
connected cũng đã làm rất tốt nhiệm vụ của mình rồi. Tiếp đến, với đầu ra là
Bottleneck, bộ Decoder sẽ giải mã bằng một loạt các module Upsampling
(hoặc Fully Connected) để đưa đặc trưng nén về dạng hình ảnh. Trong các
bài toán đơn giản thì đầu ra được mong đợi là giống với đầu vào (nhiễu hơn
hoặc nét hơn, …) Tuy nhiên với các bài toán cao hơn thì ảnh đầu ra mong
muốn là một ảnh hoàn toàn mới, mang một mối liên hệ chặt chẽ với ảnh đầu
vào, được hình thành từ đặc trưng của ảnh đầu vào đã cung cấp.
• Bottleneck: Module chứa các biểu diễn tri thức được nén (chính là output
của Encoder), đây là phần quan trọng nhất của mạng bới nó mang đặc trưng
của đầu vào, có thể dùng để tái tạo ảnh, lấy đặc trưng của ảnh, …. Phần quan
trọng nhất của Autoencoder, cũng là phần mang kích thước nhỏ nhất Bởi
Bottleneck được thiết kế từ việc mã hóa tối đa thông tin của ảnh đầu vào, vậy
nên có thể nói rằng bottleneck mang đặc trưng, chi thức của ảnh đầu vào Với
cấu trúc mã hóa – giải mã, mô hình trích xuất được đặc trưng của ảnh dưới
dạng dữ liệu và thiết lập được mối tương quan giữa input và output của mạng
Với việc Bottleneck có kích thước nhỏ hơn ảnh đầu vào cũng như mang nhiều
thông tin đặc trưng giúp ngăn cản mạng ghi nhớ quá nhiều. Bottleneck càng
nhỏ, tủi ro overfitting càng thấp, tuy nhiên nếu kích thước Bottleneck quá
nhỏ sẽ hạn chế khả năng lưu trữ thông tin của ảnh đầu vào, gây khó khăn cho
việc giải mã ở khối Decoder.
• Decoder: Module giúp mạng giải nén các biểu diễn tri thức và tái cấu trúc
lại dữ liệu từ dạng mã hóa của nó, mô hình học dựa trên việc so sánh đầu ra
của Decoder với đầu vào ban đầu (đầu vào của Encoder). Là khối cuối cùng,

25
mang nhiệm vụ giải mã từ Bottleneck để tái tạo lại hình ảnh đầu vào dựa vào
các đặc trưng “tiềm ẩn” bên trong Bottleneck.

Có 4 siêu tham số cần quan tâm trước khi training một mô hình Autoencoder:

• Code size: kích thước của Bottleneck là 1 hyperparameter rất quan trọng
được sử dụng mà chúng ta cần lưu ý. Kích thước Bottleneck quyết định lượng
thông tin được nén. “Nhiều quá không tốt mà ít quá cũng không ổn”.
• Number of layers: giống với hầu hết các mạng thần kinh, một siêu tham số
quan trọng để điều chỉnh độ sâu của encoder và decoder trong Autoencoder,
càng sâu thì mô hình càng phức tạp, nhưng càng nông thì mô hình chạy càng
nhanh, càng nhẹ trọng số.
• Number of nodes per layer: Số lượng nút trên 1 lớp quyết định số trọng số
đầu ra sẽ sử dụng trên từng lớp. Thông thường, số lượng nút này giảm dần
theo mỗi lớp tiếp theo bởi đầu vào của lớp này là đầu ra của lớp trước đó, và
đầu vào này thì dần trở nên nhỏ hơn trên các lớp.
• Reconstruction Loss: Loss function là một thức không thể thiếu trong mạng
neural. Hàm mất mát này sẽ phụ thuộc vào kiểu đầu vào và đầu ra của mô
hình chúng ta muốn đáp ứng. Ví dụ với việc xử lý ảnh, các hàm mất mát
thông thường được ưa chuộng là Mean Square Error (MSE) và L1 Loss. Còn
với một số trường hợp ảnh nhị phân (MNIST), chúng ta có thể sử dụng Binary
Cross Entropy sẽ tốt hơn.

1.4 Giải quyết bài toán Dữ liệu lớn (Big Data)


Dữ liệu lớn là một tập hợp dữ liệu rất lớn và rất phức tạp đến nỗi những công cụ, kỹ
thuật xử lý dữ liệu truyền thống không thể nào đảm đương được. Hiện nay Big data đang
là một trong những ưu tiên hàng đầu của các công ty công nghệ trên toàn thế giới, vậy
những kỹ thuật hiện đại nào sẽ giúp các công ty giải quyết được vấn đề của Dữ liệu lớn.

1.4.1 Hadoop

Hadoop là một Apache framework nguồn mở viết bằng Java cho phép phát triển các
ứng dụng phân tán có cường độ dữ liệu lớn một cách miễn phí. Nó được thiết kế để mở
rộng quy mô từ một máy chủ đơn sang hàng ngàn máy tính khác có tính toán và lưu trữ
cục bộ (local computation and storage). Hadoop được phát triển dựa trên ý tưởng từ các

26
công bố của Google về mô hình Map-Reduce và hệ thống file phân tán Google File
System (GFS). Và có cung cấp cho chúng ta một môi trường song song để thực thi các
tác vụ Map-Reduce. Nhờ có cơ chế streaming mà Hadoop có thể phát triển trên các ứng
dụng phân tán bằng cả java lẫn một số ngôn ngữ lập trình khác như C++, Python, Pearl,...

Hadoop có một cấu trúc liên kết master-slave. Trong cấu trúc này, có một node
master và nhiều node slave . Chức năng của node master là gán một tác vụ cho các node
slave khác nhau và quản lý tài nguyên. Các node slave là máy tính thực tế có thể không
mạnh lắm. Các node slave lưu trữ dữ liệu thực trong khi trên master chúng ta có
metadata.

Kiến trúc Hadoop gồm có ba lớp chính đó là: HDFS (Hadoop Distributed File
System), Map-Reduce, Yarn.

1.4.1.1 HDFS

Hình 1.10 Cấu trúc HFDS

Là hệ thống file phân tán, cung cấp khả năng lưu trữ dữ liệu khổng lồ và tính năng
tối ưu hoá việc sử dụng băng thông giữa các node. HDFS có thể được sử dụng để chạy
trên một cluster lớn với hàng chục ngàn node.

Cho phép truy xuất nhiều ổ đĩa như là 1 ổ đĩa. Nói cách khác, chúng ta có thể sử
dụng một ổ đĩa mà gần như không bị giới hạn về dung lượng. Muốn tăng dung lượng
chỉ cần thêm node (máy tính) vào hệ thống.

27
1.4.1.2 Map-Reduce

Map-Reduce là một framework dùng để viết các ứng dụng xử lý song song một
lượng lớn dữ liệu có khả năng chịu lỗi cao xuyên suốt hàng ngàn cluster (cụm) máy tính.

Map-Reduce thực hiện 2 chức năng chính đó là Map và Reduce:

• Map: Sẽ thực hiện đầu tiên, có chức năng tải, phân tích dữ liệu đầu vào và
được chuyển đổi thành tập dữ liệu theo cặp key/value.
• Reduce: Sẽ nhận kết quả đầu ra từ tác vụ Map, kết hợp dữ liệu lại với nhau
thành tập dữ liệu nhỏ hơn.

1.4.1.3 YARN

YARN (Yet-Another-Resource-Negotiator) là một framework hỗ trợ phát triển ứng


dụng phân tán YARN cung cấp daemons và APIs cần thiết cho việc phát triển ứng dụng
phân tán, đồng thời xử lý và lập lịch sử dụng tài nguyên tính toán (CPU hay memory)
cũng như giám sát quá trình thực thi các ứng dụng đó.

Bên trong YARN, chúng ta có hai trình quản lý ResourceManager và NodeManage


với: ResourceManager: Quản lý toàn bộ tài nguyên tính toán của cluster và
NodeManger: Giám sát việc sử dụng tài nguyên của container và báo cáo với
ResourceManger. Các tài nguyên ở đây là CPU, memory, disk, network,...

1.4.2 Apache Spark

Apache Spark là một framework mã nguồn mở tính toán cụm, được phát triển sơ
khởi vào năm 2009 bởi AMPLab. Sau này, Spark đã được trao cho Apache Software
Foundation vào năm 2013 và được phát triển cho đến nay. Tốc độ xử lý của Spark có
được do việc tính toán được thực hiện cùng lúc trên nhiều máy khác nhau. Đồng thời
việc tính toán được thực hiện ở bộ nhớ trong (in-memories) hay thực hiện hoàn toàn trên
RAM. Spark cho phép xử lý dữ liệu theo thời gian thực, vừa nhận dữ liệu từ các nguồn
khác nhau đồng thời thực hiện ngay việc xử lý trên dữ liệu vừa nhận được (Spark
Streaming). Spark không có hệ thống file của riêng mình, nó sử dụng hệ thống file khác
như: HDFS, Cassandra, S3,…. Spark hỗ trợ nhiều kiểu định dạng file khác nhau (text,
csv, json…) đồng thời nó hoàn toàn không phụ thuộc vào bất cứ một hệ thống file nào.

28
Hình 1.11 Cấu trúc cơ bản của Spark

Về mặt kiến trúc, nó trông như Hình 1.12, khi viết một tập lệnh trình điều khiển,
bằng Python, Scala hoặc Java, xác định cách muốn xử lý dữ liệu của mình, sử dụng các
API mà Spark cung cấp. Sau khi khởi chạy tập lệnh trình điều khiển đó, thường là master
node trong cluster, tập lệnh này sẽ giao tiếp với trình quản lý cluster để phân bổ các tài
nguyên cần thiết từ cluster. Trình quản lý cluster đó có thể là trình quản lý cụm YARN
của Hadoop nếu đang chạy Spark trên đầu cụm Hadoop hoặc Spark cũng có trình quản
lý cụm riêng nếu muốn sử dụng nó thay thế. Trình quản lý cụm đó phân bổ một loạt các
quy trình thực thi trên toàn cụm của bạn sẽ thực hiện công việc xử lý dữ liệu thực sự.
Spark xử lý tất cả các chi tiết để tìm ra cách phân chia dữ liệu và xử lý dữ liệu đó theo
cách hiệu quả nhất.

Hình 1.12 Các thành phần cơ bản của Spark

Một số thành phần quan trọng của Spark :

• Spark Core được xem là nền tảng và điều kiện để vận hành của mọi thành
phần trong Apache Spark. Thành phần này đảm nhận nhiệm vụ tính toán, xử
lý trong bộ nhớ (In – memory computing) và tham chiếu dữ liệu lưu trữ ở các
hệ thống lưu trữ bên ngoài. Nó cung cấp RDD (Bộ dữ liệu phân tán đàn hồi)
và khả năng tính toán trong bộ nhớ. Lưu ý rằng API RDD là API cấp thấp có

29
thể khó sử dụng và không nhận được lợi ích từ các khả năng tối ưu hóa truy
vấn tự động của Spark. Nhà phát hành khuyến cáo nên sử dụng DataFrames
thay vì RDD vì nó cho phép thể hiện những gì người dùng muốn dễ dàng
hơn và cho phép Spark tự động tạo truy vấn hiệu quả nhất.
• Spark SQL định nghĩa một thứ gọi là Datasets và điều này cho phép bạn làm
việc với Spark theo cách giống như cách làm việc với cơ sở dữ liệu SQL.
Spark SQL là mô-đun của Apache Spark để làm việc với dữ liệu có cấu trúc.
Nó cho phép người dùng kết hợp liền mạch các truy vấn SQL với các chương
trình Spark. Với PySpark DataFrames, người dùng có thể đọc, ghi, chuyển
đổi và phân tích dữ liệu một cách hiệu quả bằng Python và SQL. Cho dù sử
dụng Python hay SQL, cùng một công cụ thực thi cơ bản sẽ được sử dụng để
người dùng luôn tận dụng toàn bộ sức mạnh của Spark.
• Spark Streaming cho phép người dùng nhập dữ liệu trong thời gian thực và
xử lý dữ liệu khi nó đến, đồng thời nó cũng cung cấp một thứ gọi là “Truyền
có cấu trúc” thậm chí cho phép bạn xem dữ liệu thời gian thực đó là dữ liệu
SQL. Spark Streaming phân tích stream bằng cách xem stream là mini
batches để thực hiện kỹ thuật RDD transformation. Qua đó, những đoạn mã
lệnh được viết cho xử lý batch có thể tận dụng lại vào xử lý stream, giúp việc
phát triển cấu trúc lambda trở nên dễ dàng hơn. Tuy nhiên, trong xử lý dữ
liệu thì điều này lại tạo ra một độ trễ nhất định.
• GraphX tồn tại để phân tích và xử lý dữ liệu được tổ chức trong cấu trúc dữ
liệu biểu đồ, chẳng hạn như mạng xã hội.
• Tuy nhiên, điều quan tâm nhất là MLLib, đó là thư viện học máy của Spark.
Nó chứa các thư viện học máy giúp cho việc tạo gợi ý sử dụng mô hình từ
các tập dữ liệu lớn trở nên thực sự đơn giản. Được xây dựng dựa trên Spark,
MLlib là một thư viện máy học có thể mở rộng, cung cấp một bộ API cấp
cao thống nhất giúp người dùng tạo và điều chỉnh các quy trình máy học thực
tế.

30
1.4.3 So sánh giữa Spark và Hadoop
Bảng 1.1 So sánh Spark và Hadoop

SPARK HADOOP

Spark được cho là nhanh hơn Tuy nhiên, khi Spark làm việc cùng
Hadoop gấp 100 lần khi chạy trên các dịch vụ chia sẻ khác chạy trên
RAM, và gấp 10 lần khi chạy trên YARN thì hiệu năng có thể giảm
ổ cứng. Hơn nữa, người ta cho xuống. Điều đó có thể dẫn đến rò rỉ bộ
rằng Spark sắp xếp 100TB dữ liệu nhớ trên RAM. Hadoop thì khác, nó dễ
Hiệu năng nhanh gấp 3 lần Hadoop trong khi dàng xử lý vấn đề này. Nếu người dùng
(Perfomance) sử dụng ít hơn 10 lần số lượng hệ có khuynh hướng xử lý hàng loạt thì
thống máy tính. Sở dĩ Spark nhanh Hadoop lại hiệu quả hơn Spark. Tóm
là vì nó xử lý mọi thứ ở RAM. lại ở yếu tố hiệu năng, Spark và
Hadoop có cách xử lý dữ liệu khác
nhau. Việc lựa chọn framework nào
phụ thuộc yêu cầu cụ thể từng dự án.

Bảo mật của Spark đang được phát Hadoop trang bị toàn bộ các mức độ
triển, hiện tại nó chỉ hỗ trợ xác bảo mật như Hadoop Authentication,
thực mật khẩu (password Hadoop Authorization, Hadoop
authentication). Ngay cả trang Auditing, and Hadoop Encryption. Tất
Bảo mật
web chính thức của Apache Spark cả các tính năng này liên kết với các dự
(Security)
cũng tuyên bố rằng, "Có rất nhiều án Hadoop bảo mật như Knox
loại mối quan tâm bảo mật khác Gateway và Sentry. Vậy là ở mặt bảo
nhau. Spark không nhất thiết phải mật thì Spark kém bảo mật hơn
bảo vệ chống lại tất cả mọi thứ" Hadoop.

Trước tiên, cả Spark và Hadoop đều là các framework mã nguồn mở (open


source), nghĩa là nó miễn phí. Cả hai đều sử dụng các server chung, chạy
trên cloud, và dường như chúng sử dụng các cầu hình phần cứng tương tự
nhau.

Spark cần một lượng lớn RAM vì Hadoop bị ràng buộc bởi ổ đĩa, ổ đĩa
Chi phí nó xử lý mọi thứ ở bộ nhớ. Đây là thì rẻ hơn RAM. Tuy nhiên Hadoop thì
(Cost) yếu tố ảnh hưởng đến chi phí vì cần nhiều hệ thống hơn để phân bổ ổ
giá thành của RAM cao hơn ổ đĩa. đĩa I/O. Do vậy, khi nhu cầu của là xử
Khi nhu cầu của là xử lý lượng lớn lý lượng lớn dữ liệu dạng lịch sử thì
dữ liệu dạng lịch sử thì Hadoop là Hadoop là lựa chọn tốt vì dữ liệu dạng
lựa chọn tốt vì dữ liệu dạng này này cần lưu và có thể được xử lý trên ổ
cần lưu và có thể được xử lý trên đĩa.
ổ đĩa.

31
CHƯƠNG 2. ÁP DỤNG CÁC THUẬT TOÁN

Chương 2 liệt kê các thuật toán đã sử dụng và kết quả thực thi các thuật toán đó đồng
thời rút ra nhận xét và đánh giá sơ bộ về tính ứng dụng và khả thi sau khi thu được kết
quả. Bên cạnh sử dụng thuật toán trên bộ dữ liệu Movielens 100k thì còn sử dụng trên
cả tập Movielens 1M và 20M. Mang tính mở rộng hơn là sử dụng Spark như một thư
viện hỗ trợ cho việc giải quyết bài toán dữ liệu lớn.

2.1 Bộ dữ liệu

2.1.1 Bộ dữ liệu Movielens 100k

Bộ cơ sở dữ liệu MovieLens 100k được công bố năm 1998 bởi GroupLens. Tập dữ
liệu này bao gồm 100,000 đánh giá, xếp hạng từ 1 tới 5 sao, từ 943 người dùng dành
cho 1682 phim. Được tiền xử lý sao cho mỗi người dùng đánh giá ít nhất 20 phim. Một
vài thông tin nhân khẩu học cơ bản như tuổi và giới tính người dùng hay thể loại phim
cũng được cung cấp.

Tệp dữ liệu chứa một vài file quan trọng sau :

• u.data: Chứa toàn bộ các đánh giá của 943 người dùng cho 1682 bộ phim.
Mỗi người dùng đánh giá ít nhất 20 bộ phim.
• u.user: Chứa thông tin về người dùng, bao gồm: id, tuổi, giới tính, nghề
nghiệp, zipcode (mã bưu chính vùng miền), vì những thông tin này cũng có
thể ảnh hưởng tới sở thích của các người dùng.
• u.genre: Chứa tên của 19 thể loại phim. Các thể loại bao gồm: Không rõ,
Kịch, Hài, Hành động, Giật gân, Tình cảm, Kinh dị, Phiêu lưu, Viễn tưởng,
Trẻ em, Tội phạm, Chiến tranh, Tài liệu, Âm nhạc, Bí ẩn, Hoạt hình, Viễn
Tây, Hư cấu, Đen.
• u.item: thông tin về mỗi bộ phim.

Trong mỗi dòng, chúng ta sẽ thấy id của phim, tên phim, ngày phát hành, link trên
imdb, và các số nhị phân 0, 1 phía cuối để chỉ ra bộ phim thuộc các thể loại nào trong
19 thể loại đã cho trong u.genre.

32
Ta có thể đánh giá sơ bộ về bộ dữ liệu này với độ thưa thớt ma trận user-items là
93.695% (cực kỳ thưa thớt).

Hình 2.1 Phân bổ xếp hạng do người dùng đánh giá

2.1.2 Bộ dữ liệu Movielens 1M

Tập dữ liệu này bao gồm 1,000,209 đánh giá với xếp hạng từ 1 đến 5 sao có 3900
bộ phim riêng biệt và 6040 người dùng tham gia đánh giá.

Với các bộ phim được trải dài từ năm 1920 đến 1996 với độ phủ phần lớn các bộ
phim từ sau năm 1992 (1000 bộ phim) đến nhiều nhất là các bộ phim được chiếu năm
1996 (hơn 3000 bộ phim).

Trải qua 18 thể loại phim như : Kịch, Hài, Hành động, Giật gân, Tình cảm, Kinh dị,
Phiêu lưu, Viễn tưởng, Trẻ em, Tội phạm, Chiến tranh, Tài liệu, Âm nhạc, Bí ẩn, Hoạt
hình, Viễn Tây, Hư cấu, Đen. Với đại đa số thể loại Kịch chiếm đa số (với 1603 bộ phim
– hơn 1 nửa số phim), kế tiếp là Kịch (với 1200 phim), sau đó sẽ là Hành động, Giật
gân, Tình cảm với khoảng 500 phim.

Hình 2.2 Phân bổ xếp hạng trong bộ dữ liệu Movielens 1M

33
Với phổ điểm đánh giá nằm ở 4 sao là đại đa số, kế tiếp là 5 sao và 3 sao cũng có số
đánh giá khá lớn và 1, 2 sao cũng đều được ít đánh giá đổ vào đây.

2.2 Thông số đánh giá

2.2.1 RMSE và MAE

Có nhiều phương pháp khác nhau có thể được sử dụng để đánh giá giải thuật như:
F-Measure, Area Under the ROC Curve (AUC),… mỗi phương pháp đánh giá sẽ thích
hợp cho từng lĩnh vực cụ thể. Trong RS, độ đo lỗi RMSE (Root Mean Squared Error) là
độ đo phổ biến mà cộng đồng người dùng trong lĩnh vực RS thường sử dụng. RMSE
hay được dùng cho bài toán dự đoán xếp hạng (Rating Prediction) còn MAE hay được
dùng cho dự đoán bộ phim. RMSE và MAE được xác định bằng các công thức sau:

1
𝑅𝑀𝑆𝐸 = √ 𝑡𝑒𝑠𝑡 ∑ (𝑟𝑢𝑖 − 𝑟̂𝑢𝑖 )2 (2.1)
|𝐷 |
𝑢,𝑖,𝑟 𝜖 𝐷 𝑡𝑒𝑠𝑡

1
𝑀𝐴𝐸 = ∑ (𝑟𝑢𝑖 − 𝑟̂𝑢𝑖 ) (2.2)
|𝐷 𝑡𝑒𝑠𝑡 |
𝑢,𝑖,𝑟 𝜖 𝐷 𝑡𝑒𝑠𝑡

2.2.2 Hit Rate (HR)

HR là một thông số đánh giá kết quả đầu ra của Top-10 bộ phim được đề xuất sau
cùng của mỗi mô hình được tạo ra. Lý thuyết được đưa ra sẽ là với mỗi bộ phim đầu ra
trong top-10 bộ phim gợi ý trùng với với bộ phim trong danh sách mà người dùng được
đánh giá từ trong tập kiểm tra đã từng đánh giá trước đây thì đó được gọi là một Hit.
Công thức Hit Rate được đưa ra với ý tưởng cộng tất cả các Hit lại rồi chia cho tổng số
người dùng. Chỉ số HR này được đưa ra không để đánh giá độ chính xác trên từng đánh
giá cá nhân mà sẽ đánh giá độ chính xác trên danh sách top-10 bộ phim gợi ý cho người
dùng.

𝐻𝑖𝑡𝑠
𝐻𝑅 = (2.3)
𝑈𝑠𝑒𝑟𝑠

2.2.3 Average Reciprocal Hit Rate (ARHR)


1
∑𝑛𝑖=1
𝑟𝑎𝑛𝑘𝑖 (2.4)
𝐴𝑅𝐻𝑅 =
𝑈𝑠𝑒𝑟𝑠

34
Công thức này cơ bản thì tương tự như Hit Rate nhưng có chút khác biệt về cách
tính tổng. Nếu như ở HR thì ra tính Hit thì ở đây ta sẽ tính tổng thứ hạng của Hit, thứ
hạng của Hit ở đây mang ý nghĩa rằng vị trí xuất hiện của Hit trong top-10 bộ phim gợi
ý thì ta sẽ lấy giá trị 1/vị trí đó để tính tổng. Ý tưởng này xuất hiện là khi ta muốn kỳ
vọng vào những lần bộ phim xuất hiện trước sẽ thu hút được sự chú ý của người xem vì
thường các gợi ý đầu tiên sẽ làm ấn tượng đến người xem cao hơn các gợi ý phía sau.

2.2.4 Cumulative Hit Rate (cHR)

Đây là một thông số đánh giá khá đặc biệt khi ý tưởng xuất phát là muốn loại bỏ đi
các giá trị Hit rank đi kèm với các giá trị đánh giá dưới một ngưỡng đánh giá cho trước.
Ví dụ như ngưỡng đánh giá đặt ra là 4★ thì các Hit rank trên 4★ đều được giữ lại và
loại bỏ đi các Hit rank dưới 4★. Công thức tính toán sau đó sẽ tương tự như ARHR ở
trên.

(Đồ án này sẽ hướng đến sự đánh giá trên 4★ để đảm bảo được những kết quả gợi ý đưa
ra được sẽ là những gợi ý đáng tin cậy nhất).

2.2.5 Coverage

Có thể hiểu là phần trăm của cặp (người dùng, bộ phim) có thể được dự đoán. Ý
tưởng này xuất hiện là để đánh giá tính còn sót lại trong kho của những sản phẩm không
được ưa thích. Thông số này có thể xem như là một thông số của cách vét cạn thông qua
các cặp giá trị được xuất hiện so với các cặp giá trị tồn đọng khác.

2.2.6 Diversity

Diversity = 1 – S với S là giá trị tương đồng giữa các cặp (người dùng, bộ phim) đã
được đề xuất. Thông số này mang ý nghĩa là đánh giá sự đa dạng của các cặp người
dùng, bộ phim trong toàn bộ tổng số cặp có thể hình thành, một ý tưởng khác của việc
Coverage nhằm đem lại tính đa dạng hơn trong việc đề xuất các giá trị tiếp theo hoặc
cân đối lại các cặp giá trị người dùng, bộ phim hiệu quả hơn.

Thông số này sẽ được cụ thể hóa dựa trên ý tưởng nếu như chúng ta tiếp tục đề xuất
khác phần phim tiếp theo của chuỗi phim đó cho một người dùng đã xem các phần trước
thì sẽ gây nên sự kém đa dạng trong sự lựa chọn cho người dùng đó trong các bộ phim
tiếp theo. Tăng sự đa dạng trong gợi ý cũng có thể gây khó chịu cho người dùng vì bị
loãng về những dự định tiếp theo của người dùng, nhưng đánh giá khách quan về lâu

35
dài với sự đa dạng về lựa chọn các bộ phim sẽ giúp cho người xem có thể tìm được
những sở thích về thể loại phim mới hơn, tạo được những trải nghiệm có thể sẽ tốt hơn
cho người dùng.

Thường thông số này sẽ được kỳ vọng càng thấp càng tốt khi người dùng không
thích những thể loại phim khác chen vào sở thích cá nhân.

2.3 Thực nghiệm

2.3.1 Môi trường

Phần mềm: Anaconda, Spyder.

Anaconda là phần mềm phân phối mã nguồn mở và miễn phí của ngôn ngữ lập trình
Python và R dành cho các ứng dụng liên quan đến khoa học dữ liệu và học máy (xử lý
dữ liệu quy mô lớn, phân tích dự đoán , điện toán khoa học). Nhằm mục đích đơn giản
hóa việc quản lý và triển khai gói. Các phiên bản gói được quản lý bởi hệ thống quản lý
gói conda . Anaconda được hơn 6 triệu người dùng sử dụng và bao gồm hơn 250 gói
khoa học dữ liệu phổ biến phù hợp với Windows, Linux và Mac OS. Anaconda đi kèm
với hơn 1.000 gói dữ liệu cũng như gói Conda và trình quản lý môi trường ảo, được gọi
là Anaconda Navigator , vì vậy nó giúp loại bỏ nhu cầu học cách cài đặt từng thư viện
một cách độc lập. Các gói dữ liệu nguồn mở có thể được cài đặt riêng lẻ từ kho lưu trữ
Anaconda bằng lệnh conda install hoặc sử dụng pip install - lệnh được cài đặt với
Anaconda. Các gói Pip cung cấp nhiều tính năng của các gói conda và trong hầu hết các
trường hợp, chúng có thể hoạt động cùng nhau.

Spyder là một môi trường phát triển tích hợp (IDE) đa nền tảng nguồn mở dành cho
lập trình khoa học bằng ngôn ngữ Python. Spyder tích hợp với một số gói nổi bật trong
ngăn xếp Python khoa học, bao gồm NumPy, SciPy, Matplotlib, Pandas, IPython,
SymPy và Cython, cũng như các phần mềm mã nguồn mở khác.

Thư viện : Scikit-Surprise, Tensorflow, Keras, Numpy, Pandas, Pyspark, Scipy.

2.3.2 Đối tượng đánh giá

2.3.2.1 Đối với bộ dữ liệu Movielens 100k

Qua quá trình khảo sát dữ liệu người dùng đánh giá các bộ phim (thường thì sẽ xem
phim rồi mới quay lại đánh giá) với chủ đích tìm ra người dùng có lượng đánh giá vừa

36
phải và có đa dạng các thể loại phim được xem thì với danh sách các bộ phim được đánh
giá cao nhất của người dùng được thể hiện như sau:
Bảng 2.1 Danh sách những bộ phim được người dùng được khảo sát đánh giá cao

STT PHIM

1 GoldenEye (1995)

2 Braveheart (1995)

3 Pulp Fiction (1994)

4 Clear and Present Danger (1994)

5 Speed (1994)

6 The Fugitive (1993)

7 Jurassic Park (1993)

8 Terminator 2: Judgment Day (1991)

9 The Shawshank Redemption 1994)

10 Star Trek: Generations (1994)

11 True Lies (1994)

12 Léon: The Professional

13 Stargate (1994)

14 The Rock (1996)

15 Jumanji (1995)

16 Mission: Impossible (1996)

17 The Jerky Boys (1995)

Đánh giá tổng quát về những bộ phim mà người dùng này đã xem ta có thể đưa ra
những thể loại mà người này thích xem bao gồm : Hành động, Phiêu lưu, Viễn tưởng,
Tội phạm, Giật gân. Bên cạnh đó cũng có một số thể loại không mấy nổi trội như Chiến

37
tranh, Tình cảm, Bí ẩn, Hài kịch, Trẻ em. Có thể nhận định chung về người này là một
người trưởng thành vì đại đa số các phim đều có chiều sâu về nội dung và mang lại
những cảm giác mạnh cho người xem.

2.3.2.2 Đối với bộ dữ liệu Movielens 1M


Bảng 2.2 Danh sách những bộ phim được người dùng được khảo sát quan tâm nhất

STT PHIM

1 Erin Brockovich (2000)

2 American Beauty (1999)

3 Final Destination (2000)

4 The Exorcist (1973)

5 Scary Movie (2000)

6 The Bone Collector (1999)

7 Drowning Mona (2000)

Với bộ dữ liệu 1M, các thể loại phim người dùng này quan tâm đến đó là: Kịch, Hài,
Giật gân và Kinh dị. Có thể nói sở thích của người này khá đặc thù khi chỉ quan tâm đến
các bộ phim mang các màu sặc thật riêng biệt cho nên khả năng gợi ý các bộ phim liên
quan đến các bộ phim này khá lạ đối với đại đa số người xem.

2.4 Các mô hình được thực nghiệm

2.4.1 kNN

K-nearest neighbors là thuật toán học máy có giám sát, đơn giản và dễ triển khai.
Thường được dùng trong các bài toán phân loại và hồi quy.

Thuật toán kNN cho rằng những dữ liệu tương tự nhau sẽ tồn tại gần nhau trong một
không gian, từ đó công việc của chúng ta là sẽ tìm k điểm gần với dữ liệu cần kiểm tra
nhất. Việc tìm khoảng cách giữa 2 điểm củng có nhiều công thức có thể sử dụng, tùy
trường hợp mà chúng ta lựa chọn cho phù hợp. Đây là 3 cách cơ bản để tính khoảng
cách 2 điểm dữ liệu x, y có k thuộc tính:

38
𝑘
Euclidean √∑(𝑥𝑖 − 𝑦𝑖 )2 (2.5)
𝑖=1

Manhattan ∑|𝑥𝑖 − 𝑦𝑖 | (2.6)


𝑖=1

1
𝑘 𝑞
Minkowski (∑(|𝑥𝑖 − 𝑦𝑖 |)𝑞 ) (2.7)
𝑖=1

Hình 2.3 Sự khác nhau giữa Collaborative Filtering và Conten-Based Filtering

Thuật toán kNN có thể được sử dụng cho cả Collaborative Filtering và Content-
Based Filtering. Tuy nhiên, ý tưởng triển khai ở trên từng dạng bài toán sẽ có sự khác
nhau cơ bản.

2.4.1.1 kNN Content-Based Filtering

Mục đích của việc sử dụng phương pháp Content-Based là hướng đến sự gợi ý cho
người dùng (user) một hay nhiều bộ phim có sự tương đồng với bộ phim mà người dùng
đó từng xem/từng đánh giá/từng tìm hiểu.

∑𝑖 𝑥𝑖 𝑦𝑖
𝑆𝑖𝑚𝐶𝑜𝑠𝑖𝑛𝑒 =
(2.8)
√∑𝑖 𝑥𝑖2 √∑𝑖 𝑦𝑖2

39
Trong đó :

x,y là hai bộ phim bất kỳ

i là thể loại phim (vì một bộ phim có thể mang nhiều thể loại, vì thế cho nên
để đánh giá tổng quát thì ta kiểm tra cho toàn bộ thể loại phim)

Sau khi xác định được giá trị tương đồng giữa các bộ phim đã được đánh giá, ta sẽ
sắp xếp lại với 40 bộ phim có sự tương đồng lớn nhất (thường k=40). Tiếp theo đó ta sẽ
lấy trọng số trung bình của bộ số tương đồng ở trên với giá trị thứ hạng của bộ phim cần
dự đoán để dự đoán.
Bảng 2.3 Các thông số đánh giá thuật toán kNN Content-Based Filtering

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 0.9375 0.7263 0.0030 0.0030 0.00298 0.9285 0.57 195.41

1M 0.99 0.7863 0.0028 0.0028 0.00281 0.9712 0.1012 31.353

Bảng 2.4 Top-10 bộ phim được gợi ý bởi thuật toán kNN Content-Based Filtering

Movielens 100k Movielens 1M

1. The Presidio (1988) 1. Bride of Frankenstein (1935)


2. La Femme Nikita (1990) 2. Kronos (1973)
3. Wyatt Earp (1994) 3. The Baby (1973)
4. The Shooter (1997) 4. Bay of Blood (Reazione a catena)
5. Bad Girls (1994) (1971)
Top-10 5. Don't Look in the Basement! (1973)
bộ phim 6.The Hateful Eight (2015)
gợi ý 7. True Grit (2010) 6. Torso (Corpi Presentano Tracce di
Violenza Carnale) (1973)
8. Open Range (2003)
7. The Mummy's Tomb (1942)
9. The Big Easy (1987)
8. Pit and the Pendulum (1961)
10.Point Break (1991)
9. The Mummy's Hand (1940)
10. The Ghost of Frankenstein (1942)

40
2.4.1.2 kNN cho Collaborative Filtering

Về mặt cơ bản, ý tưởng của Collaborative Filtering là muốn đánh giá xem những
người dùng tương đồng với người dùng mà ta gợi ý sẽ xem phim gì tiếp theo hoặc xu
hướng sẽ xem phim gì tiếp theo của những đang người tương đồng đó. Hay nói dễ hiểu
hơn, Collaborative Filtering gợi ý nội dung dựa trên hành vi đóng góp của người khác
đến người cần được gợi ý.

Ý tưởng của việc ứng dụng KNN ở đây là muốn sử dụng vùng lân cận là khả năng
tìm thấy những người tương tự như người cần được gợi ý (User_kNN) hoặc các bộ phim
tương tự với các bộ phim mà người cần được gợi ý đã xem/tìm hiểu (Item_kNN). [1]

• User_kNN

Xác định độ tương tự giữa hai người dùng thông qua việc so sánh các đánh giá của
họ trên cùng bộ phim, sau đó dự đoán xếp hạng trên bộ phim i bởi người dùng u, thông
qua các xếp hạng của những người dùng tương tự với người dùng u. Độ tương tự giữa
người dùng u và người dùng u' có thể được tính theo Pearson như sau:

𝑆𝑖𝑚𝑃𝑒𝑎𝑟𝑠𝑜𝑛 (𝑢, 𝑢′)


∑𝑖∈𝐼𝑢𝑢′(𝑟𝑢𝑖 − 𝑟̅𝑢 ) ∙ (𝑟𝑢′𝑖 − 𝑟̅̅̅)
𝑢′ (2.9)
=
√∑𝑖∈𝐼𝑢𝑢′(𝑟𝑢𝑖 − 𝑟̅𝑢 )2 √∑𝑖∈𝐼𝑢𝑢′(𝑟𝑢′𝑖 − 𝑟̅̅̅)
𝑢′
2

Trong đó :

rui và ru’i là đánh giá của người dùng u và u’ trên bộ phim i tương ứng

Iuu' là tập các bộ phim được đánh giá bởi cả người dùng u và người dùng u'

𝑟̅𝑢 là giá trị đánh giá trung bình trên tất cả các bộ phim của người dùng u

𝑢′ là giá trị đánh giá trung bình trên tất cả các bộ phim của người dùng u'
𝑟̅̅̅

Xếp hạng/Đánh giá của người dùng u trên bộ phim i được dự đoán qua công thức:

∑𝑢′∈𝐾𝑢 𝑠𝑖𝑚(𝑢, 𝑢′) ∙ (𝑟𝑢′𝑖 − 𝑟̅̅̅)


𝑢′
𝑟̂𝑢𝑖 = 𝑟̂𝑢 + (2.10)
∑𝑢′∈𝐾𝑢|𝑠𝑖𝑚(𝑢, 𝑢′)|

Trong đó: Sim(u,u’) là giá trị tương tự giữa người dùng u và u’

Ku là số người có độ lân cận gần gũi với u (k láng giềng của u)

41
Bảng 2.5 Các thông số đánh giá thuật toán User_kNN

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 0.9961 0.7711 NaN NaN 0.000001 1 0.8586 0.4228

1M 0.9766 0.7713 0.0018 0.0018 0.000182 1 0.9904 70.2949

Bảng 2.6 Top-10 bộ phim được gợi ý bởi thuật toán User_kNN

Movielens 100k Movielens 1M

1. One Magic Christmas (1985) 1. The Baby (1973)


2. Step Into Liquid (2002) 2. The Gate of Heavenly Peace (1995)
3. The Art of War (2000) 3. Mamma Roma (1962)
4. Taste of Cherry (Ta’m e guilass) 4. Schlafes Bruder (Brother of Sleep) (1995)
Top-10 (1997) 5. Bittersweet Motel (2000)
bộ 5.The King Is Alive (2000)
phim 6. Smashing Time (1967)
gợi ý 6. Innocence (2000) 7. Ulysses (Ulisse) (1954)
7. Maealstream (2000) 8. Foreign Student (1994)
8. Faust (1926) 9. Lured (1947)
9. Seconds (1966) 10. Song of Freedom (1936)
10. Amazing Grace (2006)

• Item_kNN

Tương tự thì ta cũng có ý tưởng tương tự so với User_kNN là ta sẽ đi tìm độ tương


tự giữa hai bộ phim qua việc so sánh tất cả đánh giá của người dùng lên hai bộ phim đó,
sau đó dự đoán xếp hạng trên bộ phim i bởi người dùng u, thông qua các xếp hạng của
những bộ phim tương đồng với bộ phim i. Độ tương tự giữa bộ phim i và i’ có thể tính
theo Pearson như sau:

42
𝑆𝑖𝑚𝑃𝑒𝑎𝑟𝑠𝑜𝑛 (𝑖, 𝑖′)
∑𝑢∈𝑈𝑢𝑢′(𝑟𝑢𝑖 − 𝑟̅)
𝑖 ∙ (𝑟𝑢′ 𝑖 − 𝑟̅
𝑖′ ) (2.11)
=
2 ∑
√∑𝑢∈𝑈𝑢𝑢′(𝑟𝑢𝑖 − 𝑟̅)
𝑖 √ 𝑖∈𝐼𝑢𝑢′(𝑟𝑢′𝑖 − 𝑟̅𝑖′ )2

Trong đó :

Uii’ là tập các người dùng có đánh trên cả hai bộ phim i và i’

𝑟̅𝑖 là giá trị đánh giá trung bình của tất cả các người dùng trên bộ phim i

𝑟̅𝑖′ là giá trị đánh giá trung bình của tất cả các người dùng trên bộ phim i’

Xếp hạng/Đánh giá của người dùng u trên bộ phim i được dự đoán qua công thức:

∑𝑖′∈𝐾𝑖 𝑠𝑖𝑚(𝑖, 𝑖′) ∙ (𝑟𝑢′𝑖 − 𝑟̅𝑖′ )


𝑟̂𝑢𝑖 = 𝑟̂𝑖 + (2.12)
∑𝑖′∈𝐾𝑖|𝑠𝑖𝑚(𝑖, 𝑖′)|

Trong đó:

Sim(i,i’) là giá trị tương tự giữa bộ phim i và i’

Ki là số bộ phim có độ lân cận gần bộ phim i (k láng giềng của i)

Bảng 2.7 Các thông số đánh giá thuật toán Item_kNN

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 0.9961 0.7711 NaN NaN 0.000001 1 0.8586 0.4228

1M 0.9766 0.7713 0.0018 0.0018 0.000182 1 0.9904 70.2949

43
Bảng 2.8 Top-10 bộ phim được gợi ý bởi thuật toán Item_kNN

Movielens 100k Movielens 1M

1. Life in a Day (2011) 1. Schlafes Bruder (Brother of Sleep) (1995)


2. Under Suspicion (2000) 2. Project Moon Base (1953)
3. The Art of War (2000) 3. Heaven's Burning (1997)
4. Taste of Cherry (Ta’m e guilass) 4. Outside Ozona (1998)
Top-10 (1997) 5. The Stranger (1994)
bộ 5. The King Is Alive (2000)
phim 6. Windows (1980)
gợi ý 6. Innocence (2000) 7. Chain of Fools (2000)
7. Maealstream (2000) 8. The Silence of the Palace (Saimt el
8.Faust (1926) Qusur) (1994)
9. Seconds (1966) 9. Song of Freedom (1936)
10. Amazing Grace (2006) 10. Back Stage (2000)

2.4.2 SVD và SVD++

Phép phân tích suy biến (Singular Value Decomposition) được viết tắt là SVD là
một dạng Matrix Factorization khái quát hơn so với phép phân tích riêng đã trình bày ở
trên. Theo đó phương pháp này cũng nhằm phân rã một ma trận thành tích của ba ma
trận số thực hoặc số phức. Trong đó hai ma trận ở vị trí đầu tiên và cuối cùng là ma trận
trực giao có thể không là khả nghịch của nhau và ở giữa là ma trận đường chéo có thể
không vuông.

T
Amn = Umm Σmm Vnn (2.33)

Với Amn ∈ ℝ𝒎×𝒏 , Umm ∈ ℝ𝒎×𝒎 , Σmm ∈ ℝ𝒎×𝒎 , Vnn ∈ ℝ𝒏×𝒏 (kích thước ma trận
để dưới chân ma trận). Trong công thức trên thì Umm và Vnn là các ma trận trực giao
còn Σmm là ma trận đường chéo.

44
Hình 2.4 Mô tả thuật toán SVD

Một sự cải tiến trong thuật toán SVD là SVD++ được đề cập từ [2] thì mô hình này
thực sự là một phiên bản "đơn giản hóa" của một mô hình khác có tên là "SVD không
đối xứng". Một trong những lý do SVD++ hoạt động tốt hơn SVD bất đối xứng trong
bộ dữ liệu Netflix là bộ dữ liệu này chỉ có xếp hạng rõ ràng và dữ liệu ẩn được suy luận.
𝟏
Việc khác biệt ở thuật toán là duy nhất việc bổ sung thêm yếu tố “|𝑵(𝒖)|−𝟐 ∑𝒋∈𝑵(𝒖) 𝒚𝒊 ”

tạo được giá trị lệch cho thuật toán SVD.


Bảng 2.9 Các thông số đánh giá thuật toán SVD

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 0.9057 0.7001 0.0224 0.0224 0.02234 0.9463 0.0419 0.655958

1M 0.8777 0.6888 0.0283 0.0283 0.0283 0.9909 0.0308 5.656896

Bảng 2.10 Các thông số đánh giá thuật toán SVD tinh chỉnh

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 0.8895 0.6861 0.0268 0.0268 0.02681 0.9732 0.1372 14.894712

1M 0.8796 0.6908 0.0318 0.0318 0.0317 0.9972 0.0406 169.394492

45
Bảng 2.11 Các thông số đánh giá thuật toán SVD++

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 0.8941 0.6872 0.0298 0.0298 0.0298 0.9419 0.0923 51.337950

1M 0.8649 0.6742 0.0382 0.0382 0.0382 0.9876 0.0352 358.798792

Bảng 2.12 Top-10 bộ phim gợi ý bởi thuật toán SVD

Movielens 100k Movielens 1M

1. Gladiator (1992) 1. The Godfather (1972)


2.The Philadelphia Story (1940) 2. Duck Soup (1933)
3. Stand by Me (1986) 3. Annie Hall (1977)
4. Moon (2009) 4. To Kill a Mockingbird (1962)

Top-10 5. Happiness (1998) 5. The General (1927)


bộ 6. American Graffiti (1973) 6. Seven Days in May (1964)
phim
7. And Your Mother Too (Y tu mama tabion) 7. The Killer (Die xue shuang
gợi ý
(2001) xiong) (1989)
8. Wallace & Gromit: A Close Shave (1995) 8. Some Folks Call It a Sling
9. Band of Brothers (2001) Blade (1993)

10. Seven Samurai (Shichinin no Samurai) 9. When We Were Kings (1996)


(1954) 10. The Grapes of Wrath (1940)

46
Bảng 2.13 Top-10 bộ phim gợi ý bởi thuật toán SVD tinh chỉnh

Movielens 100k Movielens 1M

1. Casablanca (1942) 1. The Haunting (1963)


2. Star Wars: Episode V – The Empire Strikes 2. Jaws (1975)
Back (1980) 3. Dead Again (1991)
3. Star Wars: Episode IV – A New Hope (1977) 4. Rope (1948)
Top-10 4. The Philadelphia Story (1940) 5. The Color Purple (1985)
bộ 5. The African Queen (1951)
phim 6. Lamerica (1994)
gợi ý 6. Lock, Stock & Two Smoking Barrels (1998) 7. Ruby in Paradise (1993)
7. Crimes and Misdemeanors (1989) 8. Poltergeist (1982)
8. Singin’ in the Rain (1952) 9. Spartacus (1960)
9. Night of the Living Dead (1968) 10. The Graduate (1967)
10. Amadeus (1984)

Bảng 2.14 Top-10 bộ phim gợi ý bởi thuật toán SVD++

Movielens 100k Movielens 1M

1. Lock, Stock & Two Smoking Barrels (1998) 1. Dersu Uzala (1974)
2. The Imitation Game (2014) 2. Sanjuro (1962)
3. Amadeus (1984) 3. The Killer (Die xue shuang xiong)
(1989)
4. Indiana Jones and the Last Crusade (1989)
4. After Life (1998)
5. Happiness (1998)
Top-10 6. Harry Potter and the Sorcerer’s Stone (a.k.a 5. Lamerica (1994)
bộ Harry Potter and the Philosopher’s Stone) 6. A Man for All Seasons (1966)
phim (2001)
7. The Shawshank Redemption
gợi ý
7. Wings of Desire (Himmel Alber Berlin, Der) (1994)
(1987) 8. The Professional (a.k.a. Leon: The
8. Grand Day Out with Wallace and Gromit, A Professional) (1994)
(1989) 9. The King of Masks (Bian Lian)
9. Charade (1963) (1996)
10. Snatch (2000) 10. Nikita (La Femme Nikita) (1990)

47
2.4.3 RBM

RBM được đào tạo bằng cách thực hiện chuyển tiếp (a forward pass) và sau đó là
chuyển lùi (a backward pass), trong đó đầu vào được tái tạo. Điều này lặp đi lặp lại trong
nhiều epochs , giống như đào tạo một hệ thống học sâu, cho đến khi nó hội tụ về một
tập hợp các trọng số và độ lệch giúp giảm thiểu lỗi.

Hình 2.5 Quá trình truyền ngược trong RBM

Trong quá trình truyền ngược, ta sẽ cố gắng tái tạo lại đầu vào ban đầu bằng cách
đưa ngược lại đầu ra của lượt chuyển tiếp trở lại qua lớp ẩn và xem kết thúc với những
giá trị nào ngoài lớp hiển thị. Vì những trọng số đó ban đầu là ngẫu nhiên nên có thể có
sự khác biệt lớn giữa đầu vào mà ta đã bắt đầu và đầu vào mà ta xây dựng lại
(reconstructed inputs). Trong quá trình này, ta kết thúc với một tập hợp các độ lệch khác,
lần này là trên lớp hiển thị. Vì vậy, ta chia sẻ trọng số giữa cả đường truyền tiến và lùi,
nhưng ta sẽ có hai bộ sai lệch. Độ lệch ẩn được sử dụng trong đường truyền về phía
trước và độ lệch hiển thị được sử dụng trong đường truyền ngược này. Sau đó, ta có thể
đo lường lỗi mà ta kết thúc và sử dụng thông tin đó để điều chỉnh trọng số một chút
trong lần lặp lại tiếp theo để thử và giảm thiểu lỗi đó từ đó giảm thiểu lỗi qua các lần
truyền bằng các bộ số độ lệch được đưa ra.

Hình 2.6 Ý tưởng cho mã hóa các đánh giá

48
Ý tưởng chung là sử dụng từng người dùng riêng lẻ trong dữ liệu đào tạo dưới dạng
một tập hợp các yếu tố đầu vào vào RBM để train. Vì vậy, xử lý từng người dùng như
một phần của batch trong quá trình huấn luyện, nhìn vào xếp hạng của họ cho mọi bộ
phim họ xếp hạng. Vì vậy, những nút hiện diện đại diện cho xếp hạng cho một người
dùng nhất định trên mỗi bộ phim, và cố gắng tìm hiểu trọng số và độ lệch để xây dựng
lại xếp hạng đối với các cặp người dùng/phim mà ta chưa biết.

Trước hết, những nút hiện diện không chỉ là các nút đơn giản nhận một đầu vào duy
nhất. Xếp hạng thực sự là dữ liệu phân loại, vì vậy thực sự muốn xử lý từng xếp hạng
riêng lẻ dưới dạng năm nút, một nút cho mỗi giá trị xếp hạng có thể. Vì vậy, giả sử xếp
hạng đầu tiên có trong quá trình đào tạo, dữ liệu là xếp hạng 5 sao, sẽ được biểu diễn
dưới dạng 4 nút có giá trị bằng 0 và 1 nút với giá trị là 1 (00001). Sau đó, một vài xếp
hạng bị thiếu cho các cặp người dùng/mục không xác định và cần được dự đoán. Sau
đó, có xếp hạng ba sao, đại diện như thế này trong khe thứ ba (Hình 2.5) (00100). Khi
huấn luyện RBM xong, ta sẽ có một tập hợp các trọng số và độ lệch nên cho phép xây
dựng lại xếp hạng cho bất kỳ người dùng nào. Vì vậy, để sử dụng nó để dự đoán xếp
hạng cho người dùng mới, chỉ chạy lại nó một lần nữa bằng cách sử dụng xếp hạng đã
biết của người dùng. Chạy những thứ đó trong đường truyền thẳng, sau đó quay lại trong
đường truyền ngược, để kết thúc với các giá trị xếp hạng được xây dựng lại cho người
dùng đó. Sau đó, có thể chạy softmax trên từng nhóm năm giá trị xếp hạng để dịch đầu
ra trở lại thành năm sao đánh giá cho mỗi mục.

Bảng 2.15 Các thông số đánh giá thuật toán RBM

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 1.1877 0.9919 NaN NaN 0.00001 NaN NaN 232.100611

1M 1.2592 1.0535 NaN NaN 0.00002 NaN NaN 785.102947

49
Bảng 2.16 Các thông số đánh giá thuật toán RBM tinh chỉnh

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 1.1709 0.9774 NaN NaN 0.00001 NaN NaN 188.827285

1M 1.2562 1.0511 NaN NaN 0.00002 NaN NaN 688.413982

Bảng 2.17 Top-10 bộ phim được gợi ý từ thuật toán RBM

Movielens 100k Movielens 1M

1. Howl’s Moving Castle (Hauru no ugoku 1. Yojimbo (1961)


shiro) (2004) 2. Kolya (1996)
2. Harry Potter and the Deadthly Hallows: Part 3. The 400 Blows (Les Quatre
2 (2011) cents coups) (1959)
3. Downfall (Utergang, Der) (2004) 4. Seven Days in May (1964)
Top-10 4. The Hurt Locker (2008) 5. My Man Godfrey (1936)
bộ 5. Harry Potter and the Half-Blond Price (2009)
phim 6. The General (1927)
gợi ý 6. Amores Perros (2000) 7. A Man for All Seasons
7. Moon (2009) (1966)
8. Source Code (2011) 8. City Lights (1931)
9. My Neighbor Totoro (Tonari no Totoro) 9. Shall We Dance?
(1988) 10. Central Station (Central do
10. Blood Diamond (2006) Brasil) (1998)

50
Bảng 2.18 Top-10 bộ phim được gợi ý từ thuật toán RBM tinh chỉnh

Movielens 100k Movielens 1M

1. The Hurt Locker (2008) 1. Yojimbo (1961)


2. On the Waterfront (1954) 2. Kolya (1996)
3. Howl's Moving Castle (Hauru no ugoku 3. The 400 Blows (Les Quatre
shiro) (2004) cents coups) (1959)
4. Downfall (Untergang, Der) (2004) 4. My Man Godfrey (1936)
Top-10 5. Harry Potter and the Half-Blond Price (2009) 5. The General (1927)
bộ
phim 6. Harry Potter and the Deathly Hallows: Part 2 6. A Man for All Seasons
gợi ý (2011) (1966)
7. Amores Perros (2000) 7. Top Hat (1935)
8. Battle Royale (Batoru rowaiaru) (2000) 8. City Lights (1931)
9. Inside Out (2015) 9. Shall We Dance?
10. The Imitation Game (2014) 10. Central Station (Central do
Brasil) (1998)

2.4.4 Auto-Encoder cho RS

Theo [9], ta có:

Hình 2.7 Mô hình thuật toán Auto-Encoder cho RS

Mô hình trên gồm ba lớp: một lớp đầu vào có chứa xếp hạng cá nhân, một lớp ẩn và
một lớp đầu ra điều đó mang lại những dự đoán. Một ma trận trọng số giữa các lớp
được duy trì trên mọi phiên làm việc của mạng này, cũng như một nút rút gọn cho cả

51
lớp ẩn và lớp đầu ra. Người ta đã đào tạo mạng một lần cho mỗi bộ phim, cung cấp xếp
hạng từ mỗi người dùng cho phim đó trong lớp đầu vào. Một hàm kích hoạt sigmoid đã
được sử dụng trên đầu ra. Nhìn chung, đó là một cách tiếp cận khá đơn giản và kết quả
tốt hơn một chút so với sử dụng RBM. Nhưng việc thực hiện có một chút khác nhau:
RBM chỉ có các vòng quay độ lệch riêng cho mỗi lần truyền qua, trong khi ở đây, người
ta có một bộ trọng số riêng biệt để làm việc. Nhưng vẫn còn một khó khăn nữa là sự
thưa thớt của dữ liệu đang làm việc. Trong [9], tác giả đề cập ngắn gọn rằng "chúng tôi
chỉ xem xét sự đóng góp của xếp hạng được quan sát." Vì vậy, tác giả đã cẩn thận xử lý
từng path thông qua mạng lưới thần kinh này một cách riêng lẻ, chỉ truyền thông tin từ
xếp hạng thực sự tồn tại trong dữ liệu đào tạo và bỏ qua sự đóng góp từ các nút đầu vào
tương ứng với dữ liệu bị thiếu từ các mục của người dùng mà không được đánh giá ở
tất cả. Kiến trúc này được gọi là bộ mã hóa tự động (autoencoders). Hành động xây
dựng trọng số và độ lệch giữa lớp đầu vào và lớp ẩn được gọi là mã hóa đầu vào. Ta
đang mã hóa các mẫu trong đầu vào và như một tập hợp các trọng số vào lớp ẩn. Sau
đó, khi ta xây dựng lại đầu ra trong các trọng số giữa các lớp ẩn và lớp đầu ra, ta đang
giải mã nó. Vì vậy, tập trọng số đầu tiên là giai đoạn mã hóa, và bộ thứ hai là giai đoạn
giải mã. Về mặt khái niệm, điều này không thực sự khác biệt từ những gì đã làm với
RBM. Trong RBM thì mã hóa trên đường chuyển tiếp và được giải mã trên đường truyền
ngược.

Bảng 2.19 Các thông số đánh giá thuật toán Auto-Encoder

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 1.8837 1.4760 0.0119 0.0119 0.0119 1 0.6966 1409.032480

1M 2.4351 2.1263 0.0270 0.0270 0.0270 0.4043 0.0427 5156.311167

52
Bảng 2.20 Top-10 bộ phim được gợi ý từ thuật toán Auto-Encoder

Movielens 100k Movielens 1M

1. Horton Hears a Who! (2008) 1. Ben-Hur (1959)


2. Spacehunter: Adventures in the Forbidden 2. Snow White and the Seven
Zone (1983) Dwarfs (1937)
3. Empire of Dreams: The Story of the ‘Star 3. Beauty and the Beast (1991)
Wars’ Trilogy (2004) 4. Gigi (1958)
Top-10
4. Sleepers (1996) 5. Miracle on 34th Street (1947)
bộ
phim 5. The Deer Hunter (1978) 6. The Sound of Music (1965)
gợi ý 6. Ben-Hur (1959) 7. Airplane! (1980)
7. Grandhi (1982) 8. Tarzan (1999)
8. Cape Fear (1991) 9. Bambi (1942)
9. Beavis and Butt-Head Do America (1996) 10. Big (1988)
10. Tron (1982)

2.4.5 Hybrid RS

Để vận hành được mô hình kết hợp này thì ta phải đưa ra lựa chọn hợp lý với bộ
trọng số của mỗi thuật toán để kết hợp được với nhau. Kết hợp thuật toán RBM với thuật
toán Content-Based kNN trên tinh thần kết hợp thông tin dựa trên hành vi (behavior-
based) và ngữ nghĩa (sematic-based) với nhau thành một hệ thống duy nhất.

Với việc gọi từ thư viện Surprise hàm AlgoBase, ta sẽ truyền vào hàm AlgoBase
này với tham số các thuật toán cần để thực hiện rồi sau đó lấy toàn bộ trọng số mà các
thuật toán ta cần kết hợp lại. Ở đây ta sẽ lấy ra thuật toán Content-based kNN và RBM
cũng như các trọng số của hai thuật toán này. Tiếp theo trong hàm tính toán các thông
số của hai loại thuật toán này thì ta tính giá trị trung bình chạy được trên toàn bộ tập dữ
liệu sau khi cho toàn bộ dữ liệu được huấn luyện qua cả hai thuật toán này, chứ không
lấy giá trị đánh giá trên từng thuật toán riêng lẻ.

Tuy nhiên, việc kết hợp này cần thêm trọng số cân bằng giữa hai loại thuật toán này
với bộ số [0,5;0,5] để đảm bảo được mô hình ổn định trong suốt quá trình huấn luyện

53
nếu không sẽ gây ra một số trạng thái lỗi trong quá trình chạy khi máy tính xung đột
trong các lớp của mô hình học sâu RBM.

Bảng 2.21 Các thông số đánh giá thuật toán Hybrid RS

RMSE MAE HR cHR ARHR Coverage Diversity Thời gian(s)

100k 0.9950 0.8121 NaN NaN 0.00001 0.4411 0.0752 451.448463

1M 1.0517 0.8747 0.0012 0.0012 0.0012 0.5823 0.0335 900.581751

Bảng 2.22 Top-10 bộ phim được gợi ý từ thuật toán Hybrid RS

100k 1M

1. True Grit (2010) 1. Dracula (1931)


2. Bowling for Columbine (2002) 2. Frankenstein (1931)
3. Fahrenheit 9/11 (2004) 3. Nosferatu (Nosferatu, eine
4. The White Stripes Under Great White Symphonie des Grauens) (1922)
Northen Lights (2009) 4. Bride of Frankenstein (1935)
Top-10 5. Roger & Me (1989) 5. The Invisible Man (1933)
bộ
phim 6. Step Into Liquid (2002) 6. The Birds (1963)
gợi ý 7. Inside Job (2010) 7. Invasion of the Body Snatchers
8. Crumb (1994) (1956)

9. Hoop Dreams (1994) 8. The Blob (1958)

10. The War Room (1993) 9. The Creature From the Black
Lagoon (1954)
10. The Fly (1958)

54
2.5 Đánh giá kết quả

2.5.1 Đánh giá từng thuật toán

2.5.1.1 Thuật toán User_kNN

Với ý tưởng là với thuật toán của kNN để phân cụm dữ liệu, kết hợp với giá trị tương
đồng giữa người dùng với nhau thì sẽ tạo nên được thuật toán User_kNN. Với lượng
người dùng là 943 người dùng ở bộ dữ liệu Movielens 100k và 6040 người dùng ở bộ
dữ liệu Movielesn 1M ta có thể thấy được tốc độ phân tính toán các cụm là có sự chênh
lệch rõ rệt ở việc tăng lượng giá trị cần phân cụm nhiều hơn là sẽ yêu cầu được lượng
thời gian lớn hơn rõ rệt (gấp tận 160 lần ).

Tuy nhiên điều này càng dễ được thấy nhiều hơn ở các thông số chuyên dùng để
đánh giá top-10 bộ phim được gợi ý từ thuật toán bao gồm: HR, cHR, ARHR, Coverage
và Diveristy là sau khi được phân thành các cụm để tính toán nhưng mang tính dựa trên
giá trị tương đồng lân cận nhau giữa người dùng nên sự bao phủ - tham số Coverage
(~1) và tính đa dạng lớn – tham số Diveristy (~0.9) cũng như các chỉ số ARHR
(~0.000001) đã phản ánh được dữ liệu top-10 bộ phim được đề xuất mang tính dàn trải
trên hầu hết các nội dung thể loại phim mà người dùng quan tâm (bảng top-10 bộ phim
được gợi ý).

2.5.1.2 Thuật toán Item_kNN

Ý tưởng của thuật toán kNN là phân cụm dữ liệu kết hợp với tính toán giá trị tương
đồng giữa các bộ phim đã được đánh giá thì sẽ tạo nên thuật toán Item_kNN. Thông qua
cặp thông số đánh giá (RMSE; MAE) qua hai tập dữ liệu Movielens 100k và 1M lần
lượt là (0.995; 0.779) và (0.997; 0.780) ta có thể thấy với thuật toán này được triển khai
thì không tạo được kết quả như mong đợi. Bên cạnh đó các thông số khác như HR, cHR,
Coverage, Diveristy hay thời gian cũng có xu hướng không tốt được như thuật toán
User_kNN.

Tuy nhiên với ý tưởng là so sánh sự tương đồng giữa các bộ phim với nhau, đây
có thể là ý tưởng tốt để được cải thiện bằng việc triển khai thuật toán dưới dạng kết hợp
khác có thể đem lại được kết quả khả quan hơn trong các nghiên cứu về sau.

55
2.5.1.3 Thuật toán ContentBassed_kNN

Với ý tưởng lấy tính toán các bộ phim tương đồng với bộ phim mà người dùng đã
xem để gợi ý các bộ phim tiếp theo cho người dùng đó kết hợp với phân cụm của thuật
toán kNN đã tạo ra được thuật toán ContentBased_kNN. Với kết quả thu được có thể
thấy sự đặc biệt khác nhau ở bộ dữ liệu Movielens 100k và 1M đó là thời gian thực thi,
thời gian thực thi ở bộ dữ liệu Movielens 100k lại dài hơn bộ dữ liệu 1M chắc hẳn là do
tốc độ phân nhóm ở bộ dữ liệu này diễn ra dài hơn, phức tạp hơn và đòi hỏi nhiều bước
tính toán độ tương đồng để gom nhóm hợp lý hơn. Hơn thế nữa, tốc độ hội tụ lâu hơn
cũng bị ảnh hưởng bởi độ thưa thớt của dữ liệu, thật vậy, về cả số lượng lẫn độ bao phủ
của tập dữ liệu 100k là kém hơn nhiều so với bộ dữ liệu 1M. Khắc phục được mặt tốc
độ này có thể cải thiện chất lượng của dữ liệu cho nghiên cứu sau này.

2.5.1.4 Thuật toán SVD/SVD-Tuned

Thuật toán SVD được xây dựng dưa trên ý tưởng muốn tách một ma trận thành tích
của ba ma trận khác có thể mang đến nhiều lợi ích như giảm chiều dữ liệu, nén dữ liệu,
tìm hiểu đặc tính của dữ liệu, giải các hệ tuyến tính, phân nhóm, … Việc sử dụng ý
tưởng này đã giúp khai phá được nhiều hơn các nhân tố bên trong dữ liệu tốt hơn, dẫn
đến kết quả thu được có vẻ khả quan hơn các thuật toán đã được đề cấp ở trước. Thật
vậy, kết quả thu được thể hiện sự tối ưu về thời gian thực thi (0.65 giây ở bộ dữ liệu
Movielens 100k và 5.65 giây ở bộ Movielens 1M), bên cạnh đó thông số RMSE, MAE
cũng được cải thiện đáng kể (xuống còn xấp xỉ 0.9,0.87); còn nữa, các thông số đánh
giá top-10 bộ phim được gợi ý cũng khả qua khi HR, cHR, ARHR cũng đã phản ánh đã
có bộ phim tương đồng với các bộ phim đã được đánh giá trước đây của người dùng,
đặc biệt độ bao phủ cũng khá cao cũng như độ đa dạng của kết quả là thấp, chứng tỏ
được thuật toán này đã tập trung được vào sự gợi ý cụ thể vào những bộ phim liên quan
đến sở thích của người dùng hơn và cá nhân hóa được mạnh mẽ hơn.

2.5.1.5 Thuật toán SVD++

Thuật toán SVD++ tăng thêm vector phụ ở mỗi sản phẩm so với thuật toán SVD,
bên cạnh đó còn ước tính độ phù hợp của các giá trị vecto đó cho tất cả các sản phẩm
mà người dùng đó đã tương tác, sau đó lại thêm cả vecto phụ vào cả regularization. Việc
tăng cường tính toán từ trong thuật toán lẫn đẩy thêm các yếu tố phụ vào từng phần tử
đã làm tăng cường khả năng tính toán và tính hoàn thiện cho thuật toán.

56
Kiểm chứng qua kết quả nhận được, có thể nói đây là kết quả khả quan nhất trong
tất cả các thuật toán đã được thực thi trong bài này khi các chỉ số RMSE (0.894 cho
Movielens 100k, 0.864 cho Movielens 1M) cũng như chỉ số HR(0.029 cho Movielens
100k và 0.038 cho Movielens 1M) đã phản ánh được hiệu quả tốt hơn các thuật toán
khác. Đặc biệt, với chỉ số bao phủ lớn (0.9419 ở Movielens 100k và 0.987 ở Movielens
1M) và độ đa dạng thấp (0.0923 ở Movielens 100k và 0.03 ở Movielens 1M) đã thể hiện
được khả năng gợi ý cá nhân hóa càng mạnh mẽ hơn. Tuy nhiên thuật toán này có khuyết
điểm là thời gian thực thi khá lớn (51.33 giây cho Movielens 100k và 358.79 giây ở
Movielens 1M) cũng là một gợi ý để cho việc tối ưu thuật toán này bằng cách cải thiện
thời gian chạy trong tương lai.

2.5.1.6 Thuật toán RBM

Là một thuật toán, hữu ích cho việc giảm kích thước, phân loại, hồi quy, lọc cộng
tác, học tính năng và lập mô hình chủ đề, là các mô hình đồ họa xác suất có thể được
hiểu là mạng thần kinh ngẫu nhiên. Xây dựng RBM ban đầu là các ý tưởng truyền các
trọng số ngẫu nhiên giữa các lớp với nhau và không có sự giao tiếp trong một lớp đã
đẩy thuật toán này gặp khó khăn trong việc xác định các thông số ở kết quả gợi ý được
như HR,cHR hay tính bao phủ, tính đa dạng khi kết quả được trả thẳng ra là gợi ý cụ thể
cho người dùng. Bên cạnh đó, thời gian thực thi thuật toán này cũng khá lớn (232.1 giây
cho Movielens 100k và 795.1 giây cho Movielens 1M).

2.5.1.7 Thuật toán Auto-Encoder

Là thuật toán học sâu, xây dựng dựa trên sự phân chia rõ ràng về các lớp dữ liệu ban
đầu và đây mạnh quá trình mã hóa, giải mã trong quá trình huấn luyện đã phân tách và
tính toán dữ liệu một cách có chiều sâu và hiệu quả. Tuy nhiên, việc ứng dụng này chưa
thực sự đạt được kết quả khả quan trong bài viết này đã làm trở ngại lớn trong việc nhận
định về khả năng đóng góp của thuật toán này trong quá trình tìm hiểu và phát triển sâu
hơn khi các thông số RMSE (1.883 cho Movielens 100k và 2.435 cho Movielens 1M)
đã phản ánh độ hiệu quả kém nhất trong bài báo cáo này. Tuy nhiên vẫn có điểm tích
cực trong kết quả khi các thông số ARHR có cải thiện hơn các thuật toán khác như
User_kNN hay RBM nhưng vẫn thua SVD++ một chút. Bên cạnh đó, độ bao phủ cao
cũng như độ đa dạng thấp của kết quả đưa ra đã làm thuật toán này có tính chuyên sâu

57
trong sự gợi ý cho cá nhân cụ thể, nhưng cần phải cải thiện độ chính xác của thuật toán
nhiều hơn để có thể đưa ra được đánh giá tốt hơn trong tương lai.

2.5.1.8 Thuật toán HybridRS

Trên ý tưởng kết hợp giữa thuật toán ContentBased_kNN và thuật toán RBM để
tạo được mô hình huấn luyện dữ liệu hai tầng kết hợp. Về mặt ý tưởng, tính khả thi về
việc tăng cường tìm hiểu dữ liệu sâu bên trong dữ liệu và lựa chọn được những yếu tố
cần thiết để gợi ý sâu cho người dùng; thật vậy, điều này hoàn toàn đạt được khi thông
số đa dạng Diversity là rất thấp nhưng tính khả thi để sử dụng thuật toán này về sau thì
trong bài báo cáo này chưa thực sự khả thi khi các thông số khác như RMSE, MAE đều
không thực sự tối ưu. Tuy nhiên, trên phương diện phát triển sâu hơn, thuật toán này
hoàn toàn có thể được nghiên cứu sâu hơn bởi cách kết hợp này còn hứa hẹn nhiều.

2.5.2 Đánh giá tổng hợp


Bảng 2.23 Bảng thông số đánh giá các thuật toán trên bộ dữ liệu Movielens 100k

Thời
RMSE MAE HR cHR ARHR Coverage Diversity
gian(s)

User_kNN 0.995 0.771 NaN NaN 0.000001 1 0.8586 0.44

Item_kNN 0.995 0.779 NaN NaN 0.000001 0.9896 0.6494 4.75

Content_kNN 0.937 0.726 0.003 0.0030 0.002980 0.9285 0.5700 217.5

SVD 0.905 0.700 0.024 0.0224 0.022346 0.9463 0.0419 0.65

SVD-Tuned 0.889 0.686 0.026 0.0268 0.026815 0.9732 0.1372 14.89

SVD++ 0.894 0.687 0.029 0.0298 0.029798 0.9419 0.0923 51.33

RBM 1.187 0.991 NaN NaN 0.000001 NaN NaN 232.1

RBM-Tuned 1.170 0.977 NaN NaN 0.000001 NaN NaN 188.8

AutoEncoder 1.883 1.476 0.011 0.0119 0.011918 1 0.6966 1409

HybridRS 0.995 0.812 NaN NaN 0.000001 0.4411 0.0752 451.44

58
Hình 2.8 Thông số RMSE và MAE cho của các mô hình cho bộ dữ liệu Movielens 100k

Bảng 2.24 Bảng thông số đánh giá các thuật toán trên bộ dữ liệu Movielens 1M

Thời
RMSE MAE HR cHR ARHR Coverage Diversity
gian(s)

User_kNN 0.976 0.771 0.001 0.0018 0.000001 1 0.99 70.3

Item_kNN 0.997 0.780 0.006 0.0065 0.000001 0.991 0.84 30.26

Content_kNN 0.990 0.786 0.003 0.0028 0.002980 0.971 0.1 31.35

SVD 0.877 0.688 0.028 0.0283 0.022346 0.99 0.03 5.65

SVD-Tuned 0.879 0.690 0.031 0.0318 0.026815 0.99 0.04 169.3

SVD++ 0.864 0.674 0.038 0.0382 0.029798 0.987 0.03 358.79

RBM 1.259 1.053 NaN NaN 0.000001 NaN NaN 795.1

RBM-Tuned 1.256 1.051 NaN NaN 0.000001 NaN NaN 688.41

AutoEncoder 2.435 2.126 0.027 0.0270 0.011918 0.4043 0.04 5156.3

HybridRS 1.051 0.874 0.001 0.0012 0.000001 0.5823 0.03 900.58

59
Hình 2.9 Thông số RMSE và MAE cho của các mô hình cho bộ dữ liệu Movielens 1M

Hình 2.10 Thời gian chạy giữa các mô hình với hai bộ dữ liệu Movielens 100k và
Movielens 1M

Các thuật toán được thực thi trên cả bộ dữ liệu Movielens 100k và Movielens 1M
về cơ bản đã đạt được những kết quả khả quan cho việc nghiên cứu sâu hơn về sau này.
Trong bài báo cáo này về cơ bản đã phản ánh được phần nào các thuật toán được thiết
kế để sử dụng trong lĩnh vực RS vẫn có ưu thế hơn các thuật toán học sâu hay những
thuật toán cơ bản trong lĩnh vực AI, bên cạnh đó việc tối ưu được các ý tưởng liên quan

60
đến cải tiến về chất lượng dữ liệu cũng sẽ ảnh hưởng ít nhiều đến khả năng thực thi của
các thuật toán.

2.6 Thực nghiệm trên Pyspark


Sau khi thực nghiệm với bộ dữ liệu Movielens 100k và Movielens 1M, với xu hướng
muốn tiếp tục thử nghiệm các mô hình với các bộ dữ liệu lớn hơn thì đã xuất hiện vấn
đề không đủ bộ nhớ để thực thi các mô hình. Từ đó đề xuất phương pháp sử dụng Apache
Spark với mô hình Alternating Least Square (ALS) để xử lý bộ dữ liệu Movielens 20M.

Pandas chạy các hoạt động trên máy đơn trong khi PySpark chạy trên nhiều máy.
Nếu đang làm việc trên một ứng dụng Học Máy đang xử lý các tập dữ liệu lớn hơn, thì
PySpark là ứng dụng phù hợp nhất có thể xử lý các hoạt động nhanh hơn gấp nhiều lần
(100 lần) so với Pandas. PySpark được sử dụng rất tốt trong cộng đồng Khoa học dữ
liệu và Học máy vì có nhiều thư viện khoa học dữ liệu được sử dụng rộng rãi được viết
bằng Python bao gồm NumPy, TensorFlow cũng được sử dụng do chúng xử lý hiệu quả
các tập dữ liệu lớn. PySpark đã được sử dụng bởi nhiều tổ chức như Walmart, Trivago,
Sanofi, Runtastic, v.v… PySpark là một thư viện Spark được viết bằng Python để chạy
các ứng dụng Python sử dụng khả năng của Apache Spark. Sử dụng PySpark có thể chạy
các ứng dụng song song trên cụm phân tán (nhiều nút) hoặc thậm chí trên một nút.
Apache Spark là một công cụ xử lý phân tích cho các ứng dụng máy học và xử lý dữ
liệu phân tán mạnh mẽ quy mô lớn.

Để dễ hình dung hơn về lý do sử dụng Spark với dữ liệu lớn, theo [10] ta có thể dễ
dàng nhận định được với lý tưởng giải quyết vấn đề xử lý bên trong bộ nhớ. Thông
thường theo cách hoạt động của các thư viện cơ bản thì đều phải tải toàn bộ dữ liệu lên
RAM để giải quyết, Spark giải quyết vấn đề linh hoạt giữa việc đưa dữ liệu lên RAM
và lưu xuống bộ nhớ khi không sử dụng.

Một khía cạnh được khuyên dùng Spark khi sử dụng với dữ liệu lớn đó là cách vận
hành tính toán của Spark, các chuyên gia đã linh hoạt giữa việc sử dụng cụm máy và
làm thư viện mở để người dùng có thể dùng nhiều phương pháp khác nhau vừa để tăng
tốc Spark để tối đa hóa quá trình tính toán dựa trên sức mạnh phần cứng của mỗi loại
máy. Nói đơn giản hơn, việc tối đa hóa sức mạnh của từng phần cứng khác nhau giúp
cho giảm thiểu tối đa thời gian thực thi các bài toán học sâu, học nhiều dữ liệu nhanh
hơn cũng như đảm bảo được tuổi thọ các thiết bị đang sử dụng.

61
Hơn thế nữa, theo [11] ta có thể dễ dàng nhận định hiệu năng phân bổ phần cứng và
tối đa hóa việc sử dụng dữ liệu lớn theo thời gian thực của Spark quả thực rất mạnh mẽ,
phù hợp rất lớn đến với công việc xử lý dữ liệu lớn của nhóm ngành Trí tuệ nhân tạo
hiện nay. Việc sử dụng các cụm máy lớn trong việc xử lý dữ liệu lớn cũng là yếu tố cần
thiết và được đặt ra trong các doanh nghiệp nhằm tối ưu được tài nguyên hiện có, và
việc Spark làm công cụ kết nối RMDA thì quả thực là một thư viện rất có ích để tìm
hiểu và phân tích chuyên sâu.

Bên cạnh đó, nhằm giải quyết bài toán dữ liệu lớn (thường gây ra hiện tượng tràn
RAM) thì Spark là một công cụ hữu dụng khi có thể luân phiên đưa dữ liệu lên giữa
RAM và bộ nhớ để có thể tránh trường hợp RAM phải lưu trữ quá nhiều dữ liệu.

Việc thử nghiệm các thuật toán phía trên với bộ dữ liệu 20M thì gây ra hiện tượng
tràn RAM trên máy tính cá nhân (phần lớn là do quá trình thực thi quá nhiều phép tính
đồng thời nên không đủ lưu trữ hàng loạt) và việc sử dụng Spark sao cho hợp lý đã giải
quyết triệt để vấn đề này.

Hình 2.11 Hiện tượng tràn RAM khi chạy mô hình trên tập dữ liệu 20M

Với thuật toán ALS:

Quá trình huấn luyện theo gradient descent sẽ khá lâu vì tốc độ hội tụ phụ thuộc vào
learning rate. Trong khi ta nhận thấy hàm loss function trên mỗi user hoặc item có thể
tính toán được nghiệm tối ưu thông qua giải phương trình đạo hàm. Quá trình hội tụ xen
kẽ khi tính theo phương trình nghiệm sẽ nhanh hơn rất nhiều so với gradient descent.

62
Phương pháp này có tên là ALS (Alternating Least Square). Giải phương trình đạo hàm
đối với user thứ i.

ALS cố gắng ước tính ma trận xếp hạng R là tích của hai ma trận xếp hạng thấp hơn,
X và Y, tức là X * Yt = R. Thông thường, các phép tính gần đúng này được gọi là ma
trận 'hệ số'. Cách tiếp cận chung là lặp đi lặp lại. Trong mỗi lần lặp, một trong các ma
trận nhân tố được giữ không đổi, trong khi ma trận kia được giải bằng cách sử dụng bình
phương nhỏ nhất. Ma trận thừa số mới được giải sau đó được giữ cố định trong khi giải
cho ma trận thừa số khác.

Đây là một triển khai bị chặn của thuật toán phân tích thừa số ALS nhóm hai nhóm
yếu tố (được gọi là “người dùng” và “sản phẩm”) thành các khối và giảm giao tiếp bằng
cách chỉ gửi một bản sao của mỗi vectơ người dùng tới từng khối sản phẩm trên mỗi lần
lặp lại và chỉ dành cho các khối sản phẩm cần vectơ đặc trưng của người dùng đó. Điều
này đạt được bằng cách tính toán trước một số thông tin về ma trận xếp hạng để xác
định “liên kết ngoài” của từng người dùng (người dùng sẽ đóng góp vào khối sản phẩm
nào) và thông tin “trong liên kết” cho từng sản phẩm (vec-tơ tính năng nào nó nhận được
từ mỗi khối người dùng mà nó sẽ phụ thuộc vào). Điều này cho phép chúng tôi chỉ gửi
một mảng vectơ đặc trưng giữa từng khối người dùng và khối sản phẩm, đồng thời yêu
cầu khối sản phẩm tìm xếp hạng của người dùng và cập nhật sản phẩm dựa trên những
thông báo này.
Bảng 2.25. Kết quả thu được khi chạy mô hình ALS trên Pyspark

Bộ dữ liệu Movielens 100k 20M

RMSE 1.138754857 0.8131677159

Thời gian thực thi (giây) 568.9856 13384.1546786

63
KẾT LUẬN

Kết luận chung


Trong các mô hình được thực nghiệm mô hình cho kết quả tốt nhất là SVD,
SVD++ , điều này là phù hợp vì đây là mô hình đã dành giải thưởng trong cuộc thi lớn
về hệ thống khuyến nghị do Netflix trao giải.

Các mô hình cổ điển như ContentBased, CF tuy có kết quả thấp hơn nhưng vẫn
phát huy được khả năng gợi ý, và tùy theo mục đích sử dụng trong một số trường hợp
sẽ mang đến hiệu quả tốt.

Các mô hình học sâu như BRM , Auto-Encoder cho kết quả tương đối thấp so
với các thuật toán khác vì theo lý thuyết các mô hình này không được sinh ra dành riêng
cho bài toàn hệ thống gợi ý. Nhưng vì là mô hình mạng nơ-ron thuộc về các loại thuật
toán của Deep learing nên các thuật toán này còn nhiều hướng phát triển và cải thiện.

Pyspark thực sự là một công nghệ giúp giải quyết vấn đề dữ liệu lớn trong thực
tế, tối ưu được phần cứng bằng việc xử lý song song. Và kết quả thực nghiệm cho thấy
khi tăng lượng dữ liệu thì chất lượng dự đoán cũng sẽ tăng theo. Do đó việc tăng cường
khả năng dự đoán bằng công nghệ xử lý Apache Spark kết hợp tăng cường dữ liệu là
khả thi.

Hướng phát triển


• Thực nghiệm trên các model AI khác đặc biệt là các model mạng Neural
Deep learing.
• Thực nghiệm trên các tập dữ liệu lớn hơn, trên data ở lĩnh vực khác.
• Sử dụng các Cloud Computing Services (AWS) để thực thi Pyspark nhằm
hướng tới việc tiện lợi tối ưu hóa tiền đầu tư phát triển các hệ thống khuyến
nghị cho các doanh nghiệp.

64
TÀI LIỆU THAM KHẢO

[1] N. T. Nghe, Chương 2. Hệ thống gợi ý: Kỹ thuật và ứng dụng, Cần Thơ: Khoa
Công nghệ thông tin và Truyền thông, Trường Đại học Cần Thơ.

[2] Y. Koren, "Factorization Meets the Neighborhood: a Multifaceted Collaborative


Filtering Model," 2012.

[3] M. a. P.-B. Ghazanfar, "An improved switching hybrid recommender system using
naive Bayes classifier and collaborative filtering," in The 2010 IAENG
International Conference on Data Mining and Applications, Hong Kong, Hong
Kong, 2010.

[4] S. Z. &. J. L. Tianyu Zuo, "A Hybrid Recommender System Combing Singular
Value Decomposition and Linear Mixed Model," Springer Link, 2020.

[5] M. D. H. E.-z. M. S. K. B. &. G. W. Andreu Vall, "Feature-combination hybrid


recommender systems for automated music playlist continuation," Springer Link,
p. 527–572, 2019.

[6] R. Burke, "Hybrid Recommender Systems: Survey and Experiments," Spinger


Link, Vols. 12, pages331–370 (2002), 2002.

[7] D. C. I. P. &. F. F. Miguel Ângelo Rebelo, "A New Cascade-Hybrid Recommender


System Approach for the Retail Market," Springer Link, 2022.

[8] N. Immaneni, I. Padmanaban, B. Ramasubramanian and R. Sridhar, "A meta-level


hybridization approach to personalized movie recommendation," IEEE, no.
17414537, 2017.

[9] A. K. M. S. X. Suvash Sedhain, "AutoRec: Autoencoders Meet Collaborative


Filtering".

[10] X. Lu, M. W. U. Rahman, N. Islam, D. Shankar and D. K. Panda, "Accelerating


Spark with RDMA for Big Data Processing: Early Experiences," IEEE, no.
14787915, 2014.

65
[11] X. Lu, D. Shankar, S. Gugnani and D. K. Panda, "High-performance design of
apache spark with RDMA and its benefits on various workloads," IEEE, no.
16653102, 2016.

[12] M. J. P. &. D. Billsus, "Content-Based Recommendation Systems," Spinger Link,


2007.

[13] E. |. M. M. Çano, "Hybrid recommender systems: A systematic literature review,"


IOS Press, Vols. vol. 21, no. 6, pp. 1487-1524,, 2017.

[14] S. V. a. A. S. CHRISTINA CHRISTAKOU, "A HYBRID MOVIE


RECOMMENDER SYSTEM BASED ON NEURAL NETWORKS," World
Scientific, Vols. Vol. 16, No. 05, pp. 771-792 (2007), 2007.

[15] H.-Q. Do, T.-H. Le and B. Yoon, "Dynamic Weighted Hybrid Recommender
Systems," IEEE, p. 19514963, 2020.

[16] X. Guan, C.-T. Li and Y. Guan, "Matrix Factorization With Rating Completion:
An Enhanced SVD Model for Collaborative Filtering Recommender Systems,"
IEEE, no. 17496895, pp. 27668 - 27678, 2017.

[17] D. F. J. H. &. S. S. J. Ben Schafer, "Collaborative Filtering Recommender


Systems," Spinger Link, no. LNISA,volume 4321, 2004.

[18] B. Li, S. Wan, H. Xia and F. Qian, "The Research for Recommendation System
Based on Improved KNN Algorithm," IEEE , no. 20033285, 2020.

[19] D. M. H.-J. M. S. J. H. N. S. J. P. X. W. U. G. C.-J. W. A. G. A. D. D. A. M. I. C.


Y. L. R. K. Maxim Naumov, "Deep Learning Recommendation Model for
Personalization and Recommendation Systems," arXiv, 2019.

[20] J. T. R. J. A. K. Michael D. Ekstrand, "Collaborative Filtering Recommender


Systems," NOW, Vols. Vol. 4: No. 2, pp 81-173, 2011.

[21] J. H. ,. G. H. ,. Y. Z. Xun Zhou, "SVD-based incremental approaches for


recommender systems," ScienceDirect, no. Volume 81, Issue 4, pp. Pages 717-733,
2015.

[22] S. N. S. K. S. A. &. B. V. SRS Reddy, "Content-Based Movie Recommendation


System Using Genre Correlation," Spinger Link, p. volume 105, 2018.

66
[23] G. S. a. Y. L. Shijie WangORCID, "SVD++ Recommendation Algorithm Based on
Backtracking," MDPI, 2020.

[24] S. M. T. T. T. N. G. S. Ramni Harbir Singh, "Movie Recommendation System


using Cosine Similarity and KNN," International Journal of Engineering and
Advanced Technology (IJEAT), vol. ISSN: 2249 – 8958 (Online), no. Volume-9
Issue-5, 2020.

[25] K. K. R. M. B. R. ,. P. R. S. N. Pradeep, "Content based movie recommendation


system," IJRIE, 2020.

67

You might also like