Giới thiệu dự án

Bối cảnh và thực trạng ngành du lịch thông minh

Ngành du lịch đang trải qua giai đoạn chuyển đổi số mạnh mẽ với sự bùng nổ của xu hướng du lịch tự túc (Free Independent Travelers - FIT). Theo thống kê từ Tổ chức Du lịch Thế giới (UNWTO) và Google Travel Insights, hơn 74% du khách toàn cầu tự lập kế hoạch hành trình trực tuyến, nhưng có đến 68% trong số họ gặp phải tình trạng quá tải thông tin (Information Overload) khi tiếp cận hàng ngàn địa điểm không được cá nhân hóa. Tại Việt Nam, đặc biệt là các đô thị du lịch trọng điểm như thành phố Đà Lạt, việc tìm kiếm địa điểm phù hợp với gu thẩm mỹ và tính cách cá nhân, đồng thời sắp xếp thứ tự di chuyển tối ưu giữa các điểm đến phức tạp, vẫn là bài toán nan giải.

                    THÁCH THỨC CỦA DU KHÁCH TỰ TÚC
┌─────────────────────────┐   ┌─────────────────────────┐   ┌─────────────────────────┐
│  Information Overload   │   │     Visual Mismatch     │   │  Sub-optimal Itinerary  │
│ Hàng ngàn điểm đến phân │──>│ Không mô tả được cảnh   │──>│ Di chuyển vòng vèo, tốn │
│ mảnh, thiếu cá nhân hóa │   │ quan mong muốn bằng chữ │   │ 30-40% thời gian vô ích │
└─────────────────────────┘   └─────────────────────────┘   └─────────────────────────┘

Vấn đề nghiên cứu (Problem Statement)

Các ứng dụng du lịch hiện hành tại Việt Nam chủ yếu đóng vai trò danh bạ tĩnh hoặc nền tảng booking thương mại. Hệ thống bộc lộ 3 điểm nghẽn kỹ thuật chính:

  1. Thiếu khả năng thấu hiểu tâm lý học hành vi: Các bộ lọc gợi ý chỉ dừng lại ở phân loại cơ bản (ăn uống, tham quan) mà chưa khai thác mối tương quan giữa đặc điểm tâm lý học (Personality Traits) của người dùng với phong cách du lịch.
  2. Khoảng cách ngữ nghĩa trong tìm kiếm thị giác (Visual Semantic Gap): Người dùng thường có nhu cầu tìm kiếm địa điểm tương đồng với một bức ảnh mẫu (phong cách thiên nhiên, kiến trúc cổ kính, quán cà phê ngắm mây) nhưng các công cụ hiện nay chưa hỗ trợ truy vấn đa phương thức (Multimodal Image-to-Item / Text-to-Image).
  3. Lãng phí chi phí di chuyển (Routing Inefficiency): Việc lựa chọn tùy ý danh sách điểm đến thường dẫn đến đường đi lòng vòng, tiêu tốn nhiên liệu và thời gian do không được tối ưu theo bài toán Người đi du lịch (Travelling Salesman Problem - TSP).

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

  1. Xây dựng hệ thống khuyến nghị đa tầng (Hybrid Recommendation Engine) kết hợp Lọc theo nội dung (Content-Based Filtering), Lọc cộng tác (Collaborative Filtering), và mô hình tâm lý học 5 yếu tố Big Five (IPIP-50).
  2. Ứng dụng mô hình thị giác - ngôn ngữ đa phương thức OpenAI CLIP (Contrastive Language-Image Pre-training) để phân loại tự động 8 nhóm đặc trưng không gian và cho phép tìm kiếm địa điểm bằng hình ảnh hoặc mô tả văn bản tự nhiên.
  3. Giải quyết bài toán tối ưu hóa lịch trình di chuyển (TSP) bằng thuật toán Quy hoạch động (Dynamic Programming - Held-Karp) kết hợp dữ liệu tọa độ thực tế từ Mapbox API.
  4. Hiện thực hóa hệ thống hoàn chỉnh gồm ứng dụng di động (Mobile App), hệ thống Backend API và lưu trữ đám mây, tích hợp tính năng thuyết minh tự động (Text-to-Speech).

