Giới thiệu mô hình chatbot đơn giản cùng với Flask và MongoDB

Tram Ho

A. Giới thiệu

Là một sinh viên ngành trí tuệ nhân tạo mới học ngành này được 3 tháng, tôi bị cuốn hút bởi ChatGPT của OpenAI, được mệnh danh là chatbot tân tiến nhất thế giới. Việc sử dụng thuật toán Transformer trong ChatGPT giúp xử lý các cấu trúc dữ liệu liên tục một cách dễ dàng, dẫn đến việc đào tạo và sử dụng dễ dàng hơn. Trong dự án cá nhân của riêng tôi, được gọi là Corgiman , tôi đã tạo một mô hình chatbot đơn giản sử dụng mô hình phân loại làm chức năng chính của nó. Điều quan trọng cần lưu ý là máy tính không có khả năng hiểu ngôn ngữ tự nhiên như con người. Thay vào đó, họ hiểu các dãy số và từ. Do đó, một dãy số duy nhất phải được tạo cho mỗi từ trong bất kỳ ngôn ngữ nào để tạo điều kiện giao tiếp. Quá trình chuyển đổi từ thành vectơ này được gọi là word-to-vec. Trong bài đăng này, tôi muốn chia sẻ với các bạn kinh nghiệm của tôi trong việc tạo một mô hình chatbot đơn giản bằng Python và áp dụng nó trong dự án của tôi, Corgiman . Những kiến ​​thức này mình đã tự học được và bên cạnh đó là sự giúp đỡ nhiệt tình của Developer-AI Club . Tôi tin rằng điều này sẽ cung cấp cái nhìn sâu sắc có giá trị về quá trình tạo chatbot và những thách thức đi kèm với nó.

B. Tổng quan về mô hình với Flask và MongoDB

Mô hình của chúng tôi rõ ràng và dễ hiểu, với Front-end và Back-end giao tiếp với nhau thông qua API. Để hỗ trợ giao tiếp thời gian thực, chúng tôi đã sử dụng thư viện socketio. Back-end truy cập dữ liệu thông qua MongoDB và tệp JSON được sử dụng để cung cấp dữ liệu đào tạo khi không có cơ sở dữ liệu.

Chúng ta sẽ đến với ví dụ thực tế của mô hình này. Đối với dự án Corgiman, chúng tôi đã sử dụng Javascript cho Giao diện người dùng và công cụ SpeechSynthesis tích hợp sẵn của Window để chuyển phản hồi của chatbot thành lời nói (chuyển văn bản thành giọng nói). Ngoài ra, chúng tôi đã sử dụng SpeechRecognition API để chuyển đổi giọng nói thành văn bản và gửi nó đến máy chủ. Javascript cũng tích hợp thư viện socketio để cho phép gửi tin nhắn mà không cần các phương thức truyền thống như GET hoặc POST. Đối với Back-end, chúng tôi đã sử dụng thư viện Flask, một khung được sử dụng rộng rãi để triển khai các ứng dụng lên máy chủ cục bộ. MongoDB được chọn làm cơ sở dữ liệu do nó sử dụng định dạng dữ liệu JSON, giúp việc lưu trữ và truy xuất dữ liệu hiệu quả hơn. Trọng tâm của chúng tôi ở đây không phải là đi sâu vào mô hình này vì nó rất đơn giản. Mục đích của bài đăng này chỉ đơn giản là giới thiệu về mô hình chatbot, vì vậy chúng ta hãy chuyển sang phần tiếp theo.

C. Mô hình Chatbot

Dữ liệu huấn luyện sẽ có cấu trúc như sau:

C1. Mô hình đào tạo

Tất cả các bước

Chuẩn bị dữ liệu để chuyển đổi từ sang vector

  • Trước khi chúng tôi tiến hành, hãy phân tích dữ liệu. Dữ liệu bao gồm một mảng thông tin được viết dưới dạng JSON với cấu trúc “Tên”: “Giá trị”. Có ba thành phần cần xem xét: “thẻ” – điều này thể hiện chủ đề của từng đối tượng, chẳng hạn như lời chào, nghề nghiệp hoặc tuổi tác; “mẫu” – đây là nơi lưu trữ các câu hỏi hoặc câu lệnh để chatbot nhận dạng; “phản hồi” – đây là nơi lưu trữ tất cả các câu trả lời.
  • Tiếp theo chúng ta sẽ có một biến có tên là tài liệu. Nó sẽ có dữ liệu là một mảng các bộ dữ liệu, trong các bộ dữ liệu sẽ bao gồm tất cả các mẫu mà chúng ta có và các thẻ của nó. Các mẫu sẽ được chia theo nghĩa đen thành mảng và loại bỏ các ký hiệu đặc biệt sau đó là chữ thường. Ví dụ: chúng ta sẽ có một phần tử như ([“hi”, “there”], “greeting”) hoặc ([“morning”], “greeting”)
  • Thông qua dữ liệu mà chúng tôi có, chúng tôi sẽ tách tất cả các mẫu chúng tôi có và đưa vào biến từ. Tất nhiên là phải lược bỏ ký tự đặc biệt và chữ thường trước đó.
  • Cuối cùng, tất cả các thẻ cũng sẽ được lưu vào một biến có tên là các lớp, sau khi được làm sạch

Chuyển từ sang vector

  • Để máy tính hiểu được, chúng ta cần chuyển đổi từ thành vectơ. Khía cạnh quan trọng của mô hình này nằm ở bước này, vì vậy chúng tôi bắt buộc phải trình bày rõ ràng và hiệu quả.
  • Đầu tiên, chúng tôi sẽ lặp lại tất cả các thành phần trong tài liệu.
  • Tiếp theo chúng ta sẽ có một vectơ gồm 0 phần tử có độ dài bằng độ dài của biến từ. Ở những chỗ mà biến từ trùng với các từ trong mẫu thì nó sẽ được đổi thành 1. Để dễ hiểu chúng ta sẽ đến với ví dụ, chúng ta sẽ có các biến từ là [“hi”, “morning”, “there” “, “bye”] thì đầu tiên ta tạo vector [0,0,0,0], so sánh với mẫu [“hi”, “there”] thì tại vị trí chỉ số 0 và 2 trong word sẽ trùng nhau, ta sẽ có một vector mới là [1,0,1,0] (*)
  • Điều tương tự cũng xảy ra với các thẻ, thẻ là nhãn cho từng mẫu mà chúng tôi cung cấp cho máy để xác định. Tương tự như bước trước, vị trí mà thẻ khớp trong biến lớp sẽ có giá trị 1. Ví dụ: chúng ta có các lớp là [“lời chào”, “nghề nghiệp”, “tuổi”, “tên”], vì vậy hãy gắn thẻ ” tuổi” sẽ là vectơ [0,0,1,0] (**)
  • Như vậy ta có dữ liệu huấn luyện là các vector, nó có cấu trúc mảng hai chiều [[vector_pattern, vector_tag],…]. Trong đó vector_pattern là vector được tạo tại (*) và vector_tag được tạo tại (**)

Đào tạo

  • Sau khi chúng tôi chuẩn bị xong dữ liệu và biến nó thành các vectơ, chúng tôi sẽ đào tạo mô hình. Loại hình đào tạo sẽ phụ thuộc vào từng mô hình và yêu cầu cá nhân. Đối với Corgiman, tôi sử dụng mô hình Sequential bao gồm 4 lớp, lớp đầu tiên có 256 nơ ron, lớp tiếp theo có 128 nơ ron, lớp thứ 3 có 64 nơ ron và lớp cuối cùng có số nơ ron bằng chiều dài của đầu ra. .

Đánh giá

Kết quả

Thị giác

C1. Mô hình dự đoán

Tất cả các bước

Làm sạch câu

  • Loại bỏ các ký tự đặc biệt (., !, @, #, ?, …). Ví dụ: “bạn bao nhiêu tuổi?” => “bạn bao nhiêu tuổi”
  • Loại bỏ các từ lặp đi lặp lại. Ví dụ: “anh ấy không phải là bác sĩ, phải không” => “anh ấy không phải là bác sĩ, là”
  • Chia câu thành các mảng từ. Ví dụ: “tên của bạn là gì?” => [“cái gì”, “là”, “của bạn”, “tên”]

Văn bản thành vectơ

  • Tạo một mảng có n phần tử 0, trong đó n là độ dài của mảng chứa tất cả các từ được huấn luyện. Ví dụ ta phải luyện 6 từ thì sẽ có mảng như thế nào [0,0,0,0,0,0]
  • Tại các vị trí mà các từ trong câu đó khớp với nhau trong mảng tất cả các từ thì giá trị sẽ được cập nhật thành 1. Ví dụ mảng sẽ là [0,1,0,0,1,0]

Dự đoán

  • Trong phần trước, chúng tôi đã thực hiện đào tạo mô hình. Bây giờ chúng ta chỉ cần lấy mô hình đó ra để sử dụng
  • Ta sẽ có một mảng giá trị như hình trên, chính là tỉ lệ của câu trong tag nào

Nhận được phản ứng

  • Ta sẽ tìm cách lấy giá trị lớn nhất trong mảng đó, và chỉ số của nó
  • Vị trí chỉ mục của nó cũng chính là vị trí thẻ dự đoán trong mảng chứa tất cả các thẻ, ta sẽ được thẻ chính xác.
  • Với thẻ được tìm thấy, chúng tôi sẽ tìm thấy các phản hồi thích hợp trong dữ liệu
  • Chọn ngẫu nhiên một câu trả lời từ mảng câu trả lời

D. Ưu điểm và nhược điểm

Thuận lợi

  • Flask cung cấp một mô hình đơn giản và rõ ràng để xây dựng chatbot, giúp các nhà phát triển dễ dàng hiểu và triển khai.
  • Chatbot chạy ổn định trên cấu hình chip i5 trở lên, đảm bảo hiệu suất tốt cho người dùng của bạn.
  • Dữ liệu đào tạo được lưu trữ ở định dạng JSON, đây là định dạng văn bản thuần túy, dễ sử dụng và gửi đến bất kỳ máy chủ nào. JSON cũng thường được sử dụng để trao đổi dữ liệu văn bản giữa trình duyệt và máy tính.
  • Quá trình đào tạo chatbot hiệu quả và không mất nhiều thời gian, cho phép bạn thiết lập và chạy chatbot của mình một cách nhanh chóng.
  • Khi chatbot được triển khai trên Flask, thật dễ dàng để mở rộng và thêm các tính năng hoặc tùy chỉnh mới.
  • MongoDB, một cơ sở dữ liệu NoSQL, cung cấp tính linh hoạt và dễ dàng lưu trữ dữ liệu, cho phép bạn quản lý và sắp xếp dữ liệu của mình theo cách đáp ứng nhu cầu của bạn.
  • MongoDB cũng cung cấp các tính năng bảo mật mạnh mẽ để bảo vệ dữ liệu của bạn, đảm bảo rằng chatbot của bạn và dữ liệu của nó được an toàn và bảo mật.

Nhược điểm

  • Thiếu dữ liệu đào tạo đa dạng và toàn diện
  • Quá tải mô hình với quá nhiều dữ liệu đào tạo có thể làm giảm độ chính xác của mô hình
  • Các câu dài hơn để chatbot phân tích và dự đoán sẽ tác động tiêu cực đến độ chính xác phản hồi của nó
  • Chatbot được xây dựng trên Flask có thể yêu cầu nhiều tài nguyên hơn và có khả năng ảnh hưởng đến hiệu suất hệ thống
  • MongoDB, là một cơ sở dữ liệu NoSQL, cung cấp khả năng lưu trữ dữ liệu linh hoạt nhưng cũng yêu cầu các biện pháp bảo mật và quản lý dữ liệu cẩn thận
  • Vì Flask là một nền tảng mã nguồn mở nên có thể có các lỗ hổng bảo mật hoặc các tính năng bị thiếu, cần hết sức thận trọng khi triển khai.

Phần kết luận

Trong bài đăng này, tôi hy vọng sẽ giới thiệu cho bạn một công cụ hữu ích, đó là chatbot. Tôi đã xây dựng chatbot theo cách đơn giản nhất có thể để giúp bạn hiểu rõ hơn. Tuy nhiên, để đạt được độ chính xác cao hơn, mỗi bước cần được tối ưu hóa hơn nữa. Đây là bài viết đầu tiên của tôi và có thể có sai sót hoặc hiểu lầm, tôi mong nhận được phản hồi và chỉnh sửa từ tất cả các bạn. Xin chân thành cảm ơn quý khách hàng đã đọc và cho ý kiến ​​phản hồi.

Corgiman là dự án mà tôi đã áp dụng mô hình này, Bạn có thể tham khảo tại đây

Nếu quan tâm hay có thắc mắc gì về bài viết, hãy để lại ý kiến ​​của bạn bên dưới phần bình luận nhé ^^. Xin chân thành cảm ơn quý khách hàng đã theo dõi.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo