Như chúng ta đã biết về nhược điểm của thuật toán đã trình bày ở phần trước. Như vậy, để giải quyết chúng ta cần phải xác lập một mô hình mới cho bài toán Recommender System.
Ở mô hình mới này chúng ta, vẫn sử dụng ý tưởng chính của hướng tiếp cận dựa trên nội dung.
Tuy nhiên, các giá trị về tính năng sẽ được ẩn đi và chúng ta sẽ không biết được cuốn sách nào là lãng mạn và cuốn sách nào thuộc thể loại hành động.
Hình 2.8: Model mới cho RS
Và bây giờ giả sử như chúng ta, bằng cách nào đó có thể xác định được ma trận sở thích của mỗi user chẳng hạn như sau:
Hình 2.9: Xác định ma trận sở thích
Vậy là bài toán trở thành việc tìm bộ số (x1, x2) dựa vào tập ma trận sở thích.
Đây lại là một bài toán linear regression cho nhiều biến trong đó bộ tham số cần học là tham số thể loại.
Ở bài toán này chúng ta có thể thấy sự tương đồng với bài toán ở mục 2.2.4. Chỉ khác biệt ở chỗ ở bài này ma trận mà chúng ta đi học là ma trận tham số thể loại chứ không phải ma trận tham số sở thích. Có thể coi ở hai bài toán, vai trò của ma trận tham số sở thích ở bài toán 1 đổi chỗ cho ma trận tham số thể loại ở bài toán 2 và ngược lại. Và về mặt ngữ nghĩa chúng ta có thể giải thích rằng (lấy ví dụ là cuốn sách Love at Last): “Alice và Bob đều thích sách có thể loại là lãng mạn nhưng Carol và Dave thì không, họ chỉ thích những sách mang nhiều yếu tố hành động. Alice và Bob đã xem qua cuốn sách Love at last và rất thích cuốn sách này. Họ đã đánh giá 5 sao nhưng Carol và Dave lại không thích sách và cho đánh giá 0 sao. Chính vì vậy có thể nói rằng cuốn sách này sẽ có nhiều yếu tố hành động (x1 = 1.0) nhưng lại không có yếu tố ”.
Một cách tương tự, chúng ta cũng có hàm lỗi và Gradient Descent cho bài toán này:
Hình 2.10: Cost function
CHƯƠNG 3: XÂY DỰNG CHATBOT VÀ KHUYẾN NGHỊ 3.1. Xây dựng chatbot
3.1.1.Phân tích
Trong quá trình nghiên cứu, nhóm chúng em đã xác định được các nội dung cần thực hiện trong quá trình thực hiện chatbot như sau:
+ Lời chào: Gửi lời chào khi có người dùng gửi tin nhắn đến.
+ Thông tin chi tiết: Các thông tin chi tiết bao gồm Sách mới nhất, thể loại sách, tác giả.
+ Đặt sách: Người dùng có thể thực hiện đặt sách ngay trong form. + Xử lí ngôn ngữ tự nhiên.
3.1.2.Xây dựng
Trước khi đi đến phần nội dung chính là Cài đặt, chúng ta cần phải thực hiện các bước sau:
Bước 1: Tạo một Trang trên Facebook hoặc sử dụng trang sẵn có. Ở đây nhóm chúng em sử dụng Fanpage Nhà Sách Tri Thức mà nhóm đã tạo
Hình 3.1: Trang được sử dụng để cài đặt Chatbot
Bước 2: Chuẩn bị tài khoản Heroku để triển khai code bằng cách vào trang đăng kí sau đây: https://signup.heroku.com/login.
Bước 3: Tạo ứng dụng và quản lí ứng dụng thông qua Facebook Developers tại đường dẫn: https://developers.facebook.com/apps.
Hình 3.2: Thông tin ứng dụng được tạo trên Facebook Developers
3.1.3.Cài đặt
Bước 1: Cài Nodejs và Git trên máy tính
Bước 2: Xây dựng sườn code, ở đây nhóm xây dựng theo mô hình MVC
Hình 3.3: Cây thư mục của source code chatbot
Chi tiết nội dung của các thư mục như sau:
+ node_moudles: Các module được cài đặt bằng lệnh: npm install
+ config: Cấu hình cài đặt dự án
+ services: Xử lí các thông tin của controller chuyển đến
+ public: Các tệp hiển thị bên phía client và được công khai như thư mục, hình ảnh, css,...
+ routers: Định danh các url được thực hiện + views: Hiển thị và lưu trữ các file html
+ index.js: Xử lí và thực hiện các chức năng (được xem là hàm chính của dự án) + .env: Lưu trữ các biến môi trường
Bước 3: Bắt đầu thực hiện code dựa theo tài liệu hướng dẫn trên facebook: https://developers.facebook.com/docs/messenger-platform/
Có những đoạn code cần phải lưu ý như sau: Trong file .env
Hình 3.4: : Nội dung code trong file môi trường
Ở đây, có 2 biến được cài đặt ở file môi trường cần phải lưu ý, đó là
VERIFY_TOKEN: Token dùng để xác thực khi thực hiện kết nối và nhận dữ liệu. Giá trị của biến này là tùy ý miễn là trong quá trình xác thực truyền đúng giá trị của biến.
PAGE_ACCESS_TOKEN: Token dùng cho truy cập trang. Chúng ta truy cập vào mục Settings -> Generate Token trên trang Facebook Developers trên chính trang vừa tạo để lấy thông tin.
Hình 3.5: Thông tin token được khởi tạo
Trong file controller.js
Viết các hàm handlePostback, callSendAPI và handleMessage để xử lí chính về nội dung từ phía khách hàng dựa trên tài liệu hướng dẫn. Đây là các hàm chính để triển khai và thực hiện quá trình xử lí chatbot.
Hình 3.6: Nội dung code của hàm callSendAPI.
Hàm callSendAPI dùng để xử lí quá trình gửi tin nhắn về phía người dùng. Trong hàm này có 2 thuộc tính chính cần lưu ý:
+ recipient: Xác định đối tượng gửi tin, ở đây xác định bằng mã PSID của người dùng + message: Nội dung chi tiết tin nhắn đã được người dùng gửi. Đoạn tin nhắn này sẽ được truyền vào trong hàm handleMessage để xử lí.
Hình 3.7: Nội dung code của hàm handleMessage.
Hàm handleMessage dùng để xử lí khi nhận được tin nhắn từ phía người dùng. Ở đây, 2 tham số được truyền vào:
• sender_psid: Dùng để nhận biết người đã gửi tin. • received_message: Đối tượng tin nhắn được gửi.
Sau đó hàm này sẽ xử lí đoạn tin nhắn và gọi đến callSendAPI để trả lại phản hồi cho người dùng
Đối với hàm handPostback sẽ xử lí các sự kiện của các nút postback do người dùng gửi đến. Nhìn chung tham số nhận vào tương tự hàm handleMessage. Ở đây đoạn nội dung xử lí sẽ nằm trong khối lệnh switch ... case
Hình 3.9: Code xử lí lệnh Postback
Ở đây có các trường hợp tương ứng với: Khởi động lại bot, bắt đầu đoạn trò chuyện, thông tin sách, sách mới nhất. Đối với từng trường hợp sẽ gọi đến chatbotService để xử lí.
Trong file chatbotService.js
Sau đây là ví dụ một một trường hợp RESTART_BOT được xử lí trong chatbotService
Hình 3.10: Nội dung code trong chatbotService
Ở đây, hàm sẽ nhận sender_psid để biết ai là người gửi đến. Sau đó thực hiện gọi callSendAPI với mục đích trả lại nội dung phản hồi cho phía người dùng.
3.1.4.Triển khai
Trong quá trình code, ta có thể tiến hành deploy lên heroku để thực hiện kiểm tra xem bot có
hoạt động chính xác hay không. Ta sẽ tiến hành theo các bước sau:
Bước 1: Vào dashboard của heroku và tiến hành tạo app bằng cách chọn New -> Create new app. Sau đó điền các trường thông tin cần thiết.
Hình 3.11: Giao diện tạo app trên Heroku.
Bước 2: Vào Settings -> Config Vars và tiến hành thêm các biến môi trường trước khi thực hiện deploy
Hình 3.12: Thêm các biến môi trường trên Heroku.
Ta có thể thấy được các trường VERIFY_TOKEN và PAGE_ACCESS_TOKEN giống được thêm vào giống như file .env đã được đề cập ở phía trên.
Hình 3.13: Hướng dẫn triển khai app trên Heroku
Bước 4: Truy cập vào Facebook Developers, vào mục Settings => Webhooks
Hình 3.14: Cài đặt webhook trên Facebook Developers
Thêm Callback URL là đường dẫn của website mà chúng ta đã deploy trên Heroku. Bên cạnh đó, ta thêm giá trị Verify Token trùng khớp với giá trị đã được thêm trong mục config.
3.2. Xây dựng khuyến nghị 3.2.1.Mô hình xử lý
Hình 3.15: Mô hình xử lý hệ khuyến nghị
Về cơ bản, bên phía BE sẽ chuyển data để cho google colab xử lý
3.2.2.Chi tiết
Data nhận được từ NodeJS sẽ được chia thành các file u.data, ua.base, ua.test, ub.base, ub.test
Hình 3.18: Đọc dữ liệu từ các file items
CHƯƠNG 4: PHÂN TÍCH, THIẾT KẾ HỆ THỐNG
4.1. Xây dựng kiến trúc 4.1.1.Đối tượng tham gia 4.1.1.Đối tượng tham gia
Người dùng chưa đăng nhập: + Xem thông tin các sách + Tư vấn trực tiếp với chatbot + Lọc thể loại theo sách, tác giả Người dùng đã đăng nhập
+ Mua sách bằng nhiều hình thức khác nhau + Xem các đơn hàng đã đặt
+ Xem hệ thống khuyến nghị tư vấn sách + Tư vấn trực tiếp với chatbot
Tài khoản người quản lí
+ Thêm, sửa, xóa sách, thể loại, tác giả + Phân tích người dùng, đơn đặt hàng
4.2. Sơ đồ Use cases 4.2.1.Sơ đồ tổng quát 4.2.1.Sơ đồ tổng quát
4.2.2.Sơ đồ tư vấn chatbot
4.2.3.Sơ đồ mua hàng
4.2.4.Sơ đồ theo dõi đơn hàng
4.2.5.Sơ đồ đánh giá sản phẩm
4.2.6.Sơ đồ quản lí người dùng
4.2.7.Sơ đồ quản lí đặt hàng
4.2.8.Sơ đồ quản lí sách
Hình 4.8: Sơ đồ quản lí sách
4.2.9.Danh sách các Actor
STT Tên Actor Ý nghĩa
1 Người dùng Người dùng có thể sử
dụng được đầy đủ các tính năng trên mobile và website
2 Người quản lí Quản lí các thông tin sách
được hiển thị trên các hệ thống, quản lí người dùng, theo dõi và thống kê các đơn hàng
4.2.10.Danh sách các Use case
STT Tên use case Ý nghĩa
1 Tư vấn chatbot Tương tác với chatbot để
tư vấn tự động
2 Xem sách Xem thông tin các sách
hiện có trên hệ thống
3 Mua hàng Thực hiện hành động mua
hàng trên hệ thống
4 Theo dõi đơn hàng Theo dõi các đơn hàng đã
đặt trên hệ thống
5 Đánh giá Đánh giá sách trên hệ
thống
6 Tra cứu, tìm kiếm Thực hiện tra cứu, tìm
kiếm theo thông tin thể loại, tên sách
7 Đăng kí Đăng kí là người dùng
trên hệ thống
8 Thêm vào giỏ hàng Thêm sản phẩm vào giỏ
hàng trên hệ thống
9 Thanh toán Thực hiện thanh toán
thông qua 2 hình thức: Momo hoặc trực tiếp
10 Quản lí đặt hàng Quản lí các đơn đặt hàng
của người dùng
11 Quản lí sách Có thể xem, sửa thông tin
sách trên hệ thống
4.3. Phân tích và thiết kế dữ liệu
Hình 4.9: Bảng thiết kế dữ liệu
Bảng CATEGORY
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
category_id INT Primary key Mã thể loại
category_name CHAR(100) Not null Tên thể loại
Bảng 4.3: Thiết kế dữ liệu bảng thể loại
Bảng BOOK
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
book_id INT Primary key Mã sách
book_name CHAR(100) Not null Tên sách
book_pulisher CHAR(100) Nhà xuất bản
book_year_published INT Năm xuất bản
book_invetory_quantity INT Not null Số lượng tồn
book_price DECIMAL(20,3) Not null Giá sách
Bảng 4.4: Thiết kế dữ liệu bảng sách
Bảng BOOK_CATEGORY
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
book_id INT Foreign key Mã sách
category_id INT Foreign key Mã thể loại
Bảng 4.5: Thiết kế dữ liệu bảng sách - thể loại
Bảng AUTHOR
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
author_id INT Primary key Mã tác giả
author_name CHAR(100) Not null Tên tác giả
author_telephone CHAR(100) Số điện thoại
Bảng 4.6: Thiết kế dữ liệu bảng tác giả
Bảng BOOK_AUTHOR
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
book_id INT Primary key Mã sách
author_id INT Primary key Mã tác giả
Bảng 4.7: Thiết kế dữ liệu bảng sách - tác giả
Bảng TRANSACTION
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
transaction_status INT Not null Trạng thái giao dịch
transaction_date DATE Not null Ngày giao dịch
ship_date DATE Not null Ngày vận chuyển
transaction_price_total PRICE Not null Tổng tiền giao dịch
Bảng 4.8: Thiết kế dữ liệu bảng giao dịch
Bảng DETAIL_TRANSACTION
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
transaction_id INT Primary key Mã giao dịch
book_id INT Primary key Mã sách
transaction_detail_quantity INT Not null Số lượng
transaction_price_total PRICE Not null Tổng tiền
Bảng 4.9: Thiết kế dữ liệu bảng chi tiết giao dịch
Bảng CUSTOMER
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
customer_id INT Primary key Mã khách hàng
customer_name CHAR(100) Not null Tên khách hàng
customer_telephone CHAR(10) Số điện thoại
customer_address CHAR(100) Địa chỉ khách
hàng
customer_email CHAR(100) Email
Bảng 4.10: Thiết kế dữ liệu bảng khách hàng
Bảng RATING
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
customer_id INT Primary key Mã khách hàng
book_id INT Primary key Mã sách
Bảng 4.11: Thiết kế dữ liệu bảng đánh giá
4.4. Thiết kế giao diện
4.4.1.Giao diện admin quản lý
Hình 4.11: Giao diện admin - trang chủ
Hình 4.13: Giao diện admin - quản lí sách
Hình 4.15: Giao diện admin - cài đặt
4.4.2.Giao diện website
Hình 4.17: Giao diện website - thông tin sản phẩm
Hình 4.19: Giao diện website - thanh toán
4.4.3.Giao diện mobile
CHƯƠNG 5: KẾT LUẬN 5.1. Kết quả đạt được
5.1.1.Đối với người dùng
• Người dùng có thể xem thông tin sách có sẵn trên website và ứng dụng
• Người dùng có thể:
• Tương tác với chatbot tư vấn tự động.
• Đặt sách trực tuyến.
• Xem lịch sử các đơn hàng, bình luận và đánh giá.
• Xem các sách liên quan dựa vào hệ thống khuyến nghị.
5.1.2.Hệ thống khuyến nghị
• Gợi ý khách hàng những sản phẩm liên quan
5.1.3.Hệ thống tư vấn tự động
• Cung cấp thông tin chính xác.
• Phản hồi nhanh chóng.
5.2. Hướng phát triển
Hiện tại ứng dụng khá hoàn thiện và có thể phát triển một số tính năng trong tương lai như:
• Chia sẻ hóa đơn.
• Tính năng bán hàng dành cho các cửa hàng nhỏ lẻ có nhu cầu.
TÀI LIỆU THAM KHẢO
[1] Machine Learning – Recommender System Machine Learning | Coursera. [2] Textbook: 2016 Recommender Systems, Charu C. Aggarwal.
[3] Machine Learning cơ bản (machinelearningcoban.com). [4]. Chatbot - tất cả những gì bạn cần biết
https://nordiccoder.com/blog/chatbot-tat-ca-nhung-gi-ban-can-biet/
[5]. Youtube Channel: Hỏi Dân IThttps://www.navee.asia/kb/su-dung-google- analytics-nhu-the-nao-de-cai-thien hieu-qua-seo/
[6]. Stack Overflow: https://stackoverflow.com [7]. Messenger platform tutorial: