Bối cảnh và vấn đề nghiên cứu

Trong đời sống thường nhật, ăn uống là nhu cầu thiết yếu nhằm cung cấp năng lượng và duy trì hoạt động của con người. Cùng với sự phát triển của xã hội, số lượng công thức nấu ăn ngày càng trở nên đa dạng với vô số nguyên liệu và phương thức chế biến khác nhau. Thực tế này dẫn đến tình trạng người dùng gặp nhiều khó khăn trong việc tìm kiếm và lựa chọn những món ăn vừa mới lạ vừa phù hợp với khẩu vị cá nhân. Tác giả chỉ ra rằng đa số mọi người có xu hướng chọn lại các món ăn quen thuộc, dễ nấu và ngại thử sức với các món mới. Câu hỏi "Hôm nay ăn gì?" trở thành nỗi băn khoăn thường trực, thậm chí khiến một bộ phận không nhỏ giới trẻ lựa chọn bỏ bữa do mệt mỏi trong quá trình chọn lựa thực đơn.

Để giải quyết bài toán bùng nổ thông tin và hỗ trợ người dùng ra quyết định, hệ thống tư vấn (Recommender System - RS) đóng vai trò định hướng các dữ liệu phù hợp từ nguồn thông tin khổng lồ chưa có trật tự. Đồ án xác định các mục tiêu và nhiệm vụ nghiên cứu cụ thể như sau:

  1. Nghiên cứu tổng quan về hệ thống tư vấn, các mô hình tiếp cận phổ biến và phân tích bài toán khuyến nghị trong thực tế.
  2. Nghiên cứu cơ sở toán học và cơ chế hoạt động của thuật toán phân tích suy biến (Singular Value Decomposition - SVD) thuộc nhóm phân rã ma trận (Matrix Factorization) để giải quyết bài toán dữ liệu thưa trong lọc cộng tác.
  3. Thực nghiệm đánh giá thuật toán SVD trên tập dữ liệu công thức nấu ăn thực tế để xác định sai số dự đoán.
  4. Phân tích, thiết kế và xây dựng ứng dụng di động hỗ trợ người dùng tra cứu công thức nấu ăn và tự động gợi ý món ăn dựa trên thói quen, chế độ dinh dưỡng và lịch sử đánh giá.

Đối tượng nghiên cứu của đồ án là thuật toán phân tích suy biến SVD ứng dụng trong kỹ thuật lọc cộng tác và hệ thống tư vấn món ăn trên thiết bị di động. Phạm vi không gian và thời gian của dữ liệu thực nghiệm được giới hạn trên tập dữ liệu tương tác thực tế từ nền tảng Food.com (tập dữ liệu ghi nhận trong 18 năm với hơn 180.000 công thức và hơn 1.000.000 lượt tương tác).

Cơ sở lý thuyết và phương pháp

Đồ án tổng hợp ba hướng tiếp cận chính trong hệ thống tư vấn:

  • Lọc dựa trên nội dung (Content-based filtering): Khuyến nghị sản phẩm dựa trên sự tương đồng về đặc tính giữa sản phẩm mới và sản phẩm người dùng từng đánh giá cao trong quá khứ. Phương pháp này có ưu điểm là không phụ thuộc vào số lượng người dùng lớn, nhưng tồn tại nhược điểm là quá tập trung chuyên ngành (over-specialization) và gặp khó khăn trong việc trích chọn đặc trưng đối với dữ liệu đa phương tiện.
  • Lọc cộng tác (Collaborative filtering - CF): Dự đoán sở thích của một người dùng dựa trên phản hồi của những người dùng khác có cùng thị hiếu. CF bao gồm hai nhóm: dựa trên bộ nhớ (memory-based) và dựa trên mô hình (model-based). Ưu điểm của CF là tính toán nhanh, không cần mô tả thuộc tính nội dung tường minh. Tuy nhiên, phương pháp này gặp phải ba hạn chế lớn: vấn đề người dùng mới (New User Problem), vấn đề sản phẩm mới (New Item Problem) và vấn đề dữ liệu thưa (Sparsity Data Problem).
  • Phương pháp lai ghép (Hybrid): Kết hợp hai phương pháp trên nhằm bổ trợ khiếm khuyết cho nhau.

