chương 1, tôi sẽ nêu lên các lý thuyết về chatbot, các thành phần trong chatbot, một vài nét về xử lý ngôn ngữ tự nhiên và ứng dụng xử lý ngôn ngữ tự nhiên trong chatbot. Phần này phục vụ cho việc đọc các phần sau của tài liệu này, đặc biệt là ở chương 3. Chương 2 sẽ đi phân tích hiện trạng và khảo sát yêu cầu người dùng, qua đó đề ra các chức năng chính một cách cụ thể cho hệ thống. Ngoài ra, chương này cũng sẽ đưa ra các yêu cầu về hiệu năng cũng như yêu cầu bảo mật cho hệ thống.
Chương 3 sẽ đưa ra các các lý thuyết công nghệ mà hệ thống sử dụng ở cả quá trình tạo dựng trang web cũng như áp dụng cho các bài toán học máy. Đối với một số lý thuyết và công nghệ đặc biệt, tôi cũng sẽ giải thích lý do chọn nó thay vì các công nghệ khác. Chương 4 sẽ phân tích chỉ ra kiến trúc được sử dụng trong hệ thống. Chương này cũng sẽ nêu thiết kế chi tiết cho một số thành phần quan trọng trong hệ thống.
Ngoài ra, chương này cũng sẽ nêu thiết kế cơ sở dữ liệu, dữ liệu được triển khai ra sao. Cuối cùng sẽ đưa ra phần kiểm thử và triển khai cho hệ thống. Chương 5, tôi sẽ nêu đóng góp nổi bật của đồ án trong việc giải quyết các vấn đề liên quan đến nhu cầu sử dụng hệ thống của người dùng. Chương 6 cũng là chương cuối, tôi sẽ sẽ tổng kết lại toàn bộ nội dung , khó khăn gặp phải, những mong đợi mà người dùng hi vọng, cũng như định hướng để hoàn thiện, phát triển sản phẩm tốt hơn trong tương lại.5 Một số khái niệm các cơ sở lĩnh vực liên quan Phần này sẽ lần lượt nêu tổng quan về chatbot, các thành phần của chatbot rồi từ đó ta sẽ có cái nhìn tổng quan về chatbot.
Tiếp theo ta sẽ tìm hiểu một chút về xử lý ngôn ngữ tự nhiên và cách áp dụng xử lý ngôn ngữ tự nhiên vào bài toán chatbot. Các thành phần cơ bản trong chatbot Các thành phần của một hệ thống chatbot là không nhiều. Trong phần này, chúng ta sẽ thảo luận ngắn gọn về các thành phần chính của một chatbot. Ý định (intent) Khi một người dùng tương tác với một chatbot, mục đích sử dụng chatbot của anh ta là gì/ anh ta yêu cầu điều gì? Đó chính là ý định.
Ví dụ: khi người dùng nói, “Đặt vé xem phim” với một chatbot, chúng ta có thể hiểu rằng người dùng muốn đặt vé xem phim. Đây là ý định dành người dùng muốn chatbot thực hiện. Nó có thể được đặt tên là ý định “book_movie”. Một ví dụ khác có thể là khi người dùng nói, "Tôi muốn đặt đồ ăn" hoặc "Bạn có thể giúp tôi đặt đồ ăn không?" Chúng có thể được đặt tên là ý định “order_food”.
Tương tự như vậy, mỗi chatbot có thể có nhiều ý định khác nhau, do cách mà người tạo bot định nghĩa chúng. Thực thể (entity) Trong ví dụ về đặt vé xem phim, để thông tin được đầy đủ, bình thường chúng ta sẽ phải xác định xem phim mà người dùng cuối muốn xem là phim gì. Thì tên phim sẽ được coi là một thực thể cần xác định. Ví dụ: khi người dùng nói: “Đặt vé xem phim Bố già” thì chatbot ngoài xác định được ý định người dùng là đặt vé, phải xác định được cả thực thể tên phim là “Bố già”.
Các loại thực thể như tên phim thì thường chỉ xuất hiện trong các chatbot liên quan đến phim như đặt vé xem phim, review phim, v. Tuy nhiên, cũng có một số thực thể có thể được sử dụng ở nhiều loại chatbot khác nhau, ví dụ như số lượng, khối lượng, ngày tháng, v. Ví dụ: khi người dùng nói: “Đặt 2 vé xem phim Bố già” thì chatbot sẽ phải thêm thực thể số lượng vé muốn đặt là 2. 5 Cách nói (Utterance) Cách nói là các dạng khác nhau của lời nói, âm thanh nhưng mang cùng ý định khi sử dụng chatbot.
Ví dụ: (i) Siri, Tắt đèn. (ii) Siri, bạn vui lòng tắt đèn được không? (iii) Bạn có thể vui lòng tắt đèn được không? Cả 3 ví dụ trên đều mang ý định là tắt đèn, người dùng có thể có nhiều cách nói hơn nữa cho cùng 1 ý định, và chatbot cần nhận diện được chúng. Nên có tối đa 10 cách nói cho mỗi ý định và tối thiểu là 5, nhưng điều này không bị hạn chế [1]. Kịch bản Để hiểu hơn về kịch bản trong chatbot, ta nên biết một chút về cây quyết định.
Cây quyết định (decision tree) là một đồ thị của các quyết định và các hậu quả có thể có của nó. Sau đây, ta sẽ điểm qua một vài lợi ích khi sử dụng cây quyết định: (i) Giúp đỡ trong việc tạo ra một bức tranh đầy đủ về vấn đề. Nhìn vào cây quyết định, chúng ta có thể dễ dàng hiểu được điều gì còn thiếu hoặc điều gì cần sửa đổi. (ii) Giúp các nhà phát triển gỡ lỗi nhanh hơn, cũng có thể giúp các nhà phát triển, lãnh đạo giới thiệu hành vi dự kiến hoặc giải thích việc thay đổi nào trong kịch bản nếu cầu.
(iii) AI vẫn chưa ở giai đoạn đó mà nó có thể được đào tạo với nhiều dữ liệu và thực hiện với độ chính xác 100%. Nó vẫn đòi hỏi rất nhiều thủ tục bằng cách viết logic và quy tắc kinh doanh. Cây quyết định giúp ích cho bất cứ đâu khi quá trình học máy gặp vấn đề và thực hiện chúng. Bây giờ, chúng ta sẽ đi vào một ví dụ và sau đó liên hệ xem nó có thể giúp ích gì cho chatbot.
Hãy xem sơ đồ ví dụ cho một chatbot bắt đầu bằng câu hỏi liệu người dùng đang tìm kiếm áo thun hay quần jean và dựa trên đầu vào, luồng sơ đồ sẽ đi xa hơn để đưa ra các tùy chọn liên quan đến sản phẩm bằng cách đặt thêm câu hỏi. 6 Hình 1-3 Cây quyết định mua quần áo Ở đây, cây quyết định giúp giữ cho người dùng tập trung vào luồng trò chuyện. Các luồng trò chuyện này chính là kịch bản. Kịch bản giúp định hướng câu trả lời của chatbot khi gặp câu hỏi của người dùng, cũng như định hướng cách người dùng sẽ nói chuyện với chatbot.
Như ở ví dụ trên, kịch bản giúp định hướng chính xác để lấy các thông tin về sản phẩm mà người dùng muốn mua. Các bước cần làm để xây dựng một chatbot Xây dựng chatbot gồm khá nhiều bước, nhưng có 3 bước cơ bản mà ta cần nắm ở đây. Bước thứ nhất là thu thập tất cả các tình huống, nhiệm vụ mà bạn muốn chatbot thực hiện, cùng với đó là thu thập tất cả các câu hỏi liên quan mà người dùng có thể sẽ hỏi hay yêu cầu (câu mẫu). Mỗi câu hỏi hay yêu cầu đó sẽ xác định một ý định.
Bước này có thể đặt tên là bước thu thập dữ liệu. 7 Bước thứ hai là sắp xếp các câu mẫu đó vào các ý định, sao cho mỗi câu chỉ có một ý định. Ngoài ra, việc sắp xếp này cũng nên đảm bảo tiêu chí bên trên: Mỗi ý định sẽ chỉ có từ 5 đến 10 cách nói khác nhau. Bước này có thể gọi là bước gán nhãn.
Bước thứ ba là huấn luyện chatbot dựa trên tập dữ liệu thu được đã được gán nhãn kia. Ở bước này có nhiều tùy chọn, có thể sử dụng các phương pháp từ chuyên gia hoặc phương pháp học máy. Bước thứ tư là sử dụng kịch bản để giữ cho người dùng đi đúng luồng hồi thoại mà bạn đã cài đặt sau khi phát hiện ra ý định của người dùng. Ngoài 3 bước chính trên, ta cũng có thể kể thêm một vài bước quan trọng khác như: Thêm từ điển về từ đồng nghĩa, thực thể, từ viết sai, v.
Qua những từ điển này, chatbot có thể nhận diện thông minh hơn và đưa ra câu trả lời chính xác hơn. Xử lý ngôn ngữ tự nhiên trong chatbot Tại sao cần xử lý ngôn ngữ tự nhiên cho chatbot? Để tìm hiểu câu trả lời cho câu hỏi này, trước tiên chúng ta hãy tìm hiểu Xử lý ngôn ngữ tự nhiên (NLP). NLP là một lĩnh vực của Trí tuệ nhân tạo cho phép máy tính phân tích và hiểu ngôn ngữ của con người [1]. Hiểu ngôn ngữ tự nhiên (NLU) diễn tả khả năng hiểu ngôn ngữ tự nhiên của máy tính dưới thông tin ở dạng do con người cung cấp (ngôn ngữ tự nhiên).
Người ta nên biết rằng không có gì nhân tạo trong AI; đó thực sự là các thuật toán học máy và học sâu được viết bởi những người giỏi, đang hoạt động hiệu quả. Máy móc chưa đạt đến giai đoạn mà chúng có thể suy nghĩ tương tự như con người để có trí thông minh của riêng mình. Hệ thống AI ngày nay - những gì chúng làm và cách chúng hoạt động - là kết quả của cách chúng ta đã đào tạo chúng. Vì vậy, để hiểu ngôn ngữ tự nhiên của người dùng bằng bất kỳ ngôn ngữ nào, hoặc bất kỳ hình thức đầu vào nào (văn bản, giọng nói, hình ảnh, v.), chúng ta phải viết các thuật toán và sử dụng các kỹ thuật của NLP.
NLP được coi là bộ não của các chatbot khi xử lý dữ liệu thô, làm sạch dữ liệu, trích xuất thông tin và từ đó trả đầu ra cho người dùng. Bản thân NLP là một chủ đề lớn và đòi hỏi thời gian và sự kiên trì, nhưng có một vài phương pháp cần thiết cho một nhà phát triển chatbot mà chúng ta sẽ tìm hiểu trong các phần dưới đây. Một câu hỏi có thể nảy ra trong đầu bạn: 8 Tại sao không thể sử dụng phương pháp phân tách qua dấu phân tách. Nó không có bất kỳ ý nghĩa nào, trong khi token hóa cũng cố gắng duy trì ý nghĩa.
Ví dụ: Khi người dùng nói: “Cho tôi đặt một bàn ăn tối nay lúc 9h”. Các từ phải được tách thành như sau mới đem lại hiệu quả: {“Cho”, “tôi”, “một”, “bàn ăn”, “tối nay”, “lúc”, “9h”}. POS tagging Part-of-speech (POS) tagging (gắn thẻ) là một quá trình đọc một số văn bản và giọng nói, gán các phần cho mỗi từ một nhãn, chẳng hạn như danh từ, động từ, tính từ, v. Việc gắn thẻ POS trở nên cực kỳ quan trọng khi bạn muốn xác định một số thực thể trong một câu nhất định (NER, sẽ được trình bày ở phần sau).
Bước đầu tiên là thực hiện gắn thẻ POS và xem văn bản của chúng ta chứa những gì. Vậy tại sao cần gắn thẻ POS cho chatbot? Trả lời: để giảm độ phức tạp của việc hiểu một văn bản.