Professional Documents
Culture Documents
Doantotnghiep
Doantotnghiep
ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC
Đề tài:
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:
Hà Nội, 8-2023
ĐÁNH GIÁ QUYỂN ĐỒ ÁN TỐT NGHIỆP
(Dùng cho 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.
Hoàng Anh
MỤC LỤC
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
CF Collaborative Filtering
MF Matrix Factorization
DL Deep Learning
ML Machine Learning
YARN Yet-Another-Resource-Negotiator
HR Hit Rate
ii
DBN DBN
iii
DANH MỤC HÌNH VẼ
iv
DANH MỤC BẢNG BIỂU
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
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 Ý
Trong RS, thông thường người ta quan tâm đến ba thông tin:
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, … , 𝑀.
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ọ.
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 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ọ.
• 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ế.
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.
• 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.
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.
Và nội dung của tài liệu 𝑑𝑗 được xác định như sau:
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 ý.
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:
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.
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.
• 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.
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).
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.
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:
𝑑 = ∑‖𝑥𝑖 − 𝑦𝑖 ‖
(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 điểm:
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).
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ó 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.
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 ý
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.
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.
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.
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.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
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: 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
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.
• 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.
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
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.
• 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).
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.
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.
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)
|𝐷 𝑡𝑒𝑠𝑡 |
𝑢,𝑖,𝑟 𝜖 𝐷 𝑡𝑒𝑠𝑡
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)
𝑈𝑠𝑒𝑟𝑠
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.
Đâ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.
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.
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)
5 Speed (1994)
13 Stargate (1994)
15 Jumanji (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.
STT PHIM
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.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
1
𝑘 𝑞
Minkowski (∑(|𝑥𝑖 − 𝑦𝑖 |)𝑞 ) (2.7)
𝑖=1
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.
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 đó :
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
Bảng 2.4 Top-10 bộ phim được gợi ý bởi thuật toán kNN Content-Based Filtering
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:
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:
41
Bảng 2.5 Các thông số đánh giá thuật toán User_kNN
Bảng 2.6 Top-10 bộ phim được gợi ý bởi thuật toán User_kNN
• Item_kNN
42
𝑆𝑖𝑚𝑃𝑒𝑎𝑟𝑠𝑜𝑛 (𝑖, 𝑖′)
∑𝑢∈𝑈𝑢𝑢′(𝑟𝑢𝑖 − 𝑟̅)
𝑖 ∙ (𝑟𝑢′ 𝑖 − 𝑟̅
𝑖′ ) (2.11)
=
2 ∑
√∑𝑢∈𝑈𝑢𝑢′(𝑟𝑢𝑖 − 𝑟̅)
𝑖 √ 𝑖∈𝐼𝑢𝑢′(𝑟𝑢′𝑖 − 𝑟̅𝑖′ )2
Trong đó :
𝑟̅𝑖 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:
Trong đó:
43
Bảng 2.8 Top-10 bộ phim được gợi ý bởi thuật toán Item_kNN
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ố “|𝑵(𝒖)|−𝟐 ∑𝒋∈𝑵(𝒖) 𝒚𝒊 ”
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.13 Top-10 bộ phim gợi ý bởi thuật toán SVD tinh chỉnh
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.
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.
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.
49
Bảng 2.16 Các thông số đánh giá thuật toán RBM tinh chỉnh
50
Bảng 2.18 Top-10 bộ phim được gợi ý từ thuật toán RBM tinh chỉnh
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.
52
Bảng 2.20 Top-10 bộ phim được gợi ý từ thuật toán Auto-Encoder
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.
100k 1M
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ả
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 ý).
Ý 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.
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.
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.
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).
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.
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.
Thời
RMSE MAE HR cHR ARHR Coverage Diversity
gian(s)
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)
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.
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
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
63
KẾT LUẬN
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.
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ơ.
[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.
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.
[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.
[18] B. Li, S. Wan, H. Xia and F. Qian, "The Research for Recommendation System
Based on Improved KNN Algorithm," IEEE , no. 20033285, 2020.
66
[23] G. S. a. Y. L. Shijie WangORCID, "SVD++ Recommendation Algorithm Based on
Backtracking," MDPI, 2020.
67