Trong kỷ nguyên thương mại điện tử và dịch vụ giải trí trực tuyến bùng nổ, hệ thống gợi ý (Recommendation System) đóng vai trò sống còn trong việc cá nhân hóa trải nghiệm người dùng. Việc xây dựng recommendation system bằng deep learning giúp các nền tảng lớn như Amazon, Netflix hay Spotify tự động nhận diện sở thích tiềm ẩn từ hàng triệu lượt tương tác mỗi ngày.
Trong buổi bảo vệ đồ án tốt nghiệp khóa học Data Science tại COLE, học viên Trần Thị Diễm Thúy (lớp Project Data Science K1) đã trình bày đề tài ứng dụng kỹ thuật Content-Based kết hợp kiến trúc Deep Learning nhiều tầng (Multi-layer Perceptron) trên bộ dữ liệu phim ảnh của Amazon. Đồ án đưa ra giải pháp toàn diện để giải quyết bài toán ma trận thưa (Sparse Matrix) và hiện tượng tràn bộ nhớ (Out-of-Memory) khi huấn luyện trên tập dữ liệu lên tới hơn 25 triệu dòng.
THÔNG TIN HỌC VIÊN
Trần Thị Diễm Thúy
Data Science - K01- Khóa học: Data Science & Machine Learning
- Thời gian thực hiện: 18 ngày
- Mục tiêu: Xây dựng hệ thống gợi ý phim Amazon
- Tập dữ liệu: 25.000.000+ Rating Logs & 62.000+ Movies
- Nền tảng đào tạo: Học viện Đào tạo Công nghệ Cole.vn
FEEDBACK CỦA HỌC VIÊN
“Khóa học đã cung cấp cho em tư duy giải quyết trọn vẹn một bài toán Data Science thực tế: từ khâu phân tích dữ liệu thô, tối ưu bộ nhớ RAM đến việc thiết kế mô hình Deep Learning tùy biến để đưa ra dự đoán chính xác nhất.”
Làm chủ kỹ thuật trích xuất Feature Vectors và xử lý thành công bài toán dữ liệu lớn hơn 25 triệu records trên Google Colab Pro.
1. BÀI TOÁN HỆ THỐNG GỢI Ý & TỔNG QUAN KIẾN TRÚC MÔ HÌNH
Khi xây dựng hệ thống gợi ý phim hoặc sản phẩm cho tập người dùng khổng lồ, kỹ sư dữ liệu thường đứng trước hai lựa chọn cốt lõi:
- Lọc cộng tác (Collaborative Filtering): Dựa vào ma trận tương tác giữa User và Item. Tuy nhiên, khi số lượng người dùng lên tới hàng triệu và phim lên tới hàng chục nghìn, ma trận này cực kỳ thưa thớt (Sparse) và gây bùng nổ bộ nhớ tính toán (OOM).
- Lọc theo nội dung (Content-Based) kết hợp Deep Learning: Học trực tiếp các vector đặc trưng (Feature Vectors) của người dùng và thuộc tính của bộ phim thông qua các lớp ẩn (Hidden Layers). Mô hình trích xuất được những mối liên hệ phi tuyến tính phức tạp mà Collaborative Filtering truyền thống bỏ sót.
Trong đồ án này, tác giả đã kết hợp phương pháp trích xuất thuộc tính kết hợp Deep Learning để dự đoán điểm đánh giá (Rating) của người dùng cho từng bộ phim, đồng thời tính toán độ tương đồng Cosine Similarity nhằm tìm kiếm các bộ phim có đặc tính tương đương.

2. CHI TIẾT QUY TRÌNH TIỀN XỬ LÝ & HƯỚNG DẪN CODE PYTHON
Quy trình triển khai xây dựng recommendation system bằng deep learning được tác giả thực hiện chi tiết theo các giai đoạn sau:
2.1. Đọc dữ liệu và giải quyết trùng lặp thực thể (Data Integrity)
Bộ dữ liệu Amazon Movies Dataset gồm hai bảng thông tin chính: bảng thông tin phim (Movies) và bảng lịch sử đánh giá (Ratings). Khi tiến hành phân tích khám phá (EDA), tác giả phát hiện nhiều dòng dữ liệu có cùng tên phim nhưng lại mang mã movie_id khác nhau hoặc trùng lặp thể loại. Việc đầu tiên là phải hợp nhất các thực thể bị trùng:
# 1. Khai báo thư viện phân tích và xử lý dữ liệu
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics.pairwise import cosine_similarity
import tensorflow as tf
from tensorflow.keras import layers, models
# 2. Đọc tập dữ liệu phim ảnh Amazon
movies_df = pd.read_csv('movies.csv')
ratings_df = pd.read_csv('ratings.csv')
# 3. Hợp nhất các bản ghi trùng lặp và làm sạch định danh Movie ID
movies_cleaned = movies_df.drop_duplicates(subset=['title'], keep='first').reset_index(drop=True)
print("Số lượng phim hợp lệ sau làm sạch:", len(movies_cleaned))

2.2. Trích xuất đặc trưng (Feature Engineering) & Xử lý bộ nhớ
Bộ dữ liệu gốc chứa hơn 25 triệu lượt đánh giá. Việc nạp toàn bộ vào bộ nhớ để tính toán ma trận sẽ dẫn đến hiện tượng tràn RAM (kể cả trên môi trường Google Colab Pro 51GB RAM). Tác giả đã áp dụng các chiến lược tinh giản:
- Lọc theo độ phổ biến: Giữ lại các bộ phim có trên 10.000 lượt đánh giá để tập trung vào các mẫu dữ liệu có ý nghĩa thống kê cao.
- One-hot Encoding thể loại (Genres): Tách chuỗi thể loại thành các cột nhị phân (Action, Comedy, Drama...).
- Xử lý chuỗi thời gian (Timestamp): Trích xuất năm, tháng, khung giờ người dùng xem phim để phản ánh ngữ cảnh trải nghiệm.
- Điền giá trị khuyết (Imputation): Với những thể loại người dùng chưa từng trải nghiệm, gán giá trị 0 hoặc điểm số trung bình phù hợp.
# Lọc danh sách phim có trên 10.000 lượt rating để tối ưu RAM
movie_popularity = ratings_df['movieId'].value_counts()
popular_movies = movie_popularity[movie_popularity >= 10000].index
filtered_ratings = ratings_df[ratings_df['movieId'].isin(popular_movies)].copy()
# Tách One-hot Encoding thể loại phim
genres_dummies = movies_cleaned['genres'].str.get_dummies(sep='|')
movies_features = pd.concat([movies_cleaned[['movieId']], genres_dummies], axis=1)
3. THIẾT KẾ KIẾN TRÚC MẠNG NEURAL NETWORK & HUẤN LUYỆN
Mô hình học sâu tiếp nhận đồng thời hai luồng vector đầu vào (User Feature Vector và Movie Feature Vector). Cả hai vector sau đó được đưa qua các lớp kết nối đầy đủ (Dense Layers) với hàm kích hoạt ReLU và lớp đầu ra sử dụng hàm kích hoạt tuyến tính (Linear Activation) để ước lượng điểm số Rating:
# Thiết kế mô hình Deep Learning ước lượng điểm Rating
def build_recommendation_model(user_dim, movie_dim):
user_input = layers.Input(shape=(user_dim,), name='user_features')
movie_input = layers.Input(shape=(movie_dim,), name='movie_features')
# Kết hợp hai nguồn đặc trưng
concat = layers.Concatenate()([user_input, movie_input])
# Khối lớp ẩn học tham số (Dense Layers)
x = layers.Dense(256, activation='relu')(concat)
x = layers.Dense(128, activation='relu')(x)
x = layers.Dense(32, activation='relu')(x)
# Lớp đầu ra dự đoán Rating (Linear Activation)
output = layers.Dense(1, activation='linear', name='rating_prediction')(x)
model = models.Model(inputs=[user_input, movie_input], outputs=output)
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mae'])
return model
model = build_recommendation_model(user_dim=22, movie_dim=22)
model.summary()
| Tiêu chí đánh giá | Collaborative Filtering truyền thống | Content-Based Deep Learning (Đồ án) |
|---|---|---|
| Bộ nhớ tiêu thụ | Rất lớn (Bị tràn bộ nhớ với 25 triệu bản ghi). | Tối ưu, xử lý mượt mà qua các Feature Vectors. |
| Khả năng học đặc trưng | Chỉ học được tương tác tuyến tính qua tích vô hướng. | Học sâu các mối quan hệ phi tuyến tính phức tạp (~85.000 tham số). |
| Độ chính xác (Loss MSE) | Dễ bị sai lệch do ma trận quá thưa thớt. | Hội tụ tốt, sai số MSE đạt mức xuất sắc (~0.004). |
| Tính mở rộng thực tế | Khó cập nhật tức thì khi có dữ liệu mới. | Dễ dàng tính toán trước (Pre-computing) cho người dùng. |

4. KẾT HỢP DỰ ĐOÁN RATING & TÍNH TOÁN COSINE SIMILARITY
Bên cạnh việc dùng mô hình Deep Learning để xếp hạng danh sách phim theo từng userId, hệ thống còn hỗ trợ tính năng tìm kiếm các bộ phim tương đồng với một bộ phim chỉ định (Item-to-Item Similarity) bằng khoảng cách Cosine:
# Tính ma trận tương đồng Cosine giữa các bộ phim
movie_features_matrix = genres_dummies.values
cos_sim_matrix = cosine_similarity(movie_features_matrix, movie_features_matrix)
# Hàm gợi ý Top 5 bộ phim tương đồng
def recommend_similar_movies(movie_title, top_n=5):
idx = movies_cleaned[movies_cleaned['title'] == movie_title].index[0]
sim_scores = list(enumerate(cos_sim_matrix[idx]))
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
top_indices = [i[0] for i in sim_scores[1:top_n+1]]
return movies_cleaned['title'].iloc[top_indices]
print("Danh sách phim tương đồng với 'Toy Story':")
print(recommend_similar_movies('Toy Story (1995)'))

5. CÁC CÂU HỎI THƯỜNG GẶP (FAQ)
Câu hỏi 1: Tại sao tác giả không sử dụng Collaborative Filtering truyền thống trong bài toán này?
Trả lời: Bộ dữ liệu phim Amazon có hơn 25 triệu dòng đánh giá với số lượng người dùng và phim rất lớn. Collaborative Filtering đòi hỏi tính toán ma trận tương tác khổng lồ, gây tràn bộ nhớ (Out of Memory). Phương pháp Content-Based kết hợp Deep Learning giúp đưa kích thước về dạng vector cố định, vừa tiết kiệm RAM vừa học được quan hệ phức tạp.
Câu hỏi 2: Hệ thống xử lý bài toán Người dùng mới (Cold Start Problem) như thế nào?
Trả lời: Khi một người dùng mới chưa có lịch sử đánh giá xuất hiện, hệ thống có thể yêu cầu người dùng chọn sở thích thể loại ban đầu (như cách TikTok hoặc Facebook làm), hoặc gợi ý các bộ phim có số lượt đánh giá cao nhất (Top Popular). Khi người dùng đã có tương tác, Feature Vector sẽ được cập nhật để cá nhân hóa kết quả.
Câu hỏi 3: Làm thế nào để triển khai mô hình gợi ý này vào môi trường thực tế (Production)?
Trả lời: Do việc tính toán trực tiếp trên toàn bộ kho phim cho từng request có thể gây trễ (Latency), hệ thống thực tế thường chạy tính toán trước (Pre-computing / Batch Prediction) định kỳ (ví dụ mỗi đêm). Khi người dùng truy cập, hệ thống chỉ cần đọc dữ liệu đã xếp hạng từ cơ sở dữ liệu tốc độ cao như Redis.
Câu hỏi 4: Có thể nâng cấp mô hình này như thế nào trong tương lai?
Trả lời: Để mô hình phong phú hơn, kỹ sư có thể tích hợp thêm các đặc trưng nhân khẩu học (độ tuổi, giới tính, vùng miền), nội dung tóm tắt phim bằng NLP (BERT / Word2Vec), hoặc áp dụng kiến trúc Deep & Cross Network (DCN) để nâng cao độ chính xác.
NHẬN XÉT TỪ GIẢNG VIÊN
Đặng Lê Quang
AI Engineer & Data ScientistGiảng viên tại tại đại học FTU HCM và AI Engineer & Data Science tại Cole.vn
“Học viên nắm rất chắc bản chất kỹ thuật, biết cách giải quyết bài toán giới hạn bộ nhớ thực tế và chủ động kết hợp linh hoạt giữa Deep Learning cùng Cosine Similarity để giải bài toán Recommendation System.”
ĐÁNH GIÁ ĐỒ ÁN
| Hiểu bài toán & Phương pháp | ★★★★★ |
| Xử lý Big Data & Tối ưu RAM | ★★★★★ |
| Thiết kế kiến trúc Deep Learning | ★★★★★ |
| Triển khai Code Python | ★★★★☆ |
| Tiềm năng ứng dụng Production | ★★★★★ |
ĐỊNH HƯỚNG PHÁT TRIỂN TIẾP THEO
- Áp dụng kỹ thuật Batch Generator hoặc nạp dữ liệu bằng
tf.data.Datasetđể tránh phụ thuộc RAM cục bộ. - Thử nghiệm mô hình Two-Tower Neural Network (User Tower & Item Tower).
- Tích hợp xử lý ngôn ngữ tự nhiên (NLP) cho phần mô tả cốt truyện của phim.
- Đóng gói mô hình thành REST API với FastAPI và lưu cache danh sách gợi ý bằng Redis.
KẾT LUẬN
Dự án xây dựng recommendation system bằng deep learning cho thấy sự kết hợp chặt chẽ giữa tư duy thuật toán và kỹ năng tối ưu tài nguyên thực tế. Đây là nền tảng quan trọng giúp các bạn học viên tự tin triển khai các giải pháp AI và Khoa học Dữ liệu trong các doanh nghiệp công nghệ lớn. Tham khảo ngay Khóa học Data Science Thực chiến tại COLE để làm chủ kỹ năng công nghệ đỉnh cao!