Nghiên cứu sâu hơn về việc sử dụng thư viện NLP.js và mô hình Transformer cho vấn đề xử lý ngôn ngữ tự nhiên và các công nghệ liên quan Node.js, Express, React.js, Javascript, Flutter, P
TỔNG QUAN
Khảo sát hiện trạng
Hiện nay, chatbot là một ứng dụng được sử dụng rộng rãi trên nhiều quy mô và mức độ phức tạp khác nhau Nhiều số liệu cho thấy sự phổ biến của chatbot đang tăng lên ở các lĩnh vực như chăm sóc khách hàng, bán hàng và quản trị doanh nghiệp, từ các doanh nghiệp nhỏ đến tập đoàn lớn Những số liệu này cho thấy chatbot giúp rút ngắn thời gian trả lời, cải thiện trải nghiệm người dùng và tối ưu hóa quy trình làm việc Với khả năng xử lý ngôn ngữ tự nhiên và khả năng tích hợp trên nhiều nền tảng, chatbot đang trở thành công cụ thiết yếu để tự động hóa dịch vụ và tối ưu hóa hiệu suất vận hành.
Hình 2.1 Dữ liệu Google Trend cho cụm từ "chatbot" trong vòng 5 năm trở lại đây
Dữ liệu Google Trend cho cụm từ “Chat bot” có xu hướng tăng dần theo từng năm và hiện tại đang ở mức khá ổn định:
• 1.4 tỷ người đang sử dụng Chatbot (theo như Chatbot.Net)
• 56% doanh nghiệp tin rằng chatbot là một trong những nhân tố đột phá trong việc kinh doanh của họ (theo như Accenture)
Gần 60% các nhà điều hành doanh nghiệp cho rằng Chatbot có thể nâng cao khả năng xử lý yêu cầu của khách hàng thông qua mạng lưới liên kết với các bot khác Theo Accenture, hệ sinh thái bot liên kết này mang lại sự chăm sóc cá nhân hóa cho từng đối tượng tiếp xúc với trang web của doanh nghiệp.
Về mặt trải nghiệm, ta có những số liệu sau:
• 265 tỷ yêu cầu từ khách hàng được đưa ra, tiêu tốn 1,3 nghìn tỷ USD mỗi năm (theo như Chatbots Journal)
• 30% khách hàng sẽ rời bỏ một nhãn hàng và không bao giờ trở lại vì trải nghiệm không tốt (theo như OpenText)
• 1 trong 5 yêu cầu trò chuyện trực tiếp từ khách hàng không bao giờ được trả lời (theo như SuperOffice)
Đến năm 2022, các ngân hàng được dự báo sẽ tự động hóa lên tới 90% giao tiếp với khách hàng của họ bằng chatbot, một xu hướng công nghệ ngân hàng nổi bật được nêu ra bởi Lauren Foye từ Juniper Research và được đăng trên Chatbots Magazine.
Về ảnh hưởng đến nhân viên chăm sóc khách hàng truyền thống, ta có những số liệu sau:
• 64% thời gian AI Chatbot giao tiếp với khách hàng sẽ dùng để giải quyết các vấn đề phức tạp (theo như Salesforce 2)
• Khả năng định hình lại hệ thống nhân sự của một công ty là ảnh hưởng ít được nhắc đến nhất của Chatbot (khoảng 1 phần 10)
Về ý thích của người dùng, ta có những số liệu sau
• 54% khách hàng cho rằng công ty cần phải chuyển đổi cách mà họ tiếp cận khách hàng (theo như Salesforce)
• Chỉ 38% người tiêu dùng có nhu cầu trò chuyện trực tiếp với người thật khi tiếp xúc với một nhãn hàng (theo như Drift)
• 77% người tiêu dùng cho rằng Chatbot thay đổi kì vọng của họ lên công ty trong 5 năm tới (theo như Salesforce)
• 70% khách hàng thuộc thế hệ millennials (8x, 9x) có trải nghiệm tích cực với Chatbot (theo như Forbes)
• Số khách hàng sử dụng nắn tin trực tuyến thay vì thông qua điện thoại hay thư điện từ đã tăng 50% kể từ năm 2012 (theo như Forrester)
Theo Facebook Business, hơn 64% người dùng Facebook tại Brazil, Ấn Độ, Anh và Mỹ cho biết họ muốn giao tiếp với một doanh nghiệp qua Facebook Messenger vì họ cho rằng khả năng được hồi đáp nhanh hơn so với các kênh liên hệ khác Điều này cho thấy Messenger là kênh liên hệ hiệu quả để tăng trải nghiệm khách hàng và tối ưu sự tương tác trên các thị trường lớn.
Về tiềm năng phát triển của Chatbot, ta có những số liệu sau:
Thị trường chatbot được dự báo sẽ tăng trưởng từ 2.6 tỷ USD năm 2019 lên 9.4 tỷ USD vào năm 2024, với tỉ lệ tăng trưởng hàng năm (CAGR) khoảng 29.7%, theo Business Insider Dự báo này cho thấy nhu cầu sử dụng chatbot ngày càng phổ biến trong chăm sóc khách hàng, bán hàng và tự động hóa doanh nghiệp, mở ra nhiều cơ hội cho các nhà phát triển AI và doanh nghiệp đầu tư vào công nghệ trò chuyện.
Theo dự báo của Gartner, đến năm 2023 sẽ có tới 30% dịch vụ chăm sóc khách hàng của các tổ chức được thực hiện một cách chủ động bởi các hệ thống được vận hành bằng trí tuệ nhân tạo và các hệ thống tích hợp thông minh khác Điều này thể hiện xu hướng tăng cường tự động hóa chăm sóc khách hàng và cải thiện trải nghiệm người dùng nhờ AI.
Chatbot đóng vai trò nổi bật trong quá trình phát triển của doanh nghiệp và tiềm năng ứng dụng của nó trong tương lai rất lớn Để làm rõ tình trạng thực tiễn của Chatbot và nhu cầu tra cứu thông tin, ta sẽ khảo sát hai dịch vụ sau.
2.1.1 CleverBot – Chatbot trò chuyện nổi tiếng nhất thế giới
Hình 2.2 Một giao diện của CleverBot
CleverBot là một phần mềm chatbot được xây dựng trên các thuật toán trí tuệ nhân tạo, cho phép thiết lập các cuộc trò chuyện tự nhiên với con người Dự án này được thực hiện bởi các nhà khoa học nghiên cứu về trí tuệ nhân tạo và xử lý ngôn ngữ tự nhiên, nhằm khám phá cách máy móc có thể giao tiếp và hiểu ngôn ngữ của người dùng.
AI tên là Rollo Carpenter Người tiền nhiệm của nó là Jabberwacky Dự án được bắt
Cleverbot được khởi đầu vào năm 1996 và chính thức lên mạng vào năm 1997 Trong thập kỉ đầu tiên tồn tại, Cleverbot học cách giao tiếp bằng cách lắng nghe hàng nghìn cuộc trò chuyện giữa ông Carpenter và các đồng sự của ông Sau khi phiên bản web của Cleverbot được ra mắt, con số cuộc trò chuyện mà nó tham gia đến nay đã lên tới hơn 150 triệu.
Cleverbot tham gia bài thử Turing được tổ chức chính thức tại ngày hội Techniche 2011 ở Học viện công nghệ Guwahati (Ấn Độ) Kết quả cho thấy Cleverbot đạt 59.3% số người tham gia cho rằng nó là con người, với 1334 phiếu bầu, so với 63.3% ở người thật Ngưỡng vượt qua bài kiểm tra này được xác định ở mức trên 50.5%.
Khác với việc dựa vào kịch bản hoặc các quy tắc cố định, Cleverbot sử dụng một hệ thống logic mở để tìm kiếm phản hồi phù hợp Hệ thống này khai thác dữ liệu từ các cuộc trò chuyện trước đây giữa Cleverbot và người dùng nhằm xác định câu trả lời tối ưu cho ngữ cảnh hiện tại Nhờ đó, Cleverbot có thể trả lời một cách tự nhiên và linh hoạt hơn trong từng cuộc trò chuyện.
2.1.2 Google – Nền tảng tra cứu thông tin lớn nhất thế giới
Hình 2.3 Giao diện tra cứu thông tin của Google
Google hiện là nền tảng công cụ tìm kiếm lớn nhất thế giới, chiếm khoảng 92% lưu lượng truy vấn và là trang web được truy cập nhiều nhất Tuy nhiên, nội dung quan trọng ở đây là Google Knowledge Graph, một dịch vụ giúp Google thu thập thông tin từ nhiều nguồn khác nhau và hiển thị ngay trên trang kết quả tìm kiếm để người dùng có được câu trả lời nhanh chóng Dữ liệu trong Knowledge Graph có thể liên quan đến cá nhân, tập thể, thời tiết, chứng khoán và nhiều lĩnh vực khác Đây cũng là nền tảng để các trợ lý ảo như Google Home và Google Assistant có thể trả lời câu hỏi của người dùng.
Nhận xét về hiện trạng
2.2.1 Các vấn đề còn tồn tại
Vấn đề còn tồn tại của các dịch vụ này bao gồm nhưng không hạn chế ở các vấn đề sau:
• Hỗ trợ cho tiếng Việt còn hạn chế
• Khả năng thực hiện các cuộc đối thoại bình thường (Small talk) còn hạn chế (đối với Google Assistant)
• Không nắm bắt được cảm xúc của người dùng
• Thiếu cơ chế nắm bắt ngữ cảnh
• Giao diện chưa được thân thiện
Các vấn đề được đề cập xuất phát từ nhiều nguyên nhân, trong đó nguyên nhân lớn nhất là việc các dịch vụ này không tập trung vào người dùng tại Việt Nam Đây là điểm khác biệt căn bản so với định hướng của đề tài, ảnh hưởng tới tính khả thi, sự phù hợp và hiệu quả của các giải pháp dành cho thị trường Việt Nam.
2.2.2 Các vấn đề được tập trung trong đề tài
Với đề tài này, nhóm muốn tập trung giải quyết các vấn đề phát sinh từ việc thiếu một giải pháp chatbot ngôn ngữ tự nhiên tối ưu cho tiếng Việt Mục tiêu là nâng cao khả năng hiểu và xử lý ngôn ngữ tiếng Việt, cải thiện độ tự nhiên và độ chính xác của phản hồi, đồng thời mở rộng nguồn dữ liệu tiếng Việt phong phú cho đào tạo mô hình ngôn ngữ Các giải pháp đề xuất sẽ bao gồm tối ưu hóa xử lý ngôn ngữ tự nhiên cho tiếng Việt, tích hợp ngữ cảnh và cá nhân hóa người dùng, tăng cường an toàn thông tin và chất lượng dữ liệu, cũng như ứng dụng chatbot tiếng Việt vào các lĩnh vực dịch vụ khách hàng, giáo dục và thông tin.
• Nâng cao khả năng phản hồi của Chatbot trong ngữ cảnh đối thoại bình thường
• Phân tích cảm xúc người dùng thông qua đoạn Chat để phục vụ việc cải thiện chất lượng Chatbot
• Bổ sung cơ chế nắm bắt ngữ cảnh có tổ chức ở mức cơ bản
• Đưa Chatbot vào một giao diện dễ sử dụng
Với sự tập trung vào giải quyết các vấn đề đã nêu, nhóm nghiên cứu kỳ vọng sản phẩm cuối cùng sẽ là một Chatbot có khả năng thấu hiểu và xử lý ngôn ngữ tiếng Việt ở mức đủ để được tích hợp trong các ứng dụng trợ lý ảo.
NGHIÊN CỨU LÝ THUYẾT
Giới thiệu về bài toán Chatbot
Ta có thể hình dung Chatbot ở mức độ đơn giản là nhận đầu vào là tin nhắn từ người dùng và trả về một tin nhắn hoặc nội dung số phù hợp với nhu cầu hoặc mong muốn của họ Điều khó khăn là xác định đúng người dùng đang cần hay muốn gì Bản chất của Chatbot là một hệ thống tương tác giữa người và máy (Human-Computer Interaction System) nhằm mục tiêu giải quyết một vấn đề cụ thể của người dùng.
Hình 3.1 Kiến trúc cơ bản của một hệ thống Chatbot
Tùy thuộc vào mục đích của Chatbot mà chúng ta có thể có một số các thước đo phi hình thức cho Chatbot Một số ví dụ bao gồm:
• Phép thử Turing (sẽ được giới thiệu ở phần sau)
• Khối lượng Chat (số tin nhắn trao đổi)
• Số người dùng mua hàng Chatbot khuyến nghị
Nhìn chung thì các thước đo này sẽ được chia ra làm 5 loại thước đo chính Cụ thể như sau:
• Khía cạnh trải nghiệm người dùng o Độ khả dụng (Usability) o Hiệu năng (Performance) o Tính tác động (Affect) o Độ hài lòng (Satisfactory)
• Khía cạnh thu thập thông tin
47 o Độ chính xác (Accuracy) o Dễ tiếp cận (Accessibility) o Độ hiệu quả (Efficiency)
• Khía cạnh ngôn ngữ o Chất lượng (Quality) o Định lượng (Quantity) o Tính liên quan (Relation) o Thái độ (Manner) o Chính xác về mặt ngữ pháp (Grammatical Accuracy)
• Khía cạnh công nghệ o Tính giống người (Humanity)
• Khía cạnh kinh doanh o Giá trị kinh tế (Business Value)
Đã có nhiều nỗ lực chuẩn hóa việc đánh giá hiệu quả của Chatbot thông qua các bộ khung đánh giá như TRAINS-95, PARADISE, SASSI và MIMIC Dù được tổ chức thang đo có cấu trúc hơn, bản chất của các bộ khung này vẫn dựa trên các thang đo phi hình thức và mang tính chủ quan của người đánh giá.
Một đặc điểm nổi bật của bài toán Chatbot là sự kết hợp của hai bài toán lớn trong lĩnh vực xử lý ngôn ngữ tự nhiên: thấu hiểu ngôn ngữ tự nhiên (Natural Language Understanding - NLU) và các bước chuyển đổi dữ liệu văn bản thành thông tin có cấu trúc cho hệ thống máy tính Trong khuôn khổ thấu hiểu ngôn ngữ tự nhiên, hệ thống cố gắng hiểu một chuỗi ký tự thuộc ngôn ngữ tự nhiên và trích xuất các dữ liệu có thể được tổ chức trong hệ thống máy tính Các bài toán con để giải quyết thấu hiểu ngôn ngữ tự nhiên bao gồm: tiền xử lý, phân tích hình thái, phân tích cú pháp, phân tích ngữ nghĩa, phân tích ngữ dụng và phân tích diễn ngôn Ví dụ được thể hiện ở hình dưới.
Hình 3.2 Ví dụ về bài toán thấu hiểu ngôn ngữ tự nhiên
Phần còn lại của bài toán là cấu tạo ngôn ngữ tự nhiên (Natural Language Generation – NLG), nơi hệ thống máy tính nhận dữ liệu được tổ chức và chuyển đổi thành chuỗi ký tự ngôn ngữ tự nhiên trước khi hiển thị cho người dùng Các bài toán con của cấu tạo ngôn ngữ tự nhiên bao gồm xác định nội dung, xác lập cấu trúc thông tin, tổng hợp thông tin, lựa chọn từ ngữ, tạo cú pháp tham chiếu và hiện thực hóa Ví dụ minh họa cho quy trình này thường được thể hiện ở hình dưới.
Hình 3.3 Ví dụ về bài toán cấu tạo ngôn ngữ tự nhiên
Lý thuyết xây dựng Chatbot
3.2.1 Các hướng tiếp cận xây dựng Chatbot
3.2.1.1 Hướng tiếp cận ngây thơ
Một Chatbot cơ bản sẽ gồm 2 thành phần chính
• Một hệ thống xử lý đầu vào
• Một hệ thống biên soạn đầu ra (phản hồi) của Chatbot
Ví dụ cơ bản nhất có thể được mô tả như sau:
Người dùng: Bạn khỏe không?
Thời tiết ở Hà Nội ngày mai như thế nào Ý định: Hỏi thời tiết Địa điểm: Hà Nội
Trong ví dụ này, đầu vào của người dùng là câu 'Bạn khỏe không?' và phản hồi của chatbot là 'Tôi khỏe' Ta có thể lập trình hệ thống xử lý đầu vào của chatbot để so khớp dữ liệu đầu vào với chuỗi 'Bạn khỏe không?' và khi kết quả khớp đúng, trả về chuỗi ký tự 'Tôi khỏe' Tuy nhiên, cách làm này bộc lộ nhiều vấn đề sẽ được nói đến trong mục 3.2.2.
3.2.1.2 Hướng tiếp cận tìm kiếm mờ Để hiểu về hướng tiếp cận tìm kiếm mờ Ta xét bài toán sửa lỗi chính tả Một trong những cách thức để xác định lỗi chính tả đó là tính toán khoảng cách chỉnh sửa (Edit distance) Với hai xâu ký tự nguồn source và xâu ký tự đích target, khoảng cách chỉnh sửa để biến xâu source thành xâu target có thể được tính như sau (Theo định nghĩa của độ đo Levenshtein):
Khoảng cách chỉnh sửa(source, target) = w_a * a + w_d * d + w_s * s
Khoảng cách chỉnh sửa giữa hai chuỗi là thước đo mức độ khác biệt, được tính dựa trên các tác vụ thêm ký tự (wa), xóa ký tự (wd) và thay thế ký tự bằng ký tự khác (ws) của chuỗi nguồn để biến thành chuỗi đích, với các trọng số w_a, w_d và w_s (thông thường bằng 1) Khoảng cách này càng nhỏ càng cho thấy hai xâu càng giống nhau và xâu nguồn có thể là một phiên bản bị sai chính tả của xâu đích Có nhiều cách để tính khoảng cách chỉnh sửa tối thiểu, nhưng một trong những thuật toán phổ biến nhất là khoảng cách Levenshtein, được biểu diễn bằng công thức đặc trưng cho quá trình biến đổi từ chuỗi nguồn sang chuỗi đích thông qua các thao tác thêm, xóa và thay thế.
Hình 3.4 Đặc tả độ đo Levenshtein
Để đo khoảng cách giữa chuỗi nguồn và chuỗi đích, ta có thể dùng thuật toán quy hoạch động Wagner–Fischer Thuật toán này xây dựng một ma trận kích thước (m+1)×(n+1), trong đó m là số từ của nguồn và n là số từ của đích, nhằm ước lượng số thao tác cần thiết để biến đổi nguồn thành đích Các bước cơ bản gồm: khởi tạo hàng và cột đầu tiên để đại diện cho các thao tác xóa và thêm từ; sau đó điền lần lượt từng ô (i, j) dựa trên sự so sánh giữa từ thứ i của nguồn và từ thứ j của đích và áp dụng công thức tối thiểu của các thao tác xóa, thêm và thay thế Kết quả tại ô (m, n) cho biết khoảng cách Levenshtein giữa hai chuỗi và cho phép đánh giá mức độ tương đồng một cách tối ưu nhờ quy hoạch động Wagner–Fischer.
• Từ xâu rỗng, ta có thể thêm từng ký tự vào cho đến khi đạt đến xâu mục tiêu
• Từ xâu gốc, ta có thể xóa từng ký tự đi cho đến khi xâu rỗng
• Từ trên xuống (j), trái qua phải (i), thực hiện các bước sau o Nếu source[i - 1] = target[j - 1] sub_cost = 0, o Nếu không sub_cost = 1 o Lấy m[i, j] min (m[i – 1, j] + 1, m[i, j - 1] + 1, m[i - 1, j - 1] + sub_cost)
• Giá trị m[m, n] chính là khoảng cách chỉnh sửa
Hình 3.5 Bảng minh họa thuật toán quy hoạch động của Wagner-Fischer (So sánh xâu
Thuật giải Wagner-Fischer có thể được biến đổi để thực hiện tác vụ tìm kiếm mờ trong xâu ký tự Bằng cách khởi tạo toàn bộ hàng đầu bằng 0 và giả định rằng xâu con gần trùng với xâu mục tiêu có thể bắt đầu từ bất kỳ vị trí nào trên xâu, ta có thể xác định vị trí kết thúc của xâu con gần trùng nhất bằng cách tìm giá trị nhỏ nhất ở hàng cuối cùng của ma trận—một ý tưởng thuộc giải thuật Seller.
Hình 3.6 Bảng minh họa thuật toán Seller (Tìm kiếm xâu “think” trong xâu “i am shrinky”)
Như đã trình bày, thuật toán này không chỉ hoạt động với các ký tự trong một từ mà còn có thể xử lý bất kỳ thực thể nào có thể được phân chia thành các phần tử nhỏ hơn (token) Bằng cách thay chữ cái bằng từ và thay từ bằng câu, với một tập hợp câu và phản hồi đủ lớn, đồng thời kết hợp với các cấu trúc dữ liệu như Trie để tối ưu hóa tìm kiếm, chúng ta có thể khắc phục nhược điểm lớn nhất của cách tiếp cận ngây thơ.
Hình 3.7 Cấu trúc dữ liệu Trie để lưu trữ từ điển cho phép so sánh mờ
3.2.1.3 Hướng tiếp cận sử dụng N-gram
Trong ngôn ngữ học điện toán, n-gram (hay còn gọi là Q-gram) là một mô hình ngôn ngữ xác suất nhằm dự đoán ký tự tiếp theo trong một chuỗi theo khuôn mẫu của mô hình Markov bậc n-1 Ý tưởng sử dụng n-gram có nguồn gốc từ thí nghiệm của Claude Shannon trong học thuyết thông tin, khi ông đặt câu hỏi về xác suất ký tự tiếp theo trong một chuỗi ký tự bất kỳ là bao nhiêu Từ một bộ dữ liệu huấn luyện, ta có thể xây dựng một mô hình xác suất phân phối cho ký tự tiếp theo dựa trên lịch sử n ký tự trước đó, sao cho tổng xác suất của các ký tự bằng 1.
1 Xác suất xuất hiện từ x nối tiếp n từ trước đó có thể được coi là một phân bố Bernoulli chung Tuy nhiên trong thực tế thì phân phối này sẽ được làm mịn bằng cách gán xác suất khác 0 cho các từ không nhận diện được (không nằm trong từ điển của mô hình) Để xây dựng một mô hình n-gram, ta bắt đầu từ việc tính toán xác suất của một từ sẽ nối tiếp từ tiếp của một chuỗi P(word|history) Việc này có thể được thực hiện
53 thông qua tần suất xuất hiện tương đối Ví dụ với P(nên|hôm nay trời mưa) sẽ được tính với công thức
− C(hôm nay trời mưa nên) là số lần xuất hiện cụm “hôm nay trời mưa nên” trong tập huấn luyện
− C(hôm nay trời mưa) là số lần xuất hiện cụm “hôm nay trời mưa” trong tập huấn luyện
Trong ngôn ngữ tự nhiên, có thể có rất nhiều biến thể câu không tuân theo trật tự từ vựng chuẩn nhưng vẫn truyền đạt cùng một ý nghĩa (ví dụ: “trời mưa hôm nay nên”, “có mưa hôm nay nên”, “hôm nay mưa nên”) Dù có tập huấn luyện lớn, tần suất xuất hiện của một cụm từ chính xác như vậy vẫn rất thấp Vì thế, ta có thể chia nhỏ chuỗi thành từ và áp dụng quy tắc xác suất chuỗi để ước lượng nghĩa giữa các từ, là nền tảng cho các mô hình xử lý ngôn ngữ tự nhiên Công thức chung cho phương pháp này sẽ được trình bày tiếp theo, dựa trên nguyên lý chuỗi xác suất theo từ để tối ưu hóa tìm kiếm, gợi ý nội dung và phân tích văn bản trong các ứng dụng SEO.
− P(w1:n) là xác suất xuất hiện của chuỗi nhất định có n ký tự
− P(w1) là xác suất xuất hiện của từ số 1
− P(w2|w1) là xác suất xuất hiện của từ số 2 sau từ số 1
Tuy nhiên, xác suất xuất hiện của một chuỗi từ dài vẫn rất thấp vì nó là tích của nhiều xác suất thành phần Ý tưởng của mô hình n-gram là thay vì tính xác suất của một từ dựa trên toàn bộ ngữ cảnh trước đó, ta ước tính xác suất đó dựa vào chỉ một vài từ ngay trước nó, giúp đơn giản hóa tính toán và cải thiện khả năng dự đoán từ trong xử lý ngôn ngữ tự nhiên.
Ví dụ đối với mô hình bigram (n=2) Ta chỉ ước lượng với từ đang được dự đoán và
1 từ ngay trước nó Ước tính này có thể được diễn đạt như sau:
Giả định Markov (Markov assumption) cho phép ước tính xác suất hiện tại chỉ dựa trên một chuỗi ngắn các từ trước đó và bỏ qua quá khứ xa; mô hình Markov nói chung là một loại mô hình xác suất không nhìn quá xa về các giá trị cũ Trong xử lý ngôn ngữ tự nhiên, chúng ta dùng khái niệm n-gram để mô tả mối quan hệ giữa các từ: bigram chỉ nhìn vào hai từ liên tiếp (từ hiện tại và từ trước đó), trigram nhìn vào ba từ, và nói chung n-gram nhìn vào n từ (từ đang xét và n-1 từ trước đó) Để tính xác suất của một chuỗi theo bigram, ta có thể sử dụng ước lượng khả năng cực đại (Maximum Likelihood Estimation - MLE) bằng cách đếm số lần chuỗi xuất hiện và chuẩn hóa chuỗi đó về giá trị giữa 0 và 1.
Ví dụ cụ thể cho thấy một tập dữ liệu gồm 5 câu, được ký hiệu bắt đầu và kết thúc bằng thẻ và Việc dùng các thẻ này giúp nhận diện ranh giới câu trong quá trình xử lý ngôn ngữ tự nhiên và làm sạch dữ liệu văn bản Bằng cách đánh dấu từng câu với ở đầu và ở cuối, ta có thể dễ dàng tách câu, chuẩn hóa dữ liệu và kiểm tra hiệu suất của các mô hình NLP trên tập dữ liệu dễ đọc này Nhờ đó việc tiền xử lý văn bản được tối ưu hóa, đồng thời cải thiện độ chính xác của các tác vụ xử lý ngôn ngữ như tokenization, parsing và phân loại văn bản.
Ta có thể biểu diễn bigram dưới dạng bảng sau (hàng dọc hiện thị w n-1 , hàng ngang hiển thị w n , mỗi ô hiển thị P(w n | w n-1 ):
Bảng 3.1 Bảng minh họa mô hình bigram cho từ điển ví dụ minh họa
tôi đi họ c ăn cơ m sẽ ng ủ mu ố n bánh
0 1 0 0 0 0 0 0 0 0 0 tôi 0 0 0.25 0 0.25 0 0.25 0 0.25 0 0 đi 0 0 0 0.5 0 0 0 0.5 0 0 0 học 0 0 0 0 0 0 0 0 0 0 1 ăn 0 0 0 0 0 0.5 0 0 0 0.5 0 cơm 0 0 0 0 0 0 0 0 0 0 1 sẽ 0 0 1 0 0 0 0 0 0 0 0 ngủ 0 0 0 0 0 0 0 0 0 0 1 muốn 0 0 0 0 1 0 0 0 0 0 0 bánh 0 0 0 0 0 0 0 0 0 0 1
Như vậy để tính xác suất của câu “tôi sẽ đi học” Ta có công thức:
Trong thực tế, chúng ta sẽ sử dụng n-gram có bậc cao hơn (trigram, 4-gram, 5-gram, v.v.) để tính toán xác suất của từ tiếp theo dựa theo các từ trước đó Khi xác suất của từ tiếp theo quá nhỏ, ta có thể sử dụng xác suất hàm log để tránh trường hợp underflow và đảm bảo tính ổn định của quá trình tính toán Dựa theo công thức tổng quát như sau.
𝑝 1 ∙ 𝑝 2 ∙ 𝑝 3 ∙ … ∙ 𝑝 𝑛 = exp(log 𝑝 1 + log 𝑝 2 + log 𝑝 3 + ⋯ + log 𝑝 𝑛 )
Xác suất tính được từ n-gram có thể được ứng dụng cho các tác vụ xử lý ngôn ngữ tự nhiên như cấu tạo phản hồi và hỗ trợ nhận diện giọng nói, nơi dự đoán âm tiết có khả năng tiếp nối các âm tiết trước đó trong trường hợp nhập nhằng mang lại hiệu quả cao hơn Tuy nhiên, hướng tiếp cận này còn tồn tại hạn chế như không thể nhận diện các phụ thuộc từ xa và thiếu sự định hình của một mô hình ngôn ngữ dựa trên ngữ nghĩa, thay vào đó phụ thuộc vào xác suất thống kê khiến mô hình không có nhiều ý nghĩa ngôn ngữ học.
3.2.1.4 Hướng tiếp cận mạng nơ-ron Để có thể hiểu được hướng tiếp cận này, ta cần phải hiểu về mạng nơ-ron (Ở đây ta sẽ nhắc đến mạng nơ-ron truyền thẳng – Feed-forward Neural Network) Nguyên lý cơ bản của một mạng nơ-ron truyền thẳng đó là hệ thống sẽ bao gồm một lớp dữ liệu đầu vào, một số lớp dữ liệu ẩn, và một lớp dữ liệu đầu ra Mỗi lớp sẽ có một số nút (hay còn gọi là nút nơ-ron) là một hàm số (thường là các hàm có đồ thị hình chữ S như hàm sigmoid, hàm tanh, v.v.) và một trọng số Mạng nơ-ron sẽ được huấn luyện bằng cách đưa một tập dữ liệu đầu vào, và kết quả mong đợi ở đầu ra Nhiệm vụ của mạng nơ-ron là điều chỉnh các trọng số trong mỗi nút ẩn để đưa ra được kết quả như mong đợi trong tập huấn luyện sử dụng lan truyền ngược (Backpropagation)
Hình 3.8 Hình minh họa cho mạng nơ-ron truyền thẳng
Cấu trúc hệ thống Chatbot
Nhờ phân tích các ví dụ đã trình bày, ta có thể giải quyết một số trường hợp khiến Chatbot phản hồi thiếu thuyết phục Tuy nhiên yếu tố quan trọng nhất là xây dựng một cơ sở kiến thức càng lớn càng tốt để Chatbot có thể đối đáp hiệu quả với mọi đầu vào từ phía người dùng Để đạt được mục tiêu ấy, có nhiều phương pháp được xem xét và áp dụng, chẳng hạn như thu thập dữ liệu chất lượng cao, tổ chức và chuẩn hóa thông tin theo một cấu trúc logic, cập nhật kiến thức thường xuyên và tối ưu hóa công cụ tra cứu để trả lời nhanh và chính xác Việc triển khai những phương pháp này sẽ giúp tăng độ tin cậy và sự thấu hiểu của Chatbot đối với người dùng.
• Nhà phát triển tự soạn ra các từ khóa và phản hồi tương ứng dựa theo mục đích của Chatbot
• Gợi ý người dùng các đầu vào có thể sử dụng để duy trì cuộc thảo luận giữa người dùng và Chatbot
Khi gặp một chuỗi đầu vào không thể so khớp với bất kỳ từ khóa nào, hệ thống sẽ trả về một phản hồi chung và lưu đầu vào đó vào cơ sở dữ liệu các đầu vào chưa thể xử lý, nhằm ghi nhận và phân tích để cải thiện khả năng xử lý trong tương lai Nhà phát triển có thể lựa chọn thêm đầu vào đó như một từ khóa mới với phản hồi tương ứng hoặc bỏ qua nó, tùy thuộc vào chiến lược và mục tiêu của ứng dụng.
Máy có khả năng tự học, cho phép chatbot tự cải thiện khả năng trả lời bằng cách học từ những tình huống mà nó không thể khớp từ khóa Ví dụ, khi chatbot không thể xác định được từ khóa cần trả lời, nó sẽ hỏi người dùng: "Tôi phải trả lời thế nào?" và câu trả lời của người dùng sẽ trở thành phản hồi của chatbot khi gặp lại từ khóa đó Tuy nhiên, cần hết sức thận trọng khi sử dụng phương pháp này và chỉ nên áp dụng trong một môi trường có kiểm soát để đảm bảo không có tác nhân xấu tham gia và bảo đảm an toàn thông tin.
Cuối cùng, dù Chatbot có tiến bộ đến đâu thì vẫn có những trường hợp cần sự can thiệp của con người Vì vậy, cần tạo điều kiện để một người thật có thể điều khiển và điều chỉnh chatbot khi cần thiết nhằm đảm bảo an toàn, chất lượng phản hồi và xử lý các tình huống phức tạp vượt ngoài khả năng tự động của hệ thống.
Tóm lại, đối với một Chatbot hoàn chỉnh, cấu trúc của nó có thể được biểu diễn như sau:
Hình 3.10 Cấu trúc đầy đủ của một Chatbot
Các thành phần được mô tả trong bảng dưới đây
Bảng 3.2 Bảng danh sách các thành phần trong một Chatbot
STT Tên thành phần Mô tả Mức độ cần thiết
Platform – Nền tảng nhắn tin Đây chính là giao diện giữa việc người dùng giao tiếp với Chatbot
Cần thiết, người dùng cần phải biết họ đang nhắn gì và nhận về phản hồi gì từ Chatbot
Xử lý ngôn ngữ tự nhiên (NLP) là thành phần cốt lõi của các hệ thống hiểu và giao tiếp bằng tiếng Việt Quá trình này bắt đầu bằng việc tách từ và cô lập các từ trong câu, sau đó áp dụng nhiều phương pháp phân tích để lọc ra các đặc tính của câu như ý định, tham số và các đặc tính ngữ nghĩa cũng như ngữ cảnh Nhờ NLP, hệ thống có thể nhận diện mục đích người dùng và các yếu tố ngữ nghĩa trong câu, từ đó hỗ trợ các ứng dụng như phân tích cảm xúc, phân loại câu hỏi, trích xuất thông tin và hiểu nội dung văn bản một cách chính xác.
Cần thiết, dù đơn giản hay phức tạp, Chatbot phải có khả năng này để có thể xác định được yêu cầu của người dùng
3 Bot Logic – Logic của Chatbot là phần xử lý trung tâm của hệ thống, nơi các đặc tính của câu được trích xuất từ bộ phận xử lý ngôn ngữ tự nhiên và được đưa vào các bước xử lý cần thiết để tạo ra phản hồi cho người dùng.
Cần thiết, đây là thành phần quan trọng nhất của Chatbot, phải có nó Chatbot mới có thể đưa ra được phản hồi cho người dùng
– Máy học Đây là thành phần giúp cho Chatbot có thể học được từ đoạn hội thoại với người dùng, nhất là trong trường hợp không có từ khóa nào được tìm thấy
Không cần thiết, việc cải thiện quy trình biên soạn phản hồi hay xử lý đầu vào có thể được thực hiện bởi nhà phát triển
5 Hành động (Action) là thành phần giúp chatbot có thể thực hiện các hành động phụ ngoài việc phản hồi người dùng Nhờ đó, chatbot có thể thu thập thông tin từ người dùng, thực hiện các chức năng phụ và xử lý các tác vụ bổ sung khác, từ đó nâng cao hiệu quả giao tiếp và trải nghiệm người dùng.
Không cần thiết, tuy nhiên có thể sử dụng để cá nhân hóa trải nghiệm sử dụng Chatbot
Nguồn thông tin là thành phần quan trọng giúp Chatbot có thể thu thập thông tin từ bên ngoài hệ thống để hình thành nên phản hồi cho người dùng Việc kết nối với các nguồn dữ liệu đa dạng như web, cơ sở dữ liệu, API bên thứ ba và các kênh giao tiếp khác cho phép Chatbot nắm bắt ngữ cảnh, cập nhật kiến thức và cải thiện chất lượng trả lời, đồng thời đảm bảo tính đáng tin cậy và an toàn cho thông tin được sử dụng trong quá trình trò chuyện.
Không cần thiết, tuy nhiên thành phần này trở nên cần thiết nếu ta muốn xây dựng một Chatbot cung cấp thông tin thay vì
Thông tin cho chatbot có thể đến từ cơ sở dữ liệu ngoài, API từ đối tác hoặc từ chính con người; dù nguồn dữ liệu là gì, chatbot vẫn hoạt động như một công cụ giao tiếp tự động bình thường, cung cấp phản hồi nhanh chóng và hiệu quả.
Ứng dụng của Chatbot
Phép thử Turing được giới thiệu vào năm 1950 bởi nhà khoa học vĩ đại Alan Turing và được xem như bài kiểm tra trí tuệ của máy tính Trong bài kiểm tra, một người A đóng vai trò giám khảo để phân định xem máy tính B hay một người C bất kỳ có hành vi và câu trả lời giống con người hơn Giám khảo A sẽ đặt câu hỏi cho cả hai trong một khoảng thời gian giới hạn; càng kéo dài thời gian này thì bài kiểm tra càng khó Sau khi quá trình hỏi đáp kết thúc, nếu giám khảo nhận thấy máy tính có cách trả lời giống con người hơn, hệ thống được cho là đã vượt qua phép thử Turing; ngược lại, hệ thống được xem là chưa vượt qua.
Thực tế, giải thưởng Loebner đặt ra một thách thức cho các hệ thống chatbot: nếu một hệ thống có thể đánh lừa được đa số giám khảo trong vòng tối thiểu 5 phút, nó sẽ nhận được giải thưởng 100.000 Đô la Mỹ Tuy vậy, đến thời điểm hiện tại vẫn chưa có hệ thống nào đáp ứng được yêu cầu này.
Phép thử Turing đã nhận được sự chỉ trích từ các nhà nghiên cứu trí tuệ nhân tạo khi họ cho rằng nó bộc lộ quá nhiều hạn chế Họ cho rằng Alan Turing đã không nhận ra sự tồn tại của những hành vi “không thông minh” từ con người và có những hành vi “thông minh” không thể đến từ con người Thêm vào đó, phép thử này phụ thuộc hoàn toàn vào phán xét của một giám khảo là con người, người có thể bị chi phối hoặc đưa ra quyết định không chính xác do nhiều yếu tố khác nhau Nhiều ý kiến cho rằng việc bắt chước con người để vượt qua phép thử Turing là phí phạm tiềm năng của trí tuệ nhân tạo và không nên trở thành trọng tâm nghiên cứu của lĩnh vực này.
3.4.2 Ứng dụng của Chatbot trong thực tế
Trong thực tế tuy không thể hoàn toàn thay thế được con người, Chatbot đã được ứng dụng trong rất nhiều ứng dụng, điển hình như:
• Nền tảng nội bộ của doanh nghiệp:
Tuy nhiên, một số tác nhân đã lợi dụng Chatbot cho những mục đích không tốt, như spam, huấn luyện sai cách và lan truyền tin giả Những thực trạng này đặt ra thách thức về an toàn và đạo đức khi Chatbot ngày càng hoàn thiện và phổ biến trong đời sống Vì vậy, chúng ta cần nhận diện, ngăn chặn các hành vi tiêu cực và cải thiện hệ thống để đảm bảo Chatbot hoạt động tin cậy, an toàn và có trách nhiệm với người dùng.
Sử dụng thư viện NLP.js vào tác vụ nhận diện ý niệm
3.5.1 Giới thiệu thư viện NLP.js
NLP.js (tiền thân là node-nlp) là một bộ công cụ xử lý ngôn ngữ tự nhiên cho Node.js, được phát triển bởi Axa Group từ 2016 đến nay Hiện tại, phiên bản 4.14.2 của NLP.js đang hỗ trợ nhiều tính năng mạnh mẽ cho xử lý ngôn ngữ tự nhiên trên nền tảng Node.js.
• Đoán ngôn ngữ của một đoạn văn bản
• So sánh khoảng cách Levenshtein nhanh giữa 2 xâu ký tự
• Tìm kiếm xâu con gần với xâu đầu vào nhất sử dụng khoảng cách Levenshtein
• Hỗ trợ xác định từ gốc và tách từ cho một số ngôn ngữ
• Phân tích tính trạng (Sentiment Analysis) cho đoạn văn bản (với hỗ trợ cho phủ định)
• Quản lý thực thể đặt tên với nhiều ngôn ngữ khác nhau
• Phân tích được đoạn văn bản thành ý niệm
• Lớp quản lý NLP: hỗ trợ các thực thể NLP.js trên hiều ngôn ngữ, với ý niệm, thực thể đặt tên cũng như tính trạng
• 40 ngôn ngữ được hỗ trợ mặc định (104 ngôn ngữ được hỗ trợ thông qua việc tích hợp với BERT)
• Chấp nhận bất kỳ ngôn ngữ nào có thể thực hiện tách từ, kể cả ngôn ngữ giả tưởng
3.5.2 Các khái niệm sử dụng trong NLP.js
Entity: Entity là tất cả mọi thứ trong mô hình xử lý ngôn ngữ của NLP.js Cấu tạo của một entity cơ bản như sau:
Bảng 3.3 Bảng danh sách thuộc tính trong một Entity
STT Tên thuộc tính Mô tả Ví dụ
1 name Tên của entity temparature
2 score Độ tự tin của chương trình về entity này phạm vi từ 0-1
Intent, hay ý định, là một loại entity đặc biệt để xác định ý định chung của toàn bộ câu được cho Trong xử lý ngôn ngữ tự nhiên và phát triển hệ thống hội thoại, Intent cho biết mục tiêu người dùng muốn đạt được, từ đó hệ thống có thể hiểu ngữ cảnh và đề xuất hành động phù hợp Ta lấy ví dụ sau: khi người dùng nói "tôi muốn xem sản phẩm giảm giá", Intent sẽ là tìm kiếm sản phẩm theo khuyến mãi; khi người dùng nói "đặt mua áo thun này", Intent sẽ là mua hàng.
“Thời tiết ở Hà Nội như thế nào?”
Trong hệ thống xử lý ngôn ngữ tự nhiên, intent ở đây được gọi là get_weather vì ý định của người dùng là hỏi về thời tiết, cụ thể là ở Hà Nội (điểm này sẽ được đề cập ở phần sau) Cấu tạo của một intent gồm các thành phần xác định mục tiêu người dùng, ngữ cảnh và hành động mong muốn, giúp hệ thống nhận diện đúng câu hỏi về thời tiết và trả về thông tin thời tiết tại Hà Nội một cách chính xác.
Bảng 3.4 Bảng danh sách thuộc tính trong một Intent
STT Tên thuộc tính Mô tả Ví dụ
1 name Tên của entity get_weather
2 confidence Độ tự tin của chương trình về entity này phạm vi từ 0-1
Ngoài việc cho phép nhà phát triển tự xây dựng các intent, Wit.ai còn cung cấp một loạt các intents có sẵn để dễ dàng tích hợp vào chatbot mà không cần trải qua quá trình huấn luyện Bảng dưới đây tóm lược các intents có sẵn tính đến ngày 1/5/2021.
Entity parameter: Là một loại entity để xác định tham số trong một câu đã cho Ta trở lại với ví dụ ta đã lấy intent:
Trong câu hỏi 'Thời tiết ở Hà Nội như thế nào?', Hà Nội được xem là một entity parameter, đại diện cho địa điểm mà người dùng muốn xem thông tin thời tiết Chuỗi con 'Hà Nội' chính là giá trị của tham số này Tuy nhiên còn có các trường hợp khác cần lưu ý, ví dụ tham số có thể được xác định từ nhiều từ khóa hoặc câu hỏi phức tạp và ngữ cảnh có thể làm thay đổi cách hiểu về địa điểm cần tra cứu Để tối ưu SEO, nội dung nên nhấn mạnh từ khóa liên quan đến thời tiết Hà Nội, tham số thực thể và địa điểm người dùng muốn xem thời tiết, giúp người đọc nhanh chóng nắm được khái niệm và cách áp dụng.
“Thời tiết ở Đồng Hới ngày mai như thế nào?”
Đồng Hới được xem như một tham số địa điểm (parameter) cho hệ thống, trong khi tham số còn lại là chuỗi con “ngày mai” Ví dụ hôm nay là ngày 15/4/2021, mục tiêu là có thể phân giải chuỗi “ngày mai” thành giá trị ngày 16/4/2021 NLP.js cung cấp cho nhà phát triển các công cụ để thiết lập và huấn luyện cho Chatbot nhận diện các tham số này Cấu tạo cơ bản của một entity parameter như sau (có thể có các thuộc tính khác tùy thuộc vào loại parameter):
Bảng 3.5 Bảng danh sách thuộc tính của một Entity Parameter
STT Tên thuộc tính Mô tả Ví dụ
1 id Tên định danh của một entity movie_0
2 name Tên của entity movie
3 role Vai trò của parameter trong câu seen
4 start Vị trị bắt đầu của chuỗi con đang trích xuất
5 end Vị trí kết thúc của chuỗi con đang trích xuất
6 body Chuỗi con đang được trích xuất tomorrow
7 accuracy Độ tự tin của chương trình về entity này phạm vi từ 0-1
8 entities Danh sách entity trong entity đó Danh sách entity
9 value Giá trị trích xuất được từ parameter
10 type Loại giá trị trích xuất được từ parameter interval
NLP.js hỗ trợ 3 loại Entity chính:
Enum Named Entity in NLP.js is stored as a dictionary that maps each enum term to its corresponding value When analyzing an input sentence, the system checks for substrings that closely match an enum entry using Edit Distance If a near‑match is found, NLP.js returns the position of the matched term in the input sentence along with its associated enum value, enabling robust entity recognition even in the presence of minor typos or variations.
Regular Expression Named Entity: NLP.js supports using regular expressions to detect and capture entities whose syntax is defined by a regex This capability enables precise named entity recognition by matching patterns for custom tokens, codes, dates, and other domain-specific terms With NLP.js, developers can tailor the NER process to recognize entities that go beyond standard dictionaries, improving accuracy and control in text extraction and data interpretation.
NLP.js hỗ trợ sử dụng các từ ngữ làm Delimiter để nhận diện Named Entity, trim delimiter và trả về giá trị đúng theo quy tắc trim entity Các quy tắc được hỗ trợ gồm Between (giữa một xâu và ), After (sau một xâu ), After First (sau xâu đầu tiên xuất hiện trong câu), After Last (sau xâu cuối cùng xuất hiện trong câu), Before (trước một xâu ), Before First (trước xâu đầu tiên xuất hiện trong câu) và Before Last (trước xâu cuối cùng xuất hiện trong câu).
NLP.js không chỉ hỗ trợ người dùng cài đặt các Entity mà còn tích hợp sẵn một số built-in Entity được Duckling hỗ trợ Danh sách các built-in Entity được hỗ trợ sẽ được liệt kê trong bảng dưới đây.
Bảng 3.6 Bảng các Entity được hỗ trợ bởi Duckling
STT Tên thuộc tính Mô tả Ví dụ
1 Email Xác định một xâu con là Email
My email is something@somehost.com please write me
Xác định một xâu con là số điện thoại (hỗ trợ mã vùng)
So here is my number +1 541-
3 URL Xác định một xâu con là một đường dẫn
The url is https://something.com
4 Number Xác định một xâu con là một số (hỗ trợ số biểu diễn bằng chữ nhưng chỉ với một số ngôn ngữ)
This is 12 This is twelve
5 Ordinal Xác định một xâu con là một số thứ tự (chỉ với một số ngôn ngữ)
6 Dimenstion Xác định một xâu con là một thước đo trong không gian (độ dài, diện tích, thời tiết, v.v.)
7 Quantity Xác định một xâu con là định lượng của một vật thể three cups of sugar
Xác định một xâu con là một số tiền
9 Date Xác định một xâu con là một điểm thời gian
3.5.3 Thực hiện tác vụ nhận diện ý niệm
Nhờ thư viện NLP.js, việc xây dựng một mô hình mạng nơ-ron truyền thẳng để thực hiện nhận diện ý niệm (Intent Classification) trở nên dễ dàng và nhanh chóng Tuy nhiên, chúng ta cần lưu ý một số vấn đề quan trọng để tối ưu hiệu suất và độ chính xác của hệ thống, từ dữ liệu đầu vào, tiền xử lý văn bản, lựa chọn cấu trúc mạng phù hợp đến quá trình đánh giá và tinh chỉnh mô hình.
NLP.js hiện chưa đưa tiếng Việt vào danh sách ngôn ngữ được hỗ trợ chính thức của thư viện, vì vậy bạn sẽ phải thực hiện các tác vụ tiền xử lý trước khi huấn luyện và sử dụng mô hình cho dữ liệu tiếng Việt Để đảm bảo chất lượng và hiệu suất cho hệ thống xử lý ngôn ngữ tự nhiên dựa trên NLP.js, các bước tiền xử lý này nên bao gồm chuẩn hóa văn bản, loại bỏ nhiễu và xử lý đặc thù tiếng Việt như tách từ và đánh dấu ngữ cảnh trước khi huấn luyện mô hình.
Chúng ta có thể phân chia các ý niệm được nhận diện thành các hạng mục (Domain) nhằm tạo cấu trúc dữ liệu hợp lý và dễ quản lý Việc phân loại theo domain giúp quản lý dữ liệu huấn luyện và quá trình xác thực diễn ra hiệu quả hơn, đồng thời tăng tính nhất quán và chất lượng của hệ thống Nhờ đó, dữ liệu huấn luyện được tổ chức có hệ thống, tối ưu quá trình đánh giá mô hình và cải thiện hiệu suất tổng thể cho các ứng dụng AI.
Để đảm bảo xử lý hiệu quả các đoạn chat, chúng ta có kế hoạch tiếp tục dùng các công cụ khác ngoài NLP.js khi mô hình này chưa đạt độ chắc chắn cần thiết Ta sẽ sử dụng ý niệm None được dựng sẵn trong thư viện NLP.js để báo hiệu rằng ý định của đoạn chat vừa phân tích chưa thực sự chắc chắn Cách tiếp cận này cho phép hệ thống chuyển sang công cụ xử lý khác hoặc kích hoạt quy trình bổ sung một cách an toàn, từ đó tăng độ tin cậy và tối ưu hiệu suất xử lý ngôn ngữ tự nhiên của cuộc trò chuyện.
Tinh chỉnh mô hình PhoBERT vào tác vụ phân tích cảm xúc
3.6.1 Giới thiệu về mô hình PhoBERT
Các mô hình ngôn ngữ được huấn luyện từ trước, đặc biệt là các mô hình dựa trên kiến trúc Bidirectional Encoder Representations from Transformers (BERT), đã đạt được những tiến bộ đáng kể trong nhiều tác vụ xử lý ngôn ngữ tự nhiên Tuy nhiên, khi áp dụng cho tiếng Việt, việc triển khai mô hình BERT gặp hai trở ngại lớn cần lưu ý để nâng cao hiệu quả.
Ở thời điểm bấy giờ, bộ dữ liệu tiếng Việt phổ biến nhất là dữ liệu từ Wikipedia tiếng Việt Vấn đề lớn nhất của bộ dữ liệu này là kích thước khiêm tốn, chỉ khoảng 1 GB dữ liệu Bên cạnh đó, phong cách viết bài trên Wikipedia không phản ánh đúng văn phong người Việt đang sử dụng trong giao tiếp hàng ngày và khi nhập liệu.
Hầu hết các mô hình ngôn ngữ được huấn luyện trước đây không chú ý đến đặc trưng ngôn ngữ đặc thù của tiếng Việt, vốn có từ được tạo thành từ nhiều âm tiết Ví dụ từ tiếng Anh “worker” được dịch sang tiếng Việt là “công nhân” và được cấu thành từ hai âm tiết “công” và “nhân” Hiện nay, các mô hình thường mã hóa hai âm tiết này thành hai token riêng biệt thay vì một token duy nhất, điều này làm giảm hiệu quả quá trình huấn luyện và xử lý tiếng Việt.
Nhận diện được vấn đề, nhóm nghiên cứu tại VinAI đã thực hiện huấn luyện một mô hình máy học đơn ngôn ngữ quy mô lớn dựa trên mô hình BERT nguyên thủy Mô hình được xây dựng trên nền tảng BERT-large và được đánh giá thông qua bốn tác vụ xử lý ngôn ngữ tự nhiên gồm phân tích từ loại, phân tích phụ thuộc từ vựng, nhận diện thực thể đặt tên và suy luận ngôn ngữ Để giải quyết các vấn đề nêu trên, nhóm nghiên cứu đã thực hiện các bước phù hợp nhằm tối ưu hóa hiệu suất và tăng tính tổng quát của mô hình, đồng thời tiến hành đánh giá chặt chẽ trên các tác vụ ngôn ngữ để cải thiện khả năng hiểu và xử lý ngôn ngữ đơn ngữ.
Chúng tôi mở rộng bộ ngữ liệu bằng cách bổ sung các bài báo được xuất bản bằng tiếng Việt và tiến hành xử lý để loại bỏ các bài lặp, nhằm nâng cao chất lượng dữ liệu Nhóm nghiên cứu đã thu được khoảng 20 GB dữ liệu tiếng Việt, được kết hợp với bộ ngữ liệu Wikipedia tiếng Việt để đa dạng hóa ngôn ngữ và ngữ cảnh Những nguồn dữ liệu này được dùng để huấn luyện mô hình ngôn ngữ một cách hiệu quả và tin cậy.
Nhóm nghiên cứu đã sử dụng công cụ tách từ thuộc VNCoreNLP để phân tách các câu văn thành từ thay vì phân tách thành âm tiết Với độ chính xác rất cao, khoảng 97%, việc áp dụng công cụ này có thể nâng cao chất lượng bộ dữ liệu ngôn ngữ mà không đòi hỏi nguồn nhân lực lớn để làm thủ công.
Kết quả của công trình nghiên cứu cho thấy mô hình PhoBERT đạt được kết quả tối tân nhất (state-of-the-art) trên bốn tác vụ được dùng để đánh giá: phân tích từ loại, phân tích phụ thuộc từ vựng, nhận diện thực thể có tên và suy luận ngôn ngữ Với thành tựu này, nhóm nghiên cứu sẽ tiếp tục tinh chỉnh PhoBERT để tối ưu cho tác vụ phân tích cảm xúc, nhằm nâng cao độ chính xác và hiệu quả của hệ thống xử lý ngôn ngữ tự nhiên.
3.6.2 Thực hiện tác vụ phân tích cảm xúc Để sử dụng mô hình PhoBERT vào tác vụ phân tích cảm xúc Nhóm phát triển phải giải quyết một số vấn đề sau:
Để xây dựng hệ thống phân loại cảm xúc hiệu quả, cần thu thập nguồn dữ liệu đã gắn nhãn cảm xúc của người viết Dữ liệu này nên ở mức tương đối lớn, vào khoảng hàng chục nghìn câu, nhằm đảm bảo kết quả tốt mà không phải dùng các phương pháp cải thiện dữ liệu (Data Augmentation).
• Tiền xử lý dữ liệu để tận dụng hiệu quả nhất tập ngữ liệu trong quá trình tinh chỉnh mô hình
Để thực hiện tác vụ phân tích cảm xúc một cách hiệu quả, cần xác định số nhãn phù hợp dựa trên tập dữ liệu có thể được sử dụng và đồng thời xác định số nút đầu ra của mô hình đã tinh chỉnh để xác định nhãn dự đoán của mô hình Việc chọn đúng số nhãn giúp tối ưu hóa hiệu quả phân loại và dễ dàng áp dụng trên hệ thống, trong khi số nút đầu ra phù hợp với số nhãn sẽ đảm bảo nhãn dự đoán phản ánh đúng các trạng thái cảm xúc trong dữ liệu Đây là bước then chốt trong quá trình huấn luyện và tinh chỉnh mô hình phân tích cảm xúc nhằm đạt hiệu suất cao.
• Lưu lại mô hình đã tinh chỉnh và sử dụng mô hình này để thực hiện tác vụ phân tích cảm xúc trong hệ thống Chatbot
Tinh chỉnh mô hình BARTpho vào tác vụ cấu tạo ngôn ngữ tự nhiên
3.7.1 Giới thiệu về mô hình BARTpho
Như đã đề cập ở mục 3.6.1, mô hình BERT nói chung và PhoBERT cho tiếng Việt đã đạt kết quả tốt trong các tác vụ thấu hiểu ngôn ngữ tự nhiên (NLU); tuy nhiên, do đặc tính không có phần giải mã (Decoder), việc áp dụng cho các tác vụ tạo ngôn ngữ (NLG) gặp nhiều khó khăn Giải pháp là sử dụng một mô hình seq2seq phù hợp cho tác vụ này, dù mô hình seq2seq trước đây chỉ được sử dụng và đạt kết quả ở tiếng Anh (GPT-n, BART, v.v.) Nhằm khắc phục khó khăn khi huấn luyện một mô hình seq2seq cho tiếng Việt do khác biệt về cấu tạo từ (như đã giải thích ở mục 3.6.1), nhóm nghiên cứu tại Trung tâm Nghiên cứu Trí tuệ Nhân tạo VinAI đã dùng chính bộ dữ liệu đã dùng để huấn luyện PhoBERT (20 GB bài báo tiếng Việt và 1 GB Wikipedia tiếng Việt) cùng công cụ tách từ VNCoreNLP để huấn luyện mô hình dựa trên BART ở định dạng seq2seq, cho ra hai mô hình BARTpho-word và BARTpho-syllable (khác biệt duy nhất ở đầu vào đã trải qua tách từ hay chưa) Mô hình BARTpho-word đạt kết quả tốt hơn trong tác vụ tóm tắt đoạn văn cả đánh giá tự động lẫn đánh giá by-hand so với mô hình mBART (mô hình BART đa ngôn ngữ), và đạt được trạng thái tối tân (State-of-the-art) cho tác vụ này Ngoài ra, mô hình BARTpho-word còn cho thấy hiệu suất vượt trội so với mBART.
Các mô hình BARTpho-syllable cho thấy việc tách từ trong khâu tiền xử lý dữ liệu đóng vai trò rất quan trọng để nâng cao hiệu suất huấn luyện các mô hình ngôn ngữ tối tân Việc tách từ được thực hiện đúng cách giúp mô hình nắm bắt cấu trúc ngôn ngữ và giảm thiểu sai lệch trong dữ liệu huấn luyện Do đó, tối ưu hóa quy trình tiền xử lý dữ liệu, đặc biệt là kỹ thuật tách từ phù hợp, là yếu tố quyết định đối với chất lượng và hiệu suất của các hệ thống NLP hiện đại như BART Kết quả cho thấy tách từ hiệu quả nâng cao khả năng tổng hợp văn bản, hiểu ngữ nghĩa và suy diễn của mô hình trên các tác vụ ngôn ngữ.
Khả năng đạt được kết quả tối tân của mô hình BARTpho là lý do chính nhóm quyết định lựa chọn mô hình này để tinh chỉnh cho tác vụ cấu tạo ngôn ngữ tự nhiên của Chatbot, nhằm nâng cao hiệu suất và chất lượng đầu ra ngôn ngữ.
3.7.2 Thực hiện tác vụ cấu tạo ngôn ngữ tự nhiên Để tinh chỉnh mô hình BARTpho-word cho tác vụ cấu tạo ngôn ngữ tự nhiên, nhóm cần phải giải quyết các vấn đề sau:
BARTpho là một mô hình ngôn ngữ rất lớn với 420 triệu tham số, nên nhóm nghiên cứu cần đảm bảo có phần cứng đủ mạnh để tinh chỉnh mô hình này Việc lựa chọn cấu hình phần cứng phù hợp và tối ưu hóa quy trình huấn luyện là cần thiết để thực hiện quá trình tinh chỉnh BARTpho một cách hiệu quả, đồng thời đáp ứng giới hạn thời gian và ngân sách của khóa luận.
Nhóm cần xác định cấu trúc dữ liệu huấn luyện cho mô hình tinh chỉnh nhằm đạt hiệu quả cao trong tác vụ cấu tạo phản hồi cho Chatbot Việc chuẩn hóa và tổ chức dữ liệu huấn luyện hợp lý sẽ giúp mô hình học các mẫu phản hồi tự nhiên, nhất quán và phù hợp với ngữ cảnh người dùng Cấu trúc dữ liệu nên bao gồm các tình huống tương tác, mục tiêu người dùng, các phản hồi mong muốn và các trường hợp biên để mô hình xử lý linh hoạt Bên cạnh đó, chất lượng và sự đa dạng của dữ liệu, cùng các biện pháp bảo đảm an toàn nội dung, là yếu tố quyết định cho hiệu suất tinh chỉnh Thiết kế cấu trúc dữ liệu chuẩn sẽ nâng cao độ chính xác của phản hồi và cải thiện trải nghiệm người dùng trong Chatbot.
• Thu thập nguồn ngữ liệu thỏa mãn cấu trúc dữ liệu nhóm đã xác định ở mức độ đủ để tinh chỉnh mô hình BARTpho
• Tiền xử lý dữ liệu để tận dụng hiệu quả nhất tập ngữ liệu trong quá trình tinh chỉnh mô hình
• Lưu lại mô hình đã tinh chỉnh và sử dụng mô hình này để thực hiện tác vụ cấu tạo ngôn ngữ tự nhiên trong hệ thống Chatbot
Nghiên cứu tình huống: Một số ví dụ xử lý ngôn ngữ tự nhiên của Chatbot 79 Chương 4: CHATBOT TRỢ LÝ ẢO - YOURCHATSTARTER
Kết hợp các hướng tiếp cận và công nghệ đã được trình bày ở các mục trước, nhóm thực hiện khóa luận sẽ trình bày một số ví dụ về chatbot thực hiện các tác vụ xử lý ngôn ngữ tự nhiên (NLP) khác nhau nhằm cố gắng đưa ra phản hồi phù hợp và chính xác cho người dùng.
Tình huống 1: Câu của người dùng xác định được ý niệm và đầy đủ thực thể đặt tên
Cho đầu vào sau đây từ người dùng:
Dự báo thời tiết tphcm
Khi đưa đoạn tin nhắn vào thành phần xử lý của chatbot, tin nhắn sẽ đi qua quá trình tiền xử lý và đồng thời được thực hiện nhận diện thực thể có tên Kết quả của quá trình tiền xử lý sẽ được tổng hợp và trình bày đầy đủ để chuẩn hoá dữ liệu và nhận diện các thực thể, từ đó nâng cao hiệu suất và độ chính xác của hệ thống trả lời.
Sau giai đoạn chuẩn hóa: dự báo thời tiết tphcm
Sau giai đoạn tách từ: dự_báo thời_tiết tphcm
Sau giai đoạn token hóa: [0, 1815, 1797, 3, 2, 1, 1, …]
(0 là id của token (bắt đầu câu), 3 là id của token (nằm ngoài từ điển),
2 là id của token (kết thúc câu) 1 là id của token đệm)
The named-entity recognition process identifies a location entity as "tphcm" with a Levenshtein-based match and an accuracy score of 1, spanning character positions 17 to 22 in the input, and it maps to the full option "Thành phố Hồ Chí Minh" (Ho Chi Minh City) This means the abbreviation tphcm is correctly recognized as Ho Chi Minh City, strengthening location tagging for SEO-rich content about Vietnam’s largest city.
//Loại thực thể //Đoạn ký tự tìm được //Loại tìm kiếm
//Độ chính xác, tương đương độ đo levenshtein = 0
//Vị trí bắt đầu – kết thúc //Giá trị ánh xạ
Sau đó ta đưa mảng giá trị đã token hóa vào mô hình nhận diện ý niệm Kết quả trả về có thể là như sau: intent: (ý niệm)
Xét thấy ý niệm weather_forecast có giá trị vượt ngưỡng chắc chắn đặt trước (0.7), hệ thống sẽ thực hiện xử lý ý niệm này Ý niệm weather_forecast đòi hỏi một thực thể đặt tên là location; khi tin nhắn có chứa một thực thể dạng location và đáp ứng yêu cầu, hệ thống sẽ tiến hành truy vấn thông tin dự báo thời tiết của Thành phố Hồ Chí Minh để xây dựng phản hồi theo khuôn mẫu đã định, nhằm cung cấp cho người dùng một bản dự báo thời tiết ngắn gọn, đầy đủ và tối ưu cho SEO với các từ khóa liên quan như dự báo thời tiết, Thành phố Hồ Chí Minh, nhiệt độ và tình trạng thời tiết.
Thời tiết {location} trong 24h tới sẽ là {weather_description} Nhiệt độ vào khoảng {weather_temperature} độ C
=> Thời tiết thành phố Hồ Chí Minh trong 24h tới sẽ là trời nắng Nhiệt độ vào khoảng 33 độ C
Ngoài ra mảng sẽ được đưa vào mô hình phân tích cảm xúc Kết quả trả về có thể như sau: sentiment: neutral certainty: 0.9987
Xác định cảm xúc của người dùng ở mức trung tính (neutral) và hệ thống ghi nhận trạng thái này Chatbot sẽ không thực hiện chỉnh sửa thêm bất kỳ phản hồi nào, giữ nguyên nội dung đã trả lời và lưu trữ cảm xúc trung lập trong hệ thống.
Tình huống 2: Câu của người dùng xác định được ý niệm nhưng không đầy đủ thực thể đặt tên
Cho đầu vào sau đây từ người dùng:
Quy đổi hai mươi kilo gam
Khi đưa đoạn tin nhắn này vào thành phần xử lý của Chatbot, trước hết tin nhắn sẽ đi qua quá trình tiền xử lý và tìm kiếm thực thể đặt tên Quá trình này giúp hệ thống nhận diện từ khóa và các thực thể có tên quan trọng để trả lời chính xác Nhóm sẽ bỏ qua việc trình bày chi tiết các bước trung gian, tập trung vào nhận diện và xử lý các thực thể có tên nhằm tối ưu hóa chất lượng đáp ứng.
Figure 82 shows the preprocessing results, while the named-entity recognition results are as follows: entity: number, text: hai mươi, type: regular expression, accuracy: 1, start-end: 8–15, value: 20; entity: conversion_unit, text: kilo gam, type: levenshtein, accuracy: 1, start-end: 17–24, option: kilogram.
Sau đó ta đưa mảng giá trị đã token hóa vào mô hình nhận diện ý niệm Kết quả trả về có thể là như sau: intent: (ý niệm)
Xét thấy ý niệm ask_conversion (hỏi đổi đơn vị) có giá trị cao hơn ngưỡng chắc chắn đặt trước (0.7), ta thực hiện xử lý ý niệm này nhằm đảm bảo độ chính xác và hiệu quả của quá trình đổi đơn vị Ý niệm ask_conversion yêu cầu hệ thống tự động nhận diện đơn vị cần đổi, áp dụng quy tắc chuẩn hóa phù hợp và thực hiện chuyển đổi một cách nhất quán, từ đó tối ưu hóa kết quả đầu ra và tăng độ tin cậy của dữ liệu.
2 thực thể conversion_unit (đơn vị đổi gốc và đơn vị đổi đích) và 1 thực thể number
(lượng đơn vị cần đổi) Xét thấy tin nhắn còn thiếu 1 thực thể conversion_unit
Chatbot lưu ý và ghi nhận ý niệm này vào một stack ý niệm chưa được xử lý và sẽ trả lời: Bạn có thể cho mình biết bạn muốn đổi sang đơn vị gì được không?
Quá trình xử lý bắt đầu bằng việc đưa mảng giá trị đầu vào vào mô hình phân tích cảm xúc nhằm đánh giá trạng thái cảm xúc của người dùng Kết quả phân tích cho thấy người dùng có cảm xúc trung tính (neutral) Chatbot ghi nhận cảm xúc này vào hệ thống và không thực hiện chỉnh sửa thêm đối với phản hồi.
Người dùng có thể trả lời câu hỏi của chatbot như sau:
By applying text preprocessing and named-entity recognition to this message, the conversion unit is identified as 'gam' The resulting NER output is: entity: conversion_unit, text: gam, type: levenshtein, accuracy: 1, start - end: 5-7, option: gram.
Sau đó ta đưa mảng giá trị đã token hóa vào mô hình nhận diện ý niệm Kết quả trả về có thể là như sau: intent: (ý niệm)
Xét thấy không có ý niệm nào có độ khẳng định cao hơn ngưỡng xác định trước, ta rà soát stack ý niệm chưa xử lý và phát hiện ý niệm ask_conversion thiếu thực thể conversion_unit trong tin nhắn này Ta điền thực thể này vào ý niệm chưa được xử lý và yêu cầu xử lý lại Lần này ý niệm đã đầy đủ các thực thể có tên, ta tiến hành truy vấn thông tin đổi đơn vị (20 kilogram -> gram) để cấu thành phản hồi theo khuôn mẫu đã định.
{number} {conversion_unit_1} đổi ra được {conversion_result} {conversion_unit_2} nhé
=> 20 kilogram đổi ra được 20.000 gram nhé
Quá trình xử lý bắt đầu bằng việc đưa mảng giá trị đầu vào vào mô hình phân tích cảm xúc để xác định cảm xúc của người dùng; kết quả cho thấy người dùng ở trạng thái cảm xúc trung tính (neutral) Chatbot ghi nhận cảm xúc này vào hệ thống và không thực hiện chỉnh sửa hay can thiệp thêm vào phản hồi được gửi đến người dùng.
Tình huống 3: Câu của người dùng không xác định được ý niệm
Cho đầu vào sau đây từ người dùng:
Để trả lời câu hỏi về diện tích của Argentina, ta thực hiện tiền xử lý văn bản và tìm kiếm thực thể có tên cho câu chữ liên quan Kết quả quá trình nhận diện thực thể có tên có thể là một mảng rỗng nếu không có thực thể nào được nhận diện Sau đó, các giá trị đã được token hóa sẽ được đưa vào mô hình nhận diện ý niệm để xác định ý định của người dùng Kết quả trả về có thể là dạng: intent: (ý niệm).
Xét thấy ý niệm None cho thấy có quá nhiều từ nằm ngoài từ điển của mô hình và giá trị này vượt ngưỡng chắc chắn đặt trước (0.7), vì vậy ta tập trung vào stack ý niệm chưa được xử lý Câu này không có thực thể được đặt tên nên không có ý niệm nào có thể được xử lý trong stack này Ta đưa tin nhắn tới hệ thống truy vấn tự do và, bằng cách dùng mệnh đề logic, hệ thống xác định từ khóa 'của' để chia tin nhắn thành hai phần: diện tích là một thuộc tính, Argentina là một thực thể Ta đưa cặp thuộc tính-thực thể này vào hệ thống tra cứu trên mạng kiến thức Wikidata, nhận về kết quả và dùng chúng để cấu tạo phản hồi theo khuôn mẫu đã định.
{properties} của {entity} là {value} {unit}
Diện tích của Argentina là 2.780.400 kilômét vuông
Xác định yêu cầu hệ thống
4.1.1 Sơ đồ ca sử dụng
Sơ đồ ca sử dụng cấp cao được biểu diễn bởi các hình ở dưới đây, mô tả các ca sử dụng ở mức khái quát và được tổng quát hóa để phù hợp với quy mô của báo cáo, trong đó hai chức năng Đăng nhập và Đăng ký là các ví dụ điển hình.
Người dùng Đôi mật khẩu
Hình 4.1 Sơ đồ ca sử dụng hệ thống xác thực người dùng
Gửi tin nhắn âm thanh
Nhận tin nhắn âm nhanh
Gửi tin nhắn hình ảnh
Hình 4.2 Sơ đồ ca sử dụng hệ thống Chatbot
Chọn dịch vụ Thanh toán
Xem hồ sơ người dùng
Xem lịch sử giao dịch
Chỉnh sửa hồ sơ người dùng
Chỉnh sửa thiết lập cá nhân
Chỉnh sửa dịch vụ người dùng
Tra cứu thông tin người dùng
Xóa thông tin người dùng
Hình 4.3 Sơ đồ hệ thống dịch vụ bổ trợ người dùng
Tra cứu bài viết Xem bài viết
Quản trị viên Tạo bài viết mới
Chỉnh sửa nội dung bài viết
Hình 4.4 Sơ đồ ca sử dụng hệ thống quản lý nội dung
Tra cứu đơn thanh toán
Xem thông tin đơn thanh toán
Chỉnh sủa đơn thanh toán
Hình 4.5 Sơ đồ ca sử dụng hệ thống quản lý hóa đơn thanh toán
Truy vấn thông tin thời tiết Truy vấn tin báo
Truy vấn thông tin kinh tế
Truy vấn thông tin dịch COVID-19
Truy vấn thông tin thường thức
Truy vấn thông tin bên thứ 3
Truy vấn thông tin trong hệ thống Trợ lý ảo
Truy vấn thông tin địa lý
Hình 4.6 Sơ đồ ca sử dụng hệ thống truy vấn thông tin
Hệ thống quản lý Push Notification
Đăng ký thông báo mới
Hủy đăng ký thông báo
Xem danh sách dịch vụ thông báo
Gửi thông báo định kỳ
Gửi tin báo định kỳ
Hình 4.7 Sơ đồ ca sử dụng hệ thống quản lý thông báo
Bảng 4.1 Bảng mô tả sơ lược các Actor trong sơ đồ ca sử dụng
STT Tên Actor Mô tả Actor
Quản trị viên có quyền chỉnh sửa thông tin người dùng, đăng tải bài viết công khai và quản lý quyền truy cập thông tin của người dùng Đây là các chức năng cốt lõi trong vai trò quản trị hệ thống, giúp hồ sơ người dùng được cập nhật chính xác, nội dung công khai được đăng tải đúng phạm vi và quyền truy cập dữ liệu được kiểm soát chặt chẽ.
2 Người dùng Người dùng giao tiếp với hệ thống thông qua chatbot và giao diện hệ thống trên nền tảng Web và ứng dụng di động
Trong hệ thống chatbot, nhiệm vụ chính là xử lý các yêu cầu của người dùng ở dạng ngôn ngữ tự nhiên và cung cấp đúng thông tin mà người dùng mong muốn Chatbot hiệu quả sẽ nhận diện ý định, phân tích câu hỏi và truy vấn nguồn dữ liệu phù hợp để trả lời nhanh chóng, chính xác và phù hợp với ngữ cảnh Việc tối ưu hóa khả năng hiểu ngôn ngữ tự nhiên và cung cấp thông tin chính xác giúp cải thiện trải nghiệm người dùng và nâng cao hiệu quả chăm sóc khách hàng trên website hoặc ứng dụng của bạn.
Hệ thống quản lý Push Notification có nhiệm vụ lên lịch gửi thông báo đến người dùng và tiếp nhận các yêu cầu đăng ký hoặc hủy đăng ký nhận thông báo Nó đảm bảo việc gửi thông báo diễn ra đúng thời điểm, quản lý danh sách người nhận và tối ưu hóa mức độ tương tác của người dùng Đồng thời hệ thống xử lý nhanh chóng các thao tác đăng ký/ hủy đăng ký từ người dùng, đảm bảo quyền riêng tư và tuân thủ các quy định quản lý thông báo đẩy.
4.1.2 Đặc tả ca sử dụng
4.1.2.1 Module 1: Hệ thống xác thực người dùng
Người tạo Nguyễn Ngọc Đăng
Tác nhân chính Người dùng Tác nhân phụ Không có
Mô tả Là người dùng, tôi muốn đăng nhập vào hệ thống
Xảy ra khi người dùng có thông tin tài khoản để đăng nhập Điều kiện trước UC là Không có Điều kiện sau UC POST-1: nếu người dùng đăng nhập vào hệ thống, hệ thống sẽ tạo ra một session đăng nhập mới cho người dùng, đảm bảo quản lý phiên làm việc an toàn và cho phép tiếp tục các thao tác sau đó.
Dòng sự kiện cơ bản
1 Từ màn hình chính, người dùng chọn màn hình đăng nhập
2 Người dùng nhập thông tin đăng nhập vào biểu mẫu đăng nhập (Bao gồm tên đăng nhập và mật khẩu)
3 Người dùng chọn Đăng nhập để xác nhận gửi thông tin đăng nhập cho hệ thống
4 Hệ thống gửi thông báo đăng nhập thành công và điều hướng người dùng trở về màn hình chính
Dòng sự kiện thay thế
1-1.1 Người dùng chưa có tài khoản
1 Nếu người dùng chưa có tài khoản, hệ thống gợi ý người dùng đăng ký
2 Người dùng chọn đăng ký
3 Thực hiện ca sử dụng Đăng kí (Tham khảo UC1-2)
Dòng sự kiện ngoại lệ
1-1.0E1 Thông tin đăng nhập bị thiếu
1 Hệ thống thông báo trường nhập liệu bị thiếu 2a Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-1.0 2b Nếu không, kết thúc ca sử dụng
1-1.0E2 Thông tin đăng nhập không hợp lệ
1 Hệ thống thông báo thông tin đăng nhập không hợp lệ 2a Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-1.0 2b Nếu không, kết thúc ca sử dụng Độ ưu tiên Cao
Tần suất sử dụng Ít nhất 10 lần trong 1 ngày
Thông tin bổ sung Không có
Người tạo Nguyễn Ngọc Đăng
Tác nhân chính Người dùng Tác nhân phụ Không có
Mô tả Là người dùng, tôi muốn đăng ký một tài khoản mới cho hệ thống
Xảy ra khi người dùng chưa có tài khoản hoặc có nhu cầu đăng ký một tài khoản mới Điều kiện trước UC PRE-1: người dùng đang ở màn hình đăng ký Điều kiện sau UC POST-1: hệ thống sẽ tạo ra một tài khoản mới trong hệ thống.
Dòng sự kiện cơ bản
1 Từ màn hình đăng nhập, người dùng chọn màn hình đăng ký
2 Người dùng nhập thông tin đăng ký vào biểu mẫu đăng nhập (Bao gồm tên đăng nhập, mật khẩu, xác nhận và email)
3 Người dùng chọn Đăng ký để xác nhận gửi thông tin đăng ký cho hệ thống
4 Hệ thống gửi thông báo đăng ký thành công và điều hướng người dùng trở về màn hình đăng nhập
Dòng sự kiện thay thế
Dòng sự kiện ngoại lệ
1-2.0E1 Thông tin đăng nhập bị thiếu
1 Hệ thống thông báo trường nhập liệu bị thiếu 2a Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-1.0 2b Nếu không, kết thúc ca sử dụng
1-2.0E2 Tên tài khoản trùng với tài khoản có sẵn
1 Hệ thống thông báo tên tài khoản trùng đăng ký với tài khoản có sẵn 2a Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-2.0 2b Nếu không, kết thúc ca sử dụng
1-2.0E2 Mật khẩu xác nhận không trùng với mật khẩu đã nhập
1 Hệ thống thông báo mật khẩu xác nhận không trùng với mật khẩu đã nhập
2a Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-2.0 2b Nếu không, kết thúc ca sử dụng Độ ưu tiên Cao
Tần suất sử dụng Tùy người dùng
Thông tin bổ sung Không có
Người tạo Nguyễn Ngọc Đăng
Tác nhân chính Người dùng Tác nhân phụ Không có
Mô tả Là người dùng, tôi muốn đổi mật khẩu tài khoản
Xảy ra khi Người dùng có nhu cầu đổi tài khoản Điều kiện trước UC PRE-1: Người dùng đã đăng nhập vào hệ thống
PRE-2: Người dùng đã định hướng đến màn hình chỉnh sửa thông tin tài khoản Điều kiện sau UC POST-1: Hệ thống đổi mật khẩu cho người dùng
Dòng sự kiện cơ bản
1 Từ màn hình sửa đổi thông tin người dùng Người dùng chọn mục bảo mật
2 Người dùng nhập thông tin mật khẩu vào biểu mẫu đổi mật khẩu (Bao gồm mật khẩu cũ, mật khẩu mới, xác nhận mật khẩu mới)
3 Người dùng chọn Lưu mật khẩu để xác nhận gửi thông tin đăng đổi mật khẩu cho hệ thống
4 Hệ thống gửi thông báo đổi mật khẩu thành công và điều hướng người dùng trở về màn hình đăng nhập
Dòng sự kiện thay thế
Dòng sự kiện ngoại lệ
1-3.0E1 Thông tin đổi mật khẩu bị thiếu
1 Hệ thống thông báo trường nhập liệu bị thiếu 2a Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-3.0 2b Nếu không, kết thúc ca sử dụng
1 Hệ thống thông báo mật khẩu cũ nhập sai 2a Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-3.0 2b Nếu không, kết thúc ca sử dụng
1-3.0E2 Mật khẩu xác nhận không trùng với mật khẩu đã nhập
1 Hệ thống thông báo mật khẩu xác nhận không trùng với mật khẩu đã nhập
2a Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 1-3.0 2b Nếu không, kết thúc ca sử dụng Độ ưu tiên Cao
Tần suất sử dụng Tùy người dùng
Thông tin bổ sung Không có
Người tạo Nguyễn Ngọc Đăng
Tác nhân chính Người dùng Tác nhân phụ Chatbot
Người dùng mong muốn gửi tin nhắn cho Chatbot để nhận được câu trả lời từ Chatbot Quá trình này diễn ra khi người dùng có ý định hỏi Chatbot và đang ở màn hình trò chuyện với Chatbot Điều kiện tiền đề PRE-1: người dùng đang ở màn hình trò chuyện với Chatbot Điều kiện sau POST-1: Chatbot nhận được tin nhắn của người dùng để xử lý và trả lời.
Dòng sự kiện cơ bản
1 Người dùng ở màn hình trò chuyện với Chatbot
2a Nếu người dùng chọn nhập tin nhắn vào ô nhập liệu, chuyển đây là ca sử dụng gửi tin nhắn chữ (Tham khảo UC2-2)
2b Nếu người sử dụng chọn nút thu âm, đây là ca sử dụng gửi tin nhắn âm thanh (Tham khảo UC2-3)
3 Sau khi có kết quả là tin nhắn người dùng muốn gửi Gửi tin nhắn đi tới hệ thống và đợi phản hồi của Chatbot
4 Hiển thị phản hồi của Chatbot ra giao diện
Dòng sự kiện thay thế
1 Sau khi nhận được phản hồi từ Chatbot, người dùng có thể gửi tin nhắn khác
Dòng sự kiện ngoại lệ
2-1.0E1 Chatbot không hiểu được tin nhắn của người dùng
1 Hệ thống trả về phản hồi Chatbot không thể hiểu được yêu cầu người dùng
2 Hiển thị phản hồi đó ra giao diện, kết thúc use case 2-1.0E2 Chatbot không chắc ý định tin nhắn của người dùng
1 Hệ thống trả về phản hồi Chatbot không thể hiểu rõ được yêu cầu người dùng
2 Hiển thị phản hồi đó ra giao diện, kết thúc use case Độ ưu tiên Cao
Tần suất sử dụng Tùy người dùng
Thông tin bổ sung Không có
UC2-2 Gửi tin nhắn chữ
Người tạo Nguyễn Ngọc Đăng
Tác nhân chính Người dùng Tác nhân phụ Không có
Mô tả: Là người dùng, tôi muốn gửi tin nhắn văn bản cho chatbot để nhận được câu trả lời nhanh chóng từ hệ thống Tình huống xảy ra khi người dùng muốn hỏi chatbot dưới dạng văn bản Điều kiện trước UC PRE-1: Người dùng đang ở màn hình trò chuyện với chatbot.
Người dùng đang nhập tin nhắn vào ô nhập liệu; theo điều kiện sau UC POST-1, chatbot sẽ gửi phản hồi và phản hồi đó được hiển thị trên cửa sổ chat của người dùng.
Dòng sự kiện cơ bản
1 Người dùng nhập tin nhắn vào ô nhập liệu
2 Người dùng thực hiện gửi tin nhắn, chuyển đến bước 3 UC2- 1.0
Dòng sự kiện thay thế
Dòng sự kiện ngoại lệ
1 Hệ thống thông báo cho người dùng rằng tin nhắn của họ quá ngắn
2a Nếu người dùng chọn chỉnh sửa, trở lại bước 1 của 2-2.0 2b Nếu không, kết thúc ca sử dụng
1 Hệ thống thông báo cho người dùng rằng tin nhắn của họ quá dài
2a Nếu người dùng chọn chỉnh sửa, trở lại bước 1 của 2-2.0
2b Nếu không, kết thúc ca sử dụng Độ ưu tiên Cao
Tần suất sử dụng Ít nhất 10 lần trong 1 ngày
Thông tin bổ sung Không có
UC2-3 Gửi tin nhắn âm thanh
Người tạo Nguyễn Ngọc Đăng
Tác nhân chính Người dùng Tác nhân phụ Không có
Mô tả: Là người dùng, tôi muốn gửi tin nhắn âm thanh để Chatbot có thể trả lời, nhằm tăng tốc thời gian phản hồi và cải thiện trải nghiệm tương tác bằng giọng nói Xảy ra khi người dùng muốn hỏi Chatbot dưới dạng âm thanh Điều kiện trước UC PRE-1: Người dùng đang ở màn hình trò chuyện với Chatbot để có thể gửi tin nhắn âm thanh và nhận phản hồi ngay lập tức.
PRE-2 cho người dùng chọn thu âm tại ô nhập liệu; theo điều kiện sau UC POST-1, chatbot sẽ gửi phản hồi và phản hồi đó được hiển thị trong cửa sổ chat của người dùng.
Dòng sự kiện cơ bản
2-3.0 Gửi tin nhắn âm thanh
1 Người dùng chọn thu âm tại ô nhập liệu, hộp thoại thu âm hiện lên Nếu người dùng chưa cấp quyền truy cập microphone cho hệ thống, chuyển tới UC2-3.1
2 Người dùng bấm bắt đầu để thu âm
3 Người dùng nói vào microphone
4 Người dùng bấm kết thúc để gửi tin nhắn, chuyển đến bước
Dòng sự kiện thay thế
2-3.1 Cấp quyền sử dụng microphone
1 Nếu người dùng chưa cho phép hệ thống sử dụng microphone, hiện thị nút cấp quyền cho microphone và vô hiệu hóa các nút còn lại
2 Khi người dùng chọn cấp quyền, hộp thoại yêu cầu truy cập của trình duyệt sẽ hiện lên
3a Nếu người dùng đồng ý, chuyển về bước 2 UC2-3.0
Dòng sự kiện ngoại lệ
1 Hệ thống thông báo cho người dùng rằng tin nhắn của họ quá ngắn
2a Nếu người dùng muốn gửi tin khác, trở lại bước 1 của 2-3.0 2b Nếu không, kết thúc ca sử dụng
1 Hệ thống thông báo cho người dùng rằng tin nhắn của họ quá dài
2a Nếu người dùng muốn gửi tin khác, trở lại bước 1 của 2-3.0 2b Nếu không, kết thúc ca sử dụng
103 Độ ưu tiên Trung bình
Tần suất sử dụng Tùy người dùng, nhìn chung thấp hơn bằng văn bản
Thông tin bổ sung Không có
4.1.2.3 Module 3: Hệ thống dịch vụ người dùng
Người tạo Nguyễn Ngọc Đăng
Tác nhân chính Người dùng Tác nhân phụ Không có
Mô tả Là người dùng, tôi muốn chọn dịch vụ để nâng cấp tài khoản trong hệ thống Xảy ra khi Người dùng muốn chọn dịch vụ để thực hiện giao dịch Điều kiện trước UC PRE-1: Người dùng đang ở màn hình chính của hệ thống
PRE-2: Người dùng đã đăng nhập vào hệ thống Điều kiện sau UC Không có
Dòng sự kiện cơ bản
3-1.0 Xem lịch sử giao dịch
1 Người dùng chọn mục dịch vụ tại thanh điều hướng màn hình chính của hệ thống
2 Hệ thống hiển thị dịch vụ của hệ thống
3 Người dùng chọn mua một trong những dịch vụ trả phúi của hệ thống
4 Kết thúc ca sử dụng
Dòng sự kiện thay thế
1 Sau khi chọn dịch vụ, người dùng được chuyển tới màn hình thanh toán
2 Chuyển đến ca sử dụng thanh toán (Tham khảo UC3-2)
Dòng sự kiện ngoại lệ
Không có Độ ưu tiên Cao
Tần suất sử dụng Không thường xuyên
Thông tin bổ sung Không có
Người tạo Nguyễn Ngọc Đăng
Tác nhân chính Người dùng Tác nhân phụ Không có
Mô tả Là người dùng, tôi muốn thanh toán cho dịch vụ đã chọn Xảy ra khi Người dùng muốn thanh toán cho dịch vụ họ đã chọn
105 Điều kiện trước UC PRE-1: Người dùng đã chọn gọi dịch vụ muốn mua
PRE-2: Người dùng đã đăng nhập vào hệ thống Điều kiện sau UC Không có
Dòng sự kiện cơ bản
1 Sau khi người dùng chọn gói dịch vụ, người dùng được chuyển đến màn hình nhập thông tin thanh toán
2 Người dùng nhập thông tin thanh toán vào biểu mẫu
3 Người dùng chọn thanh toán để xác nhận thông tin thanh toán
4 Người dùng được chuyển hướng đến trang chủ của BaoKim đẻ chọn phương thức thanh toán
5 Người dùng tiến hành chọn phương thức thanh toán và xác nhận
6 Người dùng thực hiện các thủ tục cần thiết để hoàn thành thanh toán bằng phương thức đã chọn
7 Người dùng được đưa trở lại trang của hệ thống thông báo rằng giao dịch đã thành công
8 Kết thúc ca sử dụng
Dòng sự kiện thay thế
1 Nếu người dùng không muốn thanh toán thông qua cổng thanh toán điện tử, người dùng có thể chọn thanh toán trực tiếp
2 Hệ thống chuyển hướng người dùng đến màn hình thanh toán trực tiếp với thông tin chuyển khoản
3 Người dùng thực hiện chuyển khoản và đợi tối đa 24h để được xác nhận nếu giao dịch hợp lệ hay không
Dòng sự kiện ngoại lệ
3-2.0E1 Thông tin thanh toán bị thiếu
1 Hệ thống thông báo trường nhập liệu bị thiếu 2a Nếu người dùng chọn chỉnh sửa, trở lại bước 2 của 3-2.0 2b Nếu không, kết thúc ca sử dụng
3-2.0E2 Người dùng hủy bỏ giao dịch
1 Hệ thống dẫn người dùng đề màn hình giao dịch thất bại 2a Nếu người dùng chọn giao dịch lại, trở lại bước 1 của 3-1.0 2b Nếu không, kết thúc ca sử dụng Độ ưu tiên Trung bình
Tần suất sử dụng Không thường xuyên
Thông tin bổ sung Không có
UC3-4 Xem hồ sơ người dùng
Người tạo Nguyễn Ngọc Đăng
Tác nhân chính Người dùng Tác nhân phụ Không có
Thiết kế kiến trúc hệ thống
Hình 4.8 Sơ đồ kiến trúc hệ thống
Hệ thống được chia thành mô hình 3 lớp với một số chỉnh sửa, được thể hiện qua các miêu tả dưới đây:
Tầng Presentation Layer bao gồm khung trò chuyện và giao diện người dùng, là thành phần giúp người dùng tương tác hiệu quả với hệ thống Ngoài liên kết tới máy chủ hệ thống để thực hiện các chức năng chính, tầng này còn đóng vai trò giao tiếp với các Web API được nhúng vào trình duyệt nhằm nâng cao trải nghiệm người dùng.
Tầng Business Logic gồm máy chủ hệ thống, hệ thống Chatbot và hệ thống NLP (Xử lý ngôn ngữ tự nhiên), là thành phần đảm nhận việc xử lý các yêu cầu của người dùng và trả về phản hồi tương ứng; hệ thống Chatbot được thiết kế tách biệt tương đối với phần còn lại của tầng để đảm bảo tính tái sử dụng và linh hoạt của hệ thống Chatbot.
Data Access Layer (Tầng Truy cập dữ liệu) gồm hai thành phần chính: Module truy vấn thông tin và phần Data Access trên máy chủ hệ thống Tầng này đảm nhận nhiệm vụ đưa dữ liệu vào và ra khỏi cơ sở dữ liệu của hệ thống, tối ưu hóa thao tác truy vấn, quản lý kết nối và giao tiếp với cơ sở dữ liệu Vai trò cụ thể của từng thành phần được mô tả trong bảng dưới đây, giúp người đọc nắm bắt đúng chức năng và phạm vi hoạt động của mỗi phần trong kiến trúc hệ thống.
Bảng 4.2 Bảng mô tả thành phần chính trong hệ thống
STT Tên thành phần Mô tả
Giao diện trên nền tảng di động là hệ thống giao diện người dùng được tối ưu cho thiết bị di động, cho phép người dùng thao tác dễ dàng và hiệu quả với toàn bộ hệ thống Thiết kế tập trung vào trải nghiệm người dùng với các tính năng nổi bật như chatbot hỗ trợ 24/7, quy trình đăng ký nhanh chóng và bảo mật, cũng như chức năng đăng nhập tiện lợi.
Giao diện trên nền tảng web là hệ thống giao diện người dùng hoạt động trên trình duyệt web, cho phép người dùng dễ dàng thao tác với hệ thống và thực hiện các tác vụ một cách trực quan Giao diện này tích hợp các chức năng chính như chatbot để hỗ trợ người dùng, cùng với các tiện ích đăng ký và đăng nhập, và các tính năng khác nhằm tối ưu trải nghiệm người dùng và tăng khả năng tương tác trên môi trường web.
3 Giao diện quản trị viên là hệ thống giao diện trên nền tảng web cho phép quản trị viên thực hiện các tác vụ quản lý hệ thống một cách hiệu quả, tập trung và an toàn Giao diện này cho phép quản trị viên quản lý người dùng, dịch vụ và bài viết, cùng với các chức năng thiết yếu khác như kiểm soát quyền truy cập, chỉnh sửa nội dung và theo dõi hoạt động của hệ thống.
4 Máy chủ hệ thống Đây là bộ phận xử lý yêu cầu của người dùng, được chạy trên một máy chủ riêng biệt
Chatbot Engine là bộ phận cốt lõi của hệ thống Chatbot, chịu trách nhiệm xử lý tin nhắn của người dùng và trả về kết quả phản hồi cho máy chủ hệ thống Với khả năng xử lý nhanh và chính xác, nó tối ưu hiệu suất tổng thể và đảm bảo phản hồi kịp thời cho người dùng, đồng thời dễ dàng mở rộng để đáp ứng các nhu cầu trò chuyện ngày càng phức tạp trên nhiều nền tảng.
Giao diện thanh toán trực tuyến do BaoKim cung cấp giúp người dùng thanh toán cho các đơn hàng dịch vụ một cách dễ dàng và nhanh chóng Với sự tích hợp này, quy trình thanh toán được tối ưu hóa nhằm mang lại trải nghiệm an toàn, tiện lợi và tin cậy cho khách hàng khi thanh toán trực tuyến.
Module truy vấn thông tin là bộ phận phụ của Chatbot, chịu trách nhiệm truy vấn các thông tin cần thiết để xây dựng phản hồi cho người dùng Hệ thống có thể truy vấn từ cơ sở dữ liệu nội bộ hoặc từ API bên thứ ba, nhằm đảm bảo nguồn tin đa dạng và cập nhật Khả năng kết nối và tích hợp nhiều nguồn dữ liệu giúp tối ưu hóa khả năng trả lời, đảm bảo tính chính xác và thời gian phản hồi nhanh, đồng thời hỗ trợ mở rộng khi tích hợp nguồn dữ liệu mới.
8 CSDL hệ thống Nơi lưu trữ dữ liệu liên quan đến hệ thống được sử dụng bởi Module truy vấn thông tin cũng như máy chủ hệ thống
9 API bên thứ 3 Bao gồm các API bên thứ 3 cung cấp cho
Chatbot các thông tin để xây dựng phản hồi cho người dùng ví dụ thông tin về thời tiết, chứng khoán, v.v
10 WebSpeech API Bao gồm API nhận diện giọng nói
(SpeechRecognition) và API chuyển đổi văn bản thành giọng nói (SpeechSynthesis) được nhúng vào trình duyệt
11 Push Notification API API phụ trách việc quản lý và vận chuyển các thông báo cho người dùng được nhúng vào trình duyệt
12 Text2Speech Thư viện liên kết với hệ thống tạo giọng nói từ văn bản trên thiết bị di động
13 Voice Recognition Thư viện liên kết với hệ thống nhận diện giọng nói trên thiết bị di động
14 Scheduled Notification Thư viện liên kết với hệ thống tạo thông báo theo lịch trên thiết bị di động
15 Hệ thống dịch vụ chạy nền Hệ thống chạy nền được khởi tạo bởi trình duyệt để lắng nghe các sự kiện được gửi về bởi máy chủ
16 OneSignal Push Messaging Hệ thống phân phối thông báo đa nền tảng của OneSignal
17 Hệ thống NLP cục bộ là một hệ thống xử lý ngôn ngữ tự nhiên hoạt động tại máy người dùng, không dựa vào API bên ngoài và được tối ưu cho xử lý đầu vào nhanh chóng Hệ thống này sử dụng thư viện NLP.js để phân tích và xử lý ngôn ngữ, từ đó trả về kết quả một cách hiệu quả mà không cần kết nối liên tục với các dịch vụ bên ngoài Nhờ đặc tính không phụ thuộc API, NLP cục bộ mang lại bảo mật dữ liệu cao và độ trễ thấp cho các ứng dụng xử lý ngôn ngữ tự nhiên tại chỗ.
18 Hệ thống phân tích ý niệm: Thành phần này bao gồm một mạng nơ-ron truyền thẳng để xác định ý niệm của người dùng từ tập hợp các từ được cho ở đầu vào Mạng nơ-ron này tiếp nhận các từ khóa đầu vào, xử lý chúng thành đặc trưng và dự đoán ý định hoặc cảm xúc của người dùng, từ đó hỗ trợ hệ thống xử lý ngôn ngữ tự nhiên hiểu đúng ý nghĩa của người dùng.
19 Hệ thống phân tích xúc cảm Thành phần này bao gồm một mô hình
Trong bài toán phân tích cảm xúc, Transformer được tinh chỉnh từ mô hình PhoBERT đã được luyện sẵn để xác định trạng thái cảm xúc của câu đầu vào Quy trình này cho phép hệ thống nắm bắt các sắc thái tích cực, tiêu cực hoặc trung lập dựa trên ngữ cảnh tiếng Việt Để đạt hiệu quả cao, dữ liệu được yêu cầu phải trải qua các bước tiền xử lý kỹ lưỡng, bao gồm làm sạch văn bản, chuẩn hóa Unicode, loại bỏ ký tự không cần thiết và xử lý các ký tự đặc biệt Việc tiền xử lý dữ liệu giúp mô hình học được biểu diễn đặc trưng tốt hơn và tăng độ chính xác của dự đoán cảm xúc Những nguyên tắc này đảm bảo quá trình tinh chỉnh Transformer từ PhoBERT mang lại kết quả phân tích cảm xúc hiệu quả và ổn định cho câu đầu vào trong các ứng dụng NLP tiếng Việt.
20 Hệ thống trích xuất thực thể có tên
Thành phần này sử dụng nhiều phương pháp để trích xuất một số thông tin thực thể đặt tên từ đoạn ngữ liệu đầu vào
21 Hệ thống tiền xử lý dữ liệu Thành phần này liên kết với thư viện
VNCoreNLP để thực hiện các tác vụ tiền xử lý văn bản đầu vào như tách từ, bỏ dấu, v.v
22 Hệ thống cấu tạo ngôn ngữ tự nhiên
Thành phần này gồm một mô hình Transformer được tinh chỉnh từ mô hình BARTPho đã được huấn luyện sẵn, nhằm sinh ra phản hồi từ đầu vào của người dùng khi chatbot không thể xác định được ý niệm Việc áp dụng mô hình này giúp hệ thống trả lời tự động và mượt mà hơn, duy trì chất lượng hội thoại bằng cách hiểu ngữ cảnh người dùng và cung cấp câu trả lời phù hợp.
Thiết kế mô hình dữ liệu
Hình 4.9 Sơ đồ lớp của hệ thống
4.3.2 Đặc tả lớp dữ liệu
Lớp User có danh sách thuộc tính dưới đây:
Bảng 4.3 Bảng thuộc tính lớp User
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
3 hashed_password String Mật khẩu đã được hash bằng giải thuật SHA-256
Lớp Service có danh sách thuộc tính dưới đây:
Bảng 4.4 Bảng thuộc tính lớp Service
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
3 payment_type Enum Là một trong các giá trị sau (NONE,
Lớp Service có danh sách phương thức dưới đây:
Bảng 4.5 Bảng phương thức lớp Service
STT Tên phương thức (Tham số…)
Kiểu dữ liệu trả về Ghi Chú
Lớp Session có danh sách thuộc tính dưới đây:
Bảng 4.6 Bảng thuộc tính lớp Session
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Session có danh sách phương thức dưới đây:
Bảng 4.7 Bảng phương thức lớp Session
STT Tên phương thức (Tham số…)
Kiểu dữ liệu trả về Ghi Chú
Lớp Bill có danh sách thuộc tính dưới đây:
Bảng 4.8 Bảng thuộc tính lớp Bill
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp PendingBill (Thừa kế từ lớp Bill) có danh sách thuộc tính dưới đây:
Bảng 4.9 Bảng thuộc tính lớp PendingBill
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp PendingBill có danh sách phương thức dưới đây:
Bảng 4.10 Bảng phương thức lớp PendingBill
STT Tên phương thức (Tham số…)
Kiểu dữ liệu trả về Ghi Chú
Lớp ConfirmBill (Kế thừa từ lớp Bill) có danh sách thuộc tính dưới đây:
Bảng 4.11 Bảng thuộc tính lớp ConfirmBill
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Context có danh sách thuộc tính dưới đây:
Bảng 4.12 Bảng thuộc tính lớp Context
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Context có danh sách phương thức dưới đây:
Bảng 4.13 Bảng phương thức lớp Context
STT Tên phương thức (Tham số…)
Kiểu dữ liệu trả về Ghi Chú
Lớp ActiveContext có danh sách thuộc tính dưới đây:
Bảng 4.14 Bảng thuộc tính lớp ActiveContext
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Message có danh sách thuộc tính dưới đây:
Bảng 4.15 Bảng thuộc tính lớp Message
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Option có danh sách thuộc tính dưới đây:
Bảng 4.16 Bảng thuộc tính lớp Option
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp InformationKey có danh sách thuộc tính dưới đây:
Bảng 4.17 Bảng thuộc tính lớp InformationKey
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp InformationKey có danh sách phương thức dưới đây:
Bảng 4.18 Bảng phương thức lớp InformationKey
STT Tên phương thức (Tham số…)
Kiểu dữ liệu trả về Ghi Chú
Lớp Utterance có danh sách thuộc tính dưới đây:
Bảng 4.19 Bảng thuộc tính lớp Utterance
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Intent có danh sách thuộc tính dưới đây:
Bảng 4.20 Bảng thuộc tính lớp Intent
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Entity có danh sách thuộc tính dưới đây:
Bảng 4.21 Bảng thuộc tính lớp Entity
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Trait có danh sách thuộc tính dưới đây:
Bảng 4.22 Bảng thuộc tính lớp Trait
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Notification có danh sách thuộc tính dưới đây:
Bảng 4.23 Bảng thuộc tính lớp Notification
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Preference có danh sách thuộc tính dưới đây:
Bảng 4.24 Bảng thuộc tính lớp Preference
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Lớp Blog có danh sách thuộc tính dưới đây:
Bảng 4.25 Bảng thuộc tính lớp Blog
STT Tên thuộc tính Kiểu dữ liệu Ghi Chú
Thiết kế luồng xử lý
4.4.1 Luồng xử lý chức năng đăng nhập
QueryUser(credential) result not null null return result createSession() return token
SubmitLogin (credential) return "Empty field" return token return "wrong credential" return "wrong credential" return "Login Success" return "wrong credential"
Hình 4.10 Sơ đồ luồng xử lý chức năng đăng nhập
4.4.2 Luồng xử lý chức năng đăng kí
QueryUser(credential) result not null null return result createUser(credential) return token
SubmitRegister (credential) return "Empty field(s)" return token return "credential exist" return "credential exist" return "Register Success" return "credential exist"
Hình 4.11 Sơ đồ luồng xử lý chức năng đăng ký
4.4.3 Luồng xử lý chức năng thu phí
Hình 4.12 Sơ đồ luồng xử lý chức năng thu phí
4.4.4 Luồng xử lý chức năng giao tiếp với Chatbot
Trường hợp chung, luồng xử lý được thể hiện thông qua biểu đồ sau:
Hình 4.13 Sơ đồ luồng xử lý cho việc giao tiếp với Chatbot (Trường hợp chung)
Trong trường hợp cần truy vấn thông tin bên thứ ba, luồng xử lý được thể hiện thông qua biểu đồ sau:
Hình 4.14 Sơ đồ luồng xử lý cho việc giao tiếp với Chatbot (Trường hợp cần tra cứu thông tin)
4.4.5 Luồng xử lý chức năng phát âm đoạn Chat
ProcessUtterance (utter, voice) return voice_data return voice_data
ProcessUtterance(utter, voice) return voice_data return voice_data
Hình 4.15 Sơ đồ luồng xử lý chức năng phát âm đoạn Chat
4.4.6 Luồng xử lý chức năng gửi thông báo Push
Hình 4.16 Sơ đồ luồng xử lý chức năng gửi thông báo Push
4.4.7 Luồng xử lý chức năng gửi thông báo theo lịch trình
Hình 4.17 Sơ đồ luồng xử lý chức năng gửi thông báo theo lịch trình
4.4.8 Luồng xử lý chức năng cập nhật thông tin người dùng
SaveInfo (credential, info) return result
QueryUser(credential) result null not null return result
SaveInfo(user, info) return result
(credential, info) return "Empty field" return result return "Wrong Credential" return
"Wrong Credential" return "Info Saved" return
Hình 4.18 Sơ đồ luồng xử lý chức năng cập nhật thông tin người dùng
4.4.9 Luồng xử lý chức năng cập nhật thiết lập cá nhân
SaveInfo (credential, preference) return result
QueryUser (credential) result null not null return result
SavePreference (user, preference) return result
SaveInfo (credential, preference) return "Invalid field" return result return
Hình 4.19 Sơ đồ luồng chức năng cập nhật thiết lập cá nhân
4.4.10 Luồng xử lý chức năng cập nhật cấp bậc người dùng
Actor :DashboardCli ent :Server Database update service tier
SaveToPending(data) return "success" show success UpdatePermission
Hình 4.20 Sơ đồ luồng xử lý chức năng cập nhật cấp bậc người dùng
Thiết kế các Module truy vấn thông tin
4.5.1 Truy vấn thông tin thời tiết
Luồng xử lý của module truy vấn thông tin thời tiết được thể hiện qua biểu đồ tuần tự như sau:
Hình 4.21 Sơ đồ luồng xử lý truy vấn thông tin thời tiết
4.5.2 Truy vấn thông tin tỉ giá tiền tệ
Luồng xử lý của module truy vấn thông tin tỉ giá tiền tệ được thể hiện qua biểu đồ tuần tự như sau:
Fetch(Request) return result return result
FormatOutput(result) return error return error
Hình 4.22 Sơ đồ luồng xử lý truy vấn thông tin tỉ giá ngoại tệ
4.5.3 Truy vấn thông tin dịch thuật
Luồng xử lý của module truy vấn thông tin dịch thuật được thể hiện qua biểu đồ tuần tự như sau:
Fetch(Request) return result return result
FormatOutput(result) return error return error
Hình 4.23 Sơ đồ luồng xử lý dịch thuật
4.5.4 Truy vấn giá cổ phiếu
Luồng xử lý của module truy vấn thông tin giá cổ phiếu được thể hiện qua biểu đồ tuần tự như sau:
Fetch(Request) return result return result
FormatOutput(result) return error return error
Hình 4.24 Sơ đồ luồng xử lý truy vấn giá cổ phiếu
4.5.5 Truy vấn thông tin dịch COVID-19
Luồng xử lý của module truy vấn thông tin dịch COVID-19 trong nước được thể hiện qua biểu đồ tuần tự như sau:
Fetch(Request) return result return result
Hình 4.25 Sơ đồ luồng xử lý truy vấn thông tin dịch COVID-19
4.5.6 Truy vấn thông tin từ Google Knowledge Graph
Luồng xử lý của module truy vấn thông tin từ Google Knowledge được thể hiện qua biểu đồ tuần tự như sau:
Fetch(Request) return result return result
FormatOutput(result) return error return error
Hình 4.26 Sơ đồ luồng xử lý truy vấn thông tin từ Google Knowledge Graph
Thiết kế giao diện
Màn hình được bố trí thông qua sơ đồ như sau:
Hình 4.27 Sơ đồ màn hình
Danh sách các màn hình và mô tả sơ bộ được biểu diễn thông qua bảng dưới đây:
Bảng 4.26 Bảng danh sách màn hình trong hệ thống
STT Tên màn hình Mô tả chức năng
1 Màn hình chính Màn hình chính chứa các thông tin giới thiệu về hệ thống cũng như điều hướng tới các chức năng chính của hệ thống
2 Màn hình đăng nhập Màn hình chứa giao diện đăng nhập vào tài khoản người dùng
3 Màn hình đăng ký Màn hình chứa giao diện đăng kí tài khoản người dùng mới
4 Màn hình danh sách hóa đơn hiển thị danh sách các hóa đơn đã thanh toán liên quan đến các dịch vụ của người dùng; màn hình này cho phép tra cứu nhanh trạng thái thanh toán, xem chi tiết từng hóa đơn và số tiền đã thanh toán Chỉ truy cập được sau khi đăng nhập để đảm bảo bảo mật và quyền riêng tư của người dùng.
Màn hình hồ sơ người dùng hiển thị đầy đủ thông tin cá nhân và gói dịch vụ mà người dùng đang sử dụng, giúp người dùng nắm bắt trạng thái tài khoản và các gói dịch vụ đang hoạt động Màn hình này chỉ có thể được truy cập sau khi đăng nhập để bảo đảm an toàn và quyền riêng tư của người dùng.
6 Màn hình khung chat Màn hình hiển thị giao diện giao tiếp với
7 Màn hình giá cả dịch vụ Màn hình hiển thị bảng danh sách các gói dịch vụ người dùng có thể mua
8 Màn hình thanh toán Màn hình chứa giao diện nhập thông tin thanh toán của người dùng, cũng như hiển
164 thị thông tin về giao dịch sắp thực hiện (Chỉ truy cập được sau khi đăng nhập)
9 Màn hình thanh toán thành công
Màn hình thông báo giao dịch đã thành công (Chỉ truy cập được khi người dùng hoàn thành thanh toán)
10 Màn hình thanh toán thất bại Màn hình thông báo giao dịch thất bại
(Chỉ truy cập được khi người dùng hủy thanh toán)
11 Màn hình danh sách bài viết Màn hình hiển thị danh sách các bài viết của hệ thống
12 Màn hình bài viết Màn hình hiển thị bài viết của hệ thống
4.6.1 Thiết kế giao diện trên nền tảng Web
Hình 4.28 Giao diện màn hình chính (Chưa đăng nhập)
Hình 4.29 Giao diện màn hình chính (Đã đăng nhập)
Bảng 4.27 Bảng danh sách các thành phần trong màn hình chính
STT Tên thành phần Loại thành phần Mô tả
1 ChatNav NavButton Dẫn người dùng đến màn hình giao tiếp với Chatbot
2 ServiceNav NavButton Dẫn người dùng đến màn hình giới thiệu dịch vụ
3 InfoNav NavDropdown Mở Menu Dropdown để chọn các mục sau đây:
- Nhà phát triển: Dẫn đến màn hình giới thiệu nhà phát triển
- Chức năng: Dẫn đến màn hình giới thiệu chức năng
- Blog: Dẫn đến màn hình danh sách bài viết
4 LoginNav NavButton Dẫn người dùng đến màn hình đăng nhập
5 HeaderLogo ImageButton Dẫn người dùng về màn hình chính
6 StartButton Button Dẫn người dùng đến màn hình giao tiếp với Chatbot
7 UserNav NavDropdown Mở Menu Dropdown để chọn các mục sau đây:
- Lịch sử thanh toán: Dẫn người dùng đến màn hình lịch sử thanh toán
Hình 4.30 Giao diện màn hình đăng nhập
Bảng 4.28 Bảng danh sách thành phần trong màn hình đăng nhập
STT Tên thành phần Loại thành phần Mô tả
1 UsernameInput TextInput Nơi người dùng nhập tên đăng nhập
2 PasswordInput TextInput Nơi người dùng nhập mật khẩu đăng nhập
3 LoginButton Button Yêu cầu đăng nhập bằng thông tin người dùng đã nhập tại [1] và
4 RegisterButton Button Dẫn người dùng đến màn hình đăng ký
Hình 4.31 Giao diện màn hình đăng ký
Bảng 4.29 Bảng danh sách thành phần trong màn hình đăng ký
STT Tên thành phần Loại thành phần Mô tả
1 UsernameInput TextInput Nơi người dùng nhập tên đăng nhập
2 PasswordInput TextInput Nơi người dùng nhập mật khẩu đăng nhập
TextInput Nơi người dùng nhập lại mật khẩu
4 EmailInput TextInput Nơi người dùng nhập địa chỉ email
5 RegisterButton Button Yêu cầu đăng ký bằng thông tin người dùng đã nhập tại [1] [2]
4.6.1.4 Màn hình liệt kê giá dịch vụ
Hình 4.32 Giao diện màn hình liệt kê giá dịch vụ
Bảng 4.30 Bảng danh sách thành phần trong màn hình liệt kê giá dịch vụ
STT Tên thành phần Loại thành phần Mô tả
1 ServiceName Label Hiển thị tên dịch vụ
2 ServicePrice Label Hiển thị giá cả dịch vụ
3 FeatureList ListView Hiển thị danh sách chức năng dịch vụ
4 BuyButton Button Dẫn người dùng đến màn hình nhập thông tin thanh toán của gói dịch vụ tương ứng
4.6.1.5 Màn hình giao tiếp với Chatbot
Hình 4.33 Giao diện màn hình giao tiếp với Chatbot
Bảng 4.31 Bảng danh sách thành phần trong màn hình giao tiếp với Chatbot
STT Tên thành phần Loại thành phần Mô tả
1 UserMessage ChatBubble Hiển thị tin nhắn từ người dùng
2 BotMessage ChatBubble Hiển thị tin nhắn từ Chatbot
3 SuggestedMessage Button Hiển thị các tin nhắn được gợi ý từ Chatbot
4 MessageInput TextInput Nơi nhập tin nhắn của người dùng
5 SendButton Button Yêu cầu gửi tin nhắn người dùng đã nhập tại [4]
4.6.1.6 Màn hình nhập thông tin thanh toán
Hình 4.34 Giao diện màn hình nhập thông tin thanh toán
Bảng 4.32 Bảng danh sách thành phần trong màn hình nhập thông tin thanh toán STT Tên thành phần Loại thành phần Mô tả
1 NameInput TextInput Nơi người dùng nhập tên thanh toán
2 AddressInput TextInput Nơi người dùng nhập địa chỉ thanh toán
3 PhoneInput TextInput Nơi người dùng nhập số điện thoại thanh toán
4 EmailInput TextInput Nơi người dùng nhập địa chỉ email
5 InfoSubmitButton Button Yêu cầu gửi thông tin người dùng đã nhập tại [1] [2] [3] và
[4] cho phía xử lý giao dịch
6 PlanName Label Hiển thị tên gói dịch vụ người dùng đặt mua
7 TotalAmount Label Hiển thị số tiền người dùng phải thanh toán
4.6.1.7 Màn hình danh sách bài viết
Hình 4.35 Giao diện màn hình danh sách bài viết
Bảng 4.33 Bảng danh sách thành phần trong màn hình danh sách bài viết
STT Tên thành phần Loại thành phần Mô tả
1 BlogImage Image Hiển thị hình minh họa cho bài viết
2 BlogTitleText Label Hiển thị tiêu đề bài viết
3 BlogTag Tag Hiển thị các tag của bài viết
4 BlogDescText Label Hiển thị mô tả ngắn của bài viết
5 ReadMoreButton Button Dẫn người dùng đến trang đầy đủ nội dung của bài viết
4.6.1.8 Màn hình chỉnh sửa hồ sơ người dùng
Hình 4.36 Giao diện màn hình chỉnh sử hồ sơ người dùng
Bảng 4.34 Bảng danh sách thành phần trong màn hình chỉnh sửa hồ sơ người dùng STT Tên thành phần Loại thành phần Mô tả
1 UserAvatar Image Hiển thị hình đại diện (Avatar) của người dùng
2 UsernameInput Input Hiển thị và cho phép người dùng chỉnh sửa tên đăng nhập
3 DisplaynameInput Input Hiển thị và cho phép người dùng chỉnh sửa tên hiển thị
4 EmailInput Input Hiển thị và cho phép người dùng chỉnh sửa email đăng ký
5 BirthdayPicker DatePicker Hiển thị và cho phép người dùng chỉnh sửa ngày sinh
6 PlanExpireInfo Label Hiển thị ngày hết hạn dịch vụ của người dùng
7 PlanNameInfo Label Hiển thị tên dịch vụ người dùng đang sử dụng
8 SaveButton Button Lưu thông tin đang hiển thị trên màn hình về trở thành thông tin người dùng
9 UserInfoTabButton Button Chuyển mục hiển thị hiện tại sang mục thông tin người dùng
Button Chuyển mục hiển thị hiện tại sang mục bảo mật người dùng
Button Chuyển mục hiển thị hiện tại sang mục thiết lập cá nhân của người dùng
4.6.1.9 Màn hình thiết lập bảo mật người dùng
Hình 4.37 Giao diện màn hình thiết lập bảo mật người dùng
Bảng 4.35 Bảng danh sách các thành phần trong màn hình thiết lập bảo mật người dùng STT Tên thành phần Loại thành phần Mô tả
1 OldPasswordInput Input Nơi người dùng nhập mật khẩu cũ của tài khoản
2 NewPasswordInput Input Nơi người dùng nhập mật khẩu mới của tài khoản
Input Nơi người dùng nhập mật khẩu xác nhận mới của tài khoản
4 SaveButton Button Tương tác với nút này để yêu cầu hệ thống đổi mật khẩu người dùng với thông tin đã nhập
4.6.1.10 Màn hình thiết lập cá nhân người dùng
Hình 4.38 Giao diện màn hình thiết lập cá nhân người dùng
Bảng 4.36 Bảng danh sách các thành phần trong màn hình thiết lập cá nhân người dùng STT Tên thành phần Loại thành phần Mô tả
1 NotificationCheckbox Checkbox Người dùng chọn nếu họ muốn nhận thông báo push từ dịch vụ hay không
Checkbox Người dùng chọn nếu họ muốn dịch vụ thu âm lại giọng nói của họ hay không (Phục vụ chức năng Speech Recognition)
CheckBox Người dùng chọn nếu họ muốn mỗi tin nhắn luôn được phát âm hay không
SelectPicker Người dùng chọn giọng nói được sử dụng cho chức năng phát âm
5 DeleteUserInfoButton Button Tương tác với nút này nếu người dùng có yêu cầu xóa toàn bộ thông tin tài khoản
4.6.1.11 Màn hình dashboard quản trị hệ thống
Hình 4.39 Giao diện màn hình dashboard quản trị hệ thống
Bảng 4.37 Bảng danh sách các thành phần trong màn hình dashboard quản trị hệ thống STT Tên thành phần Loại thành phần Mô tả
1 SessionCount Label Hiển thị số người dùng trong phiên sử dụng
2 TotalUserCount Label Hiển thị số người dùng đã đăng ký dịch vụ
3 ChatbotUsageChart Chart Biểu đồ hiển thị số lần
Chatbot đã được sử dụng gần đây
4 DashboardSelect NavigationButton Chọn màn hình bảng điều khiển
5 InfoSelect NavigationButton Chọn màn hình thông tin hệ thống
6 UserManageSelect NavigationButton Chọn màn hình quản lý người dùng
7 BillingManageSelect NavigationButton Chọn màn hình quản lý hóa đơn
8 ServiceManageSelect NavigationButton Chọn màn hình quản lý dịch vụ
9 BlogManageSelect NavigationButton Chọn màn hình quản lý bài viết
4.6.1.12 Màn hình quản lý người dùng
Hình 4.40 Giao diện màn hình quản lý người dùng
Bảng 4.38 Bảng danh sách các thành phần trong màn hình quản lý người dùng STT Tên thành phần Loại thành phần Mô tả
1 TotalEntryInfo Label Chứa thông tin về tổng số người dùng trong hệ thống
2 NewUserButton Button Yêu cầu mở hộp thoại người dùng mới
3 UserDataTable Table Bảng dữ liệu chứa thông tin người dùng
4 UserEdit Link Yêu cầu mở hộp thoại chỉnh sửa thông tin người dùng
5 UserRemove Link Yêu cầu xóa thông tin người dùng
4.6.1.13 Màn hình chỉnh sửa thông tin người dùng
Hình 4.41 Giao diện màn hình chỉnh sửa thông tin người dùng
Bảng 4.39 Bảng danh sách các thành phần trong màn hình chỉnh sửa thông tin người dùng STT Tên thành phần Loại thành phần Mô tả
1 UsernameInput Input Hiển thị và cho phép người dùng chỉnh sửa tên đăng nhập
2 DisplayNameInput Input Hiển thị và cho phép người dùng chỉnh sửa tên hiển thị
3 EmailInput Input Hiển thị và cho phép người dùng chỉnh sửa email đăng ký
4 BirthdayPicker DatePicker Hiển thị và cho phép người dùng chỉnh sửa ngày sinh
5 PlanPicker SelectPicker Hiển thị và cho phép chỉnh sửa tên dịch vụ người dùng đang sử dụng
DatePicker Hiển thị và cho phép chỉnh sửa ngày hết hạn dịch vụ của người dùng
7 AbortChangeButton Button Yêu cầu hủy yêu cầu thay đổi thông tin
8 SaveChangeButton Button Yêu cầu Lưu thay đổi thông tin
4.6.1.14 Màn hình quản lý dịch vụ hệ thống
Hình 4.42 Giao diện màn hình quản lý dịch vụ hệ thống
Bảng 4.40 Bảng danh sách các thành phần trong màn hình quản lý dịch vụ hệ thống STT Tên thành phần Loại thành phần Mô tả
1 FreeServicePanel Panel Hiển thị danh sách thiết lập các dịch vụ cho dịch vụ miễn phí
2 ServiceCheckbox Checkbox Chọn nếu người dùng có thể sử dụng dịch vụ này hay không
3 StandardServicePanel Panel Hiển thị danh sách thiết lập các dịch vụ cho dịch vụ tiêu chuẩn
4 PremiumServicePanel Panel Hiển thị danh sách thiết lập các dịch vụ cho dịch vụ cao cấp
5 SaveButton Button Lưu thiết lập dịch vụ
4.6.1.15 Màn hình quản lý bài viết
Hình 4.43 Giao diện màn hình quản lý bài viết
Bảng 4.41 Bảng danh sách các thành phần trong màn hình quản lý bài viết
STT Tên thành phần Loại thành phần Mô tả
1 TotalEntryInfo Label Chứa thông tin về tổng số bài viết trong hệ thống
2 NewBlogButton Button Yêu cầu mở hộp thoại bài viết mới
3 BlogDataTable Table Bảng dữ liệu chứa thông tin bài viết
4 BlogEdit Link Yêu cầu mở hộp thoại chỉnh sửa thông tin bài viết
5 BlogRemove Link Yêu cầu xóa thông tin bài viết
4.6.1.16 Màn hình chỉnh sửa bài viết
Hình 4.44 Giao diện màn hình chỉnh sửa bài viết
Bảng 4.42 Bảng danh sách các thành phần trong màn hình chỉnh sửa bài viết STT Tên thành phần Loại thành phần Mô tả
1 TitleInput Input Hiển thị và chỉnh sửa tiêu đề bài viết
2 DescInput Input Hiển thị và chỉnh sửa diễn tả bài viết
3 TagInput TagPicker Hiển thị và chỉnh sửa thẻ phân loại bài viết
4 ImgLinkInput Input Hiển thị và chỉnh sửa đường dẫn tới hình minh họa bài viết
5 ContentInput TextAreaInput Hiển thị và chỉnh sửa nội dung bài viết
6 CreationDateInfo Label Hiển thị ngày tạo bài viết
7 SaveButton Button Yêu cầu lưu thông tin bài viết
8 CancelButton Button Hủy yêu cầu lưu thông tin bài viết
4.6.2 Thiết kế giao diện trên nền tảng di động
4.6.2.1 Màn hình đăng nhập (Ứng dụng di động)
Hình 4.45 Giao diện màn hình Đăng nhập
Bảng 4.43 Bảng danh sách các thành phần trong màn hình Đăng nhập STT Tên thành phần Loại thành phần Mô tả
1 UsernameInput TextInput Nơi người dùng nhập tên đăng nhập
2 PasswordInput TextInput Nơi người dùng nhập mật khẩu đăng nhập
3 LoginButton Button Yêu cầu đăng nhập bằng thông tin người dùng đã nhập tại [1] và [2]
4 RegisterButton Button Dẫn người dùng đến màn hình đăng ký
4.6.2.2 Màn hình Đăng ký (Ứng dụng di động)
Hình 4.46 Giao diện màn hình Đăng ký
Bảng 4.44 Bảng danh sách các thành phần trong màn hình Đăng ký
STT Tên thành phần Loại thành phần Mô tả
1 UsernameInput TextInput Nơi người dùng nhập tên đăng nhập
2 EmailInput TextInput Nơi người dùng nhập email
3 PasswordInput TextInput Nơi người dùng nhập mật khẩu
4 ConfirmPasswordInput TextInput Nơi người dùng xác nhận mật khẩu
5 SignUpButton Button Yêu cầu đăng ký bằng thông tin người dùng đã nhập tại
6 LoginButton Button Dẫn người dùng quay lại màn hình đăng nhập
4.6.2.3 Màn hình Khung chat (Ứng dụng di động)
Hình 4.47 Giao diện màn hình Khung chat
Hình 4.48 Giao diện màn hình khung chat (kèm bản đồ)
Bảng 4.45 Bảng danh sách các thành phần trong màn hình Khung chat STT Tên thành phần Loại thành phần Mô tả
1 BlogButton Button Dẫn người dùng đến màn hình danh sách bài viết
2 AccountButton Button Dẫn người dùng đến màn hình đăng nhập (nếu đã đăng nhập thì chuyển hướng đến màn hình tài khoản)
3 UserMessage ChatBubble Hiển thị tin nhắn gửi đi từ người dùng
4 BotMessage ChatBubble Hiển thị tin nhắn phản hồi từ chatbot
5 SuggestionBar ListButton Hiển thị các tin nhắn mẫu để gợi ý cho người dùng
6 VoiceChatButton Button Cho phép người dùng gửi tin nhắn bằng giọng nói
7 ChatInput TextInput Nơi người dùng nhập tin nhắn muốn gửi
8 SendButton Button Cho phép người dùng gửi tin nhắn đã nhập từ [7]
9 Map Component Bản đồ hiển thị khi người dùng nhắn tin hỏi địa điểm
4.6.2.4 Màn hình Danh sách bài viết (Ứng dụng di động)
Hình 4.49 Giao diện màn hình Danh sách bài viết
Bảng 4.46 Bảng danh sách các thành phần trong màn hình Danh sách bài viết
STT Tên thành phần Loại thành phần Mô tả
1 BackButton Button Trở lại màn hình chat bot
2 BlogImage Image Hiển thị hình minh họa cho bài viết
3 BlogTitleText Label Hiển thị tiêu đề bài viết
4 BlogTag Tag Hiển thị các nhãn của bài viết
5 BlogDescText Label Hiển thị mô tả ngắn của bài viết
4.6.2.5 Màn hình Thiết lập tài khoản (Ứng dụng di động)
Hình 4.50 Giao diện màn hình Thiết lập tài khoản
Bảng 4.47 Bảng danh sách các thành phần trong màn hình Thiết lập tài khoản STT Tên thành phần Loại thành phần Mô tả
1 BackButton Button Quay trở lại màn hình khung chat
2 LogOutButton Button Đăng xuất người dùng khỏi hệ thống
3 UsernameLabel Label Hiển thị tên đăng nhập của người dùng
4 ClassLabel Label Hiển thị hạng dịch vụ của người dùng
5 InfomationButton Button Dẫn người dùng đến màn hình chỉnh sửa thông tin người dùng
6 VoiceButton Button Dẫn người dùng đến màn hình thiết lập âm thanh và thông báo
7 ThemeButton Button Dẫn người dùng đến màn hình thiết lập giao diện
8 FontButton Button Dẫn người dùng đến màn hình thiết lập phông chữ
9 UpgradeButton Button Dẫn người dùng đến màn hình thăng hạng dịch vụ
10 PasswordButton Button Dẫn người dùng đến màn hình thiết lập bảo mật
11 AboutUsButton Button Dẫn người dùng đến màn hình thông tin nhóm phát triển
12 LogOutButton Button Đăng xuất người dùng khỏi hệ thống
4.6.2.6 Màn hình Chỉnh sửa thông tin người dùng (Ứng dụng di động)
Hình 4.51 Giao diện màn hình Chỉnh sửa thông tin người dùng
Bảng 4.48 Bảng danh sách các thành phần trong màn hình Chỉnh sửa thông tin người dùng STT Tên thành phần Loại thành phần Mô tả
1 BackButton Button Quay lại màn hình thiết lập tài khoản
2 NameInput TextInput Thay đổi tên người dùng
3 UsernameText Label Hiển thị tên tài khoản người dùng
4 EmailText Label Hiển thị email người dùng
5 PaidValidUntilText Label Hiện thị ngày hết hạn tài khoản người dùng
6 ServiceTierText Label Hiện thị hạng dịch vụ của người dùng
7 BirthdayInput SelectInput Thay đổi sinh nhật
8 SaveButton Button Cho phép người dùng lưu thông tin mới
4.6.2.7 Màn hình Thiết lập âm thanh và thông báo (Ứng dụng di động)
Hình 4.52 Giao diện màn hình Thiết lập âm thanh và thông báo