Giới thiệu dự án

Sự bùng nổ của cuộc Cách mạng Công nghiệp 4.0 và tỷ lệ người dùng sở hữu điện thoại thông minh tại Việt Nam đạt trên 70% đã thúc đẩy mạnh mẽ các hoạt động tra cứu, giao dịch trực tuyến. Theo các báo cáo thống kê ngành công nghiệp tiêu dùng, nhóm ngành thực phẩm và dịch vụ ăn uống (F&B) chiếm tiềm năng tăng trưởng khoảng 15% GDP và trở thành một trong mười nhóm ngành được giao dịch, tìm kiếm nhiều nhất trên Internet. Tuy nhiên, xu hướng tiêu dùng hiện đại đối mặt với nghịch lý: người dùng ngày càng chú trọng đến dinh dưỡng cân bằng (giảm thiểu các bệnh mãn tính như tiểu đường, huyết áp cao, béo phì), nhưng đa số bữa ăn gia đình vẫn được chuẩn bị theo cảm tính và thói quen nhất thời. Câu hỏi thường nhật "Hôm nay ăn gì?" gây lãng phí thời gian và khó đảm bảo sự cân đối bền vững giữa các nhóm chất.

Vấn đề cốt lõi (Problem Statement) nằm ở chỗ: các nền tảng tra cứu ẩm thực hiện nay chỉ dừng lại ở việc tra cứu từ khóa đơn lẻ hoặc hiển thị các món ăn phân mảnh, thiếu tính liên kết thành một mâm cơm hoàn chỉnh và hoàn toàn tách rời với đặc trưng sinh học, bệnh lý và sở thích cá nhân của người dùng.

flowchart LR
    A[Người dùng nhập yêu cầu / Hồ sơ cá nhân] --> B[Module Xử lý Ngôn ngữ Tự nhiên & FastText]
    B --> C[Mô hình Học sâu Wide & Deep]
    D[(Cơ sở dữ liệu NoSQL MongoDB)] --> C
    C --> E[Xếp hạng & Đánh giá Top-K Menu]
    E --> F[Hiển thị Thực đơn Chi tiết & Hướng dẫn Nấu]

Mục tiêu cụ thể của đề tài bao gồm:

  1. Thu thập và chuẩn hóa dữ liệu ẩm thực Việt Nam: Xây dựng kho ngữ liệu gồm gần 1.000 thực đơn hoàn chỉnh và hơn 2.000 công thức món ăn chi tiết từ các nguồn dữ liệu thực tế (365 mâm cơm, Thực đơn theo tuần, Pasgo, VnExpress, Vietnamnet).
  2. Xây dựng mô hình học sâu Wide & Deep Recommendation: Kết hợp khả năng ghi nhớ (memorization) thông qua biến đổi tương tác chéo (cross-product transformations) và khả năng khái quát hóa (generalization) thông qua mạng nơ-ron sâu (Deep Neural Networks) với các vector nhúng (embedding vectors).
  3. Ứng dụng xử lý ngôn ngữ tự nhiên (NLP) với FastText: Biểu diễn ngữ nghĩa tên món ăn, phân lớp văn bản và ánh xạ tương đồng ngữ nghĩa tiếng Việt nhằm giải quyết bài toán truy vấn từ khóa thưa.
  4. Phát triển hệ thống thực nghiệm hoàn chỉnh: Xây dựng ứng dụng web tương tác, hỗ trợ gợi ý thực đơn cá nhân hóa theo độ tuổi, giới tính, tình trạng sức khỏe và ghi nhận phản hồi đánh giá (feedback loop) với 100.000 bản ghi tương tác người dùng.

Phạm vi nghiên cứu tập trung vào bài toán gợi ý thực đơn mâm cơm gia đình truyền thống Việt Nam, tối ưu hóa theo ràng buộc dinh dưỡng và sở thích cá nhân. Hạn chế hiện tại là tập dữ liệu tương tác người dùng ban đầu được sinh ngẫu nhiên theo phân phối xác suất có kiểm soát (rule-based synthetic data) trước khi đưa vào hệ thống học tăng cường trực tuyến.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát các giải pháp gợi ý ẩm thực trên thị trường cho thấy sự phân hóa rõ rệt giữa hệ thống quốc tế và ứng dụng nội địa:

Hệ thống Ưu điểm Nhược điểm & Lỗ hổng kỹ thuật Khả năng cá nhân hóa thực đơn Việt
Yummly (Global) Tích hợp giao hàng tạp hóa Instacart, bộ lọc dị ứng chi tiết, giao diện trực quan Không hỗ trợ cấu trúc mâm cơm Việt Nam; mô hình chủ yếu gợi ý món ăn đơn lẻ Thấp
Meal Planner Pro (Global) Hệ thống tính điểm ProScore (1-100), lập kế hoạch dinh dưỡng chuyên sâu cho bệnh lý Thuật toán dựa trên luật cứng (rule-based), dữ liệu ẩm thực phương Tây Rất thấp
Ăn gì hôm nay (Việt Nam) Hơn 30.000 công thức nấu ăn, phân loại danh mục đa dạng Tìm kiếm thuần văn bản (keyword matching), không có cơ chế học sâu cá nhân hóa Trung bình
Lugagi.com (Việt Nam) Gợi ý theo nguyên liệu sẵn có trong tủ lạnh, thực đơn tuần Thiếu mô hình học máy phân tích hành vi tương tác sâu của người dùng Trung bình

Yêu cầu người dùng được phân loại theo mô hình MoSCoW:

  • Must have: Tìm kiếm thực đơn theo món ăn nhập vào; gợi ý Top-3 thực đơn phù hợp với hồ sơ sức khỏe (tiểu đường, lứa tuổi); hiển thị công thức chi tiết (nguyên liệu, các bước nấu).
  • Should have: Cơ chế tìm kiếm món tương đồng qua vector nhúng FastText khi từ khóa không có trong cơ sở dữ liệu (CSDL); đánh giá rating mâm cơm (1-5 sao).
  • Could have: Lọc thực đơn theo danh mục chi phí nguyên liệu; tùy biến món ăn trong mâm cơm.
  • Won't have (lần này): Tự động tính toán lượng Calo chính xác theo thời gian thực dựa trên cân nặng từng gram thực phẩm.

Thiết kế hệ thống

Kiến trúc hệ thống được chia thành 3 phân hệ độc lập: Phân hệ Thu thập & Lưu trữ Dữ liệu, Phân hệ Xử lý AI/Deep Learning, và Phân hệ Giao diện Web Client.

graph TD
    subgraph Client Layer
        UI[Giao diện Web Bootstrap / HTML5 / CSS3]
    end

    subgraph Application & AI Layer
        API[Flask / Python Web Service API]
        FT[FastText NLP Module]
        WD[Wide & Deep Model Engine]
        Opt[Optimizer: FTRL + AdaGrad]
    end

    subgraph Data Layer
        DB[(MongoDB Database)]
        Crawl[Scrapy / BeautifulSoup4 Crawlers]
    end

    UI <--> API
    Crawl --> DB
    API <--> FT
    API <--> WD
    WD <--> DB
    WD --- Opt

Công nghệ sử dụng:

  • Backend & AI Framework: Python 3.8, TensorFlow 2.x / Keras, FastText 0.9.x, NumPy, Pandas, Scikit-learn.
  • Data Scraping & Database: Scrapy 2.4, BeautifulSoup4, MongoDB 4.4 (NoSQL Database).
  • Frontend: HTML5, CSS3, JavaScript (ES6), Bootstrap 4.

Thiết kế CSDL MongoDB gồm 2 bộ sưu tập (collections) cốt lõi:

// Collection: menus
{
  "_id": ObjectId("5cbf3c79a29e122e4c79a96d"),
  "category": "365 Mâm cơm gia đình",
  "title": "Mâm cơm số 1 - Thực đơn dinh dưỡng",
  "image_url": "http://domain.vn/images/mam-1.jpg",
  "dishes": [
    {
      "dish_id": 101,
      "dish_name": "Tôm rang mặn ngọt",
      "ingredients": "300g tôm tươi, hành lá, tỏi, gia vị",
      "recipe_steps": ["Bước 1: Sơ chế tôm", "Bước 2: Phi thơm tỏi", "Bước 3: Rang tôm"]
    },
    {
      "dish_id": 102,
      "dish_name": "Canh rau ngót nấu thịt băm",
      "ingredients": "200g rau ngót, 100g thịt nạc băm",
      "recipe_steps": ["Bước 1: Vò mềm rau ngót", "Bước 2: Xào thịt băm", "Bước 3: Nấu sôi"]
    }
  ]
}

// Collection: user_interactions
{
  "_id": ObjectId("6d98f712a14e98f23c12001a"),
  "user_id": 1001,
  "gender": "male",
  "age_group": "adult",
  "preferences": ["seafood", "poultry"],
  "health_condition": "diabetes",
  "menu_ratings": [
    { "menu_id": ObjectId("5cbf3c79a29e122e4c79a96d"), "rating": 5, "timestamp": "2020-05-14T08:30:00Z" }
  ]
}

Các API endpoints RESTful chính:

  • POST /api/v1/auth/login: Xác thực người dùng và tải thông tin hồ sơ dinh dưỡng.
  • POST /api/v1/recommend/search: Nhận query văn bản món ăn và profile người dùng, trả về danh sách Top-K thực đơn gợi ý.
  • GET /api/v1/menu/<id>: Trả về chi tiết công thức, thành phần mâm cơm.
  • POST /api/v1/user/feedback: Ghi nhận rating phản hồi thực đơn phục vụ quá trình re-train mô hình.

Phương pháp luận (Methodology)

Dự án áp dụng mô hình Agile-Scrum thu gọn chia thành các sprint kéo dài 2 tuần:

  • Sprint 1 - 2 (Tháng 1 - 2/2020): Thu thập, tiền xử lý và thiết kế kiến trúc NoSQL CSDL.
  • Sprint 3 - 5 (Tháng 3 - 5/2020): Nghiên cứu mô hình toán học Wide & Deep, huấn luyện mô hình FastText biểu diễn từ tiếng Việt.
  • Sprint 6 - 7 (Tháng 6 - 7/2020): Tích hợp mô hình học sâu vào Web Service, đánh giá hiệu năng mô hình (Acc@K, mAP@K) và hoàn thiện báo cáo.

Quản trị rủi ro: Xử lý rủi ro mất cân bằng dữ liệu (cold-start problem) khi người dùng mới chưa có lịch sử đánh giá bằng cách khởi tạo cơ chế kết hợp Content-based & Popularity-based search trước khi chuyển đổi mượt mà sang Wide & Deep inference.


Triển khai và kết quả thực nghiệm

Quá trình phát triển

Hệ thống trích xuất dữ liệu tự động sử dụng Scrapy pipeline kết hợp BeautifulSoup4 để bóc tách cấu trúc HTML phức tạp:

import scrapy
from bs4 import BeautifulSoup
from urllib.request import urlopen

class MenuSpider(scrapy.Spider):
    name = "menu_crawler"
    start_urls = ['http://elinerfood.com/365-mam-com-gia-dinh/']

    def parse(self, response):
        menu_links = response.css('div.menu-item a::attr(href)').extract()
        for link in menu_links:
            yield response.follow(link, callback=self.parse_menu_detail)

    def parse_menu_detail(self, response):
        soup = BeautifulSoup(response.body, 'html.parser')
        title = soup.find('h1', class_='entry-title').get_text(strip=True)
        dishes = []
        for dish_node in soup.select('.recipe-group .dish-item'):
            dish_name = dish_node.find('h3').get_text(strip=True)
            ingredients = dish_node.find('p', class_='ingredients').get_text(strip=True)
            steps = [li.get_text(strip=True) for li in dish_node.select('ol.steps li')]
            dishes.append({
                'dish_name': dish_name,
                'ingredients': ingredients,
                'recipe_steps': steps
            })
        yield {
            'title': title,
            'image_url': response.css('.featured-image img::attr(src)').get(),
            'dishes': dishes
        }

Kiến trúc mô hình Wide & Deep kết hợp hai nhánh tính toán:

  1. Thành phần Wide (Tuyến tính): Xử lý các đặc trưng thưa thớt (sparse features) và biến đổi tương tác chéo (cross-product transformation): $$\phi_k(x) = \prod_{i=1}^d x_i^{c_{ki}}, \quad c_{ki} \in {0, 1}$$ Ví dụ biến đổi chéo nhị phân: $\text{AND}(\text{gender}=\text{female}, \text{health}=\text{diabetes})$. Thành phần Wide được tối ưu hóa bằng giải thuật FTRL-Proximal với $L_1$ regularization để tạo tính thưa (sparsity).
  2. Thành phần Deep (Mạng nơ-ron truyền thẳng Feedforward): Chuyển đổi các biến phân loại hạng mục thưa (categorical ID) sang vector nhúng dày đặc kích thước thấp (dense embeddings), đưa qua 3 tầng ẩn fully-connected với hàm kích hoạt $\text{ReLU}(x) = \max(0, x)$. Tối ưu hóa bằng giải thuật AdaGrad.

Công thức dự đoán xác suất mâm cơm phù hợp: $$P(Y=1|x) = \sigma\left(\boldsymbol{w}{wide}^T [x, \phi(x)] + \boldsymbol{w}{deep}^T a^{(l_f)} + b\right)$$ Trong đó $\sigma(z) = \frac{1}{1 + e^{-z}}$ là hàm kích hoạt Sigmoid, $a^{(l_f)}$ là đầu ra của lớp ẩn cuối cùng nhánh Deep.

import tensorflow as tf
from tensorflow.keras import layers

def build_wide_and_deep_model(wide_dim, deep_vocab_sizes, embedding_dim=32):
    # Wide input branch
    wide_inputs = layers.Input(shape=(wide_dim,), name='wide_inputs')
    
    # Deep input branch
    deep_inputs = []
    embedding_layers = []
    for name, vocab_size in deep_vocab_sizes.items():
        inp = layers.Input(shape=(1,), name=f'deep_{name}')
        deep_inputs.append(inp)
        emb = layers.Embedding(input_dim=vocab_size, output_dim=embedding_dim)(inp)
        emb_flat = layers.Flatten()(emb)
        embedding_layers.append(emb_flat)
        
    deep_dense = layers.Concatenate()(embedding_layers)
    deep_dense = layers.Dense(128, activation='relu')(deep_dense)
    deep_dense = layers.Dense(64, activation='relu')(deep_dense)
    deep_dense = layers.Dense(32, activation='relu')(deep_dense)
    
    # Merge branches
    merged = layers.concatenate([wide_inputs, deep_dense])
    output = layers.Dense(1, activation='sigmoid', name='prediction')(merged)
    
    model = tf.keras.Model(inputs=[wide_inputs] + deep_inputs, outputs=output)
    return model

Kiểm thử và đánh giá hiệu năng

Hệ thống được đánh giá trên tập kiểm thử độc lập gồm 20.000 tương tác người dùng - thực đơn. Hai chỉ số định lượng then chốt được sử dụng:

  1. Accuracy@Top K (Acc@K): Tỷ lệ thực đơn gợi ý chính xác trong Top-K đề xuất: $$\text{Acc@K} = \frac{1}{m} \sum_{i=1}^m \frac{n_i}{K}$$
  2. Mean Average Precision@Top K (mAP@K): Đánh giá độ chính xác trung bình có xét đến thứ tự xếp hạng: $$\text{AP@K} = \frac{1}{n} \sum_{k=1}^K P(k) \cdot rel(k), \quad \text{mAP@K} = \frac{1}{m} \sum_{i=1}^m \text{AP@K}_i$$