Để giải quyết tình trạng ma trận đánh giá bị thưa và giảm số chiều dữ liệu, tác giả sử dụng thuật toán phân tích suy biến SVD (do Gene Golub và William Kahan giới thiệu năm 1965). Về mặt toán học, một ma trận thực $A_{m \times n}$ được phân tích thành tích của ba ma trận: $$A_{m \times n} = U_{m \times m} \Sigma_{m \times n} (V_{n \times n})^T$$ Trong đó, $U$ và $V$ là các ma trận trực giao; $\Sigma$ là ma trận đường chéo chứa các giá trị suy biến (singular values) $\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r > 0$, với $r = \text{rank}(A)$. Bản chất các giá trị $\sigma_i$ chính là căn bậc hai của các trị riêng của ma trận nửa xác định dương $A A^T$ (thu được từ phép phân rã phổ Eigen Decomposition $A A^T = U \Sigma \Sigma^T U^{-1}$).

Về mặt hình học, phép biến đổi SVD trải qua ba giai đoạn: xoay không gian (nhân với ma trận trực giao $U$), co giãn độ lớn các chiều theo các trị riêng trên đường chéo chính (nhân với ma trận $\Sigma$) và xoay không gian một lần nữa (nhân với ma trận chuyển vị $V^T$). Để tối ưu hóa chi phí tính toán và không gian lưu trữ trên ma trận lớn, tác giả trình bày hai biến thể:

  • Compact SVD: Chỉ giữ lại $r$ cột đầu tiên của $U$, $V$ và ma trận con $\Sigma_r$ bậc $r \times r$ tương ứng với các trị riêng khác 0 ($A = U_r \Sigma_r V_r^T$).
  • Truncated SVD: Giữ lại $k < r$ giá trị suy biến lớn nhất để xấp xỉ ma trận $A \approx A_k = U_k \Sigma_k V_k^T$. Sai số chuẩn Frobenius giữa ma trận gốc $A$ và ma trận xấp xỉ $A_k$ được xác định theo định lý: $$|A - A_k|F^2 = \sum{i=k+1}^n \sigma_i^2$$ Đây đồng thời là nghiệm tối ưu của bài toán Best low-rank Approximation nhằm tìm ma trận hạng $k$ xấp xỉ tốt nhất với ma trận gốc theo chuẩn Frobenius.

Khi áp dụng vào hệ thống tư vấn món ăn, SVD trích xuất các tính chất ẩn (latent features) liên kết giữa người dùng và món ăn (chẳng hạn như nhóm nguyên liệu, lượng calo, hoặc các đặc tính kết hợp). Món ăn được biểu diễn bằng vector $x$, người dùng được mô tả bằng vector $w$. Dự báo mức độ yêu thích được tính thông qua tích vô hướng $x \cdot w$.

Nguồn dữ liệu thực nghiệm được lấy từ bộ dữ liệu công khai Food.com Recipes and Interactions, gồm hai tệp dữ liệu chính: RAW_interactions.csv (chứa các trường user_id, recipe_id, date, rating, review) và RAW_recipes.csv (chứa thông tin chi tiết về món ăn).

Thiết kế và triển khai

Hệ thống được thiết kế theo mô hình kiến trúc phân tán gồm ba thành phần độc lập:

  • Client: Ứng dụng di động hoạt động trên hệ điều hành Android, có nhiệm vụ tiếp nhận thao tác của người dùng, hiển thị danh sách món ăn, chi tiết công thức, bảng dinh dưỡng và gửi các đánh giá, thông tin đăng ký lên hệ thống máy chủ.
  • Database: Hệ quản trị cơ sở dữ liệu quan hệ chịu trách nhiệm lưu trữ thông tin tài khoản, danh mục món ăn, công thức nấu và toàn bộ lịch sử xếp hạng của người dùng.
  • RecSys: Thành phần dịch vụ phân tích được triển khai dưới dạng một Web Service API. RecSys sử dụng dữ liệu đánh giá từ Database để huấn luyện mô hình dự đoán bằng thuật toán SVD, sau đó tiếp nhận các truy vấn đề xuất từ Client và trả về danh sách mã món ăn phù hợp nhất.

