Chatbot – Chương 2: Cách huấn luyện của chatbot

Chatbot – Chương 2: Cách huấn luyện của chatbot

I. Chat bot được huấn luyện như thế nào?

Một mô hình học máy huấn luyện chatbot thường gồm hai chức năng chính: nhận dạng Intents và nhận dạng Entities. Nhận dạng Intent giúp cho hệ thống hiểu được ý định của người dùng ở mỗi message đầu vào. Nhận dạng Entities giúp hệ thống lấy được các thuộc tính (hay thực thể – Entities) của Intents tương ứng. Để thực hiện 2 nhiệm vụ này, người ta sẽ sử dụng 2 mô hình học máy làm 2 chức năng khác nhau: Phân loại #Intents và phân loại @Entities.

VTI Japan

1. Phân loại Intent

Để làm nhiệm vụ này, cần một mô hình phân loại chủ đề văn bản (Topic classification). Dữ liệu là tập hợp các văn bản (trong trường hợp chatbot là các message của người dùng) đã được gán sẵn nhãn chủ đề. Mô hình phân loại văn bản phổ biến sử dụng Bag of words làm đặc trưng phân loại (features). Các mô hình hiện đại có thể sử dụng Continuous Bag of Words kết hợp với deep learning. Ý tưởng chính là đếm tần xuất xuất hiện của các từ xuất hiện trong văn bản, dựa trên từ điển là tập hợp tất cả các từ xuất hiện trong toàn văn bản:

① Tùng thích xem đá bóng. Mạnh cũng thích xem đá bóng

② Tùng còn thích xem cả phim Nhật

Với từ vựng của 2 messages trên, ta thành lập được từ điển sau:

[“Tùng”, “thích”, “xem”, “đá”, “bóng”, “Mạnh”, “cũng”, “còn”, “cả”, “phim”, “Nhật”]

Bằng cách này ta chuyển được Text thành Number số lần hiển thị của từ vựng để máy tính xử lý

① [1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0]

② [1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1]

Hai messages ① và ② giờ đã được chuyển hóa thành 2 vector. Bản chất của Xử lý ngôn ngữ tự nhiên là dùng những phép biến đổi (Transformation) để biến từ text sang number, sao cho giữ được những đặc trưng của văn bản.

Ví dụ: Phân loại Intent #Greeting và Intent #Complaint

Người ta dùng 2 tập dữ liệu là những câu mà người dùng hay dùng để chào hỏi và tập những câu mà người dùng hay dùng để phàn nàn:

Chào hỏi:

#Greeting

1. Chào anh! 2. chào bot!
3. Xin chào! 4. Bot ơi!
5. Chào bạn! 6. Bạn ơi
7. Hi bot 8. Chào bot ơi!
9. Chào buổi sáng 10. Hello
11. Chatbot ơi 12. Hi
13. Chào anh/chị 14. Hey
15. Chào anh ạ 16. Chào chị ạ

Phàn nàn:

#Complaint

1. Dịch vụ thật tệ 2. Sản phẩm kém chất lượng
3. Chăm sóc khách hàng không tốt 4. Sản phẩm của bên anh rất dễ hỏng
5. Phải nói là kém chất lượng 6. Không hài lòng chút nào cả
7. Sản phẩm xấu và nặng, tôi không thể hài lòng! 8. Không được như tôi kỳ vọng!
9. Thiếu tính năng quan trọng 10. Xấu quá
11. Không có gì nổi bật 12. Màu sắc kém sinh động
13. Dễ hỏng quá vậy 14. Màn hình bị mờ và nhòe
15. Quá đắt 16. Kém linh hoạt

Sau khi huấn luyện hệ thống với tập dữ liệu thứ nhất, hệ thống có khả năng phân loại chính xác các message mới có nội dung giống các message trong tập huấn luyện này vào Intent #Greeting. Nếu người dùng nhập vào những message khác không nằm trong tập huấn luyện, nhưng có xu hướng có những từ vựng như: **chào, ơi, hello, hey, hi, … **hệ thống cũng có xác xuất cao phân loại những message này vào Intent #Greeting

Đối với tập dữ liệu thứ 2 cũng tương tự. Nếu người dùng gõ 1 trong những câu đã được huấn luyện, hệ thống sẽ phân loại chính xác vào Intent #Complaint. Đối với những message chưa từng huấn luyện, nhưng có mức độ tương tự cao, như có các từ vựng mô tả sự phàn nàn đã được huấn luyện trong tập huấn luyện như: kém, thiếu, xấu, nặng, không tốt, tệ, không đẹp, thiếu, hỏng, bị, không hài lòng,… sẽ có xu hướng cao được phân loại vào nhóm Phàn nàn. (Đây là một trong các khía cạnh của huấn luyện, thực tế việc huấn luyện mô hình học máy cho phân loại chủ đề liên quan đến rất nhiều đặc trưng hơn).

Bài toán phân loại chủ đề (và phân loại Intent cho chatbot) gần tương tự như bài toán phân tích tâm lý khách hàng (sentiment analysis). Từ một nhận xét về một sản phẩm dịch vụ, liệu hệ thống có biết được nhận xét đó là tích cực, tiêu cực hay trung lập hay không?

VTI Japan

2. Phân loại Entities

Trong xử lý ngôn ngữ tự nhiên, để nhận ra một thực thể (Tên người, tên địa danh, ngày tháng, con số,…) trong một văn bản, người ta sử dụng một kỹ thuật học máy có tên gọi: Named Entity Recognition (NER) hay còn gọi là Entity Extraction (Nhận dạng thực thể định danh hay trích xuất thực thể).

Ví dụ:

“Tôi muốn bay tới London **vào lúc **2 PM **ngày **20/10/2016”

Làm sao để hệ thống nhận ra được **London **là @Location, **2 PM **là @Time và

**20/10/2016 **là @Date?

Người ta thường dùng một mô hình học máy (phổ biến là Part of speech Tagger) để huấn luyện và gán nhãn cho mỗi token của văn bản.

Ví dụ: Có 1 message đặt vé máy bay. Bằng bộ tách từ, message được phân chia thành các token. Có thể gắn nhãn cho từng token trong message như sau:

Tôi/O_W muốn/ O_W bay/O_W tới/O_W London/@Location vào/O_W

lúc/O_W 2PM@Time ngày/O_W 20/10/2016@Date

Bằng cách gán nhãn @Location cho London, @Time cho 2 PM, @Date cho 20/10/2016 **và tất cả các từ còn lại nhãn O_W, khi đưa vào tập dữ liệu huấn luyện đủ lớn, hệ thống có thể nhận diện được chính xác những gì đã huấn luyện. Đối với những message mới, nếu chứa những token viết hoa ký tự đầu và nằm ngay sau token “từ ….” (from) hoặc “tới**….” (to) sẽ được dự đoán là @Location. Những token có dạng DD/MM/YYYY có xu hướng được phân loại là @Date và các token có dạng HH:MM hoặc chứa (AM, PM) sẽ được phân loại @Time. Tất cả các token còn lại không có những đặc tính như trên có xu hướng được phân

loại là O_W. Những mô hình hiện đại nhất hiện nay ứng dụng Deep learning cho bài toán

NER. Mô hình cho độ chính xác cao nhất tới giờ là mô hình Deep learning kết hợp CRF mang tên Bi-LSTM-CRF.

VTI Japan

II. Làm sao để huấn luyện chatbot hiệu quả

Như phân tích ở trên, chat bot sẽ dựa vào xử lý ngôn ngữ tự nhiên xây dựng các mô hình dự đoán. Việc dự đoán của chatbot tốt hay không phụ thuộc vào việc phân loại Intent và Entities có rõ ràng hay không. Việc phân loại rõ rang bao gồm những yếu tố sau:

1. Tập huấn luyện có sự đồng nhất càng cao thì càng dự đoán chính xác.

Format cho @Date thường là: DD/MM/YYYY hoặc DD-MM-YYYY, như vậy format của ngày tháng khá dễ đoán. Tuy nhiên, xác định format cho Entities @Term_Insurance (thời hạn bảo hiểm) có thể phức tạp hơn: Trung hạn, dài hạn, ngắn hạn, 3 năm, 5 năm, 12 năm, 20 năm, . . .Lúc này, @ Term_Insurance có thể là token gồm 2 tiếng toàn ký tự la tinh, hoặc 2 tiếng nhưng 1 tiếng là số, 1 tiếng là chữ cái la tinh. Rõ ràng trong trường hợp này việc predict sẽ khó khăn hơn so với entities @Date.

2. Đúng chính tả và ngữ pháp sẽ dễ predict hơn viết tắt và viết sai chính tả

Đối với phân loại Entities, việc người dùng nhập vào message đúng chính tả rất quan trọng vì thông thường, đặc trưng cấu thành của từ thường được xét khá nhiều. Mô hình NER dựa vào spelling (phát âm của từ) làm đặc trưng phân loại. Việc người dùng gõ Tokyo sẽ khác với tokyo, giầy mới sẽ khác với giay moi (giấy mời). Tiếng Nhật có thể không bị ảnh hưởng bởi dấu và biết hoa thường, tuy nhiên khi được đọc bởi máy tính cũng sẽ được mã hóa bởi một bộ mã hóa nào đó (ASCII, UTF-8,…) thành các ký tự máy tính hiểu được, nên vẫn có thể bị ảnh hưởng bởi đặc trưng spelling khác. Ngoài ra, yếu tố ngữ cảnh (Context) cũng có thể được xét đến khi huấn luyện Entities. Token nào hay đứng trước 1 địa điểm? có thể là các token: **tại, ở, từ, đến, … (at, in, from, to) **đối với Entities @Location. Hay đối với Entities @Organization, đứng sau 1 tổ chức có thể là

các từ company, club, team, organization, union, …

Khi phân loại thực thể này với thực thể kia, người ta có thể dùng một số đặc trưng sau:

・ Token đang xét có phát âm như thế nào?

・ Token đang xét là từ loại gì? (động từ, danh từ, tính từ, số từ,…)

・ Token đang xét có viết hoa không?

・ Token đang xét có viết thường không?

・ Token đang xét có chứa chữ số lẫn chữ cái không?

・ Token đang xét có phải toàn chữ số không?

・ 3 ký tự đầu tiên của token hiện tại là gì? (Prefix)

・ 3 ký tự cuối cùng của token hiện tại là gì? (Suffix)

・ Token đứng trước token hiện tại là gì? (Context)

・ Token đứng sau token hiện tại là gì? (Context)

Việc viết tắt hoặc sai chính tả không có nghĩa là hệ thống không dự đoán được đúng Entities, mà là xác suất dự đoán Entities chính xác bị giảm đi. Ví dụ: Tôi muốn tới hanoi

Mặc dù người dùng gõ sai chính tả, nhưng hệ thống vẫn có thể predict được là @Location vì còn yếu tố ngữ cảnh: từ đứng trước hanoi là tới.

3. Synonym (từ đồng nghĩa)

Dùng Synosym trong trường hợp từ đồng nghĩa. Synosym được dùng ngay ở khâu tách từ (Tokenizer). Khi gặp từ đã được định nghĩa là Synonym, token sẽ được thay thế bằng một từ gốc nào đó. Vậy khi định nghĩa một Entity, ta xác định ngay các từ đồng nghĩa của token đó.

VD: Cóc các nhóm đồng nghĩa: [xấu, tệ, ma chê quỷ hờn] hay từ động nghĩa [manga, truyện tranh, comic, sách thiếu nhi,]

VTI Japan

III. IBM Watson Assistant

Trên thế giới đã có những mô hình huấn luyện cho phép người dùng gõ vào 1 message và chatbot trả về phản hồi tự động tương ứng (Mô hình Sequence2Sequence), tuy nhiên hệ thống này cần rất nhiều dữ liệu, và khả năng phản hồi chính xác những giá trị còn chưa tốt. Các mô hình có khả năng production như AWS Alexa, IBM Watson, … vẫn sử dụng những phương pháp lấy về các Entities và Intents.

Việc huấn luyện #Intent và @Entity do hệ thống thực hiện, nhưng làm gì với các Intent và Entity mà hệ thống nhận ra được thì lại do người lập trình khéo léo xử l. tiếp, bằng cách dựa vào các biểu thức điều kiện (conditions).

VTI Japan

Bước đầu tiên ban cần là đăng ký tài khoản IBM. Sau đó vào link sau để đăng ký build chatbot:

IBM Watson Assistant

VTI Japan

Tiếp theo bạn tạo một Watson Assistant App theo hướng dẫn

VTI Japan

Kế tiếp bạn vào Launch tool. Chuyển qua để Workspaces để tạo một Workspaces mới hoặc dung thử sample của IBM

VTI Japan

Nếu sử dụng sample của IBM, bạn có thể thấy sample được chia ra thành các Intents, Entities, Dialog. Bạn có thể dựa vào đấy để tạo một con chatbot cho chính mình. Chú ý ngoài Intents và Entities như đã nói ở trên IBM còn có Dialog để xây dựng các luồng hội thoại một cách trôi chảy hơn.

Có một số Intent mà người dùng có thể hỏi đi hỏi lại vài lần, ta lựa chọn trả lời theo trình tự được sắp xếp hay để câu trả lời xuất hiện ngẫu nhiên (Random haySequential) để cho cuộc trò chuyện thú vị.

VTI Japan

VTI Japan

Trong Các Entities còn có thể setting cho các từ đồng nghĩa (synonyms)

VTI Japan

Cuối cùng có thể thử chat với chatbot bằng nút try it góc trên bên phải, có thể training bot trực tiếp tại phần try it out. Ở đây bạn cũng có thể xây dựng lại các câu hỏi của mình vào các Intent cho phù hợp hơn nếu như máy đang nhận định sai câu hỏi của mình vào một Intent không chính xác.

VTI Japan

Sau khi build có thể deploy lên slack, facebook,…

VTI Japan

IV. Kết luận

Ngoài IBM Watson ra còn có rất nhiều các ứng dụng khác chatbot như của Amazon, Microsoft, Google, hoặc một số ứng dụng nhỏ hơn như dialogflow.com, botsify. Khi nắm vứng được nguyên lý của chatbot và xây dựng được một bộ data đủ khủng thì bạn có thể đưa chatbot liên kết với các bên thứ ba khác đưa lên facebook messenger, Line, Slack để tự động trò chuyện với khách hang. Hoặc bạn có thể liên kết để lưu giữ thông tin chat vào DB để sử dụng cho service của mình hoặc để analytic dữ liệu. Ngoài ra nếu nắm rõ được nguyên lý vận hành của chatbot bạn cũng có thể tự build một con chatbot phân tích Intent và Entities chứ không phải dung service của bên thứ 3 để giảm thiểu chi phí vận hành.

Chatbot có thể thay thế con người trong lĩnh vực trò chuyện với khách hang thu thập thông tin một phần nào đó. Nếu nắm vững nguyên lý và xây dựng được một con chatbot đủ thông minh thì có thể ứng dụng tại rất nhiều nơi trong cuộc sống.

VTI Japan

Vote (5 / 1)

Chatbot – Chương 1: Giới thiệu sơ lược về chatbot

10/09/2019

Leave a Reply

Your email address will not be published. Required fields are marked *