Giới thiệu dự án

Sự bùng nổ của công nghệ số cùng biến động kinh tế - xã hội hậu đại dịch COVID-19 đã định hình lại thói quen mua sắm toàn cầu. Theo báo cáo thường niên của Facebook và Bain & Company (2021), tỷ lệ người dùng Internet tham gia mua sắm trực tuyến tại Việt Nam tăng trưởng vượt bậc từ 77% (năm 2019) lên 88% (năm 2020). Tuy nhiên, thị trường thương mại điện tử (TMĐT) phân mảnh với hàng loạt sàn giao dịch như Shopee, Tiki, Lazada, Sendo dẫn đến hiện tượng bất cân xứng thông tin, phân tán giá và xuất hiện tình trạng "giá ảo".

[Vấn đề cốt lõi]
Phân mảnh giá trên đa sàn TMĐT + Tình trạng nâng khống giá ("giá ảo")
[Hệ quả đối với người dùng]
Tốn thời gian tra cứu, nhiễu loạn thông tin khi tìm kiếm từ khóa dài/mơ hồ
[Giải pháp đề xuất trong đồ án]
Trang web so sánh giá tích hợp Mô hình Máy học (Deep Learning NLP - LSTM Many-to-One)
lọc trước danh mục (Subcategory ID) nhằm tối ưu hóa tốc độ và độ chính xác tìm kiếm.

Đồ án tốt nghiệp chuyên ngành Kỹ sư An toàn Thông tin / Mạng máy tính và Truyền thông (Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM) thực hiện bởi sinh viên Phạm Thạch Tú và Huỳnh Mạnh Hùng, dưới sự hướng dẫn của ThS. Trần Tuấn Dũng và ThS. Trần Thị Dung, tập trung giải quyết bài toán: "Áp dụng các thuật toán máy học trong việc so sánh giá các sản phẩm thương mại điện tử".

Mục tiêu của đề tài

  1. Đối với người tiêu dùng: Xây dựng cổng tra cứu thông tin minh bạch, giúp đối chiếu sản phẩm đa sàn theo thời gian thực và loại bỏ kết quả tìm kiếm không liên quan.
  2. Đối với chủ website: Khai thác mô hình tiếp thị liên kết (Affiliate Marketing) nhằm tối ưu doanh thu chuyển đổi từ dữ liệu giá đa sàn.
  3. Đối với cơ quan quản lý & kinh tế: Cung cấp cơ sở dữ liệu giá thị trường khách quan, phục vụ việc đối chiếu chỉ số kinh tế vĩ mô (GNP, GDP, FDI) và kiểm soát giá tiêu dùng.

Phương pháp tiếp cận và phạm vi nghiên cứu

  • Tiếp cận: Kết hợp kỹ thuật bóc tách dữ liệu web động (Dynamic Web Scraping bằng Selenium WebDriver & XPath) với mô hình Deep Learning xử lý ngôn ngữ tự nhiên (LSTM Many-to-One) nhằm phân loại truy vấn tìm kiếm vào đúng mã định danh danh mục (subcategory_id), thu hẹp không gian quét của cơ sở dữ liệu quan hệ.
  • Phạm vi triển khai: Hệ thống tập trung vào các mặt hàng bán lẻ phổ biến trên các nền tảng TMĐT hàng đầu tại Việt Nam.

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 nền tảng so sánh giá trực tuyến hiện hành tại thị trường Việt Nam cho thấy nhiều hạn chế về mặt trải nghiệm và tính khách quan:

Nền tảng Điểm mạnh Hạn chế cốt lõi Mức độ khách quan
Websosanh.vn Dữ liệu bao phủ rộng, nhiều bài viết hướng dẫn Thu phí gian hàng để hiển thị; xuất hiện gian hàng giá ảo, thiếu xác thực Trung bình
Topgia.vn Giao diện trực quan, không thu phí niêm yết gian hàng Chất lượng hình ảnh kém, tình trạng tồn kho khó theo dõi Cao
2momart.vn Chuyên sâu phân tích mỹ phẩm, đồ gia dụng, săn sale Danh mục hẹp, chưa bao phủ toàn diện các ngành hàng Khá
Golmart.vn Đầy đủ thông tin thiết bị số, giao diện phân vùng Chưa tối ưu bảng so sánh chi tiết giá theo phiên bản Khá

Yêu cầu người dùng theo mô hình MoSCoW

  • Must have: Tìm kiếm sản phẩm đa sàn, lọc theo danh mục chuẩn, phân loại câu truy vấn bằng Deep Learning, chuyển hướng mua hàng liên kết.
  • Should have: Sắp xếp theo giá tăng/giảm, lọc theo sàn TMĐT, hiển thị chi tiết thông số kỹ thuật.
  • Could have: Biểu đồ lịch sử biến động giá, gợi ý sản phẩm tương đương.
  • Won't have (giai đoạn này): Thanh toán trực tiếp trên hệ thống (chỉ điều hướng Affiliate).