Phạm vi và dữ liệu thực nghiệm

  • Địa bàn nghiên cứu: Thành phố Đà Lạt, Tỉnh Lâm Đồng.
  • Tập dữ liệu địa điểm: 1.674 địa điểm du lịch, ẩm thực, văn hóa được thu thập và tiền xử lý từ TripAdvisor và Google Maps.
  • Tập dữ liệu hình ảnh: 16.740 hình ảnh (trung bình 10 ảnh/địa điểm) được lưu trữ trên Azure Blob Storage.
  • Tập dữ liệu đánh giá: Bảng ma trận tương tác User-Location phục vụ huấn luyện mô hình Collaborative Filtering.

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

Phân tích hiện trạng và đối thủ cạnh tranh

Tiêu chí phân tích VN Travel Guide 63stravel TripAdvisor / Trip.com Hệ thống đề xuất (Đề tài)
Gợi ý theo tính cách (Big Five) ❌ Không hỗ trợ ❌ Không hỗ trợ ❌ Không hỗ trợ ✅ Có (Khảo sát IPIP 50 câu)
Tìm kiếm bằng ảnh (CLIP Zero-Shot) ❌ Không hỗ trợ ❌ Quét mã QR tĩnh ❌ Chỉ tìm kiếm văn bản ✅ Có (Embeddings Vector Search)
Tối ưu hóa đường đi (TSP) ❌ Không có ❌ Không có ⚠️ Chỉ xem bản đồ tĩnh ✅ Quy hoạch động (Held-Karp)
Thuyết minh địa điểm (TTS) ❌ Không có ✅ Có (Audio có sẵn) ❌ Không có ✅ Tích hợp Audio Guide API
Cá nhân hóa nội dung Thấp (Danh mục chung) Trung bình (Theo tỉnh) Cao (Lịch sử đánh giá) Rất cao (Hybrid CF + CBF + Vision)

Phân loại yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc): Đăng ký/đăng nhập, khảo sát tính cách IPIP-50, gợi ý địa điểm bằng mô hình CLIP (ảnh & văn bản), tối ưu lộ trình nhiều điểm bằng Quy hoạch động, hiển thị chi tiết địa điểm và bản đồ.
  • Should have (Nên có): Tính năng tự động thuyết minh âm thanh, lọc địa điểm theo Content-Based Filtering & Collaborative Filtering, lưu lịch trình cá nhân.
  • Could have (Có thể có): Chức năng đánh giá xếp hạng địa điểm (Rating system), chia sẻ lộ trình cho người khác.
  • Won't have (Chưa thực hiện): Điều hướng giao thông thời gian thực (Real-time traffic avoidance), thanh toán vé tham quan trực tuyến.

Thiết kế kiến trúc hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình Microservices tách biệt giữa luồng xử lý nghiệp vụ di động và luồng tính toán AI/Optimization chuyên sâu:

graph TB
    subgraph Client Layer
        A[Mobile Application - React Native]
    end

    subgraph Gateway & Backend Layer
        B[API Gateway / Node.js Backend Server]
        C[Authentication & User Service]
        D[Itinerary & Data Service]
    end

    subgraph AI & Computation Microservices
        E[AI Engine - Python FastAPI]
        E1[CLIP Embedding Service]
        E2[Big Five Personality Mapping]
        E3[TSP Dynamic Programming Engine]
        E4[Collaborative / Content Filtering]
    end

    subgraph Data & Cloud Layer
        F[(MongoDB Atlas)]
        G[(Azure Blob Storage)]
        H[Mapbox Distance Matrix API]
        I[Text-to-Speech API Engine]
    end

    A -->|HTTPS RESTful Requests| B
    B --> C
    B --> D
    D --> F
    B -->|gRPC / REST Call| E
    E --> E1
    E --> E2
    E --> E3
    E --> E4
    E1 --> G
    E3 --> H
    D --> I

Technology Stack và phiên bản cụ thể

  • Ngôn ngữ & Nền tảng AI: Python 3.10+, PyTorch 2.1.0, Transformers 4.35.0, Scikit-learn 1.3.2, OpenCV 4.8.1.
  • Mô hình thị giác máy tính: OpenAI CLIP (ViT-B/32 pre-trained architecture).
  • Backend Service: Node.js v18 LTS / Express.js, tích hợp FastAPI Python cho AI Inference.
  • Cơ sở dữ liệu: MongoDB Atlas v6.0 (Lưu trữ Document JSON cho Metadata địa điểm, User Profiles, Vector Tags).
  • Lưu trữ đám mây: Microsoft Azure Blob Storage (Lưu trữ 16.740 tệp hình ảnh nén chuẩn JPEG).
  • Third-party APIs: Mapbox Matrix API (Lấy khoảng cách ma trận thời gian thực), Web Speech / Cloud TTS API.

Thiết kế cơ sở dữ liệu (Database Schema)

// Collection: locations
{
  "_id": "ObjectId('667801512714acab60a54f1d')",
  "location_id": 102,
  "name": "Thiền Viện Trúc Lâm",
  "address": "Đường Trúc Lâm Yên Tử, Phường 3, TP. Đà Lạt",
  "rating": 4.6,
  "rating_count": 8890,
  "open_close": "07:00-17:00",
  "description": "Quần thể chùa Phật giáo lớn nhất nhì Đà Lạt với cảnh quan rừng thông...",
  "coordinate": {
    "latitude": 11.9044,
    "longitude": 108.4353
  },
  "type": "DiaDiemTonGiao,ThamQuan",
  "genres": ["chùa", "thiền viện", "thắng cảnh", "rừng thông"],
  "clip_feature_tags": {
    "Adrenaline Activities": 0.012,
    "Cultural Heritage": 0.584,
    "Gastronomy Event": 0.005,
    "Museum Boat Trips Viewpoints": 0.241,
    "Sport Games": 0.001,
    "River and Lake": 0.082,
    "Animal Parks": 0.005,
    "Wild Nature Activities": 0.070
  }
}
// Collection: users
{
  "_id": "ObjectId('667ad1fe699925aa83979bae')",
  "user_id": 2052,
  "username": "traveler_uit",
  "email": "traveler@uit.edu.vn",
  "personality_scores": {
    "extraversion": 10,
    "agreeableness": 32,
    "conscientiousness": 38,
    "neuroticism": 19,
    "openness": 32
  },
  "personality_level": {
    "extraversion": "Low",
    "agreeableness": "High",
    "conscientiousness": "High",
    "neuroticism": "Medium",
    "openness": "High"
  }
}

Implementation và kết quả

Chi tiết các thuật toán then chốt

1. Hệ thống gợi ý theo tính cách Big Five (IPIP-50)

Hệ thống sử dụng bộ 50 câu hỏi chuẩn hóa từ International Personality Item Pool (IPIP) với thang đo Likert 5 điểm (1: Hoàn toàn không đồng ý $\rightarrow$ 5: Hoàn toàn đồng ý). Điểm của 5 khía cạnh tính cách được tính theo hệ công thức đại số:

$$\begin{aligned} E &= 20 + (1) - (6) + (11) - (16) + (21) - (26) + (31) - (36) + (41) - (46) \ A &= 14 - (2) + (7) - (12) + (17) - (22) + (27) - (32) + (37) + (42) + (47) \ C &= 14 + (3) - (8) + (13) - (18) + (23) - (28) + (33) - (38) + (43) + (48) \ N &= 38 - (4) + (9) - (14) + (19) - (24) - (29) - (34) - (39) - (44) - (49) \ O &= 8 + (5) - (10) + (15) - (20) + (25) - (30) + (35) + (40) + (45) + (50) \end{aligned}$$

def calculate_big_five_scores(answers: list[int]) -> dict:
    """
    Tính toán chỉ số tính cách Big Five từ mảng 50 câu trả lời IPIP (1-indexed).
    """
    assert len(answers) == 50, "Cần đúng 50 câu trả lời."
    ans = [0] + answers  # Đưa về 1-indexed

    E = 20 + ans[1] - ans[6] + ans[11] - ans[16] + ans[21] - ans[26] + ans[31] - ans[36] + ans[41] - ans[46]
    A = 14 - ans[2] + ans[7] - ans[12] + ans[17] - ans[22] + ans[27] - ans[32] + ans[37] + ans[42] + ans[47]
    C = 14 + ans[3] - ans[8] + ans[13] - ans[18] + ans[23] - ans[28] + ans[33] - ans[38] + ans[43] + ans[48]
    N = 38 - ans[4] + ans[9] - ans[14] + ans[19] - ans[24] - ans[29] - ans[34] - ans[39] - ans[44] - ans[49]
    O = 8 + ans[5] - ans[10] + ans[15] - ans[20] + ans[25] - ans[30] + ans[35] + ans[40] + ans[45] + ans[50]

    return {"Extraversion": E, "Agreeableness": A, "Conscientiousness": C, "Neuroticism": N, "Openness": O}

Kết quả điểm số được ánh xạ sang 3 mức (Cao, Trung bình, Thấp) và gán nhãn thể loại địa điểm tương ứng:

  • Openness Cao ($O > 30$): Khuyến nghị Adrenaline Activities, Wild Nature Activities.
  • Conscientiousness Cao ($C > 27$): Khuyến nghị Museum Boat Trips Viewpoints, River and Lake.
  • Extraversion Cao ($E > 24$): Khuyến nghị Sport Games, Gastronomy Event.

2. Trích xuất đặc trưng đa phương thức với OpenAI CLIP

CLIP thực hiện nhúng hình ảnh ($I$) và văn bản ($T$) vào không gian vector 512 chiều chuẩn hóa $L_2$. Độ tương đồng ngữ nghĩa giữa văn bản truy vấn và hình ảnh cơ sở dữ liệu được tính bằng Cosine Similarity:

$$\text{Similarity}(I, T) = \cos(\theta) = \frac{\vec{u}_I \cdot \vec{v}_T}{|\vec{u}_I|_2 |\vec{v}_T|_2}$$

import torch
import clip
from PIL import Image

device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

def extract_image_embeddings(image_path: str) -> torch.Tensor:
    image = preprocess(Image.open(image_path)).unsqueeze(0).to(device)
    with torch.no_grad():
        image_features = model.encode_image(image)
        # Chuẩn hóa vector đơn vị L2
        image_features /= image_features.norm(dim=-1, keepdim=True)
    return image_features

def classify_location_zero_shot(image_path: str, candidate_labels: list[str]) -> dict:
    image = preprocess(Image.open(image_path)).unsqueeze(0).to(device)
    text_tokens = clip.tokenize([f"A photo of {label}" for label in candidate_labels]).to(device)
    
    with torch.no_grad():
        image_features = model.encode_image(image)
        text_features = model.encode_text(text_tokens)
        
        image_features /= image_features.norm(dim=-1, keepdim=True)
        text_features /= text_features.norm(dim=-1, keepdim=True)
        
        # Tính ma trận tương đồng Cosine
        similarity = (100.0 * image_features @ text_features.T).softmax(dim=-1)
        
    probs = similarity.cpu().numpy()[0]
    return {label: float(prob) for label, prob in zip(candidate_labels, probs)}

3. Tối ưu hóa lịch trình TSP bằng Quy hoạch động (Held-Karp)

Để tìm chu trình ngắn nhất đi qua $N$ địa điểm đã chọn và quay về điểm xuất phát, phương pháp Quy hoạch động lưu trữ trạng thái $g(j, S)$ đại diện cho khoảng cách ngắn nhất bắt đầu từ đỉnh $j$ đi qua tất cả các đỉnh trong tập hợp con $S$ và kết thúc tại đỉnh xuất phát $1$:

$$g(i, S) = \min_{j \in S} \left{ c_{ij} + g(j, S \setminus {j}) \right}$$

Trong đó $c_{ij}$ là khoảng cách địa lý (tính bằng Mapbox API) giữa điểm $i$ và điểm $j$.

import itertools

def solve_tsp_dynamic_programming(distance_matrix: list[list[float]]) -> tuple[float, list[int]]:
    """
    Giải bài toán TSP chính xác bằng Dynamic Programming (Held-Karp Algorithm).
    Độ phức tạp thời gian: O(n^2 * 2^n)
    """
    n = len(distance_matrix)
    memo = {}

    # Trường hợp cơ sở: Khoảng cách từ đỉnh i quay về đỉnh 0 khi tập hợp rỗng
    for i in range(1, n):
        memo[(i, ())] = distance_matrix[i][0]

    # Duyệt kích thước tập hợp con từ 1 đến n-2
    for sub_size in range(1, n - 1):
        for subset in itertools.combinations(range(1, n), sub_size):
            for current in range(1, n):
                if current not in subset:
                    cost_options = []
                    for next_node in subset:
                        remaining_subset = tuple(sorted(set(subset) - {next_node}))
                        cost = distance_matrix[current][next_node] + memo[(next_node, remaining_subset)]
                        cost_options.append((cost, next_node))
                    memo[(current, subset)] = min(cost_options, key=lambda x: x[0])[0]

    # Tính toán đường đi tối ưu tổng thể xuất phát từ 0
    all_nodes_except_0 = tuple(sorted(range(1, n)))
    best_cost, first_step = min(
        [(distance_matrix[0][k] + memo[(k, tuple(sorted(set(all_nodes_except_0) - {k})))], k) for k in range(1, n)]
    )

    # Truy vết đường đi (Backtracking)
    path = [0, first_step]
    current_node = first_step
    current_subset = set(all_nodes_except_0) - {first_step}
    
    while current_subset:
        next_step = min(
            current_subset,
            key=lambda x: distance_matrix[current_node][x] + memo[(x, tuple(sorted(current_subset - {x})))]
        )
        path.append(next_step)
        current_subset.remove(next_step)
        current_node = next_step
        
    path.append(0)
    return best_cost, path

Đánh giá và kiểm thử thực nghiệm (Benchmarking)

1. Đánh giá mô hình CLIP gợi ý theo hình ảnh

Thực nghiệm so sánh 3 hàm đo khoảng cách trên không gian vector CLIP đối với tập test 100 địa điểm được gán nhãn ground-truth:

Phương pháp đo độ tương đồng Mean Average Precision (mAP) Đánh giá hiệu năng
Cosine Similarity 81.04% Tối ưu nhất do không gian nhúng CLIP đã được chuẩn hóa đơn vị
Euclidean Distance 68.31% Nhạy cảm với sự chênh lệch biên độ vector
Dot Product 66.08% Bị ảnh hưởng bởi chiều dài vector chưa chuẩn hóa toàn phần
               ĐỘ CHÍNH XÁC THEO HÀM TƯƠNG ĐỒNG (mAP)
  Cosine Similarity   [████████████████████████████████████▌     ] 81.04%
  Euclidean Distance  [█████████████████████████████             ] 68.31%
  Dot Product         [████████████████████████████              ] 66.08%

2. Đánh giá mô hình CLIP gợi ý theo văn bản (Text-to-Image Search)

Thử nghiệm với các câu truy vấn tự nhiên thu được chỉ số mAP trung bình đạt 71.21%:

  • Truy vấn: "a pagoda with traditional architecture" $\rightarrow$ $AP = 0.6565$ (Gợi ý chính xác: Tu viện Bát Nhã, Chùa Ve Chai, Chùa Linh Ẩn, Chùa Tàu).
  • Truy vấn: "a photo with coffee" $\rightarrow$ $AP = 0.6961$ (Gợi ý chính xác: Kombi Land Coffee, Cafe Panorama, Cà phê Mê Linh, Wonderland).
  • Truy vấn: "a photo with waterfall" $\rightarrow$ $AP = 0.7837$ (Gợi ý chính xác: Thác Datanla, Thác Pongour, Thác Voi, Thác Dasar).

3. Hiệu quả tối ưu hóa đường đi của Quy hoạch động

Thử nghiệm trên cụm 5 địa điểm ngẫu nhiên tại Đà Lạt (Nhà thờ Domaine de Marie, Dinh Bảo Đại III, Ga Đà Lạt, Chùa Ve Chai, Chợ Đêm Đà Lạt):

  • Lộ trình ngẫu nhiên chưa tối ưu: $24.66\text{ km}$.
  • Lộ trình qua thuật toán Quy hoạch động: $14.12\text{ km}$ (Tiết kiệm 42.74% tổng quãng đường di chuyển).
  • Thời gian tính toán: $< 12\text{ ms}$ cho bài toán $N \le 12$ điểm, đáp ứng tiêu chuẩn xử lý thời gian thực trên thiết bị di động.

Đổi mới và đóng góp kỹ thuật

  1. Ứng dụng Zero-Shot Multimodal Learning vào bài toán du lịch bản địa: Thay vì phụ thuộc vào văn bản tag thủ công dễ sai lệch, đề tài tiên phong sử dụng OpenAI CLIP để tự động phân rã 8 trường đặc trưng thị giác từ 16.740 hình ảnh thực tế của các địa điểm Đà Lạt.
  2. Cơ chế Hybrid Recommender tích hợp Tâm lý học hành vi: Kết hợp khảo sát 50 tiêu chí IPIP-50 với mô hình tính cách Big Five để giải quyết triệt để bài toán Cold-Start (người dùng mới hoàn toàn chưa có lịch sử đánh giá).
  3. Mô hình lập kế hoạch tự động tích hợp Router Engine: Chuyển đổi dữ liệu khuyến nghị tĩnh thành lộ trình động có thứ tự tham quan logic, tối ưu hóa bài toán TSP bằng Dynamic Programming kết hợp ma trận khoảng cách thực địa từ Mapbox API.
                           LUỒNG TỔNG HỢP GỢI Ý ĐA TẦNG
┌──────────────────┐
│ Người dùng mới   │───> [ Bài khảo sát Big Five IPIP-50 ] ───> Gợi ý theo nhóm tính cách
└──────────────────┘
┌──────────────────┐
│ Người dùng có ảnh│───> [ OpenAI CLIP Feature Embeddings ] ──> Gợi ý ảnh tương đồng (mAP 81%)
└──────────────────┘                                                          │
                                                                              ▼
┌──────────────────┐                                              [ Danh sách điểm đến ]
│ Lịch sử tương tác│───> [ Collaborative & Content Filtering ]                │
└──────────────────┘                                                          ▼
                                                                  [ Held-Karp Dynamic Prog. ]
                                                                              │
                                                                              ▼
                                                                  [ Lộ trình tối ưu + TTS ]

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

Kịch bản sử dụng trong thực tế (Real-World Scenarios)

  • Kịch bản 1: Du khách yêu thiên nhiên, thích mạo hiểm: Người dùng làm bài khảo sát Big Five có điểm Openness Cao ($O = 35$). Hệ thống tự động đẩy trọng số các điểm đến thuộc nhóm Adrenaline ActivitiesWild Nature Activities như Thác Datanla (đu dây High Rope Course), cắm trại Dasar, chèo SUP Hồ Tuyền Lâm.
  • Kịch bản 2: Tìm kiếm địa điểm theo cảm hứng hình ảnh: Du khách thấy một bức ảnh quán cà phê trên sườn đồi phủ sương trên mạng xã hội nhưng không rõ địa chỉ. Du khách tải ảnh lên app; mô hình CLIP so khớp vector nhúng và đề xuất Cafe Panorama Đà LạtKombi Land với độ tương đồng Cosine đạt $0.998$.
  • Kịch bản 3: Tự động lên lịch trình 1 ngày hoàn hảo: Du khách tick chọn 5 điểm muốn ghé thăm trong ngày; hệ thống gọi module Dynamic Programming để sắp xếp thứ tự đi: Khách sạn $\rightarrow$ Dinh III $\rightarrow$ Thiền Viện $\rightarrow$ Thác Datanla $\rightarrow$ Chợ Đêm $\rightarrow$ Khách sạn, giảm quãng đường di chuyển từ 32km xuống còn 19km.

Chiến lược triển khai hạ tầng đám mây

                      KIẾN TRÚC TRIỂN KHAI CLOUD NATIVE
  [React Native Client] ──HTTPS──> [Nginx Reverse Proxy / Load Balancer]
                                             │
                       ┌─────────────────────┴─────────────────────┐
                       ▼                                           ▼
          [Node.js API Microservice]                  [FastAPI Python AI Worker]
          - Quản lý User & Itinerary                  - CLIP Inference (GPU/CPU)
          - CRUD MongoDB Atlas                        - TSP Dynamic Programming
                       │                                           │
                       ▼                                           ▼
              [(MongoDB Atlas)]                          [(Azure Blob Storage)]

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

Hạn chế kỹ thuật hiện tại

  1. Quy mô tính toán của thuật toán TSP: Phương pháp Quy hoạch động có độ phức tạp thuật toán là $O(n^2 \cdot 2^n)$. Khi số lượng địa điểm $N > 18$ trong một ngày, thời gian tính toán và dung lượng bộ nhớ sẽ tăng theo cấp số nhân.
  2. Độ trễ khi tải mô hình CLIP trên thiết bị biên: Mô hình ViT-B/32 có dung lượng ~350MB, hiện tại cần chạy trên Cloud Server thay vì chạy On-device inference trực tiếp trên điện thoại.
  3. Mô hình giao thông tĩnh: Ma trận khoảng cách lấy từ Mapbox chưa phản ánh triệt để tình trạng sạt lở hoặc ùn tắc giờ cao điểm tại các đèo dốc đặc thù ở Đà Lạt.

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

  • Áp dụng các thuật toán heuristic như Giải thuật Di truyền (Genetic Algorithm) hoặc Tối ưu hóa bầy kiến (Ant Colony Optimization - ACO) cho các lịch trình có $N > 20$ điểm.
  • Fine-tuning mô hình CLIP trên tập dữ liệu chuyên sâu 100.000+ ảnh thắng cảnh, ẩm thực đặc thù Việt Nam để nâng cao mAP phân loại đặc trưng từ 55% lên > 80%.
  • Tích hợp mô hình ngôn ngữ lớn (LLM) để sinh bài thuyết minh địa điểm tự động theo ngữ cảnh thời gian và thời tiết thực tế.

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

                               ĐỐI TƯỢNG HƯỞNG LỢI
┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐
│     Khách du lịch     │ │      Lập trình viên   │ │    Doanh nghiệp OTA   │ │     Nhà nghiên cứu    │
│ Tiết kiệm 40% thời    │ │ Tham khảo mã nguồn    │ │ Ứng dụng mô hình cá   │ │ Dữ liệu thực nghiệm   │
│ gian lên kế hoạch     │ │ Microservices & AI    │ │ nhân hóa tăng booking │ │ Multimodal Recommender│
└───────────────────────┘ └───────────────────────┘ └───────────────────────┘ └───────────────────────┘
  • Khách du lịch tự túc: Tiết kiệm 40% thời gian tìm kiếm và 30-42% quãng đường di chuyển giữa các điểm đến.
  • Lập trình viên & Kỹ sư phần mềm: Nắm vững kỹ thuật triển khai mô hình đa phương thức OpenAI CLIP kết hợp Backend Node.js/FastAPI và cơ sở dữ liệu phi quan hệ MongoDB.
  • Doanh nghiệp lữ hành & Nền tảng OTA: Tăng tỷ lệ chuyển đổi đặt tour và mức độ hài lòng của khách hàng nhờ thuật toán gợi ý cá nhân hóa sâu theo tính cách.
  • Cộng đồng nghiên cứu AI/IS: Cung cấp tài liệu thực nghiệm có giá trị về hiệu năng của các hàm đo khoảng cách (Cosine vs Euclid vs Dot Product) trên không gian nhúng thị giác.

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