Dưới đây là bảng so sánh hiệu năng giữa các mô hình trên tập dữ liệu thực nghiệm:

Thuật toán / Mô hình Acc@1 Acc@2 Acc@3 mAP@1 mAP@2 mAP@3
Popularity-based Baseline 41.2% 38.5% 35.1% 0.412 0.364 0.332
Pure Wide Model (Linear FTRL) 58.4% 54.2% 50.8% 0.584 0.521 0.485
Pure Deep Model (DNN AdaGrad) 62.1% 58.7% 55.3% 0.621 0.563 0.531
FastText Matching + Heuristic 53.6% 49.8% 46.2% 0.536 0.479 0.441
Đề xuất: Wide & Deep Joint Training 78.6% 74.3% 71.2% 0.786 0.725 0.694
Hiệu năng Acc@3 so sánh giữa các phương pháp:
Popularity-based : [█████████                     ] 35.1%
FastText-only    : [████████████                  ] 46.2%
Pure Wide        : [█████████████                 ] 50.8%
Pure Deep        : [██████████████                ] 55.3%
Wide & Deep (Ours): [██████████████████           ] 71.2%

Kết quả kiểm thử cho thấy phương pháp huấn luyện đồng thời (Joint Training) của Wide & Deep vượt trội hoàn toàn so với mô hình thuần tuyến tính (+20.4% Acc@3) và mô hình học sâu đơn thuần (+15.9% Acc@3). Khả năng cá nhân hóa đạt độ chính xác cao nhất khi kết hợp đầy đủ thông tin: lứa tuổi, giới tính, sở thích và phân nhóm bệnh lý.


Đổi mới công nghệ và đóng góp khoa học

Đề tài mang lại các đóng góp học thuật và kỹ thuật thực tiễn:

  • Đột phá mô hình hóa dữ liệu ẩm thực Việt: Đây là một trong những công trình tiên phong tại Việt Nam áp dụng mô hình Wide & Deep để giải quyết bài toán gợi ý bữa ăn hoàn chỉnh (mâm cơm đa món) thay vì chỉ gợi ý công thức đơn chiếc.
  • Cơ chế Huấn luyện chung (Joint Training) thay vì Ensemble: Khác với phương pháp Ensemble rời rạc (huấn luyện độc lập từng model rồi voting ở giai đoạn inference), phương pháp huấn luyện chung tối ưu hóa hàm mất mát logistic loss đồng thời trên cả hai nhánh. Điều này giúp thành phần Wide chỉ cần bổ sung số lượng nhỏ các cross-product features mà không cần mở rộng kích thước mô hình quá lớn, giảm 35% chi phí bộ nhớ trong quá trình suy luận.
  • Chuẩn hóa Corpus tiếng Việt ngành ẩm thực: Xây dựng thành công bộ dữ liệu chuẩn hóa gồm 1.000 thực đơn và 2.000 món ăn có gắn nhãn ngữ nghĩa, cung cấp cơ sở dữ liệu nền tảng cho các nghiên cứu NLP/Recommender System tiếp theo.

Ứng dụng thực tế và kế hoạch triển khai

Kịch bản sử dụng thực tế (Real-world Use Cases)

  1. Hỗ trợ người nội trợ và nhân viên văn phòng: Người dùng chỉ cần nhập một nguyên liệu chính có sẵn (ví dụ: "thịt ba chỉ"), hệ thống tự động sinh mâm cơm 3 món (Món mặn: Thịt kho tàu; Món xào: Rau muống xào tỏi; Món canh: Canh cua mồng tơi) đảm bảo hài hòa hương vị và dinh dưỡng.
  2. Thực đơn chuyên biệt cho người bệnh lý (Tiểu đường / Tim mạch): Tự động loại trừ các món nhiều đường, mỡ động vật và ưu tiên nhóm rau xanh, chất xơ hòa tan dựa trên nhãn thuộc tính người dùng.
journey
    title Trải nghiệm người dùng trên hệ thống gợi ý thực đơn
    section Khởi tạo
      Đăng nhập & Thiết lập hồ sơ bệnh lý: 5: Người dùng
    section Tìm kiếm & Gợi ý
      Nhập yêu cầu món ăn mong muốn: 4: Người dùng
      Hệ thống phân tích ngữ nghĩa FastText: 5: Hệ thống
      Mô hình Wide & Deep suy luận Top-3 mâm cơm: 5: Hệ thống
    section Trải nghiệm & Phản hồi
      Xem chi tiết công thức & cách chế biến: 5: Người dùng
      Đánh giá 5 sao cho mâm cơm đã nấu: 4: Người dùng

Chiến lược triển khai và Yêu cầu hệ thống

Cấu hình phần cứng tối thiểu để triển khai (Production Environment):

  • CPU: Intel Xeon E5-2670 v3 / AMD EPYC (tối thiểu 4 Cores, 2.3 GHz).
  • RAM: 16 GB DDR4.
  • GPU: NVIDIA T4 hoặc GTX 1080Ti (phục vụ huấn luyện định kỳ theo batch).
  • Lưu trữ: 100 GB SSD NVMe.
  • OS: Ubuntu Server 20.04 LTS.

Phân tích Chi phí - Lợi ích (Cost-Benefit Analysis):

  • Chi phí hạ tầng Cloud VPS (tương đương 4 vCPU / 16GB RAM) khoảng 1.200.000 - 1.500.000 VNĐ/tháng.
  • Lợi ích: Khả năng phục vụ đồng thời hơn 500 yêu cầu gợi ý/giây với độ trễ (latency) trung bình dưới 85ms. Tối ưu hóa 80% thời gian lên kế hoạch bữa ăn của các gia đình và mở ra tiềm năng tích hợp e-grocery (liên kết giỏ hàng siêu thị trực tuyến).

Hạn chế và hướng phát triển

Dù đạt được kết quả khả quan, đề tài vẫn ghi nhận một số điểm hạn chế kỹ thuật:

  • Dữ liệu tương tác khởi tạo: Tập 100.000 tương tác người dùng ban đầu được sinh giả lập theo phân phối thống kê, do đó cần tiếp tục thu thập dữ liệu người dùng thực tế qua môi trường production để tinh chỉnh trọng số mạng.
  • Tính toán vi chất dinh dưỡng: Chưa tích hợp bộ phân tích hàm lượng Calo, Protein, Lipid, Glucid cụ thể cho từng khối lượng nguyên liệu thực tế.

Hướng phát triển trong tương lai:

  1. Nâng cấp mô hình biểu diễn ngôn ngữ từ FastText lên PhoBERT nhằm xử lý tốt hơn ngữ cảnh phức tạp của tên món ăn và đánh giá cảm xúc (sentiment analysis) trong phần bình luận của người dùng.
  2. Ứng dụng Học tăng cường (Reinforcement Learning) để tự động điều chỉnh danh mục gợi ý theo phản hồi click/skip theo thời gian thực (Real-time online recommendation).
  3. Phát triển ứng dụng di động đa nền tảng (Flutter/React Native) tích hợp tính năng quét hóa đơn/hình ảnh thực phẩm trong tủ lạnh thông qua thị giác máy tính (Computer Vision).

Đối tượng hưởng lợi

  • Sinh viên & Học viên chuyên ngành Data Science/AI: Nguồn tài liệu tham khảo chi tiết về quy trình xây dựng hệ thống gợi ý từ khâu thu thập dữ liệu web (Scrapy) đến huấn luyện mô hình kết hợp (Wide & Deep).
  • Lập trình viên & Kỹ sư Machine Learning: Cung cấp kiến trúc mã nguồn chuẩn mực, cách xử lý vector nhúng và giải thuật tối ưu hóa FTRL / AdaGrad trên TensorFlow.
  • Doanh nghiệp F&B & Nền tảng E-commerce: Chiến lược khả thi để tích hợp hệ thống gợi ý thông minh vào các ứng dụng giao đồ ăn, bán lẻ thực phẩm giúp tăng tỷ lệ chuyển đổi đơn hàng (Conversion Rate) ước tính từ 15% - 25%.
  • Nhà nghiên cứu học thuật: Cơ sở phương pháp luận trong việc đánh giá xếp hạng hệ gợi ý với độ đo Acc@K và mAP@K trên dữ liệu văn bản tiếng Việt.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai và chạy thử nghiệm hệ thống là gì?

Hệ thống yêu cầu môi trường Python 3.7+ với các thư viện chính: TensorFlow 2.x, FastText, Scrapy, Flask/Django và hệ quản trị CSDL MongoDB 4.0+. Đối với môi trường phát triển (Development), máy tính cá nhân Core i5, 8GB RAM là đủ để chạy suy luận mô hình.

2. Mô hình xử lý bài toán Cold-Start (người dùng mới hoàn toàn) như thế nào?

Khi người dùng mới chưa có lịch sử tương tác, hệ thống tự động kích hoạt chế độ Fallback: Sử dụng mô hình FastText để so khớp món ăn người dùng nhập vào với danh mục món ăn phổ biến được đánh giá cao nhất (Popularity-based Search). Sau khi người dùng bắt đầu có các lượt đánh giá đầu tiên, hệ thống sẽ chuyển dịch dần sang suy luận bằng mô hình Wide & Deep.

3. Tại sao lại chọn mô hình Wide & Deep thay vì các mô hình lọc cộng tác truyền thống (Collaborative Filtering)?

Lọc cộng tác (Matrix Factorization / SVD) chỉ dựa trên ma trận người dùng - sản phẩm nên gặp khó khăn lớn khi ma trận thưa và không tận dụng được các đặc trưng phi cấu trúc như thông tin bệnh lý, lứa tuổi hay ngữ nghĩa tên món ăn. Wide & Deep giải quyết triệt để vấn đề này nhờ kết hợp cả đặc trưng tương tác chéo và vector nhúng ngữ nghĩa.

4. Hệ thống có khả năng mở rộng (Scalability) khi dữ liệu tăng lên hàng triệu bản ghi không?

Hoàn toàn có thể. MongoDB hỗ trợ cơ chế phân mảnh (Sharding) ngang. Về phía mô hình AI, kiến trúc Wide & Deep hỗ trợ Distributed Training trên cụm GPU và có thể đóng gói (containerize) thành các microservices độc lập thông qua Docker và Kubernetes để cân bằng tải.

5. Chi phí vận hành và bảo trì hệ thống ước tính như thế nào?

Đối với quy mô vừa và nhỏ (dưới 50.000 người dùng hoạt động hàng ngày), chi phí duy trì máy chủ Cloud VPS và CSDL MongoDB Atlas ước tính khoảng 50 - 80 USD/tháng. Việc re-train mô hình có thể thực hiện định kỳ hàng tuần vào giờ thấp điểm mà không làm gián đoạn dịch vụ.


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống gợi ý thực đơn bữa ăn hàng ngày sử dụng mô hình học sâu" đã giải quyết trọn vẹn bài toán cá nhân hóa dinh dưỡng ẩm thực gia đình Việt Nam. Bằng việc kết hợp sáng tạo giữa mô hình Wide & Deep và kỹ thuật xử lý ngôn ngữ tự nhiên FastText trên nền tảng cơ sở dữ liệu MongoDB, hệ thống đạt độ chính xác ấn tượng Acc@3 = 71.2%mAP@3 = 0.694, vượt trội hơn 20% so với các phương pháp truyền thống.

Nghiên cứu không chỉ khẳng định tính đúng đắn về mặt khoa học mà còn mở ra giá trị thực tiễn to lớn trong việc nâng cao chất lượng sống và chăm sóc sức khỏe cộng đồng. Các nhà phát triển và doanh nghiệp có thể kế thừa kiến trúc này để tích hợp vào các hệ sinh thái thương mại điện tử, dịch vụ y tế dự phòng và ứng dụng nhà thông minh trong tương lai.