KIẾN THỨC TRỌNG TÂM
Chatbot
Chatbot là phần mềm tương tác với người dùng bằng ngôn ngữ tự nhiên qua âm thanh hoặc tin nhắn Kết hợp với công nghệ AI, chatbot nâng cao hiệu quả hỗ trợ khách hàng, mang lại trải nghiệm tốt hơn cho người sử dụng.
Hình 2.1: Minh họa về chatbot
Sử dụng chatbot trong doanh nghiệp, đặc biệt trong lĩnh vực Thương mại điện tử, mang lại lợi ích lớn về thời gian, giúp tiếp cận và xử lý yêu cầu của khách hàng nhanh chóng Điều này không chỉ gia tăng doanh thu bán hàng mà còn nâng cao tỷ lệ chốt đơn Hơn nữa, chatbot có khả năng ghi nhớ thông tin người dùng, từ đó cung cấp tư vấn phù hợp dựa trên dữ liệu đã thu thập, nâng cao trải nghiệm cho khách hàng.
2.1.3 Hạn chế Đi kèm với lợi ích, những hạn chế trong quá trình sử dụng chatbot gây thiệt hại cũng rất lớn Ở đây chúng ta phải kể đến những hạn chế như sau:
+ Cần dữ liệu đào tạo lớn
+ Gặp khó khăn trong các câu hỏi nằm ngoài phạm vi được đào tạo
+ Các lỗi ngôn ngữ trong quá trình xử lí chatbot
2.1.4 Tính ứng dụng Ứng dụng của chatbot hiện nay rất phổ biến và xuất hiện hầu hết trong nhiều lĩnh vực như: Đầu tư, giáo dục, báo chí, tài chính, thương mại,
Hiện nay, nhiều ứng dụng nhắn tin phổ biến như Facebook Messenger, Discord và Telegram đã tích hợp chatbot, điều này cho thấy vai trò quan trọng của chatbot trong việc nâng cao khả năng cạnh tranh trên thị trường.
Khuyến nghị
Hệ thống gợi ý (Recommender System - RC) ngày càng phổ biến trong các ứng dụng phần mềm, mang lại nhiều lợi ích cho người dùng và nhà phát triển.
• Hệ thống đề xuất sản phẩm của Amazon
Amazon là một trong những công ty tiên phong trong việc phát triển hệ thống khuyến nghị sản phẩm Ngay từ những ngày đầu, họ đã nhận ra giá trị của công nghệ này, giúp cải thiện trải nghiệm người dùng Hệ thống đề xuất của Amazon dựa trên việc phân tích xếp hạng sản phẩm, hành vi mua sắm và hành vi duyệt web của người tiêu dùng.
• Hệ thống đề xuất sách của Netflix
Netflix là nền tảng xem sách trực tuyến, với hệ thống đề xuất sách thông minh Hệ thống này cho phép người dùng xếp hạng sách trên thang điểm 5 và theo dõi hành vi của họ khi chọn các thể loại yêu thích như lãng mạn hay phiêu lưu mạo hiểm.
Netflix còn cung cấp giải thích cho các cuốn sách được đề xuất bởi hệ thống
Ví dụ: Netflix sẽ hiển thị danh sách các cuốn sách A, B, C kèm theo một dòng thông báo: “Vì bạn đã xem D”
Cách tiếp cận này giúp cho người dùng có nhiều khả năng thực hiện theo đề xuất của netflix và thực sự cải thiện trải nghiệm của người dùng
• Hệ thống cá nhân hóa tin tức của google (Google News Personalization System)
Hệ thống cá nhân hóa tin tức của Google hiển thị nội dung dựa trên lịch sử nhấp chuột của người dùng trên trình duyệt web, thông qua thông tin thu thập từ tài khoản Gmail đã đăng nhập Hệ thống này coi mỗi cú nhấp chuột vào một bài báo như một đánh giá tích cực, từ đó đưa ra các khuyến nghị về các bài viết tương tự Tuy nhiên, không có cơ chế cho phép người dùng thể hiện sự không thích đối với một bài báo nào, dẫn đến việc các xếp hạng này được gọi là “xếp hạng 1 lần” (unary rating).
• Hệ thống giới thiệu bạn bè của facebook
Các trang mạng xã hội, như Facebook, sử dụng hệ thống giới thiệu bạn bè tiềm năng nhằm tăng cường tương tác và cải thiện trải nghiệm người dùng Khác với các hệ thống đề xuất sản phẩm, mục tiêu của hệ thống này là mở rộng kết nối xã hội, từ đó tạo ra một mạng lưới lớn hơn và tăng doanh thu quảng cáo cho các nhà phát triển Các hình thức khuyến nghị này dựa trên mối quan hệ cấu trúc thay vì dữ liệu xếp hạng, dẫn đến sự khác biệt trong các thuật toán được áp dụng.
2.2.2 Thuật toán tiếp cận dựa theo nội dung
Vậy model cho Recommender System được xây dựng như thế nào? Chúng ta cùng đi đến bài toán sau:
Giả sử chúng ta có một tập khách hàng và một tập hợp các cuốn sách Mỗi khách hàng đánh giá từ 0 đến 5 cho một hoặc nhiều cuốn sách, với 5 là mức độ hài lòng cao nhất và 0 là thấp nhất Một số khách hàng có thể chưa đánh giá một số cuốn sách Vậy làm thế nào để xác định cuốn sách nào phù hợp với từng khách hàng?
Ta cùng mô hình hóa bài toán dưới dạng ma trận như sau:
Hình 2.2: Ví dụ dự đoán rating
• Khách hàng là cột và các cuốn sách là hàng
• Các giá trị từ 0 – 5 sẽ được điền vào hàng i cột j của ma trận theo đánh giá của khách hàng j cho cuốn sách i
Giả sử họ đã đánh giá như sau:
Bảng 2.1: Bảng đánh giá các cuốn sách
Chúng ta quy ước rằng:
• r(i,j) = 1 nếu như user j đã đánh giá cho cuốn sách i
• y (i,j) = số điểm mà khách hàng j đã đánh giá cho cuốn sách i và chỉ được định nghĩa nếu r(i,j) = 1
Và bài toán bây giờ là sẽ xác định các giá trị “?” sao cho phù hợp với khách hàng dựa vào các đánh giá đã có
Chúng ta thêm vào ma trận hai cột nữa để đánh giá các thể loại của sách như sau:
2 cột này có thể được hiểu như sau:
The book "Love at Last" is characterized by a high level of romance, rated at 0.9, while its action elements are virtually nonexistent, scoring 0.
Và tương tự cho các cuốn sách khác
Nhưng như thế vẫn chưa đủ để xây dựng thuật toán vì vẫn chưa có tham số nào để biểu diễn mức độ yêu thích của các khách hàng
Như vậy theo suy nghĩ tự nhiên, cứ mỗi user chúng ta sẽ thêm vào một (hoặc nhiều) tham số để đại diện cho user đó
Bài toán hiện tại là dự đoán giá trị y dựa trên cặp (x1, x2), và thuật toán hồi quy tuyến tính với nhiều tham số, đã được đề cập trong mục 2.2.1, có thể được áp dụng để giải quyết vấn đề này.
Alice là một ví dụ điển hình cho bài toán hồi quy tuyến tính đơn giản trong toán học Về mặt ngữ nghĩa, có thể hiểu rằng Alice thích những cuốn sách lãng mạn và không ưa thích sách hành động Do đó, cuốn sách "Cute puppies of Love", với chỉ số lãng mạn cao (romance = 0.99) và chỉ số hành động thấp (action = 0.01), có khả năng cao để cô ấy yêu thích.
Hướng tiếp cận này được gọi là tiếp cận dựa trên nội dung (Content – Based Recommendation)
2.2.4 Xây dựng công thức toán học
Để giải quyết bài toán hồi quy tuyến tính với nhiều biến, cần sử dụng hai công cụ chính: hàm lỗi (cost function) và phương pháp Gradient Descent để học các tham số.
Chúng ta sẽ lần lượt giải quyết 2 bước này để hoàn thiện thuật toán Đầu tiên là công thức của hàm lỗi:
Hàm lỗi cho người dùng j được biểu diễn bởi đại lượng (θ (j) ) T x (i), tương ứng với h(x (i)) đã đề cập ở phần trước Để tránh tình trạng overfitting trong mô hình, việc thêm regularization là cần thiết để tối ưu hóa hiệu suất.
Hình 2.5: Hàm lỗi cho user j có sử dụng regularization
Chúng ta không chỉ muốn tối ưu hóa tham số cho từng người dùng riêng lẻ, mà còn cần tối ưu cho tất cả người dùng Do đó, chúng ta cần điều chỉnh công thức để đạt được mục tiêu này.
Hình 2.6: Hàm lỗi cho tất cả user có sử dụng regularization
Việc tiếp theo là học các tham số sử dụng gradient descent
Hình 2.7: Gradient Descent cho Content - based Recommendations
Bài toán đã được giải quyết theo hướng tiếp cận dựa trên nội dung!
Để khắc phục nhược điểm của thuật toán đã nêu, cần thiết phải xây dựng một mô hình mới cho hệ thống gợi ý Mô hình này sẽ tiếp tục sử dụng nguyên tắc cơ bản của phương pháp dựa trên nội dung.
Các giá trị về tính năng của sách sẽ bị ẩn đi, khiến chúng ta không thể phân biệt được đâu là cuốn sách lãng mạn và đâu là cuốn sách 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
Bài toán hiện tại là tìm bộ số (x1, x2) dựa vào tập ma trận sở thích, tương tự như 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 Sự khác biệt ở đây là ma trận được học là ma trận tham số thể loại thay vì ma trận tham số sở thích như ở bài toán trước Hai bài toán này có thể coi là hoán đổi vai trò giữa ma trận tham số sở thích và ma trận tham số thể loại.
XÂY DỰNG CHATBOT VÀ KHUYẾN NGHỊ
Xây dựng chatbot
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
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
Tiến hành chọn Tạo app và kết nối với với Trang đã tạo được ở bước 1
Hình 3.2: Thông tin ứng dụng được tạo trên Facebook Developers
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
+ controller: Nhận các phản hồi từ view và gom nhóm để đưa đến service xử lí
+ 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:
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
The PAGE_ACCESS_TOKEN is essential for accessing a Facebook page To obtain this token, navigate to Settings and select Generate Token on the Facebook Developers site associated with the page you have created.
Hình 3.5: Thông tin token được khởi tạo
Để triển khai và thực hiện quá trình xử lý chatbot, cần viết các hàm handlePostback, callSendAPI và handleMessage nhằm xử lý nội dung từ phía khách hàng theo tài liệu hướng dẫn Đây là những hàm chính đóng vai trò quan trọng trong việc quản lý tương tác của 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 ý:
Để xác định đối tượng nhận tin nhắn, chúng ta sử dụng mã PSID của người dùng Nội dung chi tiết của tin nhắn sẽ được người dùng gửi và được truyền vào 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
Hàm handlePostback được sử dụng để xử lý các sự kiện từ các nút postback mà người dùng gửi đến Tham số đầu vào của hàm này tương tự như hàm handleMessage Nội dung xử lý của hàm được tổ chức trong khối lệnh switch case.
Hình 3.9 trình bày mã xử lý lệnh Postback, bao gồm các trường hợp như khởi động lại bot, bắt đầu đoạn trò chuyện, thông tin sách và sách mới nhất Mỗi trường hợp sẽ được gọi đến chatbotService để xử lý một cách hiệu quả.
Sau đây là ví dụ một một trường hợp RESTART_BOT được xử lí trong chatbotService
Hàm trong chatbotService nhận sender_psid để xác định người gửi, sau đó gọi callSendAPI để trả lại nội dung phản hồi cho người dùng.
Trong quá trình lập trình, chúng ta có thể triển khai ứng dụng lên Heroku để kiểm tra xem bot hoạt động chính xác hay không Các bước thực hiện sẽ được tiến hành như 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
Bước 3: Triển khai code lên heroku theo như hướng dẫn của Heroku
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
Để hoàn tất quá trình cấu hình, hãy thêm Callback URL, đó là đường dẫn đến website đã được triển khai trên Heroku Đồng thời, cần nhập giá trị Verify Token trùng khớp với giá trị đã được thiết lập trong mục cấu hình.
Như vậy ta đã hoàn tất quá trình cài đặt webhooks
Xây dựng khuyến nghị
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ý
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.16: Thông tin cơ bản các về data
Hình 3.17: Đọc dữ liệu từ file rating
Hình 3.18: Đọc dữ liệu từ các file items
Hình 3.19: Xây dựng Feature Vector
Hình 3.20: Hàm tìm items được đánh giá bởi user
Hình 3.21: Tìm mô hình cho mỗi user
PHÂN TÍCH, THIẾT KẾ HỆ THỐNG
Xây dựng kiến trúc
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
Sơ đồ Use cases
Hình 4.1: Sơ đồ Use case tổng quát
4.2.2 Sơ đồ tư vấn chatbot
Hình 4.2: Sơ đồ tư vấn chatbot
Hình 4.3: Sơ đồ mua hàng
4.2.4 Sơ đồ theo dõi đơn hàng
Hình 4.4: Sơ đồ theo dõi đơn hàng
4.2.5 Sơ đồ đánh giá sản phẩm
Hình 4.5: Sơ đồ đánh giá sản phẩm
4.2.6 Sơ đồ quản lí người dùng
Hình 4.6: Sơ đồ quản lí người dùng
4.2.7 Sơ đồ quản lí đặt hàng
Hình 4.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
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
Bảng 4.1: Danh sách các Actor
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
Bảng 4.2: Danh sách các Use case
Phân tích và thiết kế dữ liệu
Hình 4.9: Bảng thiết kế dữ liệu
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
The table structure for a book database includes several key fields: 'book_id' as an integer serving as the primary key, 'book_name' as a non-null character field limited to 100 characters for the book title, and 'book_description' as a non-null text field for detailed descriptions Additionally, 'book_publisher' is a character field for the publisher's name, while 'book_year_published' captures the publication year as an integer The 'book_inventory_quantity' is a non-null integer indicating the available stock, and 'book_price' is a non-null decimal field formatted to three decimal places for pricing.
Bảng 4.4: Thiết kế dữ liệu bảng sách
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
The table structure includes the following fields: `author_id`, an integer serving as the primary key that uniquely identifies each author; `author_name`, a non-null character field with a maximum length of 100 characters representing the author's name; and `author_telephone`, a character field also limited to 100 characters that stores the author's telephone number.
Bảng 4.6: Thiết kế dữ liệu bảng tác giả
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ả
The table structure includes the following fields: the "transaction_id" is an integer serving as the primary key, representing the unique transaction code The "transaction_status" is a non-null integer that indicates the status of the transaction The "transaction_date" is a required date field that records the date of the transaction, while the "ship_date" is also a non-null date field that captures the shipping date Lastly, the "transaction_price_total" is a mandatory price field that reflects the total transaction amount.
Bảng 4.8: Thiết kế dữ liệu bảng giao dịch
The article outlines the structure of a database table with the following key fields: "transaction_id" as an integer serving as the primary key representing the transaction code; "book_id," also an integer and primary key, indicating the book code; "transaction_detail_quantity," which is a non-null integer specifying the quantity of books involved in the transaction; and "transaction_price_total," a non-null price field that records the total amount of the transaction.
Bảng 4.9: Thiết kế dữ liệu bảng chi tiết giao dịch
The table structure includes a primary key named "customer_id," which is of type INT, representing the customer code The "customer_name" field is defined as CHAR(100) and cannot be null, indicating the customer's name Additionally, "customer_telephone" is a CHAR(10) field for the customer's phone number, while "customer_address" is also CHAR(100), capturing the customer's address Lastly, the "customer_email" field, which is CHAR(100), is used for the customer's email address.
Bảng 4.10: Thiết kế dữ liệu bảng khách hàng
The table includes three key fields: 'customer_id', an integer serving as the primary key representing the customer code; 'book_id', another integer functioning as the primary key for the book code; and 'rating_value', an integer that cannot be null, indicating the rating score.
Bảng 4.11: Thiết kế dữ liệu bảng đánh giá
Thiết kế giao diện
4.4.1 Giao diện admin quản lý
Hình 4.10: Giao diện admin - đăng nhập
Hình 4.11: Giao diện admin - trang chủ
Hình 4.12: Giao diện admin - quản lí người dùng
Hình 4.13: Giao diện admin - quản lí sách
Hình 4.14: Giao diện admin - lịch sử giao dịch
Hình 4.15: Giao diện admin - cài đặt
Hình 4.16: Giao diện website - Trang chủ
Hình 4.17: Giao diện website - thông tin sản phẩm
Hình 4.18: Giao diện website - đặt hàng
Hình 4.19: Giao diện website - thanh toán
Hình 4.20: Giao diện website - đơn hàng của tôi
Hình 4.21: Giao diện mobile - trang chủ
Hình 4.22: Giao diện mobile - thông tin chi tiết
Hình 4.23: Giao diện mobile - trang cá nhân
Hình 4.24: Giao diện mobile - thanh toán