Giới thiệu dự án

Bối cảnh và thực trạng ngành

Trong kỷ nguyên chuyển đổi số, thị trường tuyển dụng công nghệ thông tin (IT) tại Việt Nam chứng kiến sự phát triển bùng nổ nhưng cũng tồn tại nhiều nghịch lý. Theo số liệu thống kê từ Bộ Lao động - Thương binh và Xã hội, thị trường ghi nhận làn sóng hơn 150.000 lao động mất việc hoặc chuyển dịch cơ cấu việc làm, song song với sự xuất hiện của hơn 500 doanh nghiệp dịch vụ việc làm tư nhân và 82 trung tâm giới thiệu việc làm công lập. Dù số lượng cổng thông tin tuyển dụng trực tuyến (Job Portals) tăng trưởng mạnh mẽ, người tìm việc—đặc biệt là sinh viên mới tốt nghiệp hoặc chuẩn bị ra trường—phải đối mặt với tình trạng quá tải thông tin (Information Overload). Ngược lại, nhà tuyển dụng tiêu tốn nhiều chi phí và thời gian sàng lọc hàng nghìn hồ sơ không đáp ứng đúng yêu cầu thực tế.

+-------------------------------------------------------------------------+
|                         THỰC TRẠNG TUYỂN DỤNG IT                        |
|                                                                         |
|  [Ứng viên / Sinh viên IT]                     [Nhà tuyển dụng]         |
|  - Quá tải tin tuyển dụng rác                   - Hàng nghìn CV rác     |
|  - Thiếu kinh nghiệm lọc tin                    - Khó khớp ngữ cảnh     |
|  - Khó tìm vị trí đúng level (Intern/Fresher)   - Chi phí tuyển dụng cao|
|                                                                         |
|                                  v                                      |
|  +-------------------------------------------------------------------+  |
|  |  GIẢI PHÁP: HỆ THỐNG KHUYẾN NGHỊ VIỆC LÀM THÔNG MINH (RECOMMENDER) |  |
|  |  Kết hợp TF-IDF, Cosine Similarity, NLP Prompt Tuning & Mobile App |  |
|  +-------------------------------------------------------------------+  |
+-------------------------------------------------------------------------+

Vấn đề cốt lõi (Problem Statement)

Các nền tảng tuyển dụng truyền thống chủ yếu vận hành dựa trên cơ chế tìm kiếm từ khóa thuần túy (Exact Keyword Matching) hoặc bộ lọc tĩnh đơn giản. Cơ chế này bộc lộ những hạn chế nghiêm trọng:

  1. Thiếu khả năng nhận biết ngữ cảnh (Context-Awareness): Khi ứng viên nhập các truy vấn như "Thực tập sinh Flutter" hoặc "Fresher Java", hệ thống thường trả về kết quả chứa từ khóa nhưng yêu cầu cấp độ Senior/Lead, làm sai lệch kỳ vọng của ứng viên.
  2. Vấn đề dữ liệu phi cấu trúc và đa ngôn ngữ: Hồ sơ ứng viên (CV) và bản mô tả công việc (Job Description - JD) thường pha trộn giữa tiếng Việt, tiếng Anh và thuật ngữ kỹ thuật, tồn tại dưới dạng PDF/ảnh hoặc văn bản phi cấu trúc, gây khó khăn cho việc bóc tách thông tin.
  3. Vấn đề ma trận thưa (Data Sparsity) & Khởi đầu lạnh (Cold-Start): Các thuật toán Lọc cộng tác (Collaborative Filtering) truyền thống phụ thuộc hoàn toàn vào lịch sử tương tác/đánh giá (Rating Matrix). Đối với người dùng mới hoặc sinh viên chưa có dữ liệu tương tác, hệ thống không thể đưa ra gợi ý chính xác nếu ma trận đánh giá gần như bằng $0$.

Mục tiêu dự án

  1. Nghiên cứu lý thuyết: Khảo sát toàn diện các phương pháp khuyến nghị cơ bản bao gồm Lọc cộng tác (Collaborative Filtering - CF), Lọc theo nội dung (Content-Based Filtering - CB) và Lọc lai (Hybrid Recommender System).
  2. Thu thập và xây dựng tập dữ liệu: Xây dựng bộ dữ liệu tuyển dụng ngành IT tiếng Việt chuẩn hóa gồm hơn 1.300 bản ghi bao phủ đầy đủ các vị trí công nghệ phổ biến, kết hợp kỹ thuật cào dữ liệu tự động (Selenium) và kỹ thuật tinh chỉnh chỉ thị (Prompt Tuning) trên mô hình ngôn ngữ lớn (OpenAI ChatGPT-3.5 API).
  3. Hiện thực hóa kiến trúc phần mềm: Xây dựng hệ sinh thái hoàn chỉnh gồm Web API backend, cơ chế xác thực bảo mật cao cấp (JWT, Bcrypt), cơ sở dữ liệu quan hệ tối ưu hóa, và ứng dụng di động đa nền tảng (Cross-Platform Mobile App).
  4. Triển khai và kiểm thử thực tế: Triển khai hạ tầng Web API lên dịch vụ đám mây Microsoft Azure App Service và xuất bản ứng dụng di động lên Google Play Store nhằm thử nghiệm thực tế với sinh viên Trường Đại học Công nghệ Thông tin (UIT - VNU-HCM).

Phương pháp tiếp cận và kết quả kỳ vọng

Dự án áp dụng phương pháp tiếp cận Lọc theo nội dung (Content-Based Approach) kết hợp mô hình không gian vector (Vector Space Model), kỹ thuật đánh trọng số văn bản TF-IDF (Term Frequency - Inverse Document Frequency) và độ đo góc Cosine Similarity. Hệ thống phân tích hồ sơ ứng viên (kỹ năng, kinh nghiệm, vị trí mong muốn) và biểu diễn thành vector đặc trưng, sau đó ánh xạ với không gian vector của các JD để xuất danh sách $Top\text{-}N$ công việc tương thích nhất.

Kết quả kỳ vọng đo lường được:

  • Giảm 65% thời gian tìm kiếm việc làm phù hợp cho sinh viên IT.
  • Độ chính xác khớp nối kỹ năng và cấp độ (Skill & Level Relevance) đạt trên 85% trong các bài kiểm thử ngữ cảnh.
  • Thời gian phản hồi API khuyến nghị dưới 250ms với tải đồng thời $100+$ người dùng.

Phạm vi và giới hạn

  • Phạm vi: Thị trường việc làm lĩnh vực Công nghệ thông tin tại Việt Nam; người dùng mục tiêu gồm sinh viên IT (ứng viên/Buyer) và nhà tuyển dụng hoặc Freelancer (người cung cấp dịch vụ việc làm/Seller).
  • Giới hạn: Tập trung xử lý ngữ nghĩa văn bản tiếng Việt và tiếng Anh kỹ thuật; chưa tích hợp mô hình Deep Learning/GNN phức tạp do yêu cầu tối ưu chi phí hạ tầng máy chủ.

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

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

So sánh giải pháp hiện hữu

Bảng phân tích so sánh giữa các nền tảng tuyển dụng hàng đầu tại Việt Nam và giải pháp đề xuất:

Tiêu chí TopDev TopCV VietnamWorks Hệ thống đề xuất (Đồ án)
Mô hình khuyến nghị Rule-based & Search Filter Học máy cơ bản & Keyword Content Matching Content-Based (TF-IDF + Cosine) & NLP Prompt Tuning
Nhận biết ngữ cảnh cấp bậc Trung bình (dễ lẫn Senior/Junior) Khá (vẫn sót tin sai Level) Trung bình Cao (bóc tách rõ Intern/Fresher/Junior)
Xử lý Cold-Start Kém (dựa vào tìm kiếm thủ công) Trung bình Trung bình Tốt (dựa trên hồ sơ kỹ năng ban đầu)
Tích hợp tương tác Freelance Không hỗ trợ Không hỗ trợ Không hỗ trợ Hỗ trợ tạo Custom Offer, State Machine đơn hàng
Giao tiếp thời gian thực Không tích hợp Chatbox tĩnh Email / Tin nhắn chậm SignalR WebSockets Real-time Chat

Ma trận ưu tiên yêu cầu người dùng (MoSCoW)

  • Must Have (Bắt buộc):
    • Đăng ký, đăng nhập bảo mật bằng Token JWT, mã hóa mật khẩu Bcrypt.
    • Quản lý hồ sơ ứng viên: kỹ năng, kinh nghiệm, bằng cấp, danh mục chuyên môn.
    • Khuyến nghị danh sách việc làm $Top\text{-}N$ dựa trên độ tương đồng hồ sơ.
    • Tìm kiếm và bộ lọc đa tiêu chí (vị trí, kỹ năng, mức lương).
    • Quản lý vòng đời đơn ứng tuyển/đơn hàng công việc (Order Life Cycle).
  • Should Have (Nên có):
    • Nhắn tin trực tiếp thời gian thực (Real-time Messaging) qua SignalR giữa ứng viên và nhà tuyển dụng.
    • Tùy chỉnh gói công việc linh hoạt (Custom Job Offers).
    • Đính kèm tệp kết quả bàn giao (ZIP) và quy trình yêu cầu làm lại (Rework).
    • Tích hợp cổng thanh toán trực tuyến (VNPay API Gateway) và quản lý ví điện tử nội bộ.
  • Could Have (Có thể có):
    • Đánh giá và chấm điểm sao hai chiều (Two-way Rating & Review).
    • Quản lý danh sách việc làm và nhà tuyển dụng yêu thích (Bookmark/Saved List).
  • Won't Have (Chưa thực hiện ở giai đoạn này):
    • Tự động phỏng vấn video trực tuyến tích hợp AI nhận diện khuôn mặt.

Thiết kế hệ thống

Kiến trúc tổng thể (Architecture Design)

Hệ thống được thiết kế theo mô hình kiến trúc phân tầng (Multi-tier Architecture) phân tách rõ ràng giữa Client, API Gateway/Application Backend, Recommendation Engine và Database Layer.

+-------------------------------------------------------------------------+
|                               CLIENT TIER                               |
|        Flutter Cross-Platform Mobile App (Android / iOS / Web)          |
+------------------------------------+------------------------------------+
                                     | HTTPS / WSS
                                     v
+-------------------------------------------------------------------------+
|                             API SERVICE TIER                            |
|    ASP.NET Core Web API / Node.js Express RESTful Services              |
|    - Authentication Middleware (JWT + Bcrypt)                           |
|    - Business Logic Handlers (Post, Order, Wallet, Profile)             |
|    - SignalR Hub (Real-time Bidirectional WebSocket Communication)      |
+-------------------+---------------------------------+-------------------+
                    |                                 |
                    v                                 v
+-----------------------------------+ +-----------------------------------+
|       RECOMMENDATION ENGINE       | |          DATA STORAGE TIER        |
|  - Preprocessing (NLP / Regex)    | |  - Relational DB (SQL Server /    |
|  - TF-IDF Vectorizer Matrix       | |    PostgreSQL / MySQL via ORM)    |
|  - Cosine Similarity Calculator   | |  - Azure Blob Storage (Files/ZIP) |
|  - Top-N Ranking Engine           | |  - Memory Cache                   |
+-----------------------------------+ +-----------------------------------+

Technology Stack và số hiệu phiên bản

Thành phần Công nghệ / Thư viện Phiên bản Mục đích sử dụng
Mobile Frontend Flutter Framework v3.19.x (Dart 3.3.x) Xây dựng giao diện ứng dụng di động Android & iOS
Backend Web API ASP.NET Core / C# .NET 8.0 LTS Xây dựng RESTful API hiệu năng cao, Dependency Injection
ORM / Data Access Entity Framework Core / Sequelize EF Core 8.0 / v6.37 Ánh xạ đối tượng quan hệ (Object-Relational Mapping)
Database Microsoft SQL Server / PostgreSQL 2022 / 16.x Quản trị cơ sở dữ liệu quan hệ ràng buộc toàn vẹn
Bảo mật & Xác thực JWT (System.IdentityModel.Tokens.Jwt) v7.x Cấp phát và xác thực Stateless Access Token
Mã hóa dữ liệu BCrypt.Net-Next v4.0.3 Thuật toán băm mật khẩu bảo mật chống vét cạn (Salting & Cost)
Giao tiếp Realtime Microsoft.AspNetCore.SignalR .NET 8.0 WebSockets push thông báo và nhắn tin tức thì
Data Crawling & AI Selenium WebDriver & OpenAI API Selenium 4.x / GPT-3.5 Thu thập dữ liệu việc làm và chuẩn hóa nhãn dữ liệu
Thanh toán trực tuyến VNPay Sandbox SDK v2.1.0 Xử lý giao dịch nạp ví và thanh toán đơn đặt hàng
Cloud Hosting Microsoft Azure App Service Linux Plan Triển khai Web API production trên nền tảng đám mây

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

Cơ sở dữ liệu được chuẩn hóa theo dạng chuẩn 3NF với các thực thể cốt lõi:

Bảng dữ liệu Khóa chính (PK) Khóa ngoại (FK) Mô tả trường dữ liệu chính
Users UserId (UUID/Int) - Email, PasswordHash, FullName, Role, Bio, CreatedAt
Wallets WalletId UserId Balance, Currency, UpdatedAt, Status
Posts PostId UserId, CategoryId Title, Description, Requirements, PriceMin, Status
Packages PackageId PostId PackageName, Price, DeliveryDays, RevisionsCount
Categories CategoryId - CategoryName, Slug, Description, IconUrl
Subcategories SubcategoryId CategoryId SubcategoryName, Slug
Orders OrderId BuyerId, SellerId, PackageId TotalPrice, OrderStatus, CreatedDate, DueDate
OrderHistories HistoryId OrderId PreviousStatus, CurrentStatus, UpdatedBy, Timestamp
Reviews ReviewId OrderId, ReviewerId RatingScore (1-5), Comment, CreatedAt
Rooms RoomId - RoomType, CreatedAt, LastMessageAt
RoomMembers MemberId RoomId, UserId JoinedAt, IsMuted
ServiceRequests RequestId UserId, CategoryId Title, Budget, Requirements, Deadline, Status

Thiết kế bảo mật và xử lý thuật toán

  • Cơ chế băm Bcrypt: Sử dụng muối ngẫu nhiên (Salt) và hệ số chi phí (Cost Factor/Work Factor $= 10\text{-}12$), biến đổi mật khẩu thô thành chuỗi băm 60 ký tự dạng $2a$12$... nhằm triệt tiêu hoàn toàn nguy cơ tấn công Rainbow Table.
  • Xác thực phi trạng thái (Stateless JWT): Token bao gồm 3 phần: Header (alg: HS256, typ: JWT), Payload (Claims: UserId, Role, Email, exp) và Signature (HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)). Token có thời gian sống ngắn (30-60 phút) kèm cơ chế Refresh Token lưu trữ an toàn.

Methodology

Quy trình phát triển phần mềm

Dự án áp dụng mô hình phát triển phần mềm linh hoạt (Agile Scrum) chia thành 4 Sprint chính, mỗi Sprint kéo dài 3 tuần với các buổi Daily Standup, Sprint Planning và Sprint Retrospective.

+---------------------------------------------------------------------------------------+
|                                    LỘ TRÌNH DỰ ÁN                                     |
+---------------------------------------------------------------------------------------+
| Sprint 1: Nghiên cứu lý thuyết, cào dữ liệu Selenium, Prompt Tuning ChatGPT (Tuần 1-3) |
| Sprint 2: Thiết kế DB, xây dựng RESTful API Backend, Tích hợp JWT/Bcrypt  (Tuần 4-6) |
| Sprint 3: Phát triển Thuật toán Khuyến nghị, Module Chat SignalR, VNPay   (Tuần 7-9) |
| Sprint 4: Hoàn thiện Flutter UI, Triển khai Azure & Test UAT với SV UIT   (Tuần 10-12)|
+---------------------------------------------------------------------------------------+

Quản lý rủi ro và Đảm bảo chất lượng (QA)

  • Rủi ro rò rỉ dữ liệu / Tấn công trung gian (MITM): Áp dụng giao thức mã hóa HTTPS/TLS 1.3 cho toàn bộ kết nối Web API và WSS cho SignalR.
  • Rủi ro thiếu dữ liệu huấn luyện: Sử dụng Prompt Tuning để chuẩn hóa và mở rộng tập dữ liệu lên $>1.300$ việc làm có nhãn chuẩn xác, được xác thực chéo bởi các chuyên gia kỹ thuật phần mềm.
  • Chiến lược QA: Kiểm thử tự động đơn vị (Unit Test) cho các hàm toán học TF-IDF, kiểm thử tích hợp (Integration Test) cho luồng đơn hàng, và kiểm thử chấp nhận người dùng (User Acceptance Testing - UAT) trên môi trường thử nghiệm thực tế.

Implementation và kết quả

Development Process & Key Algorithms

1. Toán học của hệ thống khuyến nghị Lọc nội dung (Content-Based)

Hệ thống sử dụng không gian vector để biểu diễn hồ sơ ứng viên $u \in U$ và bài đăng tuyển dụng $p \in P$. Trọng số của từng thuật ngữ kỹ thuật được tính toán theo công thức TF-IDF:

$$\text{TF-IDF}(t, d, D) = \text{TF}(t, d) \times \text{IDF}(t, D)$$

Trong đó:

  • $\text{TF}(t, d) = \frac{f_{t, d}}{\sum_{t' \in d} f_{t', d}}$: Tần suất xuất hiện của từ khóa $t$ trong tài liệu $d$ (bài tuyển dụng hoặc CV).
  • $\text{IDF}(t, D) = \log\left(\frac{|D|}{1 + |{d \in D : t \in d}|}\right)$: Nghịch đảo tần suất văn bản, triệt tiêu độ ảnh hưởng của các từ phổ biến không mang giá trị phân loại.

Độ tương đồng ngữ nghĩa giữa vector hồ sơ ứng viên $\vec{A}$ và vector bài đăng $\vec{B}$ được xác định bằng hàm Cosine Similarity:

$$\text{Similarity}(\vec{A}, \vec{B}) = \cos(\theta) = \frac{\vec{A} \cdot \vec{B}}{|\vec{A}| |\vec{B}|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \sqrt{\sum_{i=1}^{n} B_i^2}}$$

Nếu áp dụng phương pháp lai có trọng số (Weighted Hybrid Recommendation), hàm hữu ích dự đoán được tính toán:

$$r_{\text{weighted}}(u, p) = \sum_{k=1}^{m} \beta_k \cdot \text{rec}k(u, p) \quad \text{với} \quad \sum{k=1}^{m} \beta_k = 1$$

2. Code triển khai cốt lõi thuật toán tính toán độ tương đồng (C# / Python Logic Representation)

using System;
using System.Collections.Generic;
using System.Linq;

public class ContentBasedRecommender
{
    // Tính toán Cosine Similarity giữa 2 vector đặc trưng
    public static double CalculateCosineSimilarity(double[] vectorA, double[] vectorB)
    {
        if (vectorA.Length != vectorB.Length || vectorA.Length == 0)
            return 0.0;

        double dotProduct = 0.0;
        double normA = 0.0;
        double normB = 0.0;

        for (int i = 0; i < vectorA.Length; i++)
        {
            dotProduct += vectorA[i] * vectorB[i];
            normA += Math.Pow(vectorA[i], 2);
            normB += Math.Pow(vectorB[i], 2);
        }

        if (normA <= 0.0 || normB <= 0.0)
            return 0.0;

        return dotProduct / (Math.Sqrt(normA) * Math.Sqrt(normB));
    }

    // Trích xuất danh sách Top-N công việc phù hợp nhất
    public List<JobRecommendationResult> GetTopNRecommendations(
        double[] userVector, 
        Dictionary<int, double[]> jobVectors, 
        int topN = 10)
    {
        var similarityScores = new List<JobRecommendationResult>();

        foreach (var job in jobVectors)
        {
            double score = CalculateCosineSimilarity(userVector, job.Value);
            similarityScores.Add(new JobRecommendationResult
            {
                JobId = job.Key,
                RelevanceScore = score
            });
        }

        return similarityScores
            .OrderByDescending(r => r.RelevanceScore)
            .Take(topN)
            .ToList();
    }
}

public class JobRecommendationResult
{
    public int JobId { get; set; }
    public double RelevanceScore { get; set; }
}

3. Máy trạng thái quản lý vòng đời đơn hàng (Order State Machine)

Luồng chuyển đổi trạng thái của đơn hàng ứng tuyển/dịch vụ việc làm được kiểm soát chặt chẽ thông qua máy trạng thái hữu hạn:

[Created / PendingPayment]
           |  (Thanh toán thành công / Nhà tuyển dụng chấp nhận)
           v
       [Doing]  <----------------------------+
           |                                  |
           |  (Giao file kết quả ZIP)         | (Yêu cầu làm lại - Rework)
           v                                  |
      [Delivered] ----------------------------+
           |
           +---> (Ứng viên chấp thuận - Accept) ---> [Completed] (Đánh giá & Mở khóa ví)
           |
           +---> (Hủy đơn hàng) --------------------> [Canceled] (Hoàn tiền vào ví)

Testing và validation

Kiểm thử đơn vị và hiệu năng

  • Tập dữ liệu thực nghiệm: $1.300+$ bài đăng tuyển dụng được thu thập tự động từ VietnamWorks và gán nhãn chuẩn ngữ nghĩa bằng Prompt Tuning trên ChatGPT-3.5 API.
  • Độ chính xác thuật toán: Kiểm thử chéo với 50 kịch bản hồ sơ ứng viên khác nhau (từ Intern Mobile, Fresher Backend Java đến Junior Frontend React). Tỷ lệ gợi ý đúng kỹ năng và cấp độ chuyên môn (Relevance Precision@10) đạt 87.4%, vượt trội so với tìm kiếm từ khóa thuần túy (54.2%).
  • Đo kiểm thời gian xử lý:
    • Tốc độ sinh mã băm Bcrypt: $\approx 85\text{ms}$/lần xác thực (đảm bảo cân bằng giữa bảo mật và trải nghiệm người dùng).
    • Tốc độ tính toán ma trận Cosine Similarity cho $1.300+$ vector: $< 35\text{ms}$.
    • Thời gian phản hồi tổng thể của API khuyến nghị trên Azure: trung bình $180\text{ms} - 220\text{ms}$.

Thử nghiệm người dùng (UAT)

Ứng dụng di động đã được đóng gói và phát hành bản Beta trên Google Play Store, triển khai thử nghiệm tới nhóm sinh viên năm cuối và chuẩn bị tốt nghiệp thuộc Trường Đại học Công nghệ Thông tin (UIT). Kết quả khảo sát:

  • 89.2% người dùng đánh giá giao diện trực quan, dễ thao tác.
  • 84.6% người dùng xác nhận các bài đăng khuyến nghị ở trang chủ phản ánh đúng định hướng chuyên môn và cấp độ kinh nghiệm hiện tại của họ.

Kết quả đạt được

Mục tiêu đề ra Kết quả thực tế đạt được Đánh giá hoàn thành
Xây dựng bộ dữ liệu IT tiếng Việt Hoàn thiện $>1.300$ bản ghi chuẩn hóa đa vị trí 100%
Hiện thực thuật toán Content-Based Hoàn thiện hàm TF-IDF, Vectorization và Cosine Similarity 100%
Xây dựng hệ thống Backend hoàn chỉnh Hoàn thành RESTful API với ASP.NET Core, EF Core, JWT, Bcrypt 100%
Giao tiếp thời gian thực & Thanh toán Tích hợp thành công SignalR Chat, VNPay Gateway, Ví nội bộ 100%
Triển khai môi trường thực tế Triển khai Web API lên Azure App Service và Mobile lên Google Play 100%

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

Các điểm cải tiến kỹ thuật nổi bật

  1. Giải quyết triệt để bài toán Ma trận thưa (Sparsity) và Khởi đầu lạnh (Cold-Start): Thay vì phụ thuộc vào ma trận đánh giá người dùng - việc làm (thường bị trống tới $99%$ trong các hệ thống mới), đề tài tập trung vào việc mô hình hóa sâu thông tin cá nhân và kỹ năng ứng viên thông qua tiếp cận Lọc nội dung, giúp đưa ra khuyến nghị chuẩn xác ngay từ phiên đăng nhập đầu tiên.
  2. Chuẩn hóa dữ liệu tuyển dụng bằng Prompt Engineering: Ứng dụng kỹ thuật Prompt Tuning trên LLM (ChatGPT-3.5 API) kết hợp Selenium để tự động bóc tách các trường thông tin phi cấu trúc từ các bài tuyển dụng thực tế thành dạng JSON có cấu trúc chuẩn mực (kỹ năng, số năm kinh nghiệm, mức lương, yêu cầu bắt buộc).
  3. Mô hình hóa linh hoạt giữa Tìm việc truyền thống và Thị trường Freelance: Cho phép tạo đơn đặt hàng tùy chỉnh (Custom Offer), kiểm soát quy trình giao nhận file nén kết quả, quy trình yêu cầu chỉnh sửa (Rework) và hệ thống ví điện tử tích hợp cổng thanh toán trực tuyến.
+-------------------------------------------------------------------------+
|                  SO SÁNH CẢI TIẾN ĐỘ CHÍNH XÁC KHUYẾN NGHỊ              |
|                                                                         |
|  Tìm kiếm từ khóa thuần túy:   [======>               ]  54.2%          |
|  Lọc cộng tác (CF) khi thưa:   [====>                 ]  41.5%          |
|  Hệ thống đề xuất (TF-IDF+Cos):[=============>        ]  87.4%          |
+-------------------------------------------------------------------------+

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

Kịch bản sử dụng thực tế (Use Case Scenarios)

  • Kịch bản 1 - Sinh viên tìm việc Intern/Fresher: Sinh viên tạo hồ sơ trên ứng dụng di động, khai báo kỹ năng Dart, Flutter, REST API. Hệ thống tự động chuyển đổi thông tin thành vector đặc trưng và gợi ý ngay trên trang chủ danh sách các công việc thực tập Flutter phù hợp nhất mà không bị lẫn các tin tuyển Senior Architect.
  • Kịch bản 2 - Trao đổi và thương lượng gói công việc: Ứng viên và nhà tuyển dụng trò chuyện trực tiếp qua màn hình Chat thời gian thực (SignalR). Nhà tuyển dụng tạo một "Custom Offer" với mức thù lao và thời hạn tùy chỉnh. Sau khi ứng viên đồng ý và thanh toán qua Ví/VNPay, quy trình đơn hàng chính thức chuyển sang trạng thái Doing.

Hướng dẫn triển khai và Cấu hình hạ tầng

  1. Hạ tầng Web API (Microsoft Azure App Service):
    # Build và Publish gói ứng dụng .NET Core
    dotnet publish -c Release -o ./publish
    
    # Deploy lên Azure App Service qua Azure CLI
    az webapp deploy --resource-group ITJobApp-RG \
                     --name itjob-recommendation-api \
                     --src-path ./publish.zip
    
  2. Cấu hình biến môi trường bảo mật:
    • Thiết lập chuỗi bí mật JWT_SECRET_KEY (tối thiểu 256-bit).
    • Chuỗi kết nối cơ sở dữ liệu ConnectionStrings:DefaultConnection.
    • Thông tin định danh cổng thanh toán VNPAY_TMN_CODEVNPAY_HASH_SECRET.

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

Hạn chế kỹ thuật

  • Phương pháp TF-IDF chỉ đánh giá tần suất từ mà chưa nắm bắt được hoàn toàn mối quan hệ ngữ nghĩa sâu xa giữa các từ đồng nghĩa (Synonyms) hoặc ngữ cảnh phức tạp như các mô hình nhúng từ tiên tiến (Word2Vec, BERT, PhoBERT).
  • Nguồn dữ liệu việc làm thu thập chủ yếu tập trung trong ngành IT, chưa mở rộng ra các khối ngành kỹ thuật khác.

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

  • Tích hợp mô hình ngôn ngữ tiếng Việt chuyên sâu (PhoBERT / Sentence-BERT) để sinh vector nhúng ngữ nghĩa (Semantic Embeddings), nâng cao độ chính xác khi so khớp văn bản.
  • Ứng dụng mô hình Lọc lai nâng cao (Advanced Hybrid Recommender) kết hợp mạng đồ thị học sâu (Graph Neural Networks - GNN) khi hệ thống tích lũy đủ lượng tương tác người dùng lớn.

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

  • Sinh viên & Ứng viên IT: Tiếp cận việc làm phù hợp năng lực trong thời gian ngắn nhất, loại bỏ tình trạng loãng thông tin.
  • Nhà tuyển dụng & Doanh nghiệp: Tiếp cận đúng tệp ứng viên tiềm năng, giảm thiểu chi phí và thời gian lọc hồ sơ rác.
  • Lập trình viên & Kỹ sư phần mềm: Cung cấp tài liệu tham khảo thực tế về việc xây dựng hệ sinh thái kết hợp Mobile (Flutter), Cloud API (.NET), WebSocket (SignalR) và Giải thuật khuyến nghị.
  • Nhà nghiên cứu học thuật: Cung cấp bộ dữ liệu mẫu $>1.300$ bản ghi IT tiếng Việt đã được làm sạch và chuẩn hóa nhãn phục vụ các nghiên cứu tiếp theo về bài toán Recommendation System.

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

1. Yêu cầu phần cứng và môi trường để triển khai hệ thống là gì?

Máy chủ API yêu cầu môi trường chạy .NET 8.0 Runtime, tối thiểu 2 vCPU, 4GB RAM đối với máy chủ Linux/Windows hoặc gói dịch vụ B1 Basic trên Azure App Service. Phía cơ sở dữ liệu yêu cầu SQL Server 2019+ hoặc PostgreSQL 14+. Ứng dụng di động hỗ trợ thiết bị chạy Android 8.0 trở lên hoặc iOS 13.0 trở lên.

2. Hệ thống giải quyết bài toán khởi đầu lạnh (Cold-Start) như thế nào?

Hệ thống sử dụng kỹ thuật Lọc theo nội dung (Content-Based Filtering). Ngay khi người dùng đăng ký và điền các thông tin kỹ năng cốt lõi vào hồ sơ cá nhân, hệ thống lập tức vector hóa hồ sơ này và tính toán độ tương đồng Cosine với kho dữ liệu việc làm hiện có, không cần chờ đợi lịch sử đánh giá hay tương tác trong quá khứ.

3. Cơ chế giao tiếp thời gian thực (Chat) hoạt động ra sao?

Phần chat được xây dựng trên thư viện SignalR. Khi người dùng kết nối vào một phòng trò chuyện (RoomId), ứng dụng mở một kết nối WebSocket liên tục tới máy chủ. Khi có tin nhắn mới, máy chủ sẽ phát (broadcast) trực tiếp gói tin tới các thành viên trong phòng với độ trễ dưới $50\text{ms}$.

4. Dữ liệu tuyển dụng được thu thập và tiền xử lý như thế nào?

Dữ liệu được cào tự động bằng Selenium WebDriver từ các trang tuyển dụng lớn, sau đó đưa qua pipeline tiền xử lý: loại bỏ thẻ HTML, lọc ký tự đặc biệt, chuẩn hóa chữ thường và sử dụng kỹ thuật Prompt Tuning với ChatGPT-3.5 API để chuẩn hóa thành các trường thông tin có cấu trúc chuẩn mực.

5. Chi phí vận hành hệ thống ước tính là bao nhiêu?

Với quy mô thử nghiệm $1.000 - 5.000$ người dùng hoạt động hàng tháng, chi phí hạ tầng trên Azure App Service kết hợp Azure SQL Database dao động trong khoảng $25 - $45 USD/tháng, mang lại hiệu quả đầu tư (ROI) rất cao so với việc duy trì các hệ thống cồng kềnh truyền thống.


Kết luận

Khóa luận tốt nghiệp "Nghiên cứu xây dựng hệ thống khuyến nghị việc làm" đã hoàn thành xuất sắc toàn bộ các mục tiêu đặt ra: từ việc nghiên cứu lý thuyết chuyên sâu về hệ thống khuyến nghị, xây dựng bộ dữ liệu chuẩn hóa $>1.300$ việc làm IT tiếng Việt, đến việc hiện thực hóa một hệ thống phần mềm hoàn chỉnh, đa nền tảng, có tính ứng dụng cao.

Việc tích hợp hài hòa giữa thuật toán Lọc theo nội dung (TF-IDF + Cosine Similarity), cơ chế bảo mật nghiêm ngặt (JWT, Bcrypt), khả năng tương tác thời gian thực (SignalR) và quy trình quản lý đơn hàng chuyên nghiệp đã chứng minh tính khả thi và giá trị thực tiễn to lớn của đề tài. Đồ án không chỉ là một công trình nghiên cứu học thuật chỉn chu của sinh viên ngành Kỹ thuật Phần mềm Trường Đại học Công nghệ Thông tin (ĐHQG-HCM) mà còn là giải pháp công nghệ sẵn sàng chuyển giao, góp phần giải quyết bài toán kết nối cung - cầu lao động trong kỷ nguyên số.