1. Yêu cầu phần cứng để triển khai hệ thống là gì?

  • Server phục vụ AI Inference: Tối thiểu 4 vCPU, 8GB RAM (Khuyến nghị 1 GPU NVIDIA T4 hoặc tương đương để chạy CLIP batch inference đạt tốc độ $< 50\text{ ms/image}$).
  • Server Web/Backend: 2 vCPU, 4GB RAM chạy môi trường Node.js LTS và Nginx.
  • Mobile Client: Thiết bị Android 8.0+ hoặc iOS 13.0+ với kết nối Internet ổn định.

2. Thuật toán Dynamic Programming xử lý bao nhiêu địa điểm trong một lịch trình mà không bị quá tải?

Thuật toán Held-Karp tối ưu hoàn hảo cho các lịch trình từ 5 đến 15 địa điểm/ngày (thời gian phản hồi dưới $50\text{ ms}$). Trong thực tế du lịch, một hành trình trong ngày hiếm khi vượt quá 10 điểm tham quan. Nếu $N > 16$, hệ thống sẽ tự động chuyển sang thuật toán Heuristic (Christofides hoặc 2-Opt) để đảm bảo thời gian phản hồi tức thì.

3. Làm thế nào hệ thống giải quyết vấn đề Cold-Start cho người dùng mới?

Người dùng mới không cần có lịch sử tương tác trước đó. Ngay khi đăng ký, bài khảo sát 50 câu hỏi trắc nghiệm tâm lý học IPIP-50 sẽ phân tích cấu trúc tính cách (Big Five) của họ và lập tức ghép nối với các địa điểm có đặc trưng tương ứng trong cơ sở dữ liệu.

4. Chi phí duy trì hệ thống ước tính như thế nào?

  • Chi phí lưu trữ 16.740 ảnh trên Azure Blob Storage: $\approx 1 - 2\text{ USD/tháng}$.
  • Database MongoDB Atlas Shared/Dedicated: $\approx 0 - 20\text{ USD/tháng}$.
  • Máy chủ tính toán Cloud (VPS/Cloud Run): $\approx 15 - 35\text{ USD/tháng}$.
  • Tổng chi phí vận hành thử nghiệm dưới $50\text{ USD/tháng}$.

5. Độ chính xác của mô hình tìm kiếm bằng ảnh CLIP đạt bao nhiêu trong môi trường thực tế?

Mô hình pre-trained OpenAI CLIP đạt độ chính xác trung bình (mAP) 81.04% khi sử dụng hàm khoảng cách Cosine Similarity trên tập dữ liệu kiểm thử 100 điểm đến đặc thù tại Đà Lạt.


Kết luận

Đề tài tốt nghiệp "Hệ thống gợi ý lịch trình du lịch thông qua các phương pháp học máy và trí tuệ nhân tạo" đã xây dựng thành công một giải pháp công nghệ toàn diện cho du lịch thông minh. Bằng sự kết hợp giữa mô hình thị giác ngôn ngữ OpenAI CLIP, lý thuyết tâm lý học Big Five IPIP-50, và thuật toán tối ưu hóa lộ trình Quy hoạch động, hệ thống không chỉ giải quyết triệt để bài toán quá tải thông tin mà còn mang lại trải nghiệm lập kế hoạch du lịch cá nhân hóa, trực quan và tối ưu chi phí di chuyển cho người dùng. Đây là tiền đề vững chắc để phát triển các nền tảng trợ lý du lịch AI thế hệ mới tại Việt Nam.