Mô hình dữ liệu quan hệ của hệ thống bao gồm ba thực thể nòng cốt:

Tên bảng Trường dữ liệu Kiểu dữ liệu Mô tả
Account user_id
email
username
password
diet
int
varchar(100)
varchar(100)
varchar(100)
int
Khóa chính, mã định danh người dùng
Địa chỉ thư điện tử
Tên đăng nhập hệ thống
Mật khẩu xác thực
Chế độ ăn (ăn chay hoặc ăn mặn)
Receipt Receipt_id
Contributor_id
name
submitted
ingredients_id
steps_id
nutrition_id
food_type
int
int
varchar(50)
date
int
int
int
int
Khóa chính, mã định danh công thức
Mã người dùng đóng góp công thức
Tên món ăn
Thời gian gửi công thức
Mã liên kết bảng nguyên liệu
Mã liên kết bảng các bước thực hiện
Mã liên kết bảng thành phần dinh dưỡng
Phân loại món ăn (món chay hoặc món mặn)
Rating rating_id
user_id
receipt_id
rating
date
review
int
int
int
int
date
varchar(255)
Khóa chính, mã định danh đánh giá
Khóa ngoại, mã người dùng đánh giá
Khóa ngoại, mã công thức được đánh giá
Điểm xếp hạng từ 1 đến 5 sao
Thời điểm thực hiện đánh giá
Nội dung nhận xét chi tiết

Kiến trúc phần mềm phía ứng dụng di động được phân tách thành các tầng giao diện (View: ActivityLogin, ActivityHome, ActivityRecipeDetail, ActivityRating), tầng điều khiển (Controller: AccountController, RecipeController, RatingController), tầng truy xuất dữ liệu (DAO: AccountDAO, RecipeDAO, RatingDAO) và tầng mô hình nghiệp vụ (Model: Account, Profile, Recipe, Rating, Nutrition, Ingredient, Step).

Quy trình xử lý logic của các ca sử dụng chính:

  • Đăng ký và Đăng nhập: Khi đăng ký, người dùng khai báo thông tin cá nhân kèm chế độ ăn (diet: Non-Veg hoặc Veg) để hệ thống lọc các gợi ý ban đầu. Khi đăng nhập thành công, nếu là người dùng mới (chưa có dữ liệu đánh giá), hệ thống sẽ truy vấn danh sách các món ăn phổ biến nhất (được nhiều người đánh giá nhất) từ cơ sở dữ liệu để hiển thị lên màn hình chính (ActivityHome).
  • Xem chi tiết công thức: Giao diện ActivityRecipeDetail thể hiện đầy đủ các chỉ số dinh dưỡng (Calories, Total Fat, Sugar, Sodium, Protein, Saturated Fat, Carbohydrates), danh sách nguyên liệu (Ingredients), các bước thao tác (Instructions) và danh sách phản hồi từ các thành viên khác.
  • Đánh giá và Cập nhật tư vấn: Người dùng gửi đánh giá từ 1 đến 5 sao kèm bình luận thông qua ActivityRating. Nếu người dùng bỏ trống điểm và nhận xét, hệ thống tự động gán giá trị mặc định là 5 sao. Dữ liệu đánh giá mới lập tức được lưu vào cơ sở dữ liệu để RecSys tính toán lại vector đặc trưng, từ đó cập nhật các gợi ý tương đồng cho các phiên truy cập tiếp theo.

Nội dung chính theo từng chương

Chương 1: Xác định bài toán

Chương này khái quát hóa bài toán khuyến nghị thông tin trong kỷ nguyên số. Tác giả phân tích mô hình toán học tổng quát của hệ thống tư vấn với tập người dùng $U$, tập sản phẩm $I$ và tập tương tác $D = {u, i, r_{ui}}$, trong đó mục tiêu cốt lõi là ước lượng giá trị đánh giá kỳ vọng $\hat{r}_{ni}$ của người dùng $u_n$ đối với sản phẩm chưa từng trải nghiệm $i_m$. Dữ liệu đầu vào được phân loại thành dữ liệu rõ ràng (explicit data như điểm số đánh giá, hồ sơ người dùng) và dữ liệu ẩn (implicit data như hành vi xem, lịch sử thao tác).

