MỞ ĐẦU: Giới thiệu và đưa ra hướng nghiên cứu bài toán chatbot CHƢƠNG I: Tổng quan hệ thống chatbot: Giới thiệu tổng quan hệ thống chatbot. Cấu tạo và nhiệm vụ các thành phần hệ thống chatbot. CHƢƠNG II: Một số kỹ thuật sử dụng trong chatbot: Hiểu và nắm được một số kỹ thuật hay thuật toán cơ bản sử dụng trong chatbot để từ đó có thể điều chỉnh phù hợp với ngôn ngữ tiếng việt, giúp chatbot xử lý thông minh hơn. CHƢƠNG III: Xây dựng chatbot lĩnh vực ngân hàng : Xây dựng ứng dụng chatbot cho ngân hàng trên nền tảng mã nguồn mở Rasa.
Đưa ra những kết luận và đánh giá, cải tiến hệ thống. KẾT LUẬN : Đưa ra những kết luận, đánh giá và định hướng nghiên cứu tiếp theo PHỤ LỤC: Danh sách các đoạn hội thoại với bot được đính kèm ở phần thử nghiệm 4 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 1 : TỔNG QUAN HỆ THỐNG CHATBOT Chương này sẽ giới thiệu tổng quan về hệ thống chatbot, cấu trúc các thành phần và những vấn đề khi xây dựng hệ thống chatbot.1 Giới thiệu Hệ thống đối thoại người máy hay còn gọi với thuật ngữ là chatbot ChatBot là một chương trình máy tính tiến hành cuộc trò chuyện thông qua nhắn tin nhanh, nó có thể tự động trả lời những câu hỏi hoặc xử lý tình huống. Phạm vi và sự phức tạp của ChatBot được xác định bởi thuật toán của người tạo nên chúng. ChatBot thường được ứng dụng trong nhiều lĩnh vực như thương mại điện tử, dịch vụ khách hàng, y tế, tài chính ngân hàng, các dịch vụ giải trí… Chatbot có thể được chia thành 2 loại: - Hệ thống hướng mục tiêu trên một miền ứng dụng (Task-Oriented) - Hệ thống không có định hướng mục tiêu (chit-chat) Miền mở (Open Domain): Mô hình trả lời tự động trên miền mở cho phép người dùng có thể tham gia trò chuyện với một chủ đề bất kỳ, không nhất thiết phải có một mục tiêu rõ ràng hay một ý định cụ thể nào.
Các cuộc trò chuyện trên mạng xã hội như Facebook, Twitter thường là miền mở, chúng có thể đi vào tất cả các chủ đề. Số lượng các chủ đề thảo luận được đề cập đến là không giới hạn, do đó, tri thức yêu cầu được tạo ra để trả lời các câu đối thoại thuộc miền mở trở nên khó hơn. Tuy nhiên, việc thu thập trích rút dữ liệu từ miền này khá phong phú và đơn giản. Miền đóng (Close Domain): Mô hình trả lời tự động thuộc miền đóng thường tập trung vào trả lời các câu hỏi đối thoại liên quan đến một miền cụ thể, ví dụ như: Y tế, Giáo dục, Du lịch, Mua sắm,.
Trong một miền đóng cụ thể, không gian các mẫu hỏi input và output là có giới hạn, bởi vì các hệ thống này đang cố gắng để đạt được một mục tiêu rất cụ thể. Hệ thống hỗ trợ kỹ thuật (Technical Customer Support) hay tư vấn và hỗ trợ mua hàng (Shopping Assistants) là các ứng dụng thuộc miền đóng. Các hệ thống này không thể đối thoại về “Chính trị” hay “Pháp luật”, chúng chỉ cần thực hiện các nhiệm vụ cụ thể một cách hiệu quả nhất có thể. Chắc chắn, người dùng vẫn có thể hỏi đáp bất cứ gì, nhưng hệ thống không yêu cầu phải xử lý những trường hợp ngoại lệ này.
5 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mỗi cách tiếp cận bài toán đều có hướng giải quyết khác nhau dẫn tới các kỹ thuật sử dụng khác nhau. Trong luận văn này, tôi sẽ tập trung vào giải quyết trƣờng hợp thứ nhất là bài toán hƣớng mục tiêu trên một miền ứng dụng đóng.2 Cấu trúc các thành phần hệ thống chatbot Hình 1.1: Cấu trúc các thành phần cơ bản hệ thống chatbot [12] Chatbot có 3 thành phần chính là hiểu ngôn ngữ tự nhiên (NLU), quản lý hội thoại (DM), thành phần sinh ngôn ngữ (NLG). Các thành phần nhận dạng giọng nói Speech Recognition (text to speech hay speech to text) là các thành phần tăng cường. Mỗi thành phần trong chatbot đều có vai trò riêng: NLU: bao gồm việc xử lý ngôn ngữ tự nhiên (NLP) có nhiệm vụ xác định được ý định câu hỏi(intent classification) và trích chọn thông tin (slots filter) DM: Quản lý hội thoại có nhiệm vụ xác định được hành động (action) tiếp theo dựa vào trạng thái hành động trước đó hay ngữ cảnh hội thoại.
Các ngữ cảnh này phải được đối chiếu trong các kịch bản dựng sẵn (history) đã đào tạo cho bot. Thành phần này cũng đảm nhiệm việc lấy dữ liệu từ hệ thống khác qua các API gọi trong action NLG: là thành phần sinh ngôn ngữ dựa vào chính sách (policy) và hành động được xác định trong DM thông qua các tập hội thoại. NGL có thể được sinh ra 6 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com câu trả lời dựa vào tập mẫu câu trả lời (pre-defined template) đã đào tạo cho bot. Để rõ chi tiết luồng xử lý tin nhắn từ các thành phần chatbot ta xem mô hình 1.2: Mô hình các thành phần xử lý trong chatbot [1] 1.3 Hiểu ngôn ngữ tự nhiên (NLU) Đây có thể nói là thành phần quan trọng nhất của chatbot.
Chatbot có thông minh hay không thì đây là thành phần quyết định. Mục tiêu của thành phần này là trích xuất ra 3 thành phần thông tin từ câu nói của người dùng: Đầu tiên là phân loại lĩnh vực (domain classification), nó có thể là lĩnh vực ngân hàng, y tế hay bảo hiểm. Nếu trong trường hợp chỉ có một lĩnh vực thì không cần thiết cho bước phân loại này. Tiếp đến là phân loại ý định (intent classification), ví dụ như xác định được ý định tra cứu thông tin tài khoản hoặc ý định kiểm tra số dư.
Cuối cùng là bước trích xuất thông tin (slot fillter hay entity extraction) trong câu hỏi người dùng. Ví dụ ta phải trích chọn được thông tin số tháng trong câu hỏi người dùng: “lãi xuất kỳ hạn 3 tháng là bao nhiêu”. Từ việc trích xuất được thông tin 3 tháng thì chatbot mới có cơ sở trả lời cho người dùng. 7 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com NLU xử lý tin nhắn người dùng bằng một đường ống (pipeline) nơi mà cấu hình các bước xử lý liên tiếp theo tuần tự : Phân loại tên Phân loại ý Trích chọn miền (Domain định (intent thông tin (Entity Classification) Classification) Extraction) Hình 1.3: Các bước xử lý chính trong pipeline của NLU [1] Trong đường ống này thì bạn có thể tùy chỉnh các thành phần từ bước tiền xử lý dữ liệu, mô hình hóa ngôn ngữ, các thuật toán dùng để tách từ và trích xuất thông tin thực thể… Để chi tiết các bước xử lý ta xem trong mô hình 1.4: Trong đó bước entity extraction chính là bước slot filling ở hình 1.3 Phân loại ý định trong pipelined “Lãi suất vay 12 tháng?” {intent:” interest”} Vector hóa ngôn ngữ Phân loại ý định (Vectorrization) (intent classification) Lãi suất vay Hiểu ngôn ngữ 12 tháng? tự nhiên (NLU) Trích xuất thông tin trong pipelined “Lãi suất vay 12 tháng?” {“loan”:”vay”,“term”:”12 tháng”} Thuật toán tách từ Trích xuất thông tin thực (Tokenizer) thể (entity extraction) Phân tích cú pháp Nhận dạng tên thực thể (chunker) (Name entity recognition) Gán nhãn từ loại (Part of Speech Tagger) Hình 1.4: Các bước xử lý trong NLU [2] 8 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Để phân loại được ý định câu người dùng thì ta cần mô hình hóa ngôn ngữ tức là việc biểu diễn ngôn ngữ dưới dạng vector số học cho máy có thể hiểu được (vectorization).
Phương pháp phổ biến nhất hiện tại là word embedding (nhúng từ). Tập nhúng từ là tên chung cho một tập hợp các mô hình ngôn ngữ và các phương pháp học đặc trưng trong xử lý ngôn ngữ tự nhiên (NLP), nơi các từ hoặc cụm từ từ vựng được ánh xạ tới vectơ số thực. Về mặt khái niệm, nó liên quan đến việc nhúng toán học từ một không gian với một chiều cho mỗi từ vào một không gian vectơ liên tục với kích thước thấp hơn nhiều. Một số phương pháp biểu diễn phổ biến như Word2Vec, GloVe hay mới hơn là FastText sẽ được giới thiệu trong phần sau.
Sau khi mô hình hóa ngôn ngữ bao gồm dữ liệu đầu vào training cho bot thì việc xác định ý định người dùng từ câu hỏi người dùng dựa trên tập đã training là bước phân loại ý định (intent classification) hay phân loại văn bản. Ở bước này ta có thể dùng một số kỹ thuật như: Naive Bayes, Decision Tree (Random Forest), Vector Support Machine (SVM), Convolution Neural Network (CNN), Recurrent Neural Network (RNN), Long Short-Term Memory (LSTM, Bi-LSTM). Hầu hết các chatbot hiện tại đều ứng dụng mô hình deep learning như RNN và LSTM để phân loại ý định người dùng. Bài toán thách thức lớn nhất cho các chatbot ở bước này là xác định nhiều ý định(multiple intents) trong một câu nói người dùng.
Ví dụ nếu bạn nói “xin chào, kiểm tra cho tôi số dư tài khoản” thì bot phải xác định được 2 ý định “chào hỏi” và “kiểm tra số dư” trong câu nói người dùng. Nếu bot có thể hiểu và trả lời được câu hỏi loại này sẽ giúp việc tương tác với bot trở nên tư nhiên hơn. Tiếp đến là việc trích xuất thông tin trong câu hội thoại người dùng. Các thông tin cần trích xuất thường dưới dạng số, chuỗi hoặc thời gian và chúng phải được khai báo và huấn luyện trước.
Phân tách các từ (Tokenization hay word segmention): Tách từ là một quá trình xử lý nhằm mục đích xác định ranh giới của các từ trong câu văn, cũng có thể hiểu đơn giản rằng tách từ là quá trình xác định các từ đơn, từ ghép… có trong câu. Đối với xử lý ngôn ngữ, để có thể xác định cấu trúc ngữ pháp của câu, xác định từ loại của một từ trong câu, yêu cầu nhất thiết đặt ra là phải xác định được đâu là từ trong câu. Vấn đề này tưởng chừng đơn giản với con người nhưng đối với máy tính, đây là bài toán rất khó giải quyết. Thông thường thì các ngôn ngữ phân tách các từ bởi khoảng trắng nhưng đối với ngôn ngữ tiếng việt thì có rất nhiều từ ghép và cụm từ.
Ví dụ từ ghép “tài khoản” được tạo bởi 2 từ đơn “tài” và “khoản”. Có một số thuật toán hỗ trợ giải quyết bài toán này như mô hình so khớp từ dài nhất (longest matching), so khớp cực 9 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.1 Xác định ý định ngƣời dùng Hình 1.