Chatbot tutorial with Rails - Part 1
Chào mọi người, như đã hứa ở bài viết Simple Chatbot with ruby, ở bài này mình sẽ hướng dẫn các bạn làm thế nào để xây dựng ứng dụng chat bot đơn giản trong Ruby on Rails. Sau bài viết đó mình đã tìm hiểu là thế nào để nhúng con bot của Telegram đó vào ứng dụng của mình. Và kết quả là một đống thứ ...
Chào mọi người, như đã hứa ở bài viết Simple Chatbot with ruby, ở bài này mình sẽ hướng dẫn các bạn làm thế nào để xây dựng ứng dụng chat bot đơn giản trong Ruby on Rails. Sau bài viết đó mình đã tìm hiểu là thế nào để nhúng con bot của Telegram đó vào ứng dụng của mình. Và kết quả là một đống thứ phức tạp: cài đặt Webhook, điều hướng con bot, config tùm lum hết trơn. Vậy có cách nào đơn giản hơn không ? Làm sao để có thể xây dựng 1 con bot của mình trong khi mình chả có tí kiến thức gì về Machine Learning ? Vâng, lúc này mới thấy câu "Google is your best friend" nó đúng đến nhường nào. Mặc dù trước đó mình đã tìm nát google nhưng kết quả không khả quan hơn là mấy. Vẫn là một đống phức tạp như suy nghĩ của phụ nữ :v, và bỗng 1 hôm 1 đường link xuất hiện trong hàng triệu đường link, dẫn đường đến động bàn tơ =))
Nãy giờ chém gió đủ rồi =)) , bây giờ mình sẽ đi vào vấn đề chính. Như ở trên mình đã đề cập, đường link mà mình đã tìm ra có phải là link mà đường tăng hay xin không ? Tất nhiên là không rồi, vi đường tăng đã biết đường đến động bàn tơ từ cả mấy thế kỉ trước rồi =)). Sau khi khám phá động bàn tơ, thứ mình tìm thấy không phải là các cô yêu tinh nhện xinh đẹp, mà là một gem giúp cho chúng ta có thể tạo ra một con chatbot đơn giản, không cần phải cài đặt gì nhiều, việc của chúng ta chỉ là training cho nó hiểu tiếng người mà thôi =)) Thứ mà mình đang đề cập đến là thuật toán xử lí ngôn ngữ tự nhiên Naive Nbayes, nó là một đống các công thức lằng nhằng, nếu các bạn là nhà nghiên cứu thì có thể search google nhé, ở đây mình chỉ đề cập đến vấn đề làm thế nào để xử dụng nó thôi. Và thuật toán xử lí ngôn ngữ này đã được viết thành 1 gem, chúng ta chỉ việc cài đặt và sử dụng nó thôi. Dưới đây sẽ là một số gem mình sẽ sử dụng:
- nbayes gem
- devise gem
- bootstrap gem
- haml gem nbayes gem cung cấp cho chúng ta đầy đủ các tính năng để xử lí ngôn ngữ tự nhiên dựa trên thuật toán Naive Bayes
Init Project
Đầu tiên chúng ta sẽ tạo ra 1 project mới
rails new chatbot_example
Tiến hành caì đặt các gem:
# path: chat_bot_example/Gemfile . . # Use Capistrano for deployment # gem 'capistrano-rails', group: :development gem 'devise' gem 'bootstrap-sass' gem 'nbayes' gem 'haml-rails' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platform: :mri end .
Cài đặt devise và khởi tạo model User
$cd chat_bot_example # Go to app folder $bundle install # Fetch and install the gems $rails generate devise:install # Creates config file, etc. $rails generate devise user # Create model class, routes, etc. $rake db:migrate # Create user table $rails generate devise:views users # Creates (minimal) views
Khởi tạo trang chủ
Khởi tạo 1 home controller, add action index và sử dụng nó làm trang mặc định của website
# path: app/controllers/home_controller.rb class HomeController < ApplicationController def index end end
Tạo view cho trang chủ
# path: app/views/home/index.html.haml - if user_signed_in? %h3 Hello user, welcome to chatbot demo - else %h1 welcome to rails community
Khởi tạo layout và dữ liệu mẫu
Tạo layout
# path: app/views/layouts/application.html.haml !!! %html %head %meta{content: "text/html; charset=UTF-8", "http-equiv" => "Content-Type"} %title ChatBotExample = csrf_meta_tags = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' = javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %body .container - if user_signed_in? .navbar.navbar-text.pull-right Logged in as %strong = current_user.email = link_to 'Edit profile', edit_user_registration_path, class: 'navbar-link' | = link_to "Logout", destroy_user_session_path, method: :delete, class: 'navbar-link' .navbar.navbar-text.pull-left = link_to 'Home', root_path, class: 'navbar-link' | = link_to 'Phones', phones_path, class: 'navbar-link' | = link_to 'Televisions', televisions_path, class: 'navbar-link' | = link_to 'Laptops', laptops_path, class: 'navbar-link' - else .navbar.navbar-text.pull-right = link_to "Sign up", new_user_registration_path, class: 'navbar-link' | = link_to "Login", new_user_session_path, class: 'navbar-link' .container = yield
Sử dụng lệnh scaffold tạo ra các ví dụ, ở đây gồm televisio, phone và laptops
$rails g scaffold laptop name:string description:text price:float $rails g scaffold television name:string description:text price:float $rails g scaffold phone name:string description:text price:float $rake db:migrate
Vậy là đã xong quá trình chuẩn bị, trong bài post tiếp theo mình sẽ hướng dẫn làm thế nào để tạo con chatbot cho hệ thống dựa trên dữ liệu và các routes đã có (television, phone, laptop). Đây là con chat bot đơn giản mình đã delpoy lên heroku: http://botbotex.herokuapp.com/ Kịch bản xây dựng ở đây đang ở dạng rất đơn giản. Mọi người có thể follow đoạn training dưới đây của mình để test
laptop_enquiry: new_laptop_enquiry: - create a new laptop laptops - open new laptop laptops laptop_index_enquiry: - show all laptop laptops - take me to all laptop laptops page - go to all laptop laptops laptop_count_enquiry: - total laptop laptops - count laptop laptops phone_enquiry: new_phone_enquiry: - create a new phone phones - open new phone phones phone_index_enquiry: - show all phone phones - take me to all phone phones page - go to all phone phones phone_count_enquiry: - total phone phones - count phone phones television_enquiry: new_television_enquiry: - create a new television televisions - open new television televisions television_index_enquiry: - show all television televisions - take me to all television televisions page - go to all television televisions television_count_enquiry: - total television televisions - count television televisions
Cảm ơn mọi người đã theo dõi