Thuật toán collaborative filtering

Một phần của tài liệu Xây dựng hệ thống kinh doanh sách online với khuyến nghị và tư vấn tự động (khóa luận tốt nghiệp) (Trang 25)

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 (adsbygoogle = window.adsbygoogle || []).push({});

+ 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: (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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ả (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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:

Một phần của tài liệu Xây dựng hệ thống kinh doanh sách online với khuyến nghị và tư vấn tự động (khóa luận tốt nghiệp) (Trang 25)