Dựa trên thiết kế đã được mơ tả, nhóm nhận thấy có một số vấn đề cần được giải quyết như sau: • Xây dựng bộ trả lời câu hỏi từ một số đoạn văn bản cho trước.
• Xác định các ý định cơ bản trong một cuộc trị chuyện.
• Thu thập dữ liệu, xử lý, huấn luyện và thuật tốn sinh cho mơ hình sinh ngơn ngữ tự nhiên. • Xây dựng bộ phân loại ý định của người dùng gồm các ý định cơ bản và câu hỏi về người. • Xây dựng một trang web để tích hợp các thành phần hệ thống thành một chatbot cho người
dùng cuối.
• Triển khai hệ thống và thu thập đánh giá từ người dùng chatbot.
5.4 Khó khăn
Trong q trình giải quyết các vấn đề ở mục 5.3, nhóm gặp phải một số khó khăn sau:
• Những đoạn văn bản khi trả lời câu hỏi cho người dùng là khơng có sẵn như khi huấn luyện mơ hình.
• Các ý định cơ bản của người dùng rất nhiều và khó có thể định nghĩa chính xác tuyệt đối. • Dữ liệu để huấn luyện cho mơ hình sinh khi thu thập bị nhiễu khá nhiều và cấu trúc chưa
phù hợp để huấn luyện mơ hình.
• Các ý định của người dùng có nhiều cách diễn đạt khác nhau và giới hạn về dữ liệu. • Việc kết hợp các thành phần cần nhiều thời gian điều chỉnh và thử nghiệm để chatbot có
phản hồi cuối là phù hợp.
5.5 Giải pháp
CHƯƠNG 5 ĐẶC TẢ VÀ HIỆN THỰC HỆ THỐNG 40 • Các đoạn văn bản để trả lời câu hỏi của người dùng có thể được thu thập bằng cách trích xuất những bài viết, bài báo trên Internet. Nhóm đã xây dựng một hệ thống dùng Google Custom Search API để có thể tìm kiếm những trang web có chưa đoạn văn bản liên qua đến câu hỏi của người dùng và xử lý để biến thành dữ liệu đầu vào cho mơ hình trả lời câu hỏi.
• Nhóm định nghĩa một số ý định cơ bản và chọn lọc lại những ý định thường gặp nhất như chào hỏi, tạm biệt, . . . tiến hảnh xây dựng một hệ thống chatbot cơ bản bằng luật.
• Dữ liệu về hội thoại sau khi thu thập, nhóm tiến hành phân tích mức độ phù hợp với yêu cầu của nhóm và tiến hành tiền xử lý một phần để thử nghiệm trên mơ hình nhỏ nhằm đưa ra đánh giá ban đầu. Sau khi kết quả khả thi, nhóm tiếp tục dùng tồn bộ dữ liệu để cải thiện độ tổng qt của mơ hình.
• Sau khi giới hạn những ý định cơ bản và những câu hỏi mà bộ trả lời câu hỏi có thể xử lý được, nhóm nhận thấy những ý định của câu nhập có thể phân loại tốt bằng phương pháp so trùng từ khố.
• Các thành phần sau khi được kết hợp sẽ được triển khai dùng thử và thu thập khảo sát đánh giá từ các bạn sinh viên để tiến hành điều chỉnh phù hợp hơn.
6
CÔNG NGHỆ SỬ DỤNG
Trong chương này, nhóm sẽ trình bày các cơng nghệ được sử dụng để phát triển hệ thống chatbot.
Mục lục
6.1 Ngơn ngữ lập trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2 Nền tảng và thư viện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
CHƯƠNG 6 CÔNG NGHỆ SỬ DỤNG 42
6.1 Ngơn ngữ lập trình 6.1.1 Python
Python là ngơn ngữ lập trình thơng dịch do Guido Van Rossum tạo ra năm 1990 và được phát triển trong một dự án mã nguồn mở. Python là ngơn ngữ lập trình bậc cao, sử dụng kiểu cấp phát bộ nhớ động, hỗ trợ các phương thức lập trình như lập trình hướng đối tượng, lập trình hàm,. . .
Hình thức của ngơn ngữ Python sáng sủa, rõ ràng, cú pháp dễ nhớ và dễ sử dụng. Do đó, Python hiện tại là ngơn ngữ được ưa chuộng để dạy cho người mới bắt đầu lập trình.
Những năm gần đây, với sự phát triển mạnh mẽ của Machine Learning và Deep Learning, Python với sự hỗ trợ tốt cho xử lý vector và ma trận cùng với các thư viện hỗ trợ như Pandas, Numpy, Scipy,. . . Python trở nên ngày càng phổ biến.
Chính vì sử phổ biến và hỗ trợ tốt cho việc phát triển các ứng dụng Machine Learning nên tôi chọn Python để hiện thực các thành phần trong chatbot.
6.1.2 JavaScript
JavaScript được tạo ra bởi Brandan Eich, một nhân viên của Netscape, vào tháng 9 năm 1995, và đã trở thành ngơn ngữ lập trình phổ biến nhất thế giới trong nhiều năm gần đây.
JavaScript có một số đặc điểm sau: • Là ngơn ngữ lập trình thơng dịch.
• Dễ học và dễ sử dụng, cấu trúc gần giống với C++. • Hoạt động trên đa nền tảng.
Hiện nay, nhờ sự phát triển các framework và thư viện hỗ trợ, JavaScript có thể dùng để viết các ứng dụng web phía người dùng (client) và cả phía máy chủ (server), đây cũng là lý do khiến cho nó trở nên phổ biến.
JavaScript hỗ trợ phát triển ứng dụng web nhanh chóng nên tơi quyết định chọn nó để phát triển ứng dụng chatbot này.
6.2 Nền tảng và thư viện 6.2.1 NodeJS
NodeJS là một nền tảng được viết trên JavaScript runtime. NodeJS được xây dựng và phát triển từ năm 2009, bảo trợ bởi công ty Joyent, trụ sở tại California, Hoa Kỳ. Phần lõi của nó được viết trên C++ nên tốc độ xử lý khá nhanh. Đặc điểm của NodeJS là xử lý hướng sự kiện bất đồng bộ và dùng để phát triển các ứng dụng mạng có khả năng mở rộng cao. Nhờ vào những đặc điểm trên, ở đề tài này, tôi sử dụng NodeJS để phát triển chatbot.
CHƯƠNG 6 CÔNG NGHỆ SỬ DỤNG 43
6.2.2 Pytorch
Pytorch là một thư viện được viết dựa trên Python, nó được dùng để tạo ra các mơ hình Deep Learning với kiến trúc phức tạp do bản thân Pytorch đã hiện thực sẵn các module trong các mạng lưới Deep Learning, và cũng chính vì vậy nên được nhiều người mới tiếp cận lựa chọn. Cấu trúc dữ liệu cơ bản của Pytorch là các Tensor, mang giá trị, kiểu dữ liệu và kích thước của dữ liệu.
6.2.3 Pandas
Pandas là một thư viện Python mã nguồn mở, hỗ trợ đắc lực cho việc thao tác dữ liệu. Với Pandas, người dùng có thể dễ dàng tạo ra các bảng dữ liệu và thực hiện các phép truy vấn, thống kê trên nó, cho phép đọc/ghi các định dạng file một cách dễ dàng.
6.2.4 TensorFlow
TensorFlow là một thư viện mã nguồn mở hỗ trợ tính tốn số học theo ý tưởng về đồ thị luồng dữ liệu. TensorFlow tích hợp sẵn rất nhiều các thư viện Machine Learning, Deep Learning, có khả năng tương thích và mở rộng tốt. Thư viện này được Google phát triển để phục vụ cả nghiên cứu lẫn xây dựng các ứng dụng thực tế.
6.2.5 Botkit
Botkit là một công cụ phát triển mã nguồn mở để xây dựng các chatbot, ứng dụng và tích hợp tuỳ chỉnh cho các nền tảng tin nhắn phổ biến (Messenger, Slack,. . . ). Botkit là một thư viện lập trình, cùng với bộ cung cụ hỗ trợ và plugin, cung cấp cho các nhà xây dựng chatbot một giao diện độc lập, giống như ngôn ngữ để xây dựng một ứng dụng chatbot hoặc nhắn tin cho bất kỳ nền tảng nào.
6.2.6 Scikit-learn
Scikit-learn (Sklearn) là thư viện phổ biến dành cho các thuật tốn học máy được viết trên ngơn ngữ Python. Thư viện cung cấp một tập các cơng cụ xử lý các bài tốn Machine Learning và Statistical Modeling gồm: classification, regression, clustering, và dimensionality reduction. Thư viện được cấp phép bản quyền chuẩn FreeBSD và chạy được trên nhiều nền tảng Linux. Scikit-learn được sử dụng như một tài liệu để học tập. Tôi sử dụng thư viện này trong việc tạo SVM Classifier trong bộ nhận diện ý định người dùng.
6.2.7 Pymongo
Pymongo là một thư viện Python hỗ trợ thao tác với cơ sở dữ liệu MongoDB, bao gồm việc tạo MongoClient kết nối dựa trên URI (Uniform Resource Identifier) của cơ sở dữ liệu và các thao
CHƯƠNG 6 CÔNG NGHỆ SỬ DỤNG 44 tác Create, Read, Update, Delete (CRUD) trên cơ sở dữ liệu, cú pháp của thư viện khá giống với việc thao tác với MongoDB trên console.