Để làm rõ giá trị thực tiễn, chương 1 phân tích các hệ thống tư vấn quy mô lớn:

  • Netflix: Phục vụ hơn 208 triệu người dùng tại hơn 190 quốc gia với kho phim 13.000 tác phẩm; đội ngũ kỹ sư thiết lập cơ chế tái tính toán thuật toán cá nhân hóa theo chu kỳ 24 giờ một lần.
  • YouTube: Quản lý hơn 1 tỷ người dùng, giải quyết bài toán dữ liệu tải lên liên tục và chất lượng siêu dữ liệu kém bằng phương pháp lan truyền từ video hạt giống (seed video) kết hợp ba nhóm tín hiệu xếp hạng (chất lượng video, đặc trưng người dùng, đa dạng hóa); các video khuyến nghị chiếm khoảng 60% tổng số nhấp chuột trên trang chủ.
  • Amazon: Tăng khoảng 35% doanh thu thông qua tích hợp gợi ý xuyên suốt hành trình mua hàng, áp dụng thuật toán lọc cộng tác giữa các sản phẩm (item-to-item collaborative filtering) nhằm xử lý bài toán đuôi dài (Long-tail) và học cách xếp hạng (learning to rank).

Từ các cơ sở trên, tác giả xác định mục tiêu xây dựng hệ thống tư vấn món ăn nhằm loại bỏ sự băn khoăn khi lựa chọn thực đơn, hỗ trợ người dùng lọc món ăn theo khẩu vị và chế độ ăn.

Chương 2: Hệ thống tư vấn

Chương 2 tập trung đi sâu vào cơ sở lý thuyết giải thuật và tiến hành thử nghiệm mô hình toán học. Tác giả chứng minh chi tiết các tính chất của SVD, nguồn gốc tên gọi từ phép phân rã phổ của ma trận hiệp phương sai $AA^T$, cơ chế co giãn không gian qua ma trận đường chéo $\Sigma$ và định lý tối ưu hóa chuẩn sai số Frobenius khi cắt tỉa số chiều (Truncated SVD).

Nội dung trọng tâm của chương là quá trình thực nghiệm đánh giá thuật toán SVD trên tập dữ liệu Food.com:

  • Môi trường thử nghiệm phần cứng: Vi xử lý Intel Core i7, bộ nhớ trong RAM 16 GB, kiến trúc hệ điều hành 64-bit.
  • Môi trường phần mềm: Ngôn ngữ lập trình Python 3.5, môi trường phát triển Visual Studio Code, hệ điều hành Microsoft Windows 10, kết hợp các thư viện đại số tuyến tính numpy và thư viện học máy scikit-learn.
  • Tiền xử lý dữ liệu: Để đảm bảo mật độ đánh giá đủ cho thuật toán học các đặc trưng ẩn, tác giả tiến hành lọc dữ liệu từ tệp RAW_interactions.csv, chỉ giữ lại phản hồi của những người dùng có từ 50 lượt nhận xét trở lên. Tập dữ liệu sau lọc ghi nhận 606.866 lượt đánh giá của 2.755 người dùng.
  • Cấu trúc ma trận: Dữ liệu huấn luyện và kiểm thử được chuyển đổi thành ma trận đánh giá người dùng - công thức có kích thước $2.755 \times 186.021$.

Chỉ số đánh giá độ chính xác được lựa chọn là sai số bình phương trung bình (Root Mean Square Error - RMSE): $$\text{RMSE} = \sqrt{\frac{1}{n} \sum_{u,i} (r_{ui} - \hat{r}{ui})^2}$$ Trong đó $r{ui}$ là điểm đánh giá thực tế, $\hat{r}_{ui}$ là giá trị dự đoán do mô hình sinh ra và $n$ là tổng số lượt dự đoán. Kết quả thử nghiệm cho thấy mô hình đạt sai số rất thấp và sai số giảm dần khi tham số số chiều ẩn $k$ tăng lên.

Chương 3: Phát triển ứng dụng xem công thức nấu ăn