Thiết kế hệ thống và công nghệ sử dụng

Hệ thống được thiết kế theo kiến trúc phân tầng rời rạc (Decoupled Architecture), giao tiếp thông qua RESTful API chuẩn JSON:

  • Frontend (Client-side):
    • ReactJS v17.x: Xây dựng Single Page Application (SPA) với Virtual DOM giúp tăng tốc độ render giao diện người dùng.
    • Redux Store: Quản lý tập trung luồng dữ liệu (Actions, Reducers, Store).
    • SASS (SCSS): Module hóa giao diện và tối ưu hóa CSS.
    • Axios: Xử lý HTTP Request bất đồng bộ.
  • Backend (Server-side):
    • Python v3.9+ & Django REST Framework v3.13+: Cung cấp RESTful endpoints chuẩn hóa, kiến trúc "Batteries-included" và bảo mật chống SQL Injection, XSS, CSRF.
    • PostgreSQL v14: Hệ quản trị cơ sở dữ liệu quan hệ mạnh mẽ, hỗ trợ đánh chỉ mục B-tree và Full-text search tối ưu.
  • Cơ sở dữ liệu (Database Schema):
-- Thiết kế các bảng dữ liệu cốt lõi
CREATE TABLE api_website (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    base_url VARCHAR(255) NOT NULL
);

CREATE TABLE api_subcategory (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    slug VARCHAR(255) UNIQUE NOT NULL
);

CREATE TABLE api_rawproduct (
    id SERIAL PRIMARY KEY,
    name VARCHAR(1000) NOT NULL,
    price NUMERIC(15, 2) NOT NULL,
    image_url TEXT NOT NULL,
    product_url VARCHAR(1000) NOT NULL,
    website_id INTEGER REFERENCES api_website(id) ON DELETE CASCADE,
    subcategory_id INTEGER REFERENCES api_subcategory(id) ON DELETE SET NULL
);
CREATE INDEX idx_rawproduct_subcat ON api_rawproduct(subcategory_id);

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

Dự án áp dụng mô hình Agile/Scrum rút gọn với chu kỳ Sprint 2 tuần:

  1. Giai đoạn 1 (Tuần 1 - 3): Phân tích nghiệp vụ, thiết kế crawler đa luồng sử dụng Selenium, thu thập 200.000+ bản ghi sản phẩm.
  2. Giai đoạn 2 (Tuần 4 - 6): Làm sạch văn bản, gán nhãn dataset 20.000 câu truy vấn, xây dựng và huấn luyện mô hình RNN/LSTM.
  3. Giai đoạn 3 (Tuần 7 - 9): Xây dựng RESTful API bằng Django REST Framework, tích hợp pipeline inference mô hình AI.
  4. Giai đoạn 4 (Tuần 10 - 12): Phát triển giao diện ReactJS, kiểm thử hiệu năng truy vấn, đánh giá độ chính xác và hoàn thiện hệ thống.

Implementation và kết quả

Quy trình thu thập dữ liệu và xử lý văn bản

Các sàn TMĐT hiện đại sử dụng công nghệ Client-side Rendering (CSR). Để vượt qua hạn chế của việc tải HTML tĩnh (như Scrapy thông thường), nhóm nghiên cứu triển khai Selenium WebDriver:

  • Giả lập hành vi cuộn trang (Infinite Scroll) của người dùng để kích hoạt các đoạn mã JavaScript tải thêm sản phẩm.
  • Truy vấn cấu trúc DOM thông qua biểu thức XPath: //div[contains(@class, 'product-item')]//span[@class='price']
  • Bộ lọc làm sạch dữ liệu (Data Sanitization): Xóa bỏ emoji, ký tự Unicode đặc biệt và escape các dấu nháy đơn (ví dụ: Men's fashion $\rightarrow$ Men\'s fashion) trước khi thực hiện câu lệnh chèn vào PostgreSQL.

Ứng dụng mô hình Deep Learning: Mạng nơ-ron hồi quy LSTM

Mạng RNN truyền thống gặp hiện tượng triệt tiêu đạo hàm (Vanishing Gradient) khi chuỗi văn bản đầu vào dài. Nhóm giải quyết bằng mô hình LSTM (Long Short-Term Memory) cấu trúc Many-to-One:

$$\begin{aligned} f_t &= \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) \quad \text{(Cổng quên - Forget Gate)} \ i_t &= \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) \quad \text{(Cổng vào - Input Gate)} \ \tilde{C}t &= \tanh(W_c \cdot [h{t-1}, x_t] + b_c) \quad \text{(Trạng thái tế bào ứng viên)} \ C_t &= f_t * C_{t-1} + i_t * \tilde{C}t \quad \text{(Cập nhật trạng thái tế bào)} \ o_t &= \sigma(W_o \cdot [h{t-1}, x_t] + b_o) \quad \text{(Cổng ra - Output Gate)} \ h_t &= o_t * \tanh(C_t) \quad \text{(Vector ẩn đầu ra)} \ y &= \text{softmax}(W_y h_t + b_y) \quad \text{(Xác suất Subcategory ID)} \end{aligned}$$

