- vừa được xem lúc

[RASA 3.0] Tuỳ chỉnh pipeline với BERT và RoBERTa

0 0 36

Người đăng: Phát Nhâm

Theo Viblo Asia

Giới thiệu về Rasa

Rasa là framework mã nguồn mở được phát triển bởi RASA Inc vào năm 2017, Rasa giúp cho việc phát triển các chatbot máy học một cách thuận tiện hơn, có thể giúp cho những người chưa biết gì về NLP vẫn có thể xây dựng cho mình một chatbot thông minh. Cơ bản về RASA các bạn có thể tìm hiểu trên docs của Rasa hoặc thông qua chuỗi bài viết Xây dựng chatbot Messenger cập nhật thời khóa biểu cho sinh viên của anh Bui Tien Tung - chuỗi bài viết được viết viết trên Rasa 2.0, giờ là phiên bản 3.0 nên có đã có một số thay đổi, mình sẽ viết trong một bài viết khác, Tạm thời các bạn có thể tham khảo chuỗi bài viết trên

BERT là gì?

Nói ngắn gọn, BERT là một State-of-art hay là một bước đột phá mới trong công nghệ xử lý ngôn ngữ tự nhiên vào thời điểm nó ra mắt[1]. Để tích hợp BERT vào bên trong NLU Rasa cũng không phải là khó, trong bài viết này, chúng ta hãy cùng thử cài đặt so sánh 3 thuật toán là Bag-Of-Words, BERT và RoBERTa và so sánh sự hiệu quả của chúng.

Tích hợp BERT vào Rasa

Khởi tạo dự án

Chúng ta sẽ bắt đầu với một chương trình mẫu của Rasa, chương trình mẫu này sẽ cung cấp cho ta một số intent và kịch bản mẫu, bạn cũng có thể tích hợp vào dự án hiện tại của bạn nhé. Đầu tiên là clone về từ Github của dự án:

git clone _@.com:RasaHQ/rasa-demo.git

Sau khi clone xong, bạn sẽ cần cài đặt các thư viện cần thiết thông qua pip:

pip install -r requirements.txt
pip install "rasa[transformers]"

Bây giờ hãy tạo một thư mục mới để chứa các cấu hình:

mkdir config

Tạo các cấu hình pipeline

Nội dung file config/config-light.yml sử dụng CountVectorsFeaturizer:

recipe: default.v1
language: en
pipeline: - name: WhitespaceTokenizer - name: CountVectorsFeaturizer - name: CountVectorsFeaturizer analyzer: char_wb min_ngram: 1 max_ngram: 4 - name: DIETClassifier epochs: 200
policies:

Nội dung file config/config-bert.yml:

recipe: default.v1
language: en
pipeline: - name: WhitespaceTokenizer - name: LanguageModelFeaturizer model_name: bert model_weights: bert-base-uncased - name: DIETClassifier epochs: 200 - name: EntitySynonymMapper
policies:

Nội dung file config/config-roberta.yml:

recipe: default.v1
language: en
pipeline: - name: WhitespaceTokenizer - name: LanguageModelFeaturizer model_name: roberta - name: DIETClassifier epochs: 200 - name: EntitySynonymMapper
policies:

Trong tất cả trường hợp, chúng ta đều dùng DIETClassifier để nhận dạng intent và entity với 200 epochs, tuy nhiên ở mỗi cấu hình có một chút khác biệt. Trong cấu hình light, chúng ta dùng CountVectorsFeaturizer, nó sẽ tạo một túi từ (bag-of-word) để đại diện cho mỗi từ. Còn đối với bertroberta, chúng ta sẽ dùng LanguageModelFeaturizer, featurerizer này sẽ cho phép sử dụng các pre-trained model, mà ở đây sẽ là BERT và RoBERTa.

Kiểm tra độ hiệu quả:

Đầu tiên cần tạo thư mục chứa kết quả trước đã:

mkdir gridresults

Tất cả các thông tin sẽ được lưu vào thư mục gridresults này. Bắt đầu chạy thôi:

rasa test nlu --config configs/config-light.yml \ --cross-validation --runs 1 --folds 2 \ --out gridresults/config-light
rasa test nlu --config configs/config-bert.yml \ --cross-validation --runs 1 --folds 2 \ --out gridresults/config-bert
rasa test nlu --config configs/config-roberta.yml \ --cross-validation --runs 1 --folds 2 \ --out gridresults/config-roberta
# output from the light model
2020-03-30 16:21:54 INFO rasa.nlu.model - Starting to train component DIETClassifier
Epochs: 100%|███████████████████████████████| 200/200 [17:06<00:00, ...]
2020-03-30 16:23:53 INFO rasa.nlu.test - Running model for predictions:
100%|███████████████████████████████████████| 2396/2396 [01:23<00:00, 28.65it/s]
...
# output from the bert model
2020-03-30 16:47:04 INFO rasa.nlu.model - Starting to train component DIETClassifier
Epochs: 100%|███████████████████████████████| 200/200 [17:24<00:00, ...]
2020-03-30 16:49:52 INFO rasa.nlu.test - Running model for predictions:
100%|███████████████████████████████████████| 2396/2396 [07:20<00:00, 5.69it/s] # output from the roberta model 2020-03-30 17:47:04 INFO rasa.nlu.model - Starting to train component DIETClassifier
Epochs: 100%|███████████████████████████████| 200/200 [17:14<00:00, ...]
2020-03-30 17:49:52 INFO rasa.nlu.test - Running model for predictions:
100%|███████████████████████████████████████| 2396/2396 [01:59<00:00, 19.99it/s]

Kết quả:

image.png

References: https://viblo.asia/p/bert-buoc-dot-pha-moi-trong-cong-nghe-xu-ly-ngon-ngu-tu-nhien-cua-google-RnB5pGV7lPG

Bình luận

Bài viết tương tự

- vừa được xem lúc

Hướng dẫn làm bot Facebook messenger cho tài khoản cá nhân

Giới thiệu. Trong bài viết trước thì mình có hướng dẫn các bạn làm chatbot facebook messenger cho fanpage. Hôm nay mình sẽ hướng dẫn các bạn tạo chatbot cho một tài khoản facebook cá nhân. Chuẩn bị.

0 0 146

- vừa được xem lúc

Tìm hiểu cơ bản về LUIS trong Microsoft Cognitive Services

Trong bài trước mình đã có giới thiệu sơ lược về QnA Maker - một dịch vụ lưu trữ ngôn ngữ tự nhiên trên nền tảng đám mây. Tuy nhiên để có thể sử dụng chatbot linh hoạt và với xu hướng càng thân thiện với người dùng, thì hôm nay mình giới thiệu thêm về LUIS.

0 0 24

- vừa được xem lúc

[ChatterBot] Thư viện chatbot hay ho dành cho Python| phần 4

Hôm nay mình sẽ chia sẽ thêm về một số kiến thức liên quan về ChatterBot. Chắc đây sẽ là bài lý thuyết cuối, để từ đó mỗi bạn có thể tự build cho mình một con chatbot vui vui.

0 0 106

- vừa được xem lúc

[ChatterBot] Thư viện chatbot hay ho dành cho Python| phần 3

Trong bài trước mình đã trình bày về Training data cho chatbot và tiền xử lý dữ liệu. Trong phần này sẽ trình bày với các bạn về logic adapter.

0 0 47

- vừa được xem lúc

Xác định ý định câu hỏi trong hệ thống hỏi đáp

Mục tiêu bài viết. Phân tích câu hỏi là pha đầu tiên trong kiến trúc chung của một hệ thống hỏi đáp, có nhiệm vụ tìm ra các thông tin cần thiết làm đầu vào cho quá trình xử lý của các pha sau (trích c

0 0 83

- vừa được xem lúc

[RASA 3] - Bài 1: Làm quen Rasa 3 - tạo chatbot chào hỏi đơn giản

Rasa là framework mã nguồn mở giúp xây dựng chatbot - sử dụng ngôn ngữ lập trình Python. Mục đích chính của chuỗi bài viết này là chia sẻ lại quá trình thực hành với Rasa 3 của mình, hy vọng có thể gi

0 0 14