Chương 3 trình bày toàn bộ quá trình hiện thực hóa mô hình toán học thành sản phẩm phần mềm hoàn chỉnh. Tác giả xây dựng các sơ đồ thiết kế hệ thống theo chuẩn UML bao gồm: biểu đồ ca sử dụng tổng quát (Use Case Diagram), kịch bản chi tiết cho 4 chức năng cốt lõi (Đăng ký, Đăng nhập, Xem công thức món ăn, Đánh giá công thức món ăn), biểu đồ trạng thái (State Machine Diagram) mô tả các nhánh rẽ dữ liệu hợp lệ/không hợp lệ, biểu đồ lớp thiết kế chi tiết (Class Diagram) ánh xạ quan hệ giữa các tầng trong ứng dụng và các biểu đồ tuần tự (Sequence Diagram).

Phần cuối của chương trình bày các giao diện thực tế của ứng dụng trên thiết bị di động:

  • Giao diện đăng nhập và đăng ký: Tiếp nhận thông tin xác thực và tùy chọn chế độ ăn chay/mặn (diet).
  • Giao diện chính (Recipe Recommend): Liệt kê danh sách các món ăn được hệ thống tư vấn kèm hình ảnh minh họa, điểm đánh giá trung bình và số lượng người nhận xét.
  • Giao diện chi tiết công thức (Recipe Detail): Thể hiện định lượng dinh dưỡng chuẩn hóa, thành phần nguyên liệu, hướng dẫn nhiệt độ nấu (ví dụ: làm nóng lò ở 350°F) cùng lịch sử đánh giá của cộng đồng.
  • Giao diện đánh giá (Rating): Cho phép người dùng chấm điểm sao trực quan và nhập ý kiến nhận xét.

Kết quả và đóng góp

Nghiên cứu đạt được các kết quả cụ thể về mặt tính toán và phát triển ứng dụng:

Lần thử nghiệm Tham số số chiều ẩn ($k$) Sai số bình phương trung bình (RMSE)
1 10 0.0023
2 20 Giảm so với $k=10$
3 50 Giảm so với $k=20$
4 100 Đạt giá trị thấp nhất trong dải thử nghiệm

Dựa trên kết quả thực nghiệm, tác giả lựa chọn cấu hình $k = 100$ để tích hợp vào hệ thống nhằm khai thác tối đa sự tương đồng giữa các đặc trưng ẩn của món ăn và thị hiếu người dùng.

Các đóng góp chính được tác giả tự xác định bao gồm:

  • Hệ thống hóa cơ sở lý thuyết về bài toán phân rã ma trận trong hệ thống tư vấn, đặc biệt là việc chứng minh và áp dụng các định lý giảm chiều Truncated SVD để xử lý ma trận đánh giá thưa.
  • Thử nghiệm thành công mô hình SVD trên tập dữ liệu tương tác thực tế quy mô lớn của Food.com, chứng minh tính khả thi của thuật toán với chỉ số sai số dự đoán rất nhỏ.
  • Triển khai thành công kiến trúc tích hợp giữa mô hình học máy dạng Web Service API với ứng dụng di động Android, cung cấp giải pháp tra cứu và gợi ý món ăn có tính cá nhân hóa dựa trên thói quen ăn uống và điểm đánh giá thực tế.

Hạn chế và hướng nghiên cứu tiếp

Văn bản đồ án ghi nhận các hạn chế và hướng mở phát triển kỹ thuật như sau:

  • Hạn chế: Kỹ thuật phân rã ma trận SVD yêu cầu tính toán lại trên toàn bộ ma trận khi có lượng dữ liệu đánh giá mới phát sinh, đòi hỏi chi phí tài nguyên máy tính đáng kể nếu mở rộng hệ thống trong môi trường thời gian thực. Bên cạnh đó, các trường hợp người dùng mới hoặc công thức mới đưa vào hệ thống vẫn phải phụ thuộc vào danh mục phổ biến mà chưa thể cá nhân hóa sâu ngay từ đầu.
  • Hướng nghiên cứu tiếp: Tiếp tục tối ưu hóa thuật toán để tăng tốc độ xử lý khi quy mô dữ liệu mở rộng; hoàn thiện các mô hình cập nhật ma trận trực tuyến (online matrix factorization); phát triển thêm các tính năng tương tác chuyên sâu trên ứng dụng di động nhằm thu thập dữ liệu hành vi ẩn đa dạng hơn.

Giá trị tham khảo