import torch
import torch.nn as nn

class QueryIntentLSTM(nn.Module):
    def __init__(self, vocab_size, embed_dim, hidden_dim, num_categories):
        super(QueryIntentLSTM, self).__init__()
        self.embedding = nn.Embedding(vocab_size, embed_dim)
        self.lstm = nn.LSTM(embed_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, num_categories)
        self.softmax = nn.LogSoftmax(dim=1)

    def forward(self, x):
        # x shape: (batch_size, seq_len)
        embedded = self.embedding(x)
        lstm_out, (ht, ct) = self.lstm(embedded)
        # Lấy hidden state cuối cùng (Many-to-One)
        last_hidden = ht[-1]
        out = self.fc(last_hidden)
        return self.softmax(out)

Đánh giá tối ưu hóa truy vấn cơ sở dữ liệu

Thực nghiệm trên tập dữ liệu 200.000 sản phẩm Shopee trong hệ thống PostgreSQL:

  • Truy vấn quét toàn bảng (Full Table Search không có Subcategory):
    SELECT * FROM api_rawproduct WHERE name LIKE '%i9082%';
    
    Thời gian thực thi: 156 ms (Cơ sở dữ liệu phải duyệt tuần tự toàn bộ 200.000 dòng dữ liệu).
  • Truy vấn kết hợp phân loại danh mục qua LSTM (subcategory_id = 105):
    SELECT * FROM api_rawproduct WHERE name LIKE '%i9082%' AND subcategory_id = 105;
    
    Thời gian thực thi: 41 ms (Sử dụng chỉ mục idx_rawproduct_subcat để khoanh vùng phân vùng dữ liệu).

[!IMPORTANT] Hiệu quả định lượng: Tốc độ phản hồi truy vấn giảm từ 156 ms xuống 41 ms, tương ứng với mức cải thiện hiệu năng 73,72%. Đồng thời, hệ thống triệt tiêu hoàn toàn các kết quả nhiễu (ví dụ: loại bỏ "Ốp lưng điện thoại Samsung" khi người dùng tìm kiếm "Điện thoại Samsung").


Đổi mới và đóng góp

  1. Cơ chế tìm kiếm 2 pha (Two-Phase Search Architecture): Thay vì áp dụng Full-Text Search đơn thuần gây tốn tài nguyên và dễ trả về sản phẩm phụ kiện không liên quan, hệ thống ứng dụng Deep Learning để phân loại ý định người dùng (Intent Classification) trước khi gửi truy vấn đến Database.
  2. Loại bỏ sự thiên lệch thương mại: Xây dựng thuật toán so khớp giá thuần túy dựa trên thuộc tính sản phẩm thực tế, không ưu tiên hiển thị theo mức phí tài trợ của gian hàng như các nền tảng thương mại truyền thống.
  3. Cải tiến tốc độ xử lý: Giảm hơn 73% độ trễ truy vấn cơ sở dữ liệu đối với tập dữ liệu quy mô lớn, tạo tiền đề mở rộng hệ thống lên hàng chục triệu sản phẩm.
[Mô hình truyền thống]

[Mô hình đồ án đề xuất]

Ứng dụng thực tế và triển khai

Trường hợp sử dụng thực tế (Real-world Use Cases)

  • Người tiêu dùng cá nhân: Tra cứu nhanh giá sản phẩm trước khi mua sắm trong các dịp kích cầu lớn (11/11, Black Friday).
  • Doanh nghiệp bán lẻ trực tuyến: Khảo sát giá thị trường của đối thủ để đưa ra chiến lược định giá cạnh tranh tự động.
  • Nhà phát triển Affiliate: Tự động hóa việc gắn tracking link tiếp thị liên kết trên từng sản phẩm tổng hợp.

