Skip to content
Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Close

Search

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

Mì AI Mì AI Mì AI

Học AI theo cách Mì ăn liền!

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Close

Search

  • Trang chủ
  • Kênh Youtube
  • Facebook Group
  • Nói về chủ tiệm Mì
Natural Language Processing

[Rasa Series #3] Thử làm “đệ tử” RASA chatbot hóng kết quả sổ xố hàng ngày

By Chủ tiệm Mì
September 16, 2019 7 Min Read
4

Chào tuần mới tất cả anh em thích ăn Mì AI, hôm nay chúng ta sẽ cùng nhau Thử làm “đệ tử” RASA chatbot hóng kết quả sổ xố hàng ngày bằng RASA Chatbot Action nhé.

Trong hai bài trước của series RASA, chúng ta đã học cách xây dựng chatbot đơn giản bằng RASA framework. Các bạn có thể tham khảo lại tại đây nếu chưa đọc:

  • [RASA series #1] Ai cũng có thể làm RASA chatbot “siêu ngon khổng lồ”
  • [RASA Series #2] Dạy cho RASA chatbot biết chào hỏi khách hàng “ngoan hơn”

Bài hôm nay chúng ta sẽ làm một RASA Chatbot như một đệ tử hàng ngày check kết quả số xố giúp chúng ta. Thay vì phải truy cập web, tìm kiếm, chúng ta chỉ cần chat “Cho anh xem kết quả cái!” hoặc “Cho anh xem giải đặc biệt đê” thì nó tự tìm thông tin và show cho “đại ca” ngay lập tức.

RASA chatbot action
Nguồn: VTC Mobile

Thôi bắt đầu làm nhé.

Phần 1. Như thường lệ, chuẩn bị nguyên vật liệu

Các bạn tạo thư mục MiAI_Chatbot_3 và thực hiện clone git của mình về bằng lệnh sau:

git clone https://github.com/thangnch/MiAI_Chatbot_3 .

Chú ý dấu chấm (.) ở cuối lệnh. Nếu thành công các bạn sẽ thấy ngay RASA Chatbot project như đã làm ở các phần 1 và 2 của series.

Các bạn tiến hành cài đặt các thư viện cần thiết nếu chưa cài nhé:

pip install rasa_core rasa_nlu rasa_core_sdk feedparser spacy  sklearn_crfsuite

Đợi các thư viện cài xong, các bạn gõ tiếp lệnh sau để tải về bộ ngôn ngữ nhé:

python -m spacy download en

Rồi bây giờ các bạn chuyển sang phần tiếp theo nhé.

Phần 2. Phân tích bài toán

Với bài toán lần này, chúng ta sẽ có cả phần mới và phần cũ. Phần cũ là việc nhận dạng intent/ý đồ của “đại ca” khi gõ “Cho anh xem kết quả cái!” hoặc “Cho anh xem giải đặc biệt đê” để biết là ông ta cần xem kết quả sổ xố nói chung hoặc xem chi tiết giải đặc biệt (cho trường hợp cụ ấy cần 2 số cuối làm cái việc mà ai cũng biết là việc gì đó =)) ). Chỗ này chúng ta đã quen thuộc và làm như trong 2 bài trước.

Phần mới là: ngay khi nhận được intent của người dúng, chúng ta phải kết nối với server của Sổ Xố Kiến Thiết và lấy dữ liệu về cho đại ca. Phần này chúng ta sẽ làm quen với một khái niệm mới là RASA Chatbot Action.

RASA chatbot action

Như vậy, Utter là các nội dung text mà RASA Chatbot sẽ dùng để trả lời khách hàng thì RASA Chatbot Action là 1 thứ cao cấp hơn, có thể lập trình, if then, quyết định sử dụng Utter nào… khi xử lý một Intent của khách hàng. Do vậy, bài này sẽ phức tạp hơn 2 bài trước 1 chút, các bạn chú ý thật kỹ nhé.

Các bạn nắm tinh thần rồi đúng không? Vậy thì bắt tay vào sửa code nào.

Phần 3. Tiến hành viết code

Bây giờ chúng ta sẽ cùng nhau sửa code chương trình để thực hiện ý đồ trên nhé.

Bước 1: Thêm Intent vào file nlu.md:

Để làm ví dụ mình sẽ chỉ làm intent hỏi full kết quả số xố nhé. Còn cái intent lấy duy nhất kết quả của giải đặc biệt thì dành cho các bạn tự thực hành để nắm được cách làm nhé (nếu bí quá thì mở lại Bài 2 là có cách làm :D). Mình thêm Intent sau đây vào file nlu.md:

## intent:ask_lottery
- Cho anh xem kết quả đê
- Kết quả số xố hôm này thế nào
- Mày cho anh hỏi kết quả tý
- Có kết quả chưa

Bước 2. Chúng ta sẽ viết code cho Action xử lý yêu cầu lấy kết quả số xố

Tại bước này, các bạn mở file actions.py và tiến hành viết thêm đoạn code lấy dữ liệu như sau:

# Ham lay ket qua so xo va tra ve. Ten ham la action_get_lottery
class action_get_lottery(Action):
   def name(self):
            # Doan nay khai bao giong het ten ham ben tren la okie
          return 'action_get_lottery'
   def run(self, dispatcher, tracker, domain):
            # Khai bao dia chi luu tru ket qua so xo. O day lam vi du nen minh lay ket qua SX Mien Bac
            url = 'https://xskt.com.vn/rss-feed/mien-bac-xsmb.rss'
            # Tien hanh lay thong tin tu URL
            feed_cnt = feedparser.parse(url)
            # Lay ket qua so xo moi nhat
            first_node = feed_cnt['entries']
            # Lay thong tin ve ngay va chi tiet cac giai
            return_msg = first_node[0]['title'] + "\n" + first_node[0]['description']
            # Tra ve cho nguoi dung
            dispatcher.utter_message(return_msg)
            return []

Các câu lệnh và ý nghĩa của chúng mình đã comment đầy đủ bên trên, các bạn đọc là hiểu vì khá đơn giản.

Bước 3. Bây giờ mình tiến hành sửa file domain.yml

Do mình vừa khai báo thêm 1 intent bên file nlu.md nên mình sẽ phải khai báo vào trong file domain.yml như sau:

intents:
# Ý đồ khách hàng
 - greet
 - thank
 - bye
 - ask_func_list
 - ask_name
 - give_name
 - ask_lottery

Tiếp theo, chúng ta sẽ khai báo thêm action đã viết (action_get_lottery ở trên) vào phần cuối của file domain.yml. Nếu các bạn để ý thì ở Bài trước khi chúng ta thêm Utter, chúng ta phải khai báo vào file domain.yml thì bây giờ Action cũng vậy, thực hiện tương tự:

actions:
 - utter_greet
 - utter_greet_with_name
 - utter_bye
 - utter_unclear
 - utter_func_list
 - utter_thank
 - utter_ask_name
 - action_get_lottery

Bước 4. Bây giờ là sửa file stories.md để vẽ ra các câu chuyện giữa “đại ca” và “đệ tử” nào

Các bạn sửa đơn giản như này thôi. Chú ý, đây là sample nên mình chỉ làm 1 câu truyện, các bác cần sáng tác nhiều hơn để bot thông minh hơn và chat mềm dẻo hơn nhé:

## Chào hỏi và hỏi kết quả sổ xố
* greet
  - utter_greet
* ask_lottery
  - action_get_lottery
* ask_name
  - utter_ask_name
* bye
  - utter_bye

Okie rồi. Bây giờ save tất cả các file lại và sang phần tiếp theo. Phần train cho model.

Phần 4. Train các model NLU và CORE cho RASA Chatbot

Đầu tiên là train cho NLU xem đã nhận đúng ý đồ của “đại ca” chưa nhé. Các bạn sửa 2 câu cuối trong file train_nlu.py và chạy để train:

ask_question("Mày cho anh hỏi kết quả cái")
ask_question("Kết quả thế nào mày")

Và chạy xong thì mình thấy nhận khá ổn (mặc dù có câu mình cố tính viết khác với các câu mình định nghĩa trong intet).

{'intent': {'name': 'ask_lottery', 'confidence': 0.489516467630702}, 'entities': [], 'intent_ranking': [{'name': 'ask_lottery', 'confidence': 0.489516467630702}, {'name': 'greet', 'confidence': 0.20095691137257524}, {'name': 'give_name', 'confidence': 0.17978458626717728}, {'name': 'thank', 'confidence': 0.058187138472502405}, {'name': 'ask_func_list', 'confidence': 0.0317950969785266}, {'name': 'ask_name', 'confidence': 0.02304468096580593}, {'name': 'bye', 'confidence': 0.016715118312710563}], 'text': 'Mày cho anh hỏi kết quả cái'}

{'intent': {'name': 'ask_lottery', 'confidence': 0.45357118156932463}, 'entities': [], 'intent_ranking': [{'name': 'ask_lottery', 'confidence': 0.45357118156932463}, {'name': 'give_name', 'confidence': 0.21753812758656574}, {'name': 'ask_func_list', 'confidence': 0.10581879602353869}, {'name': 'ask_name', 'confidence': 0.08659157584663081}, {'name': 'greet', 'confidence': 0.0776594107839283}, {'name': 'bye', 'confidence': 0.030420252219736404}, {'name': 'thank', 'confidence': 0.02840065597027538}], 'text': 'Kết quả thế nào mày'}

Bây giờ là train CORE nhé. Chạy file train_dialog.py cái nào. Ngon rồi, train 200 epochs ngon ơ:

Epoch 199/200

161/161 [==============================] - 0s 356us/sample - loss: 0.0801 - acc: 0.9876

Epoch 200/200

161/161 [==============================] - 0s 414us/sample - loss: 0.0519 - acc: 0.9876

Bây giờ sang bước tiếp theo về test nhé. Các bạn chú ý kỹ bước tiếp theo vì hơi lằng nhằng 1 chút.

Phần 5. Ghép nối và tận hưởng thành quả.

Đầu tiên, các bạn mở một Terminal hoặc Command Promt mới và chuyển đến thư mục MIAI_Chatbot_3 sau đó chạy lệnh:

python -m rasa_core_sdk.endpoint --actions actions

Sau đó dợi một lúc cho đến khi terminal hiện lên câu thông báo có dạng như sau là thành công:

2019-09-16 09:40:38 INFO     main  - Starting action endpoint server…

2019-09-16 09:40:38 INFO     rasa_core_sdk.executor  - Registered function for 'action_get_lottery'.

2019-09-16 09:40:38 INFO     main  - Action endpoint is up and 
running. on ('0.0.0.0', 5055)

Xong rồi, bước trên là bạn start webserver cho file action.py đó.

Bây giờ như thường lệ, chúng ta chạy file test_dialog.py để kiểm tra xem “đệ tử” RASA Chatbot của chúng ta chạy như thế nào nào.

Wao! Ngon vãi rồi các bạn, các bạn xem đoạn chat bên dưới nhé, nếu hiển thị như vậy là thành công rồi đó:

RASA chatbot action

Okie, như vậy ở bài này, các bạn đã biết viết 1 RASA Chatbot action để có thể truy xuất dữ liệu bên ngoài. Các bạn thoải mái sáng tạo nhé, ví dụ thay vì lên web lấy dữ liệu thì connect vào MySQL, Oracle để lấy dữ liệu cũng được này. Vậy là sau 3 bài liên tục về RASA Chatbot, các bạn đã có đủ công cụ để xây dựng 1 chatbot cho riêng mình. Mình xin tạm dừng series về Chatbot ở đây vì còn rất nhiều mảng khác nữa đang chờ các anh em Mì AI khám phá.

Chúc các bạn thành công, nếu cần gì trợ giúp, chia sẻ, anh em cứ lên group mì AI post bài nhé. Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup .

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn/
Youtube: http://bit.ly/miaiyoutube

Tags:

aiainoodlechatchatbotgloveimage captionimage labelLSTMmachine learningmì aimlNature Language ProcessingNLPRASAword embeding
Author

Chủ tiệm Mì

Follow Me
Other Articles
Previous

[Face Recog 2.0] Nhận diện khuôn mặt trong video bằng MTCNN và Facenet

Next

Chống giả mạo bằng ảnh/video trong nhận diện khuôn mặt – Face Anti spoofing

4 Comments
  1. Lê Viết Nam says:
    February 21, 2020 at 3:13 am

    “Phần 5. Ghép nối và tận hưởng thành quả.”
    Thời gian để chờ kết nối server 0.0.0.0, port 5055 quá lâu và hầu như không có response thì làm sao anh?

    Reply
    1. Nguyễn Chiến Thắng says:
      February 22, 2020 at 2:32 pm

      Em thử capture màn hình và post lên group nhé.
      Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup

      Reply
  2. Cài đặt RASA Chatbot mới siêu nhanh và gọn nhẹ - Mì AI says:
    March 19, 2020 at 4:25 am

    […] [Rasa Series #3] Thử làm “đệ tử” RASA chatbot hóng kết quả sổ xố hàng ngày […]

    Reply
  3. Chi tiết cách kết nối RASA với Facebook Messenger (Phần 1) - Mì AI says:
    March 23, 2020 at 3:36 am

    […] [Rasa Series #3] Thử làm “đệ tử” RASA chatbot hóng kết quả sổ xố hàng ngày […]

    Reply

Leave a Reply Cancel reply

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

Recent Posts

  • Tìm hiểu và cài đặt OpenClaw – trợ lý ảo 24/7 thông minh đa chức năng – Mì Ai
  • Dùng thử Pika – robot học Tiếng Anh cho trẻ cực đỉnh – Mì AI
  • TopView.AI 4.0 – nền tảng tạo AI video cộng tác bá đạo – Mì AI
  • Storm MCP – giải pháp nhanh gọn nhẹ để có MCP Server trong 5 phút – Mì AI
  • VoxCPM thử voice cloning với checkpoint finetune Tiếng Việt – Mì AI

Recent Comments

  1. Chủ tiệm Mì on Thử xây dựng hệ thống Agentic AI với LangGraph – Mì AI
  2. Nguyễn Chiến Thắng on [Nhận diện biển số xe] Chương 3 – Phát hiện biển số bằng OpenCV thuần
  3. Trần Sơn Dương on [Nhận diện biển số xe] Chương 3 – Phát hiện biển số bằng OpenCV thuần
  4. Salomon on [CV] Thử làm model cảnh báo ngủ gật cho tài xế oto bằng Dlib và Resnet
  5. khang on Xây dựng hệ thống nhận diện thủ ngữ – ngôn ngữ ký hiệu tay – để giao tiếp với người khuyết tật

Categories

  • Basic
  • Computer Vision
  • Data Science – Data Analysis
  • Generative AI
  • MÌ ÚP
  • Natural Language Processing
  • RNN-LSTM-GRU
  • Share Data

Là người đi trước, hãy biết đưa tay lại phía sau.

Nguyễn Chiến Thắng
Cảm ơn các bạn đã ủng hộ Mì AI!