Đồ án là tài liệu tham khảo hữu ích cho sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm và Khoa học dữ liệu đang thực hiện các khóa luận tốt nghiệp liên quan đến hệ thống khuyến nghị (Recommender Systems). Cụ thể:

  • Phần cơ sở toán học ở chương 2 cung cấp tài liệu giải thích chi tiết, chặt chẽ về phép biến đổi hình học SVD, phép phân rã phổ Eigen Decomposition và các định lý xấp xỉ ma trận hạng thấp (low-rank approximation).
  • Các kỹ sư phần mềm có thể tham khảo mô hình kiến trúc phân tầng kết nối giữa ứng dụng di động Android với dịch vụ phân tích học máy thông qua API, cùng hệ thống đặc tả biểu đồ tuần tự, biểu đồ lớp và kịch bản ca sử dụng được trình bày đầy đủ ở chương 3.

Câu hỏi thường gặp

1. Tác giả đã sử dụng tập dữ liệu nào để thử nghiệm thuật toán SVD và kích thước ma trận huấn luyện là bao nhiêu? Tác giả sử dụng tập dữ liệu Food.com Recipes and Interactions (gồm hơn 180.000 công thức và hơn 1.000.000 đánh giá). Sau khi lọc những người dùng có trên 50 lượt nhận xét, tập dữ liệu thực nghiệm còn lại 606.866 lượt đánh giá từ 2.755 người dùng, tạo thành ma trận đánh giá có kích thước $2.755 \times 186.021$.

2. Kết quả sai số RMSE của mô hình SVD đạt mức bao nhiêu trong các thử nghiệm? Tại giá trị tham số $k = 10$, sai số RMSE ghi nhận trong bảng số liệu là 0.0023. Khi tăng dần các mốc $k$ lên 20, 50 và 100, biểu đồ kết quả thử nghiệm cho thấy sai số RMSE tiếp tục giảm dần, và tác giả chọn mốc $k = 100$ để áp dụng vào hệ thống gợi ý.

3. Hệ thống xử lý bài toán "người dùng mới" (khi chưa có lịch sử đánh giá) như thế nào? Khi người dùng đăng nhập lần đầu tiên và chưa tạo bất kỳ đánh giá nào, ứng dụng sẽ tự động truy vấn và đề xuất các món ăn phổ biến nhất (những công thức có số lượt đánh giá nhiều nhất trong cơ sở dữ liệu), kết hợp lọc theo chế độ ăn (ăn chay hoặc ăn mặn) mà người dùng đã khai báo lúc đăng ký.

4. Môi trường phần cứng và phần mềm cụ thể được sử dụng để chạy thử nghiệm thuật toán là gì? Thử nghiệm được thực hiện trên máy tính trang bị vi xử lý Intel Core i7, RAM 16 GB, hệ điều hành Windows 10 64-bit; mã nguồn thuật toán viết bằng ngôn ngữ Python 3.5 trong môi trường VS Code, sử dụng hai thư viện đại số và học máy là numpy và sklearn.

5. Nếu người dùng gửi đánh giá nhưng bỏ trống số sao và nhận xét thì hệ thống xử lý ra sao? Theo kịch bản ca sử dụng đánh giá công thức, trong luồng ngoại lệ khi người dùng bỏ trống nhận xét và điểm số, ứng dụng sẽ tự động gán giá trị mặc định là 5 sao và không yêu cầu bổ sung nhận xét văn bản trước khi lưu vào cơ sở dữ liệu.

Kết luận

Đồ án tốt nghiệp của sinh viên Hoàng Tăng Khải đã giải quyết trọn vẹn bài toán tư vấn món ăn thông qua việc kết hợp giữa giải thuật phân tích suy biến SVD và mô hình ứng dụng di động phân tán. Bằng việc phân rã ma trận đánh giá trên tập dữ liệu Food.com, nghiên cứu đã chứng minh hiệu quả giảm chiều dữ liệu và đạt sai số dự đoán RMSE thấp ở các mức tham số $k$ khác nhau. Hệ thống phần mềm được thiết kế bài bản theo quy trình kỹ thuật phần mềm, tạo nên một giải pháp hoàn chỉnh từ khâu phân tích dữ liệu, tính toán thuật toán đến giao diện người dùng thực tế.