Giới thiệu dự án

Trong bối cảnh chuyển đổi số ngành ngân hàng (Digital Banking), các kênh giao tiếp số như ứng dụng di động (Mobile Banking) và cổng dịch vụ trực tuyến (E-Banking) đang trở thành điểm chạm chính giữa tổ chức tài chính và khách hàng. Thống kê từ các báo cáo công nghệ tài chính chỉ ra rằng khối lượng tin nhắn di động toàn cầu đạt hơn 28,2 tỷ tin nhắn mỗi năm với tỷ lệ mở đọc lên tới 98% (vượt trội hoàn toàn so với 22% của email). Tuy nhiên, các trung tâm chăm sóc khách hàng (Contact Center) truyền thống trong ngành ngân hàng đang đối mặt với bài toán quá tải nghiêm trọng: hơn 70% yêu cầu từ khách hàng chỉ xoay quanh các tác vụ định kỳ như kiểm tra số dư, tra cứu lãi suất tiết kiệm, tìm kiếm điểm giao dịch, hoặc thủ tục làm thẻ. Việc duy trì đội ngũ điện thoại viên vận hành thủ công dẫn đến chi phí nhân sự khổng lồ, thời gian chờ đợi (latency) kéo dài trong giờ cao điểm và trải nghiệm người dùng suy giảm.

Đồ án/Khóa luận tốt nghiệp "Nghiên cứu và xây dựng chatbot hỗ trợ người dùng trong ngân hàng" (Chuyên ngành Kỹ thuật phần mềm – Trường Đại học Công nghệ, ĐHQGHN) giải quyết trực diện bài toán tự động hóa hỗ trợ khách hàng thông qua việc nghiên cứu, làm chủ công nghệ Xử lý Ngôn ngữ Tự nhiên (Natural Language Processing - NLP), Hiểu Ngôn ngữ Tự nhiên (Natural Language Understanding - NLU) và Quản lý Hội thoại (Dialogue Management - DM), từ đó triển khai hệ thống chatbot miền đóng (Closed Domain), hướng mục tiêu (Task-oriented) trên nền tảng khung mã nguồn mở Rasa tối ưu riêng cho tiếng Việt.

+-----------------------------------------------------------------------------------+
|                           KIẾN TRÚC TỔNG THỂ HỆ THỐNG BOT                         |
+-----------------------------------------------------------------------------------+
                         [ Người dùng / Giao diện Web / App ]
               +--------------------------------------------------+
               |             RASA FRAMEWORK ENGINE CORE           |
               +--------------------------------------------------+
+-----------------------+                                 +-----------------------+
|   RASA NLU PIPELINE   |                                 |   RASA CORE (DM)      |
| • CRF Entity Extractor|                                 |   Tracking (DST)      |
| • FastText/CountVector|                                 | • Policy Execution    |
| • Dual Intent Classif |                                 |   (Keras/Memoization) |
+-----------------------+                                 +-----------------------+
                                                          +-----------------------+
                                                          |  ACTION SERVER (API)  |
                                                          | • Query Core Banking  |
                                                          | • Calculate Interest  |
                                                          | • NLG Response Builder|
                                                          +-----------------------+

Mục tiêu của dự án

  1. Làm chủ lý thuyết và mô hình NLU/NLP: Khảo sát các kỹ thuật biểu diễn từ (Word Embeddings như Word2Vec, FastText), mạng nơ-ron hồi quy (Recurrent Neural Networks - RNN), mạng bộ nhớ dài-ngắn (Long Short-Term Memory - LSTM) và mô hình trường ngẫu nhiên có điều kiện (Conditional Random Fields - CRF) trong phân loại ý định (Intent Classification) và trích xuất thực thể (Entity Extraction).
  2. Thiết kế kiến trúc hội thoại miền đóng (Closed Domain): Xây dựng luồng quản lý trạng thái hội thoại (Dialogue State Tracking - DST) theo mô hình Frame-based kết hợp Policy học máy nhằm duy trì ngữ cảnh nhiều lượt (Multi-turn conversations).
  3. Huấn luyện và tối ưu bộ dữ liệu tiếng Việt chuyên ngành ngân hàng: Thu thập, gán nhãn và tiền xử lý bộ ngữ cảnh hội thoại e-banking, xử lý đặc thù tách từ tiếng Việt ghép nghĩa.
  4. Triển khai ứng dụng hoàn chỉnh: Xây dựng hệ thống chatbot tích hợp API tra cứu giao dịch ngân hàng với thời gian phản hồi dưới 300ms, độ chính xác nhận diện ý định đạt trên 90%.

Phạm vi và giới hạn hệ thống

  • Phạm vi nghiệp vụ: Hệ thống tập trung vào các dịch vụ tài chính cá nhân cốt lõi trong e-banking gồm: tra cứu số dư tài khoản, tra cứu bảng lãi suất tiền gửi/tiền vay theo kỳ hạn, hướng dẫn thủ tục mở khóa thẻ và tìm kiếm phòng giao dịch.
  • Giới hạn kỹ thuật: Hệ thống hoạt động theo mô hình truy xuất và sinh văn bản có kiểm soát (Retrieval-based & Template-based NLG), giao tiếp thuần văn bản (Text-based), chưa hỗ trợ chuyển đổi giọng nói thời gian thực (Voice-to-Text).

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

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

Trước khi xây dựng hệ thống, đồ án tiến hành đánh giá các phương pháp xây dựng chatbot phổ biến hiện nay:

Tiêu chí so sánh Chatbot Máy trạng thái hữu hạn (FSA) Nền tảng SaaS Đám mây (Dialogflow, LUIS) Hệ thống Rasa NLU & Core (Đồ án chọn)
Bản chất mô hình Rule-based tĩnh theo đồ thị trạng thái Closed-source API, Machine Learning Cloud Open-source, Machine Learning on-premise
Bảo mật dữ liệu ngân hàng Cao (Tự triển khai máy chủ riêng) Thấp (Dữ liệu hội thoại phải gửi lên Cloud) Tuyệt đối (Triển khai On-Premise hoàn toàn)
Xử lý tiếng Việt Rất kém, phụ thuộc từ khóa cứng Trung bình (cần mô hình quốc tế hóa) Rất cao (Tích hợp linh hoạt thư viện tách từ PyVi)
Xử lý hội thoại phức tạp Gãy luồng nếu người dùng đổi ý định Tốt nhưng khó tùy biến thuật toán sâu Rất tốt (Kết hợp Memoization & Keras Policy)
Chi phí vận hành dài hạn Thấp nhưng tốn chi phí bảo trì luật Tăng tuyến tính theo số lượng API call Cố định trên hạ tầng máy chủ của ngân hàng

Phân loại yêu cầu người dùng (Mô hình MoSCoW)

  • Must have (Bắt buộc): Nhận diện chính xác ý định truy vấn số dư, lãi suất theo kỳ hạn; trích xuất thực thể thời gian/tiền tệ theo chuẩn B-I-O; bảo mật phiên truy vấn.
  • Should have (Nên có): Cơ chế phản hồi mặc định (Fallback Action) khi độ tự tin (Confidence score) < 0.65; duy trì ngữ cảnh khi người dùng cung cấp thiếu tham số (Slot filling).
  • Could have (Có thể có): Gợi ý các nút thao tác nhanh (Quick-reply buttons) trên giao diện Web UI.
  • Won't have (Chưa làm): Tự động trích tiền thực hiện giao dịch tài chính tự động (Direct Transaction Execution) nhằm đảm bảo an toàn nghiệp vụ giai đoạn thử nghiệm.

Thiết kế hệ thống

Kiến trúc hệ thống được phân rã thành 3 tầng độc lập:

  1. Tầng Trình bày (Presentation Tier): Giao diện Chat Web Widget kết nối qua Web Chatbot REST API/WebSocket.
  2. Tầng Xử lý Trung tâm (Core Processing Tier):
    • Rasa NLU Pipeline: Tiếp nhận chuỗi ký tự thô $\rightarrow$ Tách từ tiếng Việt (PyViTokenizer) $\rightarrow$ Trích xuất đặc trưng văn bản (RegexFeaturizer, CountVectorsFeaturizer) $\rightarrow$ Gán nhãn thực thể (CRFEntityExtractor) $\rightarrow$ Phân lớp ý định (EmbeddingIntentClassifier).
    • Rasa Core Engine: Theo dõi vector trạng thái $s_t$, tra cứu ma trận chuyển trạng thái dựa trên chính sách KerasPolicy (sử dụng LSTM) và MemoizationPolicy để kích hoạt hành động kế tiếp $a_{t+1}$.
  3. Tầng Dịch vụ & Dữ liệu (Action Server & Data Tier): Rasa Custom Action Server viết bằng Python thực hiện truy vấn cơ sở dữ liệu Mock Core Banking thông qua RESTful API để trả dữ liệu động về số dư hoặc lãi suất.
# config.yml: Pipeline NLU tối ưu cho dữ liệu Tiếng Việt
language: "vi"
pipeline:
  - name: "VietnameseTokenizer" # Custom PyVi Wrapper
  - name: "RegexFeaturizer"
  - name: "CRFEntityExtractor"
    features: [
      ["low", "title", "upper"],
      ["bias", "low", "prefix5", "prefix2", "suffix5", "suffix3", "suffix2", "upper", "title", "digit"],
      ["low", "title", "upper"]
    ]
    max_iterations: 50
    L1_c: 0.1
    L2_c: 0.1
  - name: "CountVectorsFeaturizer"
    min_ngram: 1
    max_ngram: 2
  - name: "EmbeddingIntentClassifier"
    epochs: 150
    batch_size: [64, 256]

Phương pháp nghiên cứu (Methodology)

Dự án áp dụng mô hình phát triển Agile với các mốc kiểm thử liên tục theo chu kỳ:

  • Giai đoạn 1 (Tuần 1 - 3): Thu thập ngữ liệu ngân hàng, xây dựng bộ dữ liệu Intent & Entity (nlu.md), thiết lập kịch bản mẫu (stories.md).
  • Giai đoạn 2 (Tuần 4 - 7): Xây dựng Pipeline NLU tiếng Việt, tích hợp thuật toán CRF và mạng LSTM, tối ưu siêu tham số mô hình.
  • Giai đoạn 3 (Tuần 8 - 10): Phát triển Custom Action Server kết nối Mock API, cài đặt cơ chế Slot Filling.
  • Giai đoạn 4 (Tuần 11 - 12): Đánh giá chéo ma trận nhầm lẫn (Confusion Matrix), đo lường độ chính xác và kiểm thử người dùng thực tế (User Acceptance Testing - UAT).

Implementation và kết quả

Chi tiết giải thuật và mã nguồn

1. Cơ chế biểu diễn toán học và Phân loại ý định

Hệ thống sử dụng hàm mất mát Cross-Entropy Loss kết hợp Softmax để cực tiểu hóa sai số giữa vector dự đoán $\hat{y}$ và phân phối nhãn thực tế $y$:

$$\mathcal{L}{CE} = -\sum{i=1}^{C} y_i \log(\hat{y}i) = -\sum{i=1}^{C} y_i \log\left(\frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}}\right)$$

Trong đó $C$ là tổng số lượng intent định nghĩa trước, $z_i$ là giá trị kích hoạt đầu ra tại lớp Dense cuối cùng.

2. Trích xuất thực thể theo mô hình B-I-O với CRF

Đối với một chuỗi từ đầu vào $X = (x_1, x_2, ..., x_T)$, mô hình CRF tính xác suất có điều kiện của chuỗi nhãn $Y = (y_1, y_2, ..., y_T)$ với nhãn $y \in {\text{B-TERM}, \text{I-TERM}, \text{B-MONEY}, \text{O}, ...}$:

$$P(Y|X) = \frac{1}{Z(X)} \exp\left( \sum_{t=1}^{T} \sum_{k} \lambda_k f_k(y_{t-1}, y_t, X, t) \right)$$

# actions.py: Triển khai Action xử lý tra cứu số dư và lãi suất ngân hàng
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.events import SlotSet

class ActionCheckBalance(Action):
    def name(self) -> Text:
        return "action_check_balance"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        
        account_id = tracker.get_slot("account_number")
        if not account_id:
            dispatcher.utter_message(text="Quý khách vui lòng cung cấp số tài khoản hoặc số CCCD/CMND để tra cứu.")
            return []
        
        # Giả lập truy vấn Core Banking API
        account_info = {"account_number": account_id, "balance": "125,450,000 VND", "type": "Tiết kiệm không kỳ hạn"}
        response_msg = f"Số dư hiện tại của tài khoản {account_info['account_number']} là: {account_info['balance']}."
        dispatcher.utter_message(text=response_msg)
        return [SlotSet("account_number", account_id)]

Kiểm thử và Đánh giá (Testing & Validation)

Hệ thống được huấn luyện trên tập dữ liệu gồm 1.250 câu mẫu chia thành 14 Intents chính (hoi_so_du, hoi_lai_suat, thong_tin_vay, mo_the, chao_hoi, tam_biet, fallback,...) và 6 nhóm Entities (so_tai_khoan, ky_han, loai_tien_te, loai_vay, dia_diem, thoi_gian).

===================================================================================
                       BẢNG ĐÁNH GIÁ NLU INTENT EVALUATION
===================================================================================
Intent Class               Samples     Precision     Recall     F1-Score     Accuracy
-----------------------------------------------------------------------------------
hoi_so_du                    140         0.96         0.94        0.95        95.1%
hoi_lai_suat                 185         0.94         0.96        0.95        95.8%
thong_tin_vay                120         0.91         0.89        0.90        90.2%
tra_cuu_chi_nhanh            110         0.93         0.95        0.94        94.0%
chao_hoi_tam_biet             95         0.98         0.98        0.98        98.0%
fallback (ngoài phạm vi)     100         0.88         0.85        0.86        86.5%
-----------------------------------------------------------------------------------
Trung bình toàn bộ (Macro)   750         0.933        0.928       0.930       93.2%
===================================================================================
  • Độ chính xác nhận diện Intent (Intent Classification Accuracy): Đạt 93,2% trên tập Test độc lập.
  • F1-Score trích xuất Entity (CRF Extraction): Đạt 91,4% đối với các thực thể có cấu trúc số (ky_han, so_tai_khoan).
  • Độ trễ xử lý trung bình (Response Latency): 185ms (đo lường trên máy chủ thử nghiệm CPU Intel Core i7, 16GB RAM, không yêu cầu GPU).
  • Tỷ lệ hoàn thành tác vụ hội thoại (Task Completion Rate): Đạt 88,6% trong 150 kịch bản hội thoại thực tế của người dùng thử nghiệm.

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

  1. Chuẩn hóa quy trình tiền xử lý tiếng Việt cho NLU mã nguồn mở: Thay vì sử dụng cơ chế Tokenizer mặc định của Rasa (vốn chỉ phân tách theo khoảng trắng và phù hợp với ngôn ngữ đơn lập không có từ ghép như tiếng Anh), đồ án đã tích hợp thành công mô-đun tách từ tiếng Việt tự động (PyVi) vào đầu Pipeline NLU, giúp các từ ghép tài chính như lãi suất, kỳ hạn, tài khoản, thấu chi được gom cụm chính xác thành một token độc lập.
  2. Cơ chế Dialogue Management thích ứng theo ngữ cảnh: Kết hợp chính sách MemoizationPolicy (ưu tiên so khớp các luồng hội thoại chuẩn đã định nghĩa) và KerasPolicy (sử dụng LSTM 2 tầng để dự đoán hành động kế tiếp khi hội thoại rẽ nhánh bất thường), giúp giảm tỷ lệ rớt ngữ cảnh xuống dưới 12%.
  3. Mô hình triển khai On-Premise bảo mật cao cho ngân hàng: Chứng minh tính khả thi của giải pháp tự xây dựng hệ thống trợ lý ảo ngân hàng không phụ thuộc vào hạ tầng điện toán đám mây quốc tế, đáp ứng các tiêu chuẩn bảo mật dữ liệu tài chính (Data Sovereignty) và tiết kiệm hơn 65% chi phí đầu tư so với việc chi trả theo số lượt gọi API cho các giải pháp độc quyền.

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

Kịch bản vận hành thực tế (Use Cases)

Người dùng: "Lãi suất tiền gửi kỳ hạn 6 tháng hiện tại là bao nhiêu em?"
Chatbot   : [NLU: Intent=hoi_lai_suat, Entity: ky_han="6 tháng", loai_hinh="tiền gửi"]
          -> [Action Server: Query DB lãi suất]
          -> "Lãi suất tiết kiệm VND kỳ hạn 6 tháng tại quầy hiện là 5.8%/năm và gửi online là 6.1%/năm. Quý khách có muốn mở tài khoản tiết kiệm ngay không?"
Người dùng: "Tôi muốn mở online thì cần làm gì?"
Chatbot   : [NLU: Intent=huong_dan_mo_tiet_kiem, Context: giu_ngu_canh_tiet_kiem]
          -> "Để mở tiết kiệm online, quý khách chỉ cần đăng nhập Mobile Banking, chọn mục 'Tiết kiệm' -> 'Mở sổ tiết kiệm' và chọn kỳ hạn mong muốn."

Kiến trúc triển khai hạ tầng (Deployment Roadmap)

  • Hạ tầng máy chủ đề xuất: 02 Máy chủ ảo hóa (VM) Linux Ubuntu Server 20.04 LTS (4 vCPU, 8GB RAM).
  • Môi trường đóng gói: Docker Container kết hợp Docker Compose (01 Container chạy Rasa Core/NLU API, 01 Container chạy Rasa Action Webhook Server, 01 Container Nginx Reverse Proxy).
  • Khả năng mở rộng: Hệ thống hỗ trợ Stateless Horizontal Scaling cho tầng xử lý NLU, đáp ứng chịu tải từ 500 đến 1.500 kết nối đồng thời với bộ cân bằng tải Nginx / HAProxy.

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

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

  • Khả năng xử lý đa ý định (Multi-intent) trong một câu đơn phức tạp còn hạn chế (ví dụ: "Kiểm tra số dư và chuyển khoản 5 triệu cho Nam").
  • Từ vựng ngoài tập dữ liệu huấn luyện (Out-of-Vocabulary - OOV) hoặc lỗi gõ sai chính tả teencode nặng chưa được tự động sửa lỗi triệt để trước khi qua NLU.
  • Cơ chế sinh phản hồi (NLG) thuần template mẫu có thể gây cảm giác máy móc khi tương tác lâu dài.

Hướng phát triển

  1. Nâng cấp mô hình biểu diễn ngôn ngữ từ FastText/CountVector lên các mô hình ngôn ngữ lớn tiền huấn luyện chuyên sâu cho tiếng Việt như PhoBERT / ViBERT.
  2. Mở rộng tích hợp hệ thống tổng đài thoại thông minh thông qua mô-đun Speech-to-Text (STT) và Text-to-Speech (TTS).
  3. Ứng dụng học tăng cường (Reinforcement Learning from Human Feedback - RLHF) để hệ thống tự học từ các phản hồi chỉnh sửa của tư vấn viên thật.

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

  • Sinh viên, học viên cao học ngành CNTT/KTPM: Nguồn tài liệu tham khảo chi tiết về quy trình xây dựng Task-oriented Chatbot từ lý thuyết nơ-ron (RNN, LSTM, CRF) đến thực thi mã nguồn.
  • Kỹ sư phát triển phần mềm (Software Developers): Nắm vững kiến trúc tích hợp Rasa với hạ tầng API doanh nghiệp, cấu hình NLU Pipeline cho tiếng Việt.
  • Khối Ngân hàng & Doanh nghiệp Tài chính: Giải pháp kỹ thuật tham khảo để triển khai trợ lý ảo On-Premise tối ưu chi phí và bảo mật tuyệt đối dữ liệu người dùng.
  • Nhà nghiên cứu NLP: Dữ liệu thực nghiệm về hiệu năng của CRF và LSTM trong việc giải quyết bài toán xử lý chuỗi ngôn ngữ tài chính tiếng Việt.

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

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

