Helpex - Trao đổi & giúp đỡ Đăng nhập

Xây dựng một Chatbot thông minh bằng Botkit và Rasa NLU

Mỗi ngày, chúng tôi nghe về một bot mới phục vụ cho các lĩnh vực như du lịch, xã hội, pháp lý, hỗ trợ, bán hàng, v.v. Chỉ riêng Facebook Messenger đã có hơn 11.000 bot khi tôi kiểm tra lần cuối và có lẽ đã thêm hàng nghìn kể từ khi tôi viết bài viết này. Thế hệ bot đầu tiên bị câm vì họ chỉ có thể hiểu một nhóm truy vấn giới hạn dựa trên các từ khóa trong cuộc trò chuyện. Nhưng việc thương mại hóa NLP (Xử lý ngôn ngữ tự nhiên) và học máy bằng các dịch vụ như  Wit.aiAPI.aiLuis.aiAmazon LexIBM Watson , v.v. đã dẫn đến sự phát triển của các bot thông minh như  donotpay  và  chatShopper .

Tôi không biết các bot chỉ là cường điệu hay thỏa thuận thực sự, nhưng tôi có thể nói chắc chắn rằng việc xây dựng một bot là thú vị và đầy thách thức cùng một lúc. Trong bài viết này, tôi muốn giới thiệu cho bạn một số công cụ để xây dựng một chatbot thông minh.

Tiêu đề của blog nói rõ rằng chúng tôi sẽ sử dụng  Botkit  và  Rasa  (NLU) để xây dựng bot của chúng tôi. Trước khi đi sâu vào các kỹ thuật, tôi muốn chia sẻ lý do chọn hai nền tảng này và giải thích cách chúng phù hợp với trường hợp sử dụng của chúng tôi.

Khung phát triển Bot

Howdy, Botkit và Microsoft (MS) Bot Framework là những ứng cử viên tốt cho việc này. Cả hai khung này:

  • Là nguồn mở.
  • Có tích hợp với các nền tảng nhắn tin phổ biến như Slack, Facebook Messenger, Twilio, v.v.
  • Có tài liệu tốt.
  • Có một cộng đồng phát triển tích cực.

Do vấn đề tuân thủ, chúng tôi đã chọn AWS để triển khai tất cả các dịch vụ của mình và chúng tôi cũng muốn như vậy với bot.

NLU (Hiểu ngôn ngữ tự nhiên)

API.ai  (được Google mua lại) và  Wit.ai  (được Facebook mua lại) là hai công cụ NLU phổ biến trong ngành công nghiệp bot mà chúng tôi lần đầu tiên xem xét cho nhiệm vụ này. Cả hai giải pháp:

  • Được lưu trữ như một dịch vụ đám mây.
  • Có Nodejs, Python SDK và giao diện REST.
  • Có tài liệu tốt.
  • Hỗ trợ các ý định trạng thái hoặc ngữ cảnh, làm cho nó rất dễ dàng để xây dựng một nền tảng đàm thoại trên đầu trang.

Như đã nói trước đây, chúng tôi không thể sử dụng bất kỳ giải pháp được lưu trữ nào do các vấn đề tuân thủ và đó là nơi chúng tôi đã bắt gặp một NLU nguồn mở có tên Rasa, một sự thay thế hoàn hảo cho API.ai và Wit.ai -  chúng tôi có thể lưu trữ và quản lý nó trên AWS.

Bây giờ, bạn có thể tự hỏi tại sao tôi sử dụng thuật ngữ NLU cho Api.ai và Wit.ai, chứ không phải NLP (Xử lý ngôn ngữ tự nhiên).

NLP đề cập đến tất cả các hệ thống xử lý các tương tác với con người theo cách con người thấy nó tự nhiên. Nó có nghĩa là chúng ta có thể trò chuyện với một hệ thống giống như cách chúng ta nói chuyện với những người khác. Ngược lại, NLU là một trường con của NLP xử lý một thách thức hẹp nhưng phức tạp trong việc chuyển đổi các đầu vào không có cấu trúc thành một dạng có cấu trúc mà một cỗ máy có thể hiểu và hành động. Vì vậy, bạn nói ngày = 20 tháng 4 năm 2017, địa điểm = San Francisco và hành động = đặt khách sạn  và hệ thống có thể hiểu.

Rasa NLU

Trong phần này, tôi muốn giải thích chi tiết về Rasa và cung cấp cho bạn một số thuật ngữ được sử dụng trong NLP mà bạn nên làm quen.

  • Ý định :  Cho chúng tôi biết người dùng muốn làm gì.

    • Ví dụ: Tăng khiếu nại, yêu cầu hoàn lại tiền, v.v.

  • Các thực thể :  Các thuộc tính cung cấp chi tiết về nhiệm vụ của người dùng.

    • Ví dụ: Khiếu nại về sự gián đoạn dịch vụ, chi phí hoàn trả, v.v.

  • Điểm tin cậy :  Một thước đo khoảng cách cho biết NLU có thể phân loại kết quả chặt chẽ như thế nào vào danh sách các ý định.

Dưới đây là một ví dụ để giúp bạn hiểu các điều khoản trên.

Đầu vào : "Internet của tôi đã không hoạt động kể từ sáng nay."

  • Ý địnhservice_interruption

  • Các thực thểDịch vụ trên mạng = Internet,  thời lượng của buổi sáng = buổi sáng

  • Điểm tự tin : 0,84 (có thể thay đổi dựa trên đào tạo của bạn)

Công việc của NLU (Rasa trong trường hợp của chúng tôi) là chấp nhận một câu / tuyên bố và cung cấp cho chúng tôi ý định, thực thể và điểm tin cậy mà bot của chúng tôi có thể sử dụng. Về cơ bản, Rasa cung cấp API cấp cao trên các thư viện NLP và ML khác nhau để phân loại ý định và trích xuất thực thể. Các thư viện NLP và ML được gọi là phụ trợ. Họ mang đến sự thông minh cho Rasa. Đây là một số phụ trợ được sử dụng với Rasa:

  • MITIE :  Một thư viện bao gồm tất cả; nói cách khác, nó có một thư viện NLP để trích xuất thực thể cũng như thư viện ML để phân loại ý định được tích hợp trong nó.
  • spaCy + sklearn :  spaCy là một thư viện NLP chỉ thực hiện trích xuất thực thể. sklearn được sử dụng với spaCy để thêm các khả năng ML để phân loại ý định.
  • MITIE + sklearn :  Điều này sử dụng tốt nhất của cả hai thế giới. Điều này sử dụng nhận dạng thực thể tốt có sẵn trong MITIE cùng với phân loại ý định nhanh và tốt trong sklearn.

Tôi đã sử dụng phụ trợ MITIE để đào tạo Rasa. Đối với bản demo, chúng tôi có một ChatBot hỗ trợ trực tiếp trên Facebook được đào tạo cho các tin nhắn như:

  • Điện thoại của tôi không hoạt động.

  • Điện thoại của tôi không bật.

  • Điện thoại của tôi bị hỏng và không hoạt động nữa.

Dữ liệu đào tạo của tôi trông như thế này:

{
  "rasa_nlu_data": {
    "common_examples": [
      {
        "text": "hi",
        "intent": "greet",
        "entities": []
      },
      {
        "text": "my phone isn't turning on.",
        "intent": "device_failure",
        "entities": [
          {
            "start": 3,
            "end": 8,
            "value": "phone",
            "entity": "device"
          }
        ]
      },
      {
        "text": "my phone is not working.",
        "intent": "device_failure",
        "entities": [
          {
            "start": 3,
            "end": 8,
            "value": "phone",
            "entity": "device"
          }
        ]
      },
      {
        "text": "My phone crashed and isn’t working anymore.",
        "intent": "device_failure",
        "entities": [
          {
            "start": 3,
            "end": 8,
            "value": "phone",
            "entity": "device"
          }
        ]
      }
    ]
  }
}

Lưu ý : Chúng tôi đã quan sát thấy MITIE cho độ chính xác cao hơn spaCy + sklearn cho một tập huấn luyện nhỏ, nhưng khi bạn tiếp tục thêm nhiều ý định, việc đào tạo về MITIE càng ngày càng chậm. Đối với một tập huấn gồm hơn 200 ví dụ với khoảng 10-15 ý định, MITIE mất khoảng 35-45 phút để chúng tôi đào tạo trên một phiên bản C4.4xlarge (16 lõi, RAM 30 GB) trên AWS.

