Xây dựng tập dữ liệu huấn luyện

Một phần của tài liệu Xây dựng hệ thống mạng xã hội kết nối người yêu thích nấu ăn (báo cáo cuối kì đồ án 2) (Trang 74 - 80)

Xây dựng tập dữ liệu huấn luyện là bước quan trọng quyết định đến chatbot “thông minh” hay không. Trong Rasa, cấu trúc lưu trữ tập huấn luyện được chia thành các file: nlu.yml; stories.yml và domain.yml.

- intent: ask_recipe

- Hôm nay ăn gì ? <!— Không có thực thể -->

- Nấu món [gà](ingredient) <! – Thực thể “ingredient” có giá trị là “gà” -> Để nhận diện tốt một intent cần xử lý được các khó khăn trong hiểu văn bản. Để làm được điều đó trong dữ liệu huấn luyện của Rasa cần xây dựng các cấu trúc thành phần sau:

• Ví dụ chung

• Từ đồng nghĩa

• Tinh năng Regex

58

Hình 4.21: Từ đồng nghĩa Hình 4.22: Bảng tra cứu

Một thành phần khác quyết định đến hiệu quả của chatbot là kịch bản, kịch bản chatbot giống như một câu chuyện với nhiều tình tiết để dẫn dắt khách hàng theo một hướng nhất định điều này sẽ hạn chế được các trường hợp câu hỏi nằm ngoài tập dữ liệu. Các kịch bản này sẽ được soạn sẵn, nó chính là các trường hợp có thể xảy ra khi người dùng trò chuyện với chatbot. Tùy theo mục đích của của

59

chatbot mà kịch bản của chatbot sẽ được thay đổi nội dung để phù hợp với yêu cầu hệ thống. Để xây dựng một chatbot thông minh thì không thể thiếu các kịch bản. Với các chức năng chính mà chatbot này hướng tới, nhóm đã xây dựng các kịch bản hội thoại sau:

Hình 4.23: Sơ đồ kịch bản chatbot

Thông qua dữ liệu đã thu thập từ api, nhóm kết hợp cấu trúc lưu trữ của Rasa để xây dựng tập huấn luyện cho chatbot hoạt động tốt. Đây là công việc rất mất thời gian và cẩn thận để xác định được các intent, example, entities, stories và loại bỏ các dữ liệu không phù hợp, trùng lặp. Sau đây là 1 phần của file dữ liệu

60

huấn luyện trong cấu trúc chatbot của Rasa, được phân chia trong các file: nlu.yml domain.yml và stories. Dữ liệu xây dựng ở đây phụ thuộc vào dữ liệu đã thu thập theo 4 chức năng chính ở trên với nguồn dữ liệu công thức từ hai api Edamam và cooky, kết hợp với các dữ liệu liên quan khác về nấu ăn từ wiki. Nội dung file nlu.yml theo dạng như sau :

Hình 4.24: Nlu.yml để xác định intent

Trong RASA, NLU pipeline xác định các bước xử lý chuyển đổi tin nhắn người dùng không có cấu trúc thành intent và entity. Đó là một quy trình hoàn

61

chỉnh từ lựa chọn Tokenizers, Featurizers, Extractors đến Classiffers. có thể được cấu hình và tùy chỉnh bởi người lập trình. Dưới đây là các thành phần

chúng tôi chọn trong pipeline và cách chúng hoạt động:

Hình 4.25: Tương tác giữa các thành phần trong NLU pipeline

Tokenizers: Bước đầu tiên là chia một câu thành các khối văn bản nhỏ hơn, được gọi là token. Điều này phải xảy ra trước khi văn bản được trích xuất đặc trưng trong học máy, đó là lý do tại sao thường có một tokenizer được liệt kê đầu tiên khi bắt đầu một pipeline.

Hình 4.26: Cách hoạt động của Tokenizer

Trong tiếng anh thường sử dụng WhiteSpaceTokenizer nhưng với các ngôn ngữ không phải tiếng anh chúng ta có thể chọn một tokenizer khác. SpaCy là một lựa chọn tốt do nó hỗ trợ khá nhiều ngôn ngữ trong đó có tiếng việt. Tuy nhiên trong đề tài này nhóm sử dụng một tokenizer tự xây dựng bằng cách sử dụng tư viện

underthesea

Featurizers: Tạo ra các đặc trưng số (numeric features) cho các mô hình học máy. Sơ đồ dưới đây cho thấy từ "Hi" có thể được mã hóa như thế nào.

62

Hình 4.27: Cách hoạt động của Featurizer (1)

Có hai loại đặc trưng:

Các đặc tính thưa thớt (Sparse Features): thường được tạo bởi Countvectorizer. Các số này có thể đại diện có các từ.

Các đặc tính dày đặc (Dense Features): Chúng bao gồm nhiều bộ nhúng được đào tạo trước cho các ngôn ngữ. Thường là SpaCyFeaturizers hoặc huggingface thông qua các LanguageModelFeaturizers.

Hình 4.28: Cách hoạt động của Featurizer (2)

Bên cạnh các đặc trưng của các token, chúng ta tạo đặc trưng cho toàn bộ câu và nó thường được gọi là CLS token.

Intent Classifiers: Khi đã tạo các đặc trưng cho tất cả token và cho toàn bộ

câu, chúng tôi có thể chuyển nó sang mô hình phân loại ý định. Rasa khuyến khích nên sử dụng DietClassifier vì nó có thể xử lý cả phân loại ý định cũng như

63

khai thác thực thể. Nó cũng có thể học hỏi từ cả hai đặc trưng của token và cả câu.

Hình 4.29: Cách hoạt động của Intent Classifier

Entity Extraction: Mặc dù DietClassifier đã chứa các phát hiện các entities

nhưng không nhất thiết phải sử dụng nó cho tất cả các loại thực thể. Ví dụ một số loại thực thể có cấu trúc như số điện thoại hoặc các thực thể có danh sách tham chiếu để xử lý chúng chỉ cần RegexEntityExtractor.

Hình 4.30: Cách hoạt động của Entity Extraction

Một phần của tài liệu Xây dựng hệ thống mạng xã hội kết nối người yêu thích nấu ăn (báo cáo cuối kì đồ án 2) (Trang 74 - 80)

Tải bản đầy đủ (PDF)

(111 trang)