1. Trang chủ
  2. » Luận Văn - Báo Cáo

Luận văn thạc sĩ Khoa học máy tính: Hội thoại Dialog trong tiếng Việt dùng phương pháp SEQ-to-SEQ và attention

44 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Cấu trúc

  • CHƯƠNG 1: GIỚI THIỆU (13)
    • 1.1. Giới thiệu đề tài (13)
    • 1.2. Mục tiêu của đề tài (14)
    • 1.3. Ý nghĩa khoa học của đề tài (14)
    • 1.4. Phạm vi của đề tài (15)
    • 1.5. Những công trình nghiên cứu liên quan (15)
  • CHƯƠNG 2: CƠ SỞ LÝ THUYẾT (18)
    • 2.1. Kiến trúc Transformer (18)
      • 2.1.1. Encoder và Decoder (19)
    • 2.2. Attention (21)
      • 2.2.1. Scale Dot Product Attention (21)
      • 2.2.2. Multi-head Attention (23)
      • 2.2.3. Masked Multi-head Attention (24)
    • 2.3. Mô hình BERT (24)
      • 2.3.1. Các kiến trúc của mô hình BERT (24)
      • 2.3.2. Fine-tuning mô hình BERT (25)
  • CHƯƠNG 3: PHƯƠNG PHÁP ĐỀ XUẤT (27)
    • 3.1. Xây dựng tập dữ liệu hội thoại (27)
      • 3.1.1 Thu thập dữ liệu hội thoại (27)
      • 3.1.2 Làm sạch dữ liệu (27)
    • 3.2. Mô hình hội thoại cho tiếng Việt (33)
  • CHƯƠNG 4: HIỆN THỰC VÀ KẾT QUẢ (0)
    • 4.1 Dữ liệu và công cụ thực nghiệm (34)
      • 4.1.1. Dữ liệu (34)
      • 4.1.2. Công cụ thực nghiệm (34)
    • 4.2 Cài đặt mô hình (35)
    • 4.3 Tiêu chí đánh giá (36)
    • 4.4 Kết quả thực nghiệm (38)
  • Kết luận (41)
  • TÀI LIỆU THAM KHẢO (0)

Nội dung

GIỚI THIỆU

Giới thiệu đề tài

Bài toán xây dựng hệ thống hội thoại hay hệ thống trả lời tự động là một bài toán khó thuộc lĩnh vực xử lý ngôn ngữ tự nhiên Bởi vì tính nhập nhằng, đa nghĩa, đa ngữ cảnh của ngôn ngữ tự nhiên Bài toán đặt ra nhiều thách thức để phát hiện ra được câu trả lời phù hợp nhất, thông tin hữu ích nhất

Hệ thống đối thoại (dialogue system), còn được gọi là các tác nhân hội thoại tương tác, trợ lý ảo, hay chatbot, được ứng dụng rộng rãi từ các dịch vụ hỗ trợ kỹ thuật tới các công cụ học ngôn ngữ và giải trí Các hệ thống đối thoại có thể được chia thành các hệ thống hướng mục tiêu trên một miền ứng dụng, ví dụ như các dịch vụ hỗ trợ kỹ thuật, tư vấn bán hàng, và các hệ thống không có định hướng mục tiêu, ví dụ như các công cụ học ngôn ngữ hoặc các nhân vật trò chơi máy tính

Trên thế giới, các nhóm nghiên cứu, các doanh nghiệp đã và đang cố gắng tạo ra các dịch vụ trợ lý ảo nhằm thay đổi cách khách hàng tương tác, nhằm trợ giúp người dùng, khách hàng của mình có những trải nghiệm tốt nhất về sản phẩm và các dịch vụ cung cấp Nổi bật nhất trong đó phải kể đến các nền tảng cho phép tạo ra các AI chatbot như Xenioo, Aivo, Botsify, Chatfuel hay

Microsoft Bot Framework cho phép các nhà phát triển tạo ra các chatbot trên nền tảng Web, hay Facebook cũng có Messenger Platform cho phép các nhà phát triển tích hợp vào Messenger Ở trong nước, mới đây vào cuối tháng 12 năm 2018, tại sự kiện Zalo AI Summit diễn ra tại TP Hồ Chí Minh, Ki-Ki, trợ lý ảo đầu tiên của người Việt do Zalo thuộc VNG phát triển, đã cho thấy những tín hiệu lạc quan của ngành AI Việt Nam Hiện trợ lý ảo Ki-Ki có thể thực hiện các tác vụ quen thuộc như mở nhạc, đọc tin, gửi tin nhắn, tra cứu thời tiết, tra cứu kiến thức thông qua ra lệnh bằng giọng nói tiếng Việt mà không cần thao tác chạm, gõ với điện thoại Đặc biệt, Ki-Ki còn có khả năng hiểu được giọng nói của ba miền Bắc, Trung, Nam

Hình 1.1: Trợ lý ảo Ki-Ki tại Zalo AI Summit 2018 [zingnews]

Hiện nay, rất nhiều công ty, cá nhân vẫn đang cố gắng cải thiện và phát triển các trợ lý ảo để có thể hiểu được ngôn ngữ tự nhiên của con người nhiều hơn nữa, có thể đối thoại và tương tác được với con người một cách tự nhiên Các phương pháp tiếp cận trước đây thường giới hạn trong một nhiệm vụ nhất định, một mục tiêu rất cụ thể, ví dụ như đặt vé trực tuyến, hệ thống hỗ trợ kỹ thuật (Technical Customer Support) hay tư vấn và hỗ trợ mua hàng (Shopping Assistants), … Các hệ thống này yêu cầu phải thiết kế được các bộ luật học bằng tay, mất nhiều công sức mà hiệu quả đạt được không cao, khó mở rộng mô hình Việc sử dụng kỹ thuật xử lý ngôn ngữ tự nhiên (Natural Language Processing – NLP) và các kỹ thuật học sâu (Deep Learning – DL) để làm tăng chất lượng và hiệu quả của hệ thống Tuy nhiên từ lý thuyết đến thực tế là cả một chặng đường dài

Như vậy, hệ thống trả lời tự động hay hệ thống hội thoại có những nhiệm vụ và vai trò quan trọng, là cơ sở để xây dựng các trợ lý ảo để có thể trợ giúp được con người rất nhiều lĩnh vực: y tế, giáo dục, thương mại điện tử, …, xứng đáng để nghiên cứu và đưa ra các sản phẩm phù hợp với thực tế Với sự ra đời của mô hình Sequence-to-sequence (seq2seq) vào năm 2014 được giới thiệu bởi Google [3], nhiều hệ thống huấn luyện đã sử dụng các mạng nơ-ron để sinh ra các câu trả lời mới khi đưa vào mạng một câu hỏi hoặc một thông điệp Lợi thế của phương pháp này là mô hình có thể được huấn luyện end-to-end trên tập dữ liệu có sẵn, và yêu cầu ít hơn các luật bằng tay Đây là một hướng tiếp cận có nhiều triển vọng trong việc xây dựng một hệ thống đối thoại Do đó, luận văn sẽ nghiên cứu dựa trên phương pháp Sequence-to-sequence và kết hợp với kỹ thuật Attention, để xây dựng mô hình đối thoại cho tiếng Việt, từ đó có thể áp dụng được vào các bài toán thực tế.

Mục tiêu của đề tài

Với cơ sở thực tiễn trên, mục tiêu của luận văn là nghiên cứu các mô hình có thể phát sinh văn bản (Generative-based) sử dụng các mạng học sâu Deep Neural Networks, dựa trên phương pháp Sequence-to-sequence và Attention

Từ đó xây dựng một mô hình hội thoại Dialog thử nghiệm đơn giản cho tiếng Việt sử dụng kho dữ liệu phụ đề nguồn mở OpenSubtitles 2018.

Ý nghĩa khoa học của đề tài

Bài toán xây dựng hệ thống hội thoại hay chatbot đã được nghiên cứu và áp dụng nhiều cho tiếng Anh bởi tính phổ biến của nó và kho dữ liệu phong phú Trong những năm gần đây bắt đầu có một số nghiên cứu để xây dựng hệ thống hội thoại cho tiếng Việt, điển hình là nghiên cứu của tác giả Nhữ Bảo Vũ [10] Tuy nhiên, các nghiên cứu còn nhiều hạn chế và gặp rất nhiều khó khăn như thời gian huấn luyện rất lâu, chưa tận dụng được khả năng của GPU, hay chưa

15 trả lời được những câu hỏi khó, thường xuyên trả lời câu “tôi không biết” Thực tế hiện nay, kho dữ liệu hội thoại cho tiếng Việt còn rất hạn chế

Kết hợp phương pháp Sequence-to-sequence và Attention, tác giả mong muốn tạo ra một hệ thống hội thoại cho tiếng Việt hiệu quả hơn Từ đó, có khả năng áp dụng vào các bài toán thực tế, ví dụ như các hệ thống hỗ trợ hỏi đáp về y khoa, tư vấn mua hàng, hỗ trợ giải đáp kỹ thuật và các dịch vụ khác.

Phạm vi của đề tài

Trong khuôn khổ của luận văn, tác giả giới hạn phương pháp nghiên cứu hội thoại với máy tính trong ngôn ngữ tự nhiên bằng văn bản trong tiếng Việt theo hướng học sâu sử dụng mô hình Sequence-to-sequence kết hợp kỹ thuật Attention Dữ liệu huấn luyện và kiểm tra cho mô hình được lấy từ kho dữ liệu phụ đề nguồn mở OpenSubtitles 2018 Đầu vào hệ thống là văn bản tiếng Việt chuẩn unicode có thể là câu hỏi hoặc câu tường thuật trực tiếp, đầu ra là câu trả lời tương ứng.

Những công trình nghiên cứu liên quan

Hệ thống trả lời tự động đã được các nhà nghiên cứu quan tâm từ rất lâu, bao gồm các trường đại học, các viện nghiên cứu và các doanh nghiệp Việc nghiên cứu về hệ thống trả lời tự động có ý nghĩa trong khoa học và thực tế

Tình hình nghiên cứu ngoài nước:

Công trình gần nhất 2019 của một tác giả với nickname reppy4620 hay ilikeniku1 trên Twitter - một sinh viên ở Nhật, là một hệ thống hội thoại cho tiếng Nhật sử dụng mô hình Transformer với BERT làm Encoder kết hợp với phương pháp Attention Kiến trúc hệ thống gồm:

• Encoder: BERT cl-tohoku/bert-base-japanese-whole-word-masking

• Nguồn bài báo: https://qiita.com/reppy4620/items/e4305f22cd8f6962e00a

• Blog cá nhân: https://jweb.asia/26-it/ai/51-bert-chatbot.html

Theo bài viết, dữ liệu được tác giả thu thập từ Twitter có nhiều hạn chế nên hệ thống không có câu trả lời thích hợp (hình 1.2) và hệ thống vẫn còn trả lời

• Luôn trả lời “Chào buổi sáng” cho tất cả các câu tiếng Anh

• Nhiều câu trả lời “Hả?”

Hình 1.2: Kết quả của hệ thống hội thoại tiếng Nhật [reppy4620]

Hình 1.3: Bản dịch tiếng Việt của kết quả của hệ thống hội thoại tiếng Nhật

Một công trình khác cũng vào 2019 của nhóm tác giả Kenji Imamura và Eiichiro Sumita [14] là một hệ thống dịch máy để dịch tiếng Anh sang tiếng Đức Hệ thống cũng sử dụng mô hình Transformer với 𝐵𝐸𝑅𝑇𝐵𝑎𝑠𝑒,𝑈𝑛𝑐𝑎𝑠𝑒𝑑làm Encoder và có hai giai đoạn gồm: huấn luyện Decoder và fine-tuning toàn bộ mô hình Dữ liệu được sử dụng để huấn luyện mô hình là WMT-2014 En-De Corpus của nhóm nghiên cứu NLP tại trường đại học Stanford Hệ thống cho kết quả khá tốt mặc dù điểm BLEU cực kỳ thấp

Tình hình nghiên cứu trong nước

Công trình gần nhất với lĩnh vực của đề tài này cũng dựa trên mô hình Sequence-to-sequence, tác giả Nhữ Bảo Vũ [10] đã xây dựng “mô hình đối thoại cho tiếng Việt trên miền mở dựa vào phương pháp chuỗi học liên tiếp” vào 2016 Dữ liệu được sử dụng để huấn luyện mô hình là OpenSubtitles 2016 Tuy nhiên, công trình này còn nhiều hạn chế và gặp rất nhiều khó khăn như thời gian huấn luyện rất lâu, chưa tận dụng được khả năng của GPU, chưa kết hợp kỹ thuật Attention, hay chưa trả lời được những câu hỏi khó, thường xuyên trả lời câu “tôi không biết” Tác giả đã sử dụng kiến trúc Recurrent Neural Networks (RNNs) Điểm yếu của phương pháp này là sự phụ thuộc xa giữa các từ trong câu và tốc độ huấn luyện chậm do phải xử lý dữ liệu đầu vào một cách tuần tự, mặc dù đã sử dụng phiên bản Long-short Term Memory (LSTM) nhưng việc cải thiện cũng không đáng kể

Công trình gần đây nhất vào năm 2019 của một tác giả với nickname là mailong25 tại doanh nghiệp hoặc nhóm Solve AGI Tác giả đã xây dựng một hệ thống hỏi đáp tiếng Việt với mô hình BERT (hình 1.3)

Hình 1.4: Kiến trúc hỏi đáp với BERT [github.com] Ý tưởng của hệ thống là tác giả phát triển thêm một hệ thống phụ hỗ trợ tìm tài liệu, đoạn văn bản liên quan với câu hỏi đầu vào bằng cách sử dụng Google Search API Tiếp theo, hệ thống xếp hạng các văn bản dựa vào độ liên quan các từ khóa trích theo n-gram (bigram, trigram, fourgram…) Sau đó sử dụng lớp sẵn có BertForQuestionAnswering của thư viện PyTorch với mô hình học sẵn BERT để trích xuất câu trả lời trong các văn bản Theo tác giả mailong25 thì hệ thống vẫn còn hạn chế về số lượng dữ liệu và chỉ hỗ trợ các câu hỏi liên quan đến con người bởi vì phụ thuộc độ tốt của hệ thống phụ

CƠ SỞ LÝ THUYẾT

Kiến trúc Transformer

Thời gian gần đây, hầu hết các tác vụ xử lý ngôn ngữ tự nhiên, đặc biệt là dịch máy (Machine Translation) thường sử dụng kiến trúc Recurrent Neural Networks (RNNs) Điểm yếu của phương pháp này là rất khó bắt được sự phụ thuộc xa giữa các từ trong câu và tốc độ huấn luyện chậm do phải xử lý dữ liệu đầu vào một cách tuần tự, mặc dù đã sử dụng phiên bản Truncated

Backpropagation Through Time, Long-short Term Memory (LSTM) hay Gated Recurrent Unit (GRU) nhưng việc cải thiện cũng không đáng kể Transformers được sinh ra để giải quyết hai vấn đề trên và các biến thể của nó như: BERT, GPT-2 tạo ra state-of-the-art mới cho các tác vụ liên quan đến xử lý ngôn ngữ tự nhiên

Transformers (Attention Is All You Need) [12] được Google công bố vào năm 2018 (hình 2.1)

Hình 2.1: Mô hình Transformer [viblo.asia forum]

Kiến trúc Transformers cũng sử dụng hai thành phần Encoder và Decoder khá giống RNNs Điểm khác biệt là dữ liệu đầu vào được đẩy vào cùng một lúc và sẽ không còn khái niệm timestep trong Transformers nữa Vậy cơ chế nào đã thay thế cho sự hồi quy “recurrent” của RNNs? Đó chính là Self-Attention Đó

19 cũng là lý do tác giả đặt tên bài báo là “Attention Is All You Need” (Đặt theo bộ phim “Love is all you need”)

Máy tính của chúng ta không thể “hiểu” hay “học” được từ các dữ liệu thô như hình ảnh, văn bản, âm thanh, video, Do đó cần đến quá trình mã hóa thông tin sang dạng số để máy tính có thể “hiểu” Sau đó từ kết quả đầu ra dạng số, cần giải mã để có thông tin mong muốn Đó chính là hai quá trình Encoder và Decoder

Encoder: Là giai đoạn chuyển hay mã hóa thông tin chuỗi đầu vào thành một vector ngữ cảnh (context vector, còn gọi là “thought” vector hay

“meaning” vector) là một chuỗi các số thực biểu diễn nghĩa của câu, để máy tính có thể học được Về mặt ý nghĩa, context vector cần đảm bảo chứa đủ các thông tin ngữ cảnh (chủ ngữ, vị ngữ, tính từ, trạng thái, tính chất) của chuỗi đầu vào Đối với mô hình mạng nơ-ron (Neural Network), Encoder là các lớp ẩn (hidden layers) Đối với mô hình CNN, encoder là chuỗi các layers

Convolutional + Maxpooling Đối với mô hình RNN, Encoder chính là các layers Embedding (Input Embedding) và Recurrent Neural Networks (mạng nơ-ron hồi quy)

Hình 2.2: Input Embedding [viblo.asia forum] Đối với mô hình Transformer, Encoder là tổng hợp sáu layers được xếp chồng lên nhau Mỗi layer bao gồm hai layer con (sub-layer) trong nó Sub- layer đầu tiên là Multi-head Self-Attention (trong mục 2.3.2) Layer thứ 2 đơn thuần chỉ là các fully-connected feed-forward layer Một lưu ý là chúng ta sẽ sử dụng một kết nối Residual ở mỗi sub-layer ngay sau lớp chuẩn hóa

(normalization layer) Kiến trúc này có ý tưởng tương tự như mạng ResNet trong CNN Đầu ra của mỗi sub-layer là 𝐿𝑎𝑦𝑒𝑟𝑁𝑜𝑟𝑚(𝑥 + 𝑆𝑢𝑏𝐿𝑎𝑦𝑒𝑟(𝑥)) có số chiều là 512 theo như bài báo [12]

Decoder: Đầu ra của Encoder chính là đầu vào của các Decoder Công đoạn này nhằm mục đích sinh ra chuỗi đầu ra tương ứng

Decoder trong mô hình Transformer cũng là tổng hợp xếp chồng của sáu layers Kiến trúc tương tự như các sub-layer ở Encoder ngoại trừ thêm một sub- layer thể hiện phân phối Attention ở vị trí đầu tiên Layer này không gì khác so với Multi-head Self-Attention layer ngoại trừ được điều chỉnh để không đưa các từ trong tương lai vào Attention Tại bước thứ 𝑖 của Decoder chúng ta chỉ biết được các từ ở vị trí nhỏ hơn 𝑖 nên việc điều chỉnh đảm bảo Attention chỉ áp dụng cho những từ nhỏ hơn vị trí thứ 𝑖 Cơ chế Residual cũng được áp dụng tương tự như trong Encoder

Lưu ý là chúng ta luôn có một bước cộng thêm Positional Encoding vào các đầu vào của Encoder và Eecoder nhằm đưa thêm yếu tố thời gian vào mô hình làm tăng độ chuẩn xác Đây chỉ đơn thuần là phép cộng vector mã hóa vị trí của từ trong câu với vector biểu diễn từ Chúng ta có thể mã hóa dưới dạng [0, 1] vector vị trí hoặc sử dụng hàm 𝑠𝑖𝑛, 𝑐𝑜𝑠 như trong bài báo [12]

Positional Encoding: Word embeddings phần nào giúp biểu diễn ngữ nghĩa của một từ, tuy nhiên cùng một từ ở vị trí khác nhau của câu có thể mang ý nghĩa khác nhau Đó là lý do Transformers có thêm một phần Positional

Encoding để chèn thêm thông tin về vị trí của một từ

Trong đó 𝑝𝑜𝑠 là vị trí của từ trong câu, PE là giá trị phần tử thứ 𝑖 trong embeddings có độ dài 𝑑 𝑚𝑜𝑑𝑒𝑙 Sau đó, PE vector được cộng với Embedding vector:

Hình 2.3: Positional Encoding [viblo.asia forum]

Residual: Trong mô hình Transformer ở trên (hình 2.1), mỗi sub-layer đều là một khối còn lại (Residual block) Cũng giống như Residual blocks trong Computer Vision, skip connections trong Transformers cho phép thông tin đi qua sub-layer trực tiếp Thông tin X được cộng với Attention Z của nó và thực hiện Layer Normalization

Attention

2.2.1 Scale Dot Product Attention Đây chính là một cơ chế Self-Attention (hình 2.4) giúp Transformers “hiểu” được sự liên quan giữa các từ trong một câu Cụ thể là mỗi từ có thể điều chỉnh trọng số của nó cho các từ khác trong câu sao cho từ ở vị trí càng gần nó nhất thì trọng số càng lớn và càng xa thì càng nhỏ dần

Hình 2.4: Self-Attention [phamdinhkhanh's blog]

Trong khung màu vàng là ba ma trận 𝑾 𝒒 , 𝑾 𝒌 , 𝑾 𝒗 chính là những ma trận trọng số mà mô hình cần huấn luyện (train) Sau khi nhân các ma trận này với ma trận đầu vào X ta thu được ba ma trận Q, K, V (tương ứng trong hình 2.4 là ba ma trận Query, Key và Value)

Ma trận Query và Key có tác dụng tính toán ra phân phối score cho các cặp từ (giải thích ở hình 2.4) hay độ liên quan giữa các từ với nhau Theo đó, hai từ liên quan đến nhau sẽ có score lớn và ngược lại Ma trận Value sẽ dựa trên phân phối score để tính ra véc tơ phân phối xác suất đầu ra

Như vậy mỗi một từ sẽ được gán bởi ba vector Query, Key và Value ký hiệu Q, K, V

Hình 2.5: Các vector query, key và value tương ứng với từng từ

[phamdinhkhanh's blog] Để tính score cho mỗi cặp từ (𝑤 𝑖 , 𝑤 𝑗 ), sẽ thực hiện nhân tích chập (dot- product) giữa query với key, phép tính này nhằm tìm ra mối liên hệ trọng số của các cặp từ Tuy nhiên điểm số sau cùng là điểm số chưa được chuẩn hóa

Do đó phải chuẩn hóa bằng một hàm softmax để đưa về một phân phối xác xuất mà độ lớn sẽ đại diện cho mức độ attention của từ query tới từ key Trọng số càng lớn càng chứng tỏ từ 𝑤 𝑖 trả về một sự chú ý lớn hơn đối với từ 𝑤 𝑗 Sau đó, hàm softmax sẽ nhân với các vector giá trị của từ hay còn gọi là value vector để tìm ra vector đại diện (attention vetor) sau khi đã học trên toàn bộ câu đầu vào

Hình 2.6: Quá trình tính toán trọng số attention và attention vector cho từ I trong câu I study at school [phamdinhkhanh's blog]

Hoàn toàn tương tự khi di chuyển sang các từ khác trong câu, quá trình tính toán cũng thu được kết quả như minh họa ở hình 2.7

Hình 2.7: Kết quả tính attention vector cho toàn bộ các từ trong câu

Như vậy từ các triển khai trên các vector dòng, chúng ta đã hình dung ra biến đổi cho ma trận Đầu vào để tính attention sẽ bao gồm ma trận Q (mỗi dòng của nó là một vector query đại diện cho các từ đầu vào), ma trận K (tương tự như ma trận Q, mỗi dòng là vector key đại diện cho các từ đầu vào) Hai ma

23 trận Q, K được sử dụng để tính attention mà các từ trong câu trả về cho một từ cụ thể trong câu Attention vector sẽ được tính dựa trên trung bình có trọng số của các vector value trong ma trận V với trọng số attention được tính từ Q, K

Trong thực tế, hàm attention được tính toán trên toàn bộ tập các câu truy vấn một cách đồng thời và được đóng gói thông qua ma trận Q Các khóa và giá trị (keys và values) cũng được đóng gói cùng nhau thông qua ma trận K và

V Phương trình Attention như sau:

Việc chia cho 𝑑 𝑘 là số chiều của vector key nhằm mục đích tránh tràn luồng nếu số mũ là quá lớn

Như vậy sau quá trình Scale dot production chúng ta sẽ thu được một ma trận Attention Các tham số mà mô hình cần tinh chỉnh (fine tune) chính là các ma trận 𝑾 𝒒 , 𝑾 𝒌 , 𝑾 𝒗 Mỗi quá trình như vậy được gọi là một head của attention Khi lặp lại quá trình này nhiều lần (trong luận văn là ba heads) sẽ thu được quá trình Multi-head Attention như biến đổi bên dưới đây (hình 2.8):

Hình 2.8: Sơ đồ cấu trúc Multi-head Attention [phamdinhkhanh's blog]

Mỗi một nhánh của đầu vào là một đầu của attention Ở nhánh này thực hiện Scale dot production và đầu ra là các ma trận attention

Sau khi thu được ba ma trận attention ở đầu ra, các ma trận này sẽ được ghép theo các cột để thu được ma trận tổng hợp multi-head matrix có chiều cao trùng với chiều cao của ma trận đầu vào

𝑀𝑢𝑙𝑡𝑖𝐻𝑒𝑎𝑑(𝑄, 𝐾, 𝑉) = 𝑐𝑜𝑛𝑐𝑎𝑡𝑒𝑛𝑎𝑡𝑒(ℎ𝑒𝑎𝑑 1 , ℎ𝑒𝑎𝑑 2 , … , ℎ𝑒𝑎𝑑 ℎ ) 𝑊 0 Ở đây ℎ𝑒𝑎𝑑 𝑖 = 𝐴𝑡𝑡𝑒𝑛𝑡𝑖𝑜𝑛(𝑄 𝑖 , 𝐾 𝑖 , 𝑉 𝑖 ) Để trả về đầu ra có cùng kích thước với ma trận đầu vào chỉ cần nhân với ma trận 𝑊 0 chiều rộng bằng với chiều rộng của ma trận đầu vào

Giả sử chúng ta muốn Transformers dịch một văn bản tiếng Anh sang tiếng Pháp, thì công việc của Decoder là giải mã thông tin từ Encoder và sinh ra từng từ tiếng Pháp dựa trên những từ trước đó Vậy nên, nếu ta sử dụng Multi-head attention trên cả câu như ở Encoder, thì Decoder sẽ “thấy” luôn từ tiếp theo mà nó cần dịch Để ngăn điều đó, khi Decoder dịch đến từ thứ 𝑖, phần sau của câu tiếng Pháp sẽ bị che lại (masked) và Decoder chỉ được phép “nhìn” thấy phần nó đã dịch trước đó (hình 2.9)

Hình 2.9: Masked Multi-head Attention [phamdinhkhanh's blog].

Mô hình BERT

BERT là viết tắt của Pre-training of Deep Bidirectional Transformers for Language Understanding là mô hình biểu diễn từ theo hai chiều ứng dụng kỹ thuật Transformer, được giới thiệu ngày 2/11/2018, bởi nhóm Research

Scientists của Google AI, một nghiên cứu mới mang tính đột phá trong lĩnh vực xử lý ngôn ngữ tự nhiên

BERT được thiết kế để học sẵn các biểu diễn từ (pre-train word embedding) theo ngữ cảnh hai chiều trái và phải của từ Cơ chế Attention của Transformer sẽ truyền toàn bộ các từ trong câu văn đồng thời vào mô hình một lúc mà không cần quan tâm đến chiều của câu Do đó Transformer được xem như là huấn luyện hai chiều (bidirectional) mặc dù trên thực tế chính xác hơn chúng ta có thể nói rằng đó là huấn luyện không chiều (non-directional) Đặc điểm này cho phép mô hình học được bối cảnh của từ dựa trên toàn bộ các từ xung quanh nó bao gồm cả từ bên trái và từ bên phải

2.3.1 Các kiến trúc của mô hình BERT

Hiện tại có nhiều phiên bản khác nhau của mô hình BERT Các phiên bản đều dựa trên việc thay đổi kiến trúc của Transformer tập trung ở ba tham số:

• 𝐿: Số lượng các block sub-layers trong transformer

• 𝐻: Kích thước của embedding véc tơ (kích thước tầng ẩn hidden layer)

• 𝐴: Số lượng head trong multi-head layer, mỗi một head sẽ thực hiện một self-attention

Tên gọi của hai kiến trúc mẫu bao gồm:

• 𝐵𝐸𝑅𝑇𝐿𝐴𝑅𝐺𝐸,𝐶𝐴𝑆𝐸𝐷(𝐿 = 24, 𝐻 = 1024, 𝐴 = 16, 340 𝑡𝑟𝑖ệ𝑢 𝑡ℎ𝑎𝑚 𝑠ố) Như vậy ở kiến trúc 𝐵𝐸𝑅𝑇𝐿𝐴𝑅𝐺𝐸,𝐶𝐴𝑆𝐸𝐷 chúng ta tăng gấp đôi số layer, tăng kích thước hidden size của embedding véc tơ gấp 1.33 lần và tăng số lượng head trong multi-head layer gấp 1.33 lần

Ngoài ra còn nhiều kiến trúc khác như 𝐵𝐸𝑅𝑇𝐵𝐴𝑆𝐸,𝑈𝑁𝐶𝐴𝑆𝐸𝐷,

Trong luận văn này tác giả sử dụng M-BERT (Multilingual BERT) một phiên bản đa ngôn ngữ của BERTcó khả năng làm việc với 104 ngôn ngữ trong đó có tiếng Việt

2.3.2 Fine-tuning mô hình BERT

BERT có một điểm đặc biệt mà các mô hình embedding trước đây chưa từng có đó là kết quả huấn luyện có thể fine-tuning được bằng cách thêm vào kiến trúc mô hình một output layer để tùy biến theo tác vụ huấn luyện (hình 2.10)

Hình 2.10: Toàn bộ tiến trình pre-training và fine-tuning của BERT [13]

Một kiến trúc tương tự được sử dụng cho cả pretrain-model và fine-tuning model Có thể sử dụng cùng một tham số pretrain để khởi tạo mô hình cho các tác vụ down stream khác nhau Trong suốt quá trình fine-tuning thì toàn bộ các tham số của layers học chuyển giao sẽ được fine-tune

Tiến trình áp dụng fine-tuning sẽ như sau:

Bước 1: Nhúng (embedding) toàn bộ các token của cặp câu bằng các véc tơ nhúng từ pretrain model Các token embedding bao gồm cả hai token là [CLS] và [SEP] để đánh dấu vị trí bắt đầu của câu hỏi và vị trí ngăn cách giữa hai câu Hai token này sẽ được dự báo ở đầu ra để xác định các phần Start/End Span của câu đầu ra

Bước 2: Các embedding véc tơ sau đó sẽ được truyền vào kiến trúc Multi- head Attention với nhiều block code (thường là 6, 12 hoặc 24 blocks tùy theo kiến trúc BERT) sẽ thu được một véc tơ đầu ra ở Encoder

Bước 3: Để dự báo phân phối xác suất cho từng vị trí từ ở Decoder, ở mỗi time step đầu vào của Decoder là véc tơ đầu ra của Encoder và véc tơ Input

Embedding của Decoder để tính Encoder-Decoder Attention (mục 2.3.4) Sau đó chiếu qua linear layer và softmax để thu được phân phối xác suất cho đầu ra tương ứng ở time step 𝑡

Bước 4: Kết quả đầu ra của transformer sẽ cố định kết quả của câu Question sao cho trùng với câu Question ở đầu vào Các vị trí còn lại sẽ là thành phần mở rộng Start/End Span tương ứng với câu trả lời tìm được từ câu đầu vào Quá trình huấn luyện sẽ fine-tune lại toàn bộ các tham số của mô hình BERT đã cắt bỏ linear layer cuối cùng và huấn luyện lại từ đầu các tham số của linear layer mà được thêm vào mô hình BERT để phù hợp với bài toán cụ thể

PHƯƠNG PHÁP ĐỀ XUẤT

Xây dựng tập dữ liệu hội thoại

3.1.1 Thu thập dữ liệu hội thoại

Luận văn sử dụng bộ dữ liệu phụ đề phim tiếng Việt được lấy từ nguồn mở

OpenSubtitles 2018 Đây là phiên bản mới đã được bổ sung dữ liệu cho các phim mới, được căn chỉnh các câu hội thoại và kiểm tra ngôn ngữ tốt hơn, bao gồm:

• Tác giả: P Lison and J Tiedemann, 2016

• Trang chủ: https://www.opensubtitles.org/vi

• Link download: http://opus.nlpl.eu/download.php?f=OpenSubtitles/v2018/mono/OpenSu btitles.raw.vi.gz

Sau khi tải và giải nén, ta có một tập tin vi.txt chứa 5.126.239 câu văn bản tiếng Việt là nội dung phụ đề của nhiều bộ phim nối tiếp nhau như: Thành phố mất tích, Những kẻ khốn cùng, Ở nhà một mình 3… (hình 3.1)

Hình 3.1: Tập tin vi.txt

Do tập dữ liệu chứa nội dung phụ đề của nhiều bộ phim liên tiếp nhau nên các câu văn bản được đặt liên tiếp và không phân tách thành từng cặp câu hội thoại, đối đáp Ngoài ra, dữ liệu còn chứa nhiều câu dư thừa như “Dịch phụ đề: Minh Hà”, lỗi chính tả, lỗi font và các ký tự đặc biệt Vì vậy, công đoạn làm sạch dữ liệu được luận văn thực hiện qua các bước sau:

Bước 1: Đưa tập tin vi.txt.gz tải được lên một thư mục “data” (hoặc tên bất kỳ) trên Google Drive

Tạo một tập tin Google Colaboratory (ví dụ: main.ipynb) trong cùng thư mục “data” để viết code thực hiện việc làm sạch dữ liệu

Bước 2: Tiến hành mount đường dẫn đến thư mục “data” from google.colab import drive import os drive.mount('/content/gdrive') root_path = "/content/gdrive/My Drive/data" os.chdir(root_path)

Bước 3: Giải nén bằng lệnh gunzip, tạo thư mục “lines” bằng lệnh mkdir và phân tách (split) tập tin đã giải nén vi.txt thành từng tập tin nhỏ vào thư mục

“lines” Mỗi tập tin khoảng 100.000 dòng và có tên theo mẫu là “lines-…”

!split -a 3 -l 100000 vi.txt lines/lines-

Hình 3.2: Các tập tin được phân tách từ tập tin vi.txt

Bước 4: Tạo một bucket (ví dụ: storage_1870582) mới trên Google Cloud

Storage để chứa dữ liệu

Bước 5: Xác thực (authenticate) với Google và tải (upload) các tập tin “lines-

…” được lên Google Cloud Storage với đường dẫn là gs://bucket_name/foler_name from google.colab import auth auth.authenticate_user()

!gsutil -m cp -r lines gs://storage_1870582/data

Bước 6: Chạy đoạn code mã nguồn mở như theo hướng dẫn của PolyAI để đọc các tập tin văn bản khi nãy để tạo các đoạn hội thoại

!pip install apache-beam[gcp] import datetime now = datetime.datetime.now()

DATADIR = "gs://storage_1870582/data/date" + now.strftime("%Y%m%d") TEMPDIR = DATADIR + "/temp"

!python "/content/gdrive/My Drive/data/create_data.py" \

sentence_files gs://storage_1870582/data/lines/lines-* \

Trong đoạn code trên, cần cài đặt thư viện apache-beam[gcp] Sau đó, chạy tập tin create_data.py (được tải từ PolyAI repository) với các tham số được truyền vào tương ứng Kết quả được lưu trong thư mục storage_1870582/data/date20200806 trên Google Cloud Storage dưới dạng các tập tin json (hình 3.3)

Hình 3.3: Các tập tin json cho tập huấn luyện và kiểm tra

Thư mục kết quả bao gồm 1.000 tập tin để huấn luyện có dạng “train- xxxxx-of-01000.json”, 1000 tập tin để kiểm tra có dạng “test-xxxxx-of-

01000.json” Mỗi tập tin json có dạng như ở hình 3.4:

Hình 3.4: Nội dung 1 tập tin train.json đã làm “đẹp” (beautify/format)

Từ kết quả trên, mỗi tập tin chứa nội dung các đoạn hội thoại trên từng dòng Một đoạn hội thoại bao gồm:

• Câu ngữ cảnh (context): là câu văn bản gần nhất trong ngữ cảnh của cuộc hội thoại

• Câu đáp (response): là câu văn bản trả lời trực tiếp cho câu ngữ cảnh gần nhất ở trên

• Một số ngữ cảnh phụ (extra context): context/0, context/1, …là các câu văn bản ngữ cảnh trước đó Chúng được sắp xếp theo thứ tự ngược (context/0 liền trước context, context/1 liền trước context/0…)

'context/1': "Hello, how are you?",

'context/0': "I am fine And you?",

'context': "Great What do you think of the weather?",

'response': "It doesn't feel like February."

Bước 7: Bước này sẽ giải mã dữ liệu tiếng Việt bị mã hóa (hình 3.4) Lặp qua các tập tin trong thư mục train, mở tập tin và đọc nội dung từng dòng trong tập tin Trong luận văn này, tác giả chỉ sử dụng cặp câu văn bản context và response import json from glob import glob for file_name in glob("dataset/train/*.json"):

32 for line in open(file_name): example = json.loads(line)

Như vậy mỗi dòng trong một tập tin json sẽ cho ra một cặp đối thoại context-response Luận văn đồng thời áp dụng một số thao tác tiền xử lý cho từng cặp bao gồm:

• Loại bỏ các ký tự đặc biệt không phải chữ hoặc chữ số (bắt đầu, kết thúc và bên trong một câu tiếng Việt), ví dụ: - Xin chào, các bạn!,

• Xóa bỏ các bình luận, chú thích ý nghĩa các từ, thuật ngữ trong câu, ví dụ: Chatbot (chương trình tự động trả lời),

• Biến đổi bảng mã html về dạng câu có ý nghĩa, ví dụ: Cho ch#250;ng t#244;i xem c#225;i c#242;n l#7841;i l#224; g#236; n#224;o

• Loại bỏ các ký tự lạ ({\3cHFF1000}), đặc biệt ([-

• Xóa bỏ các ký tự lặp, ký tự phân tách không có ý nghĩa, ví dụ: phải khônggggg,

• Lược bỏ các cặp văn bản chứa tiếng Anh lẫn trong tiếng Việt

• Loại bỏ các khoảng trắng dư thừa giữa các từ

• Loại bỏ các cặp câu không có ý nghĩa, ví dụ: phụ đề dịch bởi Unknow,

• Loại bỏ cỏc ký tự đặc biệt khỏc '♪', '¿', 'Ơ', 'â', 'Đ', 'Ê', 'º', 'Â', '±', 'ơ', 'ò', 'à', 'ặ', 'Ă', '°', 'ạ', 'ả', '³', 'đ', 'δ', '✩', '√',…

• Dùng token [SEP] để ngăn cách giữa câu ngữ cảnh context và câu đáp response, được dùng để tách tập tin trong bước tiếp theo

Sau khi hoàn tất tác vụ trên chúng ta được hai tập tin train.txt và test.txt

Bước 8: Tiếp theo, tách tập tin train.txt dựa vào token [SEP] ở từng dòng, thành 2 tập tin train.input.txt chứa các câu ngữ cảnh và train.target.txt chứa các câu đáp cho bước huấn luyện Tương tự, từ tập tin test.txt tách được hai tập tin test.input.txt chứa các câu ngữ cảnh và test.target.txt chứa các câu đáp cho bước kiểm tra

Bước 9: Bước tiếp theo là trích 20% dữ liệu trong tập huấn luyện để làm tập thẩm định (validation).

Mô hình hội thoại cho tiếng Việt

Để xây dựng hệ thống hội thoại cho tiếng Việt, hướng tiếp cận của đề tài là kế thừa và phát triển dựa trên công trình hệ thống dịch máy của nhóm tác giả

Kenji Imamura và Eiichiro Sumita [14] Hệ thống dịch máy từ tiếng Anh sang tiếng Đức này dựa trên kiến trúc Transformer sử dụng BERT làm Encoder Đề tài có một số thay đổi, bổ sung cho phù hợp với bài toán hội thoại trong tiếng Việt, cụ thể là:

• Tìm hiểu mã nguồn và thay đổi mô hình 𝐵𝐸𝑅𝑇𝐵𝐴𝑆𝐸,𝑈𝑁𝐶𝐴𝑆𝐸𝐷 (ra mắt

18/10/2018) mà nhóm tác giả sử dụng thành mô hình

𝐵𝐸𝑅𝑇𝐵𝐴𝑆𝐸,𝑀𝑈𝐿𝑇𝐼𝐿𝐼𝑁𝐺𝑈𝐴𝐿 𝐶𝐴𝑆𝐸𝐷 (ra mắt 23/11/2018) hỗ trợ 104 ngôn ngữ trong đó có tiếng Việt Cả hai đều có L, Hv8, A, 110 triệu tham số

• Tìm hiểu và xử lý tập dữ liệu phụ đề phim của đề tài cho đúng format đầu vào của mô hình

• Thay đổi mã nguồn, các thông số để phù hợp với phần cứng, hệ điều hành và ngôn ngữ lập trình mà đề tài sử dụng

Kiến trúc mô hình hội thoại tiếng Việt được luận văn đề xuất như hình 3.5

Hình 3.5: Kiến trúc mô hình hội thoại tiếng Việt của luận văn.

HIỆN THỰC VÀ KẾT QUẢ

Dữ liệu và công cụ thực nghiệm

Chương 3 đã trình bày cách xây dựng tập dữ liệu hội thoại tiếng Việt cho đề tài từ kho dữ liệu OpenSubtitles 2018 Tập dữ liệu sẽ được chia làm ba tập riêng biệt là tập huấn luyện (training set), tập thẩm định (validation set) và tập kiểm thử (test set) Tập huấn luyện với mục đích tối ưu các thông số của mô hình Tập thẩm định (validation set) phục vụ giám sát mô hình trong quá trình huấn luyện Tập kiểm thử dùng để đánh giá kết quả của phương pháp sau quá trình huấn luyện Chi tiết các tập dữ liệu được mô tả trong bảng 4.1 dưới đây:

Bảng 4.1: Dữ liệu hội thoại tiếng Việt

Tập dữ liệu Tập tin Số câu/dòng

(training set) train.input.txt, train.target.txt 2.670.420 2.668.017

(test set) test.input.txt, test.target.txt 279.147 278.909

(validation set) val.input.txt, val.target.txt 667.605 667.004

Bộ dữ liệu 2 trong bảng 4.1 được làm sạch thêm từ bộ dữ liệu 1 sau khi thêm các từ vô nghĩa bad words vào danh sách cần lọc

Luận văn để thử nghiệm cho mô hình đề xuất: kết hợp sử dụng các thư viện mã nguồn mở và các công cụ do luận văn xây dựng để xử lý dữ liệu và huấn luyện mô hình, cụ thể:

• Python: Ngôn ngữ lập trình để xây dựng mô hình hội thoại tiếng Việt

• Google Colaboratory (Colab): là một sản phẩm từ Google Research, nó cho phép chạy code python thông qua trình duyệt, cung cấp tài nguyên máy tính từ CPU tốc độ cao và cả GPUs và cả TPUs, đặc biệt phù hợp với Data analysis, machine learning và giáo dục

• Google Cloud Storage (CS): là dịch vụ lưu trữ tập tin trực tuyến

• NLTK: Công cụ xử lý ngôn ngữ tự nhiên mã nguồn mở dành riêng cho

NLP và được tích hợp vào Python Nó đang ngày càng hoàn thiện và tích hợp các công cụ mới bởi hàng ngàn lập trình viên và cộng tác viên trên khắp thế giới NLTK bao gồm những thư viện hàm, các công cụ

35 phân tích, các corpus, wordnet, các stopwords, … giúp đơn giản hoá, tiết kiệm thời gian và công sức cho các lập trình viên

• Fairseq: Là dự án của Facebook chuyên hỗ trợ các nghiên cứu và dự án liên quan đến mô hình Sequence-to-sequence

• Transformers: là dự án của Hugging Face cung cấp các kiến trúc hiện đại nhất (BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet, T5,

CTRL ) cho hệ thống hiểu ngôn ngữ (Natural Language Understanding

- NLU) và hệ thống sinh ngôn ngữ (Natural Language Generation - NLG) với hơn hàng ngàn pretrained models trong 100+ ngôn ngữ.

Cài đặt mô hình

Dựa theo nghiên cứu [14], luận văn huấn luyện mô hình trên tập dữ liệu hội thoại đã chuẩn bị được chia thành hai giai đoạn:

Giai đoạn 1 (training stage 1): huấn luyện cho decoder, các tham số huấn luyện như sau:

• Pre-trained Bert Model: bert-base-multilingual-cased

Giai đoạn 2 (training stage 2): fine-tuning, toàn bộ mô hình bao gồm encoder được tune, các tham số huấn luyện như sau:

• Pre-trained Bert Model: bert-base-multilingual-cased

Encoder sử dụng BERT Tokenizer (dựa trên WordPiece) tách từ thành sub- words Decoder sử dụng SentencePiece hoặc có thể dùng tokenizer bất kỳ

Cấu hình hệ thống thực nghiệm: Huấn luyện các mô hình học sâu đòi hỏi phải có phần cứng máy tính rất mạnh, đặc biệt là GPU và RAM Máy tính cá nhân không đáp ứng được Do đó luận văn chủ yếu chạy các thực nghiệm trên

Google Colaboratory Pro có cấu hình phần cứng và môi trường như sau:

• RAM: 12.72 GB chế độ tiêu chuẩn và 27.4 GB cho chế độ high-RAM

Thời gian huấn luyện mô hình:

Thời gian huấn luyện cả hai lần trên bộ dữ liệu 1 (bảng 4.1) được thực hiện trong hai giai đoạn và được thể hiện qua bảng 4.2

Bảng 4.2: Thời gian huấn luyện mô hình

Epochs Max- tokens Giờ Epochs Max- tokens Giờ

Tiêu chí đánh giá

Để đo lường các tác vụ dịch máy hay hệ thống hội thoại hoàn toàn không đơn giản như các bài toán phân loại khác bởi vì trong các bài toán phân loại chúng ta đã có sẵn ground truth cho một quan sát đầu ra và ground truth này là duy nhất và cố định Tuy nhiên đối với dịch máy hay hệ thống hội thoại, một câu đầu vào có thể có nhiều bản dịch (câu hội thoại) khác nhau Do đó không thể sử dụng nhãn duy nhất để so khớp như precision hoặc recall được

Dự định ban đầu của đề tài là sử dụng chỉ số BLEU score để làm cơ sở đánh giá Tuy nhiên, với mô hình thực nghiệm này và nhóm tác giả Kenji Imamura và Eiichiro Sumita cũng đã đề cập trong bài báo [14] thì chỉ số BLEU score đạt được cực kỳ thấp Cụ thể chỉ số BLEU score của đề tài chỉ đạt 1,03 được đo vào ngày 15/8/2020 khi huấn luyện lần 1 (bảng 4.2)

2020-08-15 01:17:50.382212: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1

Namespace(ignore_casese, order=4, ref='/content/drive/My

Drive/chatbot/output/evaluation2.log.ref', sacrebleuse, sentence_bleuse, sys='/content/drive/My

Drive/chatbot/output/evaluation2.log.sys')

BLEU4 = 1.03, 10.5/2.1/0.7/0.4 (BP=0.645, ratio=0.695, syslen15831, reflen!81023)

BLEU score có tác dụng đánh giá điểm số càng cao nếu kết quả của bản dịch máy là sát nghĩa với kết quả của người dịch BLEU score sẽ được tính toán dựa trên 𝑃1, 𝑃2, 𝑃3, 𝑃4 theo lũy thừa cơ số tự nhiên 𝑒:

Tuy nhiên chúng ta thấy một điểm hạn chế của BLEU score đó là đối với các câu càng ngắn thì xu hướng BLEU score sẽ càng cao Điều này dễ hiểu vì khi câu càng ngắn thì số lượng các n_gram càng ít và đồng thời khả năng xuất hiện của chúng trong các bản dịch cũng cao hơn Vì vậy, đối với hệ thống hội thoại chỉ số BLEU có thể chưa phù hợp

Gần đây, nhóm tác giả Richard Csaky, Patrik Purgai and Gabor Recski (2019) [15] đề xuất 17 evaluation metrics cho các mô hình hội thoại Do giới hạn thời gian nên luận văn chỉ kịp hiện thực 5/17 độ đo bao gồm:

• AVG: Đo độ nhúng từ Embedding average Lấy các giá trị trung bình của các word vector của response và target Và tính giá trị trung bình độ tương tự cosine giữa chúng

• EXT: Đo độ nhúng từ Embedding extrema Lấy các giá trị tuyệt đối lớn nhất mỗi chiều giữa các word vector của response và target Và tính độ tương tự cosine giữa chúng

• GRE: Đo độ nhúng từ Embedding greedy Greedy matches giữa mỗi response token và một target token (và ngược lại) dựa vào độ tương tự cosine giữa embeddings của chúng và trung bình tổng điểm trên tất cả các từ

• D1 và D2: Distinct-1 và Distinct-2 đo tỉ số giữa unigrams/bigrams duy nhất với tổng số unigrams/bigrams trong tập responses

Bảng 4.3: Kết quả đánh giá mô hình

Ba dòng cuối trong bảng 4.3 chỉ mang tính tham khảo, được trích từ bài báo của nhóm tác giả là phép đo trên mô hình Transformer và các tập dữ liệu hội thoại tiếng Anh và số lượng epochs lớn

Ngoài ra có một số tiêu chí đánh giá sự hiệu quả của chatbot khác như:

• Retention Rate: Tỷ lệ người dùng đã sử dụng chatbot nhiều lần trong một khoảng thời gian nhất định

• Use rate by open sessions: Số phiên làm việc hay sử dụng đồng thời với chatbot

• Target audience session volume: Tỷ lệ thâm nhập đến nhóm đối tượng người dùng mục tiêu

• Chatbot response volume: Số lượng câu hỏi mà chatbot đã trả lời

• Chatbot conversation length: Độ dài trung bình của các tương tác giữa chatbot và người dùng

• Usage distribution by hour: Thời gian nào trong ngày người dùng sử dụng chatbot nhiều nhất

• Interaction rate: Số lượng tin nhắn được trao đổi trung bình trên mỗi cuộc trò chuyện

• Non-response rate: Số lần chatbot không trả lời được câu hỏi, có thể do thiếu nội dung hay chatbot gặp khó khăn trong việc hiểu ý người dùng

• User feedback: Cảm nhận của user về chatbot (chỉ số thỏa mãn, chỉ số đánh giá).

Kết quả thực nghiệm

Kết quả khi huấn luyện lần 1 (bảng 4.2) trên tập dữ liệu không giới hạn độ dài câu hỏi và câu trả lời như sau:

Bảng 4.4: Kết quả thực nghiệm lần 1

Input: cô nói tôi là ai vậy

Input: họ bắn ai vậy

Input: lúc đó cậu ấy bao nhiêu tuổi

Input: anh bao nhiêu tuổi

Input: khi nào thì tôi mới lấy người đó

Target: ngươi sẽ không bao giờ lấy một hoàng tử

Result: không phải hôm nay

Input: ah bibilin rất vui khi gặp anh

Target: quý cô helene không tham gia tối nay sao

Result: rất vui được gặp anh

Input: chỉ là anh không nhớ thôi

Target: tôi biết cổ ở đâu

Target: tớ đi lấy 1 chút đồ uống

Result: rất vui được gặp anh

Input: ngươi đang làm gì vậy

Result: ta đang làm gì thế này

Target: con trai tội nghiệp của ta

Result: ta là thần long đại hiệp

Input: à vậy thì chúc sức khỏe ổng

Target: anh biết không đó là điều mà ai cũng nói Result: cám ơn cô rất nhiều

Input: có ai nói tiếng anh không

Result: nó không có ở đây

Input: 3 sinh viên bị nhốt trên kia

Target: tôi không hiểu ý của anh

Result: còn anh thì sao

Target: hắn đang tìm chúng ta

Result: chắc là hắn đang đói

Input: cậu điều khiển trận đấu

Target: ồ thấy chưa tôi đã được gây ấn tượng

Result: tôi biết cách xử lý nó

Target: tất nhiên tôi cảm kích anh

Result: tôi có thể giúp gì cho ngài

Input: cô muốn ăn gì

Target: chỉ ăn chay thôi

Input: hãy cố gắng khỏe lên đi

Target: mọi người cần cô

Input: cô là một cái máy tính

Target: cô phải nghe theo tôi

Result: tôi là một người máy

Input: tớ luôn ở bên cậu

Target: hãy đi cùng nhau

Input: bố tìm con mãi

Target: bố đã khá lo khi không thấy con ngoài thư viện Result: con không sao chứ

Input: ai biết cô ta từ đâu ra không

Target: chị thấy cô ta đứng ở ngoài

Input: cậu có súng mà

40 Target: tôi ngay sau cậu đó đi

Result: tôi không có súng

Input: ông đã kết hôn rồi mà

Result: tôi chưa bao giờ kết hôn

Input: anh là gì chứ

Target: nhà phê bình sách à

Result: tôi là một huyền thoại

Input: cởi quần và nhảy vào đi

Result: tôi không thể làm thế

Bảng 4.5: Kết quả thực nghiệm lần 2

BOT> tôi có thể giúp gì cho cô

You> thời tiết ngày hôm nay

You> tôi thích chơi đá banh

BOT> tôi thích bóng chày

You> anh thích bộ phim nào nhất

You> tôi cảm thấy đói bụng

BOT> tôi có thể giúp gì cho anh

You> mua dùm tôi phần cơm được không

Như vậy, kết quả thể hiện ở bảng 4.3 và 4.4 cho thấy mô hình của luận văn có thể trả lời được khá nhiều nội dung phù hợp ngữ cảnh của câu thoại, với chất lượng rất khả quan, phụ thuộc vào chất lượng của bộ dữ liệu hỏi đáp Với nhưng câu hỏi khó, mô hình đã đưa ra câu trả lời từ chối “Tôi không biết” hay câu trả lời chưa thõa đáng Tuy nhiên, mô hình cho thấy được tín hiệu cải thiện chất lượng đáng kể, câu đáp trung thực hơn, bám sát ngữ nghĩa hơn, ví dụ như trả lời số tuổi khi được hỏi “bao nhiêu tuổi” trong đoạn hội thoại sau

Input: lúc đó cậu ấy bao nhiêu tuổi

Ngày đăng: 03/08/2024, 13:53