Yêu cầu triển khai hạ tầng (Deployment Specifications)

  • Hệ điều hành: Ubuntu Server 20.04 LTS / 22.04 LTS.
  • Phần cứng tối thiểu: 4 vCPU, 8GB RAM, 50GB SSD NVMe (hỗ trợ lưu trữ vector và chỉ mục PostgreSQL).
  • Web Server & Gateway: Nginx Reverse Proxy kết hợp Gunicorn WSGI.
  • Môi trường: Docker Containers cô lập các service (Frontend, API Backend, Selenium Hub, PostgreSQL).

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

  • Hạn chế kỹ thuật:
    • Selenium tiêu tốn tài nguyên bộ nhớ (RAM) khi khởi chạy song song nhiều phiên trình duyệt.
    • Các sàn TMĐT thường xuyên thay đổi cấu trúc DOM và áp dụng tường lửa chống bot (Cloudflare, CAPTCHA).
    • Mô hình LSTM Many-to-One có thể gặp khó khăn với các câu truy vấn quá ngắn (1 từ) hoặc chứa từ lóng mới xuất hiện.
  • Hướng phát triển:
    • Chuyển đổi mô hình phân loại sang các kiến trúc Transformer tiên tiến dành riêng cho tiếng Việt như PhoBERT.
    • Xây dựng pipeline dữ liệu streaming thời gian thực bằng Apache Kafka và Scrapy-Splash / Playwright Headless.
    • Áp dụng thuật toán đối sánh thực thể (Entity Resolution / Record Linkage) để tự động gom cụm các biến thể sản phẩm (màu sắc, dung lượng) từ các sàn khác nhau vào cùng một trang so sánh duy nhất.

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


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

1. Yêu cầu hệ thống tối thiểu để triển khai toàn bộ mã nguồn đồ án là gì?

Máy chủ cần cài đặt sẵn Docker Engine 20.10+, Docker Compose, Python 3.9+, Node.js 16+, và PostgreSQL 14+. Cấu hình phần cứng khuyến nghị tối thiểu 4 vCPU và 8GB RAM để đảm bảo vận hành đồng thời Selenium Worker và Django REST API.

2. Làm thế nào để giải quyết vấn đề sàn thương mại điện tử chặn Crawler?

Cần áp dụng kỹ thuật xoay vòng Proxy (Rotating IP), ngẫu nhiên hóa User-Agent, thiết lập khoảng thời gian chờ ngẫu nhiên (Random Sleep Delay) giữa các lượt request, và ưu tiên khai thác API nội bộ của ứng dụng di động nếu có.

3. Tại sao chọn LSTM thay vì RNN tiêu chuẩn để phân loại tên sản phẩm?

RNN tiêu chuẩn gặp vấn đề mất gradient khi chuỗi từ khóa dài (ví dụ: "máy tính bảng samsung galaxy tab s7 fe chính hãng"). LSTM giải quyết triệt để nhờ các cổng (Forget, Input, Output Gates), giúp duy trì thông tin ngữ cảnh quan trọng xuyên suốt chuỗi từ.

4. Hệ thống có thể mở rộng (Scale) để xử lý hàng triệu sản phẩm không?

Có. Kiến trúc Django REST Framework tách rời cho phép mở rộng không trạng thái (Stateless Scaling). Tại tầng dữ liệu, PostgreSQL có thể áp dụng kỹ thuật phân vùng bảng (Table Partitioning) theo subcategory_id kết hợp Redis Caching cho các truy vấn phổ biến.

5. Chi phí vận hành và tiềm năng tạo doanh thu của mô hình như thế nào?

Chi phí duy trì hệ thống trên nền tảng đám mây (VPS/Cloud) dao động từ 30 - 50 USD/tháng. Nguồn thu chính đến từ hoa hồng tiếp thị liên kết (Affiliate Commission: 3% - 10% giá trị đơn hàng) và banner quảng cáo tài trợ từ các thương hiệu uy tín.


Kết luận

Đề tài tốt nghiệp "Áp dụng các thuật toán máy học trong việc so sánh giá các sản phẩm thương mại điện tử" của nhóm sinh viên Phạm Thạch Tú và Huỳnh Mạnh Hùng đã giải quyết bài toán phân mảnh thông tin giá trên thị trường TMĐT Việt Nam. Bằng việc kết hợp sáng tạo giữa công nghệ bóc tách dữ liệu web động và mô hình Deep Learning LSTM Many-to-One, đồ án đã nâng cao độ chính xác tìm kiếm và cải thiện 73,72% tốc độ truy vấn cơ sở dữ liệu.

Đây là tài liệu tham khảo giá trị cho các kỹ sư phần mềm, nhà nghiên cứu AI ứng dụng và sinh viên công nghệ thông tin trong việc xây dựng các hệ thống khai phá dữ liệu quy mô lớn. Bạn đọc quan tâm có thể tìm hiểu thêm về cấu trúc mạng LSTM và mã nguồn mở liên quan để mở rộng đề tài này lên các mô hình ngôn ngữ lớn (LLMs) trong tương lai.