Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số giáo dục đại học (Education 4.0), nhu cầu tiếp cận thông tin tức thì của người học ngày càng tăng cao. Tại các trường đại học, Phòng Công tác Sinh viên (CTSV) giữ vai trò then chốt trong việc hướng dẫn thủ tục hành chính, quy chế đào tạo, tiêu chí xét học bổng, chính sách miễn giảm học phí và các hoạt động rèn luyện. Tuy nhiên, theo các khảo sát nghiệp vụ hành chính giáo dục, có đến hơn 75% - 80% các thắc mắc gửi đến bộ phận CTSV là những câu hỏi mang tính lặp đi lặp lại. Phương thức hỗ trợ truyền thống qua email, tổng đài hoặc trực tiếp tại văn phòng bộc lộ nhiều điểm nghẽn nghiêm trọng: cán bộ phụ trách không thể phản hồi 24/7, thời gian chờ đợi kéo dài từ vài giờ đến nhiều ngày vào các đợt cao điểm tuyển sinh và xét học bổng.

Đồ án tốt nghiệp ngành Công nghệ Thông tin với đề tài "Xây dựng Chatbot hỗ trợ công tác sinh viên" do sinh viên Phan Nhật Hào thực hiện tại Trường Đại học An Giang nhằm giải quyết triệt để bài toán tự động hóa giao tiếp này. Dự án tập trung nghiên cứu, thiết kế và hiện thực hóa một hệ thống trợ lý ảo thông minh có khả năng tiếp nhận ngôn ngữ tự nhiên, phân loại ý định câu hỏi và phản hồi chính xác thông tin quy chế cho người học.

+-------------------------------------------------------------------------------+
|                       MỤC TIÊU VÀ PHẠM VI DỰ ÁN                               |
+-------------------------------------------------------------------------------+
| 1. Nghiên cứu NLP & ANN   | 2. Xây dựng Kho ngữ liệu | 3. Triển khai Web App  |
| - Tokenization/Lemmatize  | - Phân loại Intent CTSV  | - Flask API Engine     |
| - Keras Sequential Deep NN| - Bộ mẫu Pattern/Response| - Giao diện Web Client |
+-------------------------------------------------------------------------------+

Mục tiêu dự án

  1. Nghiên cứu cơ sở lý thuyết chuyên sâu: Khảo sát các kỹ thuật Xử lý Ngôn ngữ Tự nhiên (Natural Language Processing - NLP), mô hình phân loại văn bản và kiến trúc Mạng nơ-ron nhân tạo (Artificial Neural Network - ANN).
  2. Chuẩn hóa cơ sở tri thức công tác sinh viên: Thu thập, làm sạch và cấu trúc hóa toàn bộ dữ liệu quy chế đào tạo, học phí, khung điểm chuẩn, học bổng và điểm rèn luyện dưới định dạng chuẩn JSON.
  3. Huấn luyện mô hình phân loại ý định (Intent Classification): Ứng dụng kỹ thuật Bag-of-Words kết hợp mạng nơ-ron đa tầng với Keras để nhận diện chính xác ý định câu hỏi của sinh viên.
  4. Xây dựng và tích hợp hệ thống hoàn chỉnh: Đóng gói mô hình thành dịch vụ web với Flask Framework, cung cấp giao diện trò chuyện trực quan và khả năng kết nối linh hoạt qua Webhook API.

Phương pháp tiếp cận giải pháp

Đề tài lựa chọn hướng tiếp cận Mô hình truy xuất (Retrieval-based Model) thay vì mô hình sinh ngôn ngữ tự do (Generative Model). Lý do cốt lõi là trong môi trường học thuật và pháp lý học đường, tính chính xác tuyệt đối, nhất quán và không sai lệch ngữ nghĩa của thông tin quy chế là yêu cầu bắt buộc. Mô hình phân loại ý định bằng mạng ANN giúp hệ thống hiểu được các biến thể diễn đạt khác nhau của sinh viên và trích xuất câu trả lời chuẩn xác từ cơ sở dữ liệu đã kiểm duyệt.

Kết quả kỳ vọng và giới hạn phạm vi

  • Chỉ số kỳ vọng: Tỷ lệ phân loại chính xác trên tập dữ liệu chuẩn đạt 100%, thời gian suy luận và phản hồi tức thì < 150ms, khả năng phục vụ đồng thời hàng trăm truy vấn không gián đoạn.
  • Phạm vi triển khai: Các thông tin thuộc quyền quản lý của Phòng CTSV Trường Đại học An Giang.
  • Giới hạn kỹ thuật: Hệ thống tập trung xử lý các truy vấn đơn lượt (single-turn query) dựa trên các intent đã được định nghĩa trong bộ mẫu dữ liệu huấn luyện.

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

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

Trước khi triển khai kỹ thuật, đề tài tiến hành khảo sát và đánh giá các giải pháp hỗ trợ sinh viên hiện hành nhằm xác định khoảng trống công nghệ và tối ưu hóa chi phí đầu tư.

Tiêu chí so sánh Hỗ trợ thủ công (Truyền thống) Chatbot Rule-based (Khớp mẫu Regex/AIML) Cloud NLU API thương mại (Dialogflow / Watson) Hệ thống Chatbot ANN (Đề tài đề xuất)
Tính khả dụng Giờ hành chính (8h/ngày) 24/7 24/7 24/7 liên tục
Khả năng học hiểu ngữ nghĩa Cao (Tư duy con người) Rất kém (Khớp cứng từ khóa) Rất cao (Deep Learning trên cloud) Cao (Huấn luyện mạng nơ-ron nội bộ)
Độ trễ phản hồi 30 phút - 48 giờ < 50ms 200ms - 500ms (Phụ thuộc mạng) < 100ms (Nội bộ)
Bảo mật & Quyền riêng tư Thủ công Cục bộ Dữ liệu đẩy lên máy chủ thứ 3 Lưu trữ On-Premise hoàn toàn
Chi phí vận hành Chi phí nhân sự hàng tháng cao Thấp Chi phí API tính theo lượt gọi 0đ chi phí bản quyền (Open-Source)

Phân tích yêu cầu chức năng theo phương pháp MoSCoW

  • Must Have (Bắt buộc phải có): Tiếp nhận tin nhắn tiếng Việt; xử lý tách từ (tokenization); trích xuất đặc trưng Bag-of-Words; phân loại ý định qua mô hình ANN; phản hồi câu trả lời tương ứng từ cơ sở tri thức JSON; giao diện web chat trực quan.
  • Should Have (Nên có): Chuẩn hóa văn bản tiếng Việt (loại bỏ dấu câu, chuẩn hóa font chữ, xử lý viết hoa/viết thường); xuất file nhị phân Serialization (pickle) để tăng tốc khởi động server; xử lý ngẫu nhiên câu trả lời trong cùng một intent nhằm tạo cảm giác tự nhiên.
  • Could Have (Có thể có): Mở rộng tích hợp Webhook vào Facebook Messenger Platform hoặc Zalo OA; ghi log lịch sử hội thoại để phục vụ huấn luyện bổ sung.
  • Won't Have (Chưa thực hiện trong giai đoạn này): Nhận diện giọng nói (Speech-to-Text); suy luận hội thoại ngữ cảnh dài đa lượt (Multi-turn conversational context).

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình phân lớp rõ ràng, đảm bảo tính mô-đun hóa, dễ bảo trì và mở rộng:

graph TD
    A[Sinh viên / Người dùng Web] -->|HTTP POST Request / Input Text| B(Flask Web Server)
    B -->|Tiền xử lý chuỗi| C[NLP Pipeline: NLTK Tokenize & Clean]
    C -->|Vector hóa| D[Bag-of-Words Vector Extractor]
    D -->|Feature Vector 1xN| E[Mô hình Keras Sequential ANN]
    E -->|Xác suất Softmax| F{Phân loại Intent / Tag}
    F -->|Trích xuất phản hồi| G[(Cơ sở dữ liệu data.json)]
    G -->|Response Text ngẫu nhiên| B
    B -->|JSON Response / UI Render| A

Ngăn xếp công nghệ (Technology Stack)

  • Ngôn ngữ lập trình: Python 3.8+ (Ngôn ngữ tiêu chuẩn cho AI/NLP).
  • Thư viện Xử lý ngôn ngữ tự nhiên: NLTK (Natural Language Toolkit) phiên bản 3.6+ hỗ trợ word_tokenize, tách từ và xử lý chuỗi.
  • Khung học sâu (Deep Learning Framework): Keras 2.6+ chạy trên nền TensorFlow 2.6+, cấu hình mô hình Sequential với các lớp DenseDropout.
  • Framework Web Backend: Flask 2.0+ với engine mẫu Jinja2 và bộ định tuyến Werkzeug nhẹ, hiệu năng cao.
  • Cấu trúc lưu trữ dữ liệu: JSON (JavaScript Object Notation) cho tri thức Intents; Pickle (.pkl) cho mảng cấu trúc nhị phân; Hierarchical Data Format (.h5) lưu trữ trọng số mạng nơ-ron.
  • Frontend Client: HTML5, CSS3, JavaScript tương tác Async (AJAX/Fetch API).

Thiết kế cơ sở dữ liệu Intent (data.json)

Dữ liệu được tổ chức dưới dạng cấu trúc phân cấp, mỗi ý định bao gồm một nhãn nhận diện (tag), danh sách các mẫu câu tương đương (patterns) và danh sách các câu phản hồi khả dĩ (responses):

{
  "intents": [
    {
      "tag": "hoc_bong",
      "patterns": [
        "Điều kiện để nhận học bổng khuyến khích là gì?",
        "Làm sao để được xét học bổng?",
        "Điểm rèn luyện bao nhiêu thì có học bổng?",
        "Tiêu chuẩn xét học bổng kỳ này"
      ],
      "responses": [
        "Để nhận học bổng khuyến khích học tập, sinh viên cần có điểm trung bình học kỳ từ 7.0 trở lên và điểm rèn luyện đạt loại Tốt (từ 80 điểm) trở lên, đồng thời không bị kỷ luật.",
        "Quy chế học bổng yêu cầu sinh viên tích lũy đủ số tín chỉ quy định, ĐTB >= 7.0 và ĐRL >= 80 điểm."
      ]
    }
  ]
}

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

Dự án áp dụng mô hình phát triển phần mềm Agile / Iterative Development, chia quá trình thực hiện thành các vòng lặp ngắn với các mốc kiểm soát chất lượng rõ ràng.

Giai đoạn (Milestone) Thời gian Nhiệm vụ kỹ thuật chính Kết quả đầu ra (Deliverables)
Giai đoạn 1: Khảo sát & Chuẩn hóa Tuần 1 - 2 Thu thập quy chế CTSV AGU; thiết kế schema JSON File data.json hoàn chỉnh với các tags cốt lõi
Giai đoạn 2: NLP & Modeling Tuần 3 - 4 Xây dựng pipeline tiền xử lý; thiết kế mạng ANN; train 200 epochs model.h5, text.pkl, label.pkl
Giai đoạn 3: Backend & Integration Tuần 5 - 6 Xây dựng API Flask; kết nối Webhook; dựng giao diện Web UI File app.py, template giao diện web hoàn chỉnh
Giai đoạn 4: Testing & Tối ưu Tuần 7 - 8 Kiểm thử biên; đo lường độ trễ; tối ưu hóa ngưỡng tin cậy Báo cáo kiểm thử, tài liệu hướng dẫn triển khai

Implementation và kết quả

Quá trình phát triển và thuật toán cốt lõi

Quy trình xử lý dữ liệu và huấn luyện mô hình được triển khai qua 3 giai đoạn toán học cụ thể:

1. Tiền xử lý dữ liệu (Data Preprocessing Pipeline)

Mỗi mẫu câu văn bản $S$ được chuyển qua các bước:

  • Tách từ (Tokenization): Phân rã câu thành danh sách các từ tố $T = {t_1, t_2, ..., t_k}$.
  • Chuẩn hóa chữ thường & Làm sạch: Chuyển đổi toàn bộ ký tự sang chữ thường, loại bỏ các ký tự đặc biệt và dấu câu.
  • Tạo từ điển (Vocabulary Extraction): Tổng hợp tất cả các từ duy nhất xuất hiện trong toàn bộ tập huấn luyện để lập mảng words, đồng thời trích xuất danh sách các lớp classes.

2. Vector hóa đặc trưng: Mô hình túi từ (Bag of Words - BoW)

Mỗi mẫu câu được ánh xạ thành một vector nhị phân $\mathbf{x} = [x_1, x_2, ..., x_V]$ có kích thước bằng kích thước từ điển $V$: $$x_i = \begin{cases} 1 & \text{nếu từ } w_i \in V \text{ xuất hiện trong câu} \ 0 & \text{ngược lại} \end{cases}$$

3. Cấu trúc mạng nơ-ron nhân tạo (ANN Architecture)

Mô hình sử dụng mạng nhiều tầng truyền thẳng (Multilayer Perceptron - MLP) gồm 3 lớp:

  • Lớp đầu vào (Input Layer): Kích thước $V$ (bằng độ dài vector BoW).
  • Lớp ẩn 1 (Hidden Layer 1): 128 nơ-ron, hàm kích hoạt $\text{ReLU}(z) = \max(0, z)$, kèm lớp Dropout(0.5) chống quá khớp.
  • Lớp ẩn 2 (Hidden Layer 2): 64 nơ-ron, hàm kích hoạt $\text{ReLU}$, kèm lớp Dropout(0.5).
  • Lớp đầu ra (Output Layer): Số nơ-ron bằng số lượng phân lớp ý định $C$, sử dụng hàm kích hoạt $\text{Softmax}$ để tính phân phối xác suất: $$P(y = c \mid \mathbf{x}) = \frac{e^{z_c}}{\sum_{j=1}^C e^{z_j}}$$
# Trích đoạn mã nguồn huấn luyện: training.py
import json
import pickle
import numpy as np
import nltk
from nltk.stem import WordNetLemmatizer
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import SGD

# 1. Đọc và phân tích cú pháp dữ liệu JSON
with open('data.json', encoding='utf-8') as file:
    data = json.load(file)

words = []
classes = []
documents = []
ignore_letters = ['?', '!', '.', ',']

for intent in data['intents']:
    for pattern in intent['patterns']:
        # Tokenize từng câu mẫu
        word_list = nltk.word_tokenize(pattern)
        words.extend(word_list)
        documents.append((word_list, intent['tag']))
        if intent['tag'] not in classes:
            classes.append(intent['tag'])

words = sorted(list(set([w.lower() for w in words if w not in ignore_letters])))
classes = sorted(list(set(classes)))

# Lưu trữ từ điển và nhãn phân loại bằng Pickle
pickle.dump(words, open('text.pkl', 'wb'))
pickle.dump(classes, open('label.pkl', 'wb'))

# 2. Xây dựng tập dữ liệu huấn luyện (Training Data)
training = []
output_empty = [0] * len(classes)

for doc in documents:
    bag = []
    pattern_words = [w.lower() for w in doc[0]]
    for word in words:
        bag.append(1) if word in pattern_words else bag.append(0)
    
    output_row = list(output_empty)
    output_row[classes.index(doc[1])] = 1
    training.append([bag, output_row])

training = np.array(training, dtype=object)
train_x = np.array(list(training[:, 0]))
train_y = np.array(list(training[:, 1]))

# 3. Xây dựng và biên dịch mô hình Keras Sequential ANN
model = Sequential([
    Dense(128, input_shape=(len(train_x[0]),), activation='relu'),
    Dropout(0.5),
    Dense(64, activation='relu'),
    Dropout(0.5),
    Dense(len(train_y[0]), activation='softmax')
])

sgd = SGD(learning_rate=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

# Huấn luyện trong 200 epochs
hist = model.fit(train_x, train_y, epochs=200, batch_size=5, verbose=1)
model.save('model.h5', hist)
print("Huấn luyện hoàn tất và lưu mô hình thành công!")
# Trích đoạn mã nguồn thực thi Webhook trên Flask: app.py
from flask import Flask, render_template, request, jsonify
import json
import pickle
import numpy as np
import nltk
from tensorflow.keras.models import load_model

app = Flask(__name__)

# Tải tài nguyên đã tiền xử lý và mô hình đã huấn luyện
words = pickle.load(open('text.pkl', 'rb'))
classes = pickle.load(open('label.pkl', 'rb'))
model = load_model('model.h5')
with open('data.json', encoding='utf-8') as file:
    intents = json.load(file)

def clean_up_sentence(sentence):
    sentence_words = nltk.word_tokenize(sentence)
    return [w.lower() for w in sentence_words]

def bow(sentence, words):
    sentence_words = clean_up_sentence(sentence)
    bag = [0] * len(words)
    for s in sentence_words:
        for i, w in enumerate(words):
            if w == s:
                bag[i] = 1
    return np.array(bag)

def predict_class(sentence):
    p = bow(sentence, words)
    res = model.predict(np.array([p]))[0]
    ERROR_THRESHOLD = 0.25
    results = [[i, r] for i, r in enumerate(res) if r > ERROR_THRESHOLD]
    results.sort(key=lambda x: x[1], reverse=True)
    return [{"intent": classes[r[0]], "probability": str(r[1])} for r in results]

def get_response(intents_list, intents_json):
    if not intents_list:
        return "Xin lỗi, tôi chưa hiểu rõ câu hỏi. Bạn vui lòng liên hệ trực tiếp phòng CTSV để được giải đáp."
    tag = intents_list[0]['intent']
    for i in intents_json['intents']:
        if i['tag'] == tag:
            return np.random.choice(i['responses'])
    return "Hệ thống đang cập nhật dữ liệu."

@app.route("/")
def home():
    return render_template("index.html")

@app.route("/get", methods=["POST"])
def chatbot_response():
    msg = request.form["msg"]
    ints = predict_class(msg)
    res = get_response(ints, intents)
    return jsonify({"response": res})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=False)

Kiểm thử và đánh giá kết quả

Mô hình được huấn luyện qua 200 epochs với hàm mất mát categorical_crossentropy. Quá trình hội tụ diễn ra ổn định nhờ thuật toán tối ưu hóa SGD kết hợp Nesterov Momentum.

Epoch 1/200: loss: 2.8912 - accuracy: 0.1250
Epoch 50/200: loss: 0.8415 - accuracy: 0.7850
Epoch 100/200: loss: 0.1923 - accuracy: 0.9650
Epoch 200/200: loss: 0.0184 - accuracy: 1.0000 (Đạt độ chính xác 100%)
+-------------------------------------------------------------------------------+
|                       KẾT QUẢ KIỂM THỬ VÀ HIỆU NĂNG                           |
+-------------------------------------------------------------------------------+
| Chỉ số kiểm thử                 | Giá trị đạt được      | Trạng thái          |
+---------------------------------+-----------------------+---------------------+
| Độ chính xác tập Train (200 ep) | 100% (Loss = 0.0184)  | Đạt chuẩn tối ưu    |
| Thời gian phản hồi API trung bình| 42ms / request        | Cực nhanh           |
| Mức tiêu hao RAM máy chủ        | ~115 MB               | Siêu nhẹ            |
| Tỷ lệ UAT sinh viên hài lòng    | 94.2%                 | Đạt yêu cầu thực tiễn|
+-------------------------------------------------------------------------------+

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

  1. Ứng dụng Deep Learning giải quyết bài toán hành chính chuyên biệt: Thay vì sử dụng các hệ thống khớp từ khóa đơn giản (keyword matching) vốn dễ gặp lỗi khi sinh viên thay đổi cấu trúc câu, đề tài đã thành công áp dụng mạng nơ-ron nhân tạo đa tầng để ánh xạ không gian ngữ nghĩa của câu hỏi vào các lớp ý định nghiệp vụ cụ thể.
  2. Quy trình triển khai Serialization tối ưu hóa tài nguyên: Việc phân tách quá trình huấn luyện độc lập (training.py) và lưu trữ các cấu trúc dữ liệu dưới dạng tệp nhị phân (text.pkl, label.pkl, model.h5) cho phép ứng dụng web Flask (app.py) khởi động chỉ trong 1.2 giây và hoạt động ổn định trên các môi trường máy chủ cấu hình thấp.
  3. Giải pháp tự chủ công nghệ, bảo mật tuyệt đối: So sánh với việc sử dụng các dịch vụ SaaS như Google Dialogflow hay Microsoft LUIS, giải pháp của đề tài hoàn toàn độc lập, không phụ thuộc vào kết nối Internet bên ngoài, không phát sinh chi phí duy trì API định kỳ và đảm bảo dữ liệu nội bộ của nhà trường được kiểm soát tuyệt đối.
  4. Nâng cao hiệu suất hỗ trợ sinh viên: Giúp giảm thiểu đến 95% thời gian chờ đợi nhận thông tin của sinh viên (từ hàng giờ xuống mili-giây), đồng thời giải phóng đến 80% khối lượng công việc giải đáp đơn giản lặp lại cho cán bộ văn phòng.

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

Kịch bản ứng dụng thực tế

  • Cổng thông tin tuyển sinh: Hỗ trợ thí sinh tra cứu điểm chuẩn các năm học trước, quy chế tuyển sinh, tổ hợp môn xét tuyển.
  • Tư vấn chính sách học bổng & Miễn giảm học phí: Tự động giải đáp chi tiết điều kiện điểm trung bình tích lũy và điểm rèn luyện, thủ tục chuẩn bị hồ sơ vay vốn tín dụng sinh viên.
  • Hỗ trợ hoạt động phong trào: Cung cấp thông tin về các câu lạc bộ, hội thảo chuyên đề, chiến dịch tình nguyện và cách thức ghi nhận ngày công phục vụ cộng đồng.

Hướng dẫn triển khai hệ thống (Deployment Architecture)

[Internet Client] 
       │ (Port 80/443 HTTPS)
       ▼
┌──────────────┐      ┌─────────────────────────┐      ┌───────────────────────┐
│ NGINX Proxy  │ ───► │ Gunicorn WSGI (4 Worker)│ ───► │ Flask App (model.h5)  │
└──────────────┘      └─────────────────────────┘      └───────────────────────┘

Các bước cài đặt và vận hành:

  1. Chuẩn bị môi trường máy chủ:
    sudo apt-get update && sudo apt-get install python3-pip python3-venv nginx -y
    git clone https://github.com/phannhathao/chatbot-ctsv.git
    cd chatbot-ctsv
    python3 -m venv venv && source venv/bin/activate
    pip install -r requirements.txt
    
  2. Tải tài nguyên từ điển NLTK và Huấn luyện mô hình:
    python3 -c "import nltk; nltk.download('punkt')"
    python3 training.py
    
  3. Vận hành hệ thống với Gunicorn:
    gunicorn --workers 4 --bind 127.0.0.1:5000 app:app --daemon
    

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

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

  • Xử lý từ ngoài từ điển (Out-of-Vocabulary - OOV): Kỹ thuật Bag-of-Words dựa trên từ điển cố định, do đó khi người dùng nhập các từ viết tắt, từ địa phương lạ hoặc sai chính tả nặng, vector BoW sẽ chỉ chứa toàn giá trị 0, dẫn đến việc phân loại sai ý định.
  • Tính ngữ cảnh ngắn hạn (Single-turn Context): Hệ thống hiện phản hồi từng câu hỏi độc lập, chưa duy trì trạng thái ngữ cảnh lịch sử cho các chuỗi hội thoại nhiều bước (Multi-turn conversations).
  • Quy mô ngữ liệu thủ công: Cơ sở dữ liệu data.json đòi hỏi phải được bổ sung các mẫu câu thủ công bởi quản trị viên.

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

  • Nâng cấp kiến trúc Transformer / PhoBERT: Tích hợp mô hình ngôn ngữ lớn tiền huấn luyện dành riêng cho tiếng Việt (như PhoBERT của VinAI) để nắm bắt ngữ cảnh sâu và xử lý hiện tượng đồng nghĩa linh hoạt hơn.
  • Tích hợp Cơ sở dữ liệu Đào tạo & Điểm số: Kết nối qua RESTful API vào hệ thống quản lý đào tạo của trường để sinh viên có thể đăng nhập và tra cứu điểm thi, lịch học cá nhân hóa theo mã số sinh viên (MSSV).
  • Tích hợp Đa kênh (Omnichannel Support): Mở rộng giao tiếp qua giọng nói (VoiceBot) và tích hợp sâu vào ứng dụng di động của trường.

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

┌─────────────────────────────────────────────────────────────────────────────┐
│                            ĐỐI TƯỢNG HƯỞNG LỢI                              │
├──────────────────────┬──────────────────────┬───────────────────────────────┤
│ Sinh viên            │ Lập trình viên       │ Nhà trường / Phòng CTSV       │
│ - Nhận giải đáp 24/7 │ - Nắm vững BoW + ANN │ - Giảm 80% tác vụ lặp lại     │
│ - Phản hồi < 150ms   │ - Tham khảo Flask API│ - Tối ưu hóa chi phí nhân sự  │
└──────────────────────┴──────────────────────┴───────────────────────────────┘
  • Sinh viên & Phụ huynh: Tiếp cận thông tin chính thống mọi lúc mọi nơi; giảm thiểu tối đa tình trạng trễ hạn nộp học bổng, hồ sơ miễn giảm học phí do thiếu thông tin.
  • Cán bộ Phòng Công tác Sinh viên: Giảm tải áp lực trực tổng đài và trả lời email trong các đợt cao điểm; tập trung thời gian xử lý các nghiệp vụ chuyên sâu và các trường hợp đặc biệt.
  • Sinh viên ngành CNTT & Lập trình viên trẻ: Nguồn tài liệu thực nghiệm rõ ràng, minh bạch từ bước tiền xử lý văn bản, xây dựng kiến trúc Keras Sequential cho đến đóng gói dịch vụ web Flask API.
  • Nhà nghiên cứu NLP tiếng Việt: Cung cấp cơ sở đối chuẩn (baseline) thực nghiệm cho bài toán phân loại ý định miền hẹp (Domain-Specific Intent Classification) trong môi trường giáo dục đại học.

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

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

Hệ thống được tối ưu hóa ở mức cao nên yêu cầu phần cứng rất khiêm tốn:

  • CPU: Tối thiểu 1 vCPU (2.0 GHz trở lên).
  • RAM: Tối thiểu 512 MB (Khuyến nghị 1 GB RAM để chạy mượt mà cùng Nginx).
  • Ổ cứng: 200 MB dung lượng trống.
  • Hệ điều hành: Linux (Ubuntu 18.04/20.04/22.04 LTS), Debian, CentOS hoặc Windows Server.
  • Không yêu cầu card đồ họa rời (GPU) cho việc suy luận (inference).

2. Mô hình xử lý như thế nào khi gặp câu hỏi hoàn toàn nằm ngoài dữ liệu (Out-of-Distribution)?

Trong hàm predict_class(), hệ thống đã cài đặt một ngưỡng lọc lỗi (ERROR_THRESHOLD = 0.25). Khi một câu hỏi mới không chứa các từ vựng đặc trưng trong từ điển hoặc xác suất dự đoán của tất cả các nhãn đều dưới ngưỡng này, hệ thống sẽ tự động kích hoạt phản hồi mặc định: "Xin lỗi, tôi chưa hiểu rõ câu hỏi. Bạn vui lòng liên hệ trực tiếp phòng CTSV để được giải đáp." Điều này ngăn chặn hiện tượng bot đưa ra câu trả lời sai lệch.

3. Làm thế nào để cập nhật thêm các câu hỏi và chủ đề mới vào Chatbot?

Quy trình cập nhật dữ liệu hoàn toàn không cần can thiệp vào mã nguồn logic:

  1. Mở file data.json và thêm một đối tượng intent mới với tag, danh sách patternsresponses.
  2. Chạy lệnh python3 training.py để mô hình tự động cập nhật từ điển (text.pkl), danh sách nhãn (label.pkl) và tối ưu hóa lại trọng số mạng (model.h5).
  3. Khởi động lại dịch vụ Flask/Gunicorn (systemctl restart chatbot). Toàn bộ quá trình chỉ mất chưa đầy 1 phút.

4. Hệ thống có thể tích hợp vào Fanpage Facebook Messenger của trường không?

Hoàn toàn có thể. Do hệ thống Backend được xây dựng bằng Flask, bạn chỉ cần tạo thêm một route API xác thực Webhook (@app.route('/webhook', methods=['GET', 'POST'])) tuân thủ giao thức Messenger Platform API của Meta, nhận payload messaging và chuyển văn bản tin nhắn vào hàm predict_class() để gửi trả tin nhắn tự động.

5. Chi phí triển khai và thời gian hoàn vốn đầu tư (ROI) ước tính như thế nào?

  • Chi phí phát triển & Bản quyền phần mềm: 0 VNĐ (Sử dụng 100% mã nguồn mở: Python, Flask, TensorFlow/Keras, NLTK).
  • Chi phí hạ tầng: Thuê 1 VPS Linux cơ bản khoảng 100.000 - 150.000 VNĐ/tháng.
  • ROI: Hệ thống thay thế tương đương khối lượng công việc giải đáp của ít nhất 1 nhân sự trực tổng đài bán thời gian trong các tháng cao điểm, giúp tiết kiệm hàng chục triệu đồng chi phí vận hành mỗi năm ngay từ tháng đầu tiên đưa vào sử dụng.

Kết luận

Đồ án tốt nghiệp "Xây dựng Chatbot hỗ trợ công tác sinh viên" của sinh viên Phan Nhật Hào đã hiện thực hóa thành công một giải pháp công nghệ thiết thực, giải quyết chính xác bài toán quá tải thông tin hành chính tại Trường Đại học An Giang. Bằng việc kết hợp chặt chẽ giữa kỹ thuật Xử lý Ngôn ngữ Tự nhiên (NLP), mô hình mạng nơ-ron sâu (ANN) với Keras và kiến trúc Web nhẹ của Flask, dự án đã mang lại một sản phẩm có tính ứng dụng cao, tốc độ phản hồi tức thì và độ chính xác đạt chuẩn mực.

Công trình không chỉ khẳng định năng lực ứng dụng công nghệ học máy vào thực tiễn quản lý giáo dục mà còn mở ra nền tảng vững chắc để mở rộng thành các trợ lý ảo học đường thông minh, đa chức năng trong tương lai. Đây chính là bước đệm quan trọng góp phần thúc đẩy chuyển đổi số toàn diện trong môi trường đại học hiện đại.