STT Button 1 Button 2 Canvas 3 Checkbutton 4 Entry 5 Frame 6 Label
7 ListBox 8 Menubutton 9 Menu 10 Message 11 Radiobutton 12 Scale 13 Scrollbar 14 Text 15 Toplevel 16 Spinbox 17 PanedWindow 18 LabelFrame 18 MessageBox
Tkinter cung cấp các phương thức để bố cục các widget sau:
cách sử dụng các tùy chọn khác nhau được chỉ định trong lệnh gọi phương thức.
SVTH: LÊ TRUNG KIÊN
Hình 4.7: Ví dụ phương thức pack() Tkinter
2. Phương thức grid()
Trình quản lý layout grid() sắp xếp các widget ở dạng bảng. Chúng ta có thể chỉ định các hàng và cột. Chúng ta cũng có thể chỉ định khoảng cột (chiều rộng) hoặc chiều dài hàng (chiều cao) của widget con.
Hình 4.8: Ví dụ phương thức grid() Tkinter
3. Phương thức place()
Trình quản lý layout place() sắp xếp các widget theo các tọa độ x và y.
Hình 4.9: Ví dụ phương thức place() Tkinter
4.3 Xây dựng, thiết kế chương trình cho chatbot4.3.1 Mục đích và nội dung chương trình 4.3.1 Mục đích và nội dung chương trình
Chương trình chatbot được viết bằng ngơn ngữ Python kết hợp với việc sử dụng thư viện Pytorch và một số thư viện hỗ trợ khác có mục đích nghe câu hỏi để trả lời, phân tích và lưu trữ dữ liệu người dùng. Tăng khả năng tác với người dùng trực quan
SVTH: LÊ TRUNG KIÊN
và hiệu quả. Để đạt được những mục tiêu đó, chương trình cần phải giải quyết được các nội dung sau:
• Khả năng xử lý ngơn ngữ tự nhiên.
• Đào tạo dữ liệu các gói câu hỏi cho chatbot.
• Phân tích và đưa ra câu trả lời đúng nhất theo dữ liệu đã đào tạo.
• Xây dựng giao diện tương tác với người dùng.
• Giao tiếp với thiết bị ngoại vi, gửi tín hiệu điều khiển để quản lý thu thập tài liệu.
4.3.2 Thiết kế sơ đồ khối hệ thống
Chatbot được xây dựng dựa trên mơ hình phân loại ý định.
Hình 4.10: Sơ đồ khối các bước phân loại ý định
4.3.2.1 Bước huấn luyện mơ hình 4.3.2.1.1 Dữ liệu huấn luyện
Để dữ liệu huấn luyện dể dàng kiểm soát và truy xuất ta thêm tất cả dữ liệu ý định mà ta muốn huấn luyện vào file json .
Để tạo dữ liệu huấn luyện ta cần tạo nhiều gói từ và mỗi gói từ đại diện cho một
ý định và phải tuân theo ba thứ:
SVTH: LÊ TRUNG KIÊN
Thứ 1: Tên ý định (tag). Để máy tính có thể hiểu, trích xuất, phân biệt được dữ liệu ta cần đặt tên cho từng ý định nó giống như một nhãn mác hàng hóa, mỗi tên ý định phải khác nhau để máy tính khơng bị nhầm lẫn
Thứ 2: Câu hỏi đầu vào (patterns). Là những câu hỏi mà ta muốn máy tính học được, để tránh trường hợp máy tính khơng hiểu ta tạo thêm nhiều câu hỏi theo nhiều cách diễn đạt khác nhau.
Thứ 3: Câu phản hồi đầu ra (responses). Là những câu trả lời mà chúng ta muốn máy tính phản hồi. Để tăng thêm phong phú câu trả lời ta nên thêm nhiều câu trả lời cùng nội dung.
Hình 4.11: Cấu trúc dữ liệu intents
4.3.2.1.2 Tiền xử lý
Vì bước tiền xử lý đóng vai trị quan trọng trong hệ thống chatbot. Nếu tiền xử lý làm sạch và chuẩn hóa tốt dữ liệu đầu vào thì sẽ làm tăng khả độ chính xác cũng như độ thơng minh của chatbot.
SVTH: LÊ TRUNG KIÊN
Hình 4.12: Sơ đồ khối tiền xử lý huấn luyện
Để chuẩn hóa và làm sạch dữ liệu ta thực hiện các bước: Bước 1. Tách từ trong câu:
Để tách được từ trong một câu tôi sử dụng thư viện nltk trên python. Ví dụ: để tách câu “What are you doing?” ta thực hiện lệnh như hình().
Hình 4.13: Tách từ trong câu với nltk
Kết quả câu “What are you doing?” đã trở thành một mảng từ riêng lẻ ['What', 'are', 'you', 'doing', '?']
Bước 2. Chuyển các từ tiếng anh về nguyên mẫu:
SVTH: LÊ TRUNG KIÊN
Sau khi tách câu ta chuyển các từ về nguyên mẫu và chuyển chữ hoa thành chữ thường bằng cách dùng thư viện nltk trên python
Hình 4.14: Chuyển từ về nguyên mẫu với nltk
4.3.2.1.3 Trích xuất đặc trưng
Hình 4.15: Sơ đồ khối trích xuất đặc trưng huấn luyện
Để sử dụng được các thuật tốn ta cần vector hóa các văn bản, các đoạn text đầu
vào.
Có nhiều cách khác nhau có thể đưa dữ liệu văn bản thành dữ liệu dạng số:
+ Word2Vec
+ One-hot Encoding
SVTH: LÊ TRUNG KIÊN
+ Bag of Words
+ ….
Ở đây tôi sử dụng Bag of Words(BoW) để giải quyết vấn đề này vì lượng dữ liệu hiện tại cịn ít, đơn giản, dễ dàng cài đặt.
BoW hoạt động bằng cách đếm số lần xuất hiện của mỗi từ trong văn bản. Ví dụ: có hai văn bản đơn giản
1. What your name ?
2. How are you.
Tiền xử lý văn bản này, ta có danh sách các từ được sử dụng, được gọi là từ điển để từ điển gọn gàng ta có thể xóa bỏ những từ trùng lặp thì ta có từ điển sáu từ như sau:
["are", "what","your","you","name","how"]
Vậy với mỗi văn bản tạo ra một vector đặc trưng với chiều dài bằng sáu, mỗi phần tử đại diện cho số từ tương ứng xuất hiện trong văn bản đó.
1. [0. 1. 1. 0. 1. 0.]
2. [1. 0. 0. 1. 0. 1.]
Để biểu diễn trên python ta dùng thư viện numpy để tạo được vector từ
SVTH: LÊ TRUNG KIÊN
Hình 4.16: Tạo vector từ trên python
4.3.2.1.4 Huấn luyện mơ hình
Pha huấn luyện dữ liệu là pha mấu chốt, quan trọng nhất trong xây dựng mơ hình chatbot. Sau bước tiền xử lý và trích xuất đặc trưng chỉ mang lại tác dụng làm cho kết quả của mơ hình được tốt hơn, thì pha huấn luyện này là pha không thể thiếu.
SVTH: LÊ TRUNG KIÊN
Hình 4.17: Lưu đồ giải thuật huấn luyện mơ hình chatbot
Đầu tiên của bước huấn luyện mơ hình ta tìm kiếm, lấy dữ liệu từ bước trích xuất đặc trưng bao gồm từ điển (all_words), tên ý định (tags), câu hỏi (patterns), câu trả lời (responese) và thiết lập số lần huấn luyện cho mơ hình (numEpoch) ở đây cho bằng 1000.
SVTH: LÊ TRUNG KIÊN
Ví dụ : Với dữ liệu ở hình 4.14 thì ta có từ điển câu hỏi với 24 từ: ["'s", 'a', 'anyon', 'are', 'bye', 'day', 'good', 'goodby', 'hello', 'help', 'hi', 'how', 'is', 'later', 'lot', 'name', 'see', 'thank', 'that', 'the', 'there', 'what', 'you', 'your'] tương ứng với với vector có chiều dài bằng 24.
Tiếp theo ta xử lý dữ liệu vào bằng thư viện numpy để tính tốn và trích xuất nhất, ta tiến hành tạo mảng ý định thì mảng sẽ là bốn ý định ['goodbye', 'greeting', 'my name', 'thanks'] và tạo mảng xy với x là câu hỏi (patterns) y là ý định (tags) thì mảng sẽ là [(['Hi'], 'greeting'), (['How', 'are', 'you'], 'greeting'), (['Is', 'anyone', 'there', '?'], 'greeting'), (['Hello'], 'greeting'), (['Good', 'day'], 'greeting'), (['Bye'], 'goodbye'), (['See', 'you', 'later'], 'goodbye'), (['Goodbye'], 'goodbye'), (['Thanks'], 'thanks'), (['Thank', 'you'], 'thanks'), (['That', "'s", 'helpful'], 'thanks'), (['Thanks', 'a', 'lot', '!'], 'thanks'), (['What', 'your', 'name', '?'], 'my name'), (['What', 'is', 'the', 'name'], 'my name')]. Đễ để nhìn ta xem (bảng 4.4)