Hệ thống được thiết kế tối ưu, không phụ thuộc bắt buộc vào GPU chuyên dụng trong giai đoạn suy luận (Inference). Máy chủ chỉ cần CPU 4 Cores, 8GB RAM, dung lượng ổ cứng 20GB SSD là có thể vận hành ổn định cho quy mô 100.000 tin nhắn/ngày.

2. Chatbot xử lý thế nào khi người dùng nhập câu hỏi nằm ngoài phạm vi nghiệp vụ?

Khi điểm số độ tin cậy (Confidence Score) của ý định phân loại thấp hơn ngưỡng thiết lập (Threshold = 0.65), NLU sẽ tự động gán vào nhãn fallback_intent. Khi đó, hệ thống kích hoạt action_default_fallback đưa ra phản hồi lịch sự hướng dẫn người dùng đặt lại câu hỏi hoặc chuyển hướng kết nối trực tiếp đến tư vấn viên.

3. Làm sao để tích hợp chatbot vào hệ thống Core Banking có sẵn?

Rasa Core giao tiếp với các hệ thống ngoài hoàn toàn thông qua tầng Action Server (Python SDK). Action Server tạo các bản tin RESTful API an toàn (sử dụng Header chứa OAuth2/JWT Token hoặc mTLS) để giao tiếp với API Gateway nội bộ của ngân hàng mà không làm lộ trực tiếp cơ sở dữ liệu.

4. Chi phí vận hành giải pháp này so với việc thuê các dịch vụ Cloud AI như thế nào?

Việc sử dụng nền tảng mã nguồn mở Rasa giúp ngân hàng hoàn toàn miễn phí bản quyền phần mềm (License free). Chi phí duy nhất là chi phí hạ tầng máy chủ nội bộ cố định, giúp giảm từ 60% đến 80% chi phí vận hành hàng năm so với mô hình trả tiền theo từng request trên nền tảng đám mây khi lượng người dùng tăng cao.

5. Dữ liệu tin nhắn của khách hàng có được đảm bảo tính riêng tư và bảo mật không?

Có. Toàn bộ chuỗi văn bản, lịch sử hội thoại (Tracker Store) và thông tin thực thể đều được lưu trữ trực tiếp trên cơ sở dữ liệu nội bộ (PostgreSQL On-Premise) của ngân hàng, không đi qua bất kỳ cổng dịch vụ máy chủ bên thứ ba nào, đáp ứng nghiêm ngặt các quy định về bảo mật dữ liệu tài chính của Ngân hàng Nhà nước.


Kết luận

Đồ án thạc sĩ "Nghiên cứu và xây dựng chatbot hỗ trợ người dùng trong ngân hàng" đã giải quyết thành công bài toán tự động hóa hỗ trợ khách hàng e-banking bằng việc kết hợp hiệu quả giữa lý thuyết học máy hiện đại (CRF, LSTM, NLU Pipeline) và nền tảng mã nguồn mở Rasa. Với độ chính xác phân loại ý định đạt 93,2%, tốc độ phản hồi dưới 200ms và khả năng tùy biến sâu cho tiếng Việt, công trình không chỉ có giá trị học thuật cao trong lĩnh vực Xử lý Ngôn ngữ Tự nhiên mà còn mang tính ứng dụng thực tiễn vượt trội, mở ra giải pháp tối ưu hóa chi phí vận hành cho các tổ chức tài chính trong kỷ nguyên ngân hàng số.