Đây  là một hướng dẫn tốt về đào tạo Rasa với phụ trợ MITIE. Nếu bạn là người mới bắt đầu thì bạn có thể tham khảo tài liệu này   để cài đặt Rasa.

Tích hợp Botkit và Rasa

Botkit  là một khung phát triển bot nguồn mở được thiết kế bởi những người tạo ra  Howdy . Về cơ bản, nó cung cấp một bộ công cụ để xây dựng các bot trên Facebook Messenger, Slack, Twilio, Kik và các nền tảng phổ biến khác. Họ cũng đã đưa ra một IDE để phát triển bot có tên  Botkit Studio . Tóm lại, Botkit là một công cụ cho phép chúng ta viết bot một lần và triển khai nó trên nhiều nền tảng nhắn tin.

Botkit cũng có hỗ trợ cho phần mềm trung gian, có thể được sử dụng để mở rộng chức năng của Botkit. Các tích hợp với cơ sở dữ liệu, CRM, NLU và các công cụ thống kê được cung cấp thông qua phần mềm trung gian, giúp khung mở rộng. Thiết kế này cũng cho phép chúng tôi dễ dàng thêm tích hợp với các công cụ và phần mềm khác bằng cách chỉ cần viết các mô-đun phần mềm trung gian cho chúng.

Tôi đã tích hợp Slack và botkit cho bản demo này. Bạn có thể sử dụng  này  mẫu soạn sẵn để thiết lập Botkit cho Slack. Chúng tôi đã mở rộng phần mềm trung gian Botkit-Rasa, mà bạn có thể tìm thấy  ở đây .

Botkit-Rasa có hai chức năng, nhận và nghe, ghi đè hành vi Botkit mặc định.

  1. receive được gọi khi Botkit nhận được tin nhắn. Nó gửi tin nhắn của người dùng đến Rasa và lưu trữ  ý định  và  thực thể  vào message đối tượng botkit  .

  2. hears ghi đè hearsphương thức " " Botkit mặc định ,  controller.hearshears Phương thức mặc định sử dụng regex để tìm kiếm các mẫu đã cho trong thông báo của người dùng trong khi phương thức nghe từ phần mềm trung gian Botkit-Rasa tìm kiếm mục đích.

let Botkit = require('botkit');
let rasa = require('./Middleware/rasa')({rasa_uri: 'http://localhost:5000'});

let controller = Botkit.slackbot({
  clientId: process.env.clientId,
  clientSecret: process.env.clientSecret,
  scopes: ['bot'],
  json_file_store: __dirname + '/.db/'
});

// Override receive method in botkit
controller.middleware.receive.use(rasa.receive);

// Override hears method in botkit
controller.changeEars(function (patterns, message) {
  return rasa.hears(patterns, message);
});

controller.setupWebserver(3000, function (err, webserver) {
  // Configure a route to receive webhooks from slack
  controller.createWebhookEndpoints(webserver);
});

Hãy thử một ví dụ: Điện thoại của tôi không bật. R R Rasa sẽ trả lại như sau:

  • Ý định : device_failure

  • Các thực thể : thiết bị = điện thoại

Nếu bạn chú ý cẩn thận, đầu vào tôi đưa ra không có trong tập tin đào tạo của tôi. Rasa có một số trí thông minh được tích hợp trong đó để xác định chính xác ý định và thực thể cho các kết hợp đó.

Chúng ta cần thêm một hears phương thức lắng nghe ý định device_failure xử lý đầu vào này. Hãy nhớ rằng ý định và các thực thể được trả về bởi Rasa sẽ được lưu trữ trong message đối tượng bởi phần mềm trung gian Rasa-Botkit.

controller.hears(['device_failure'], 'direct_message,direct_mention,mention',
  function (bot, message) {
  let reply = 'Try pressing the power button for 30 seconds. ';
  reply += 'Bring the phone to the service center if it does not start. ';
  reply += 'Don't forget to carry your warranty card.';

  bot.reply(message, reply);
});

Bạn sẽ có thể chạy bot này với Slack và xem đầu ra như hình bên dưới ( support_bot là tên của bot của tôi).

Bây giờ bạn đã quen thuộc với quá trình xây dựng chatbot với khung phát triển bot và NLU. Hy vọng, điều này sẽ giúp bạn bắt đầu với bot của bạn rất nhanh.

9 hữu ích 0 bình luận 22k xem chia sẻ

Có thể bạn quan tâm

loading