Tải bản đầy đủ (.pdf) (86 trang)

XÂY DỰNG HỆ THỐNG TRẢ LỜI CÂU HỎI RAG TRÊN TIẾNG VIỆT - NTTU CHATBOT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.14 MB, 86 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>BỘ GIÁO DỤC VÀ ĐÀO TẠO </b>

<b>TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH KHOA CÔNG NGHỆ THƠNG TIN </b>

<b>KHĨA LUẬN TỐT NGHIỆP ĐỀ TÀI: </b>

<b>XÂY DỰNG HỆ THỐNG TRẢ LỜI CÂU HỎI MIỀN MỞ TRÊN TIẾNG VIỆT </b>

<b>Giảng viên hướng dẫn : TS. VÕ THỊ HỒNG THẮM Sinh viên thực hiện : NGUYỄN THÀNH PHÁT MSSV : 2000006273 </b>

<b>Khoá : 2020 </b>

<b>Ngành/ chuyên ngành : KHOA HỌC DỮ LIỆU </b>

<b>Tp HCM, tháng 01 năm 2024 </b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>BỘ GIÁO DỤC VÀ ĐÀO TẠO </b>

<b>TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH KHOA CÔNG NGHỆ THƠNG TIN </b>

<b>KHĨA LUẬN TỐT NGHIỆP ĐỀ TÀI: </b>

<b>XÂY DỰNG HỆ THỐNG TRẢ LỜI CÂU HỎI MIỀN MỞ TRÊN TIẾNG VIỆT</b>

<b>Giảng viên hướng dẫn : TS. VÕ THỊ HỒNG THẮM Sinh viên thực hiện : NGUYỄN THÀNH PHÁT MSSV : 2000006273 </b>

<b>Khoá : 2020 </b>

<b>Ngành/ chuyên ngành : KHOA HỌC DỮ LIỆU </b>

<b>Tp HCM, tháng 01 năm 2024 </b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>LỜI CẢM ƠN </b>

Mọi thành tựu, không bao giờ đến từ một cá nhân duy nhất. Em xin chân thành tri ân và bày tỏ lịng biết ơn sâu sắc đến Cơ T.S. Võ Thị Hồng Thắm (Khoa Công Nghệ Thông Tin – Trường Đại Học Nguyễn Tất Thành) người đã nhiệt tình cố vấn và cho em những lời khuyên bổ ích trong hành trình em hồn thiện bài báo cáo này cũng như những kiến thức nền tảng vững chắc mà cô đã tận tâm truyền tải từ những học phần chuyên ngành. Em cũng muốn gửi lời cảm ơn đến những thầy cô trong khoa đã đồng hành và truyền dạy từ những ngày đầu tiên tại trường.

Cảm ơn những người bạn cùng khố K20 vì sự gắn bỏ và đồng hành từ những ngày đầu nhập học cho đến bây giờ và chúng ta đã có những kỉ niệm tuổi trẻ vô cùng đáng nhớ cùng nhau. Thật vinh hạnh khi được những người bạn thú vị như các bạn đồng hành đã cho mình nhiều góc nhìn mới mẻ, nhìn thấy được những hồi bảo, sự nhiệt huyết và khát khao từ những người trẻ tài giỏi cùng lứa tuổi như các bạn đã giúp mình có thêm nhiều động lực để ngày càng hoàn thiện bản thân.

Cuối cùng, cảm ơn cha mẹ đã là một chỗ dựa vững chắc, sự hỗ trợ đắc lực cho con có thể an tâm trong hành trình đi tìm tri thức và xây dựng sự nghiệp cho riêng mình. Cảm ơn tất cả những người thầy cô giáo, những người vô danh đã giúp cho việc học tập của em trở nên đáng nhớ và ý nghĩa hơn.

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>LỜI MỞ ĐẦU </b>

Công nghệ đang ngày càng phát triển qua từng năm, dẫn đến việc tra cứu thông tin của con người cũng thay đổi theo, từ những phương pháp tra cứu dữ liệu đơn giản bằng cách tìm kiếm theo các từ trong câu cho đến những phương pháp phức tạp như áp dụng học máy để trích xuất dữ liệu chính xác hơn dựa trên ngữ nghĩa của các từ đó. Sự đột phá trong lĩnh vực tra cứu thông tin được tái định nghĩa lại sau sự ra đời của ChatGPT một mơ hình ngơn ngữ được OpenAI phát triển đã làm cách mạng hoá việc tìm kiếm, làm cho việc tìm kiếm thơng tin được biểu diễn dưới dạng một chatbot hỏi đáp, nhờ vậy mơ hình này đã giúp giải đáp các thơng tin theo một cách thức giống con người hơn. Tuy nhiên ChatGPT cũng tồn tại những hạn chế của một mơ hình ngôn ngữ, nhất là khả năng bị lỗi thời thông tin

<i>(outdated information), dẫn chứng là thời điểm ra mắt mơ hình này chỉ cập nhật kiến thức </i>

đến năm 2021. Hiện nay, tất cả những vấn đề này đã được khắc phục nhờ phương pháp mở miền dữ liệu, giúp mơ hình có thể cập nhật thơng tin từ nhiều nguồn theo thời gian thực. Ở đề tài này ta sẽ mơ phỏng lại hệ thống đó, bằng việc xây dựng một hệ thống hỏi đáp có thể truy cập dữ liệu từ nội quy học vụ được liệt kê trong sổ tay sinh viên của trường Đại học Nguyễn Tất Thành và nguồn thông tin từ Bách Khoa toàn thư Wikipedia. Để xây dựng được hệ thống này ta cần tìm hiểu về cách các mơ hình ngơn ngữ lớn hoạt động, các phương pháp trích xuất thơng tin liên quan, xử lý dữ liệu, cách triển khai mơ hình trên server và làm thế nào để đánh giá hiệu quả của một hệ thống hỏi đáp. Bằng việc đón đầu xu thế chung về cơng nghệ AI tạo sinh, đề tài cũng đánh mạnh vào quá trình xử lý dữ liệu, một thứ cốt lõi quyết định độ hiệu quả của mơ hình ngơn ngữ trong việc trích xuất thơng tin và trả lời câu hỏi, từ đó có thể áp dụng kỹ thuật này trong nhiều lĩnh vực khác nhau có thể là việc tạo một hệ thống tra cứu tài liệu nội bộ, hỗ trợ tư vấn bán hàng hoặc là một trợ thủ đắc lực giúp việc học tập hiệu quả hơn.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b> NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN </b>

1. Hình thức (Bố cục, trình bày, lỗi, các mục, hình, bảng, cơng thức, phụ lục, ) ...

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN </b>

1. Hình thức (Bố cục, trình bày, lỗi, các mục, hình, bảng, cơng thức, phụ lục, ) ...

<b> Giáo viên phản biện </b>

(Ký tên, ghi rõ họ tên)

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

DANH MỤC CÁC TỪ VIẾT TẮT ... xii

CHƯƠNG 1: Giới thiệu chung về đề tài ... 1

1.1. Giới thiệu để tài mục tiêu ... 1

1.2. Phương pháp đề tài ... 1

1.3. Lý do chọn đề tài ... 1

1.4. Mục tiêu nghiên cứu ... 2

1.5. Đối tượng nghiên cứu ... 2

1.6. Bố cục đề tài ... 3

CHƯƠNG 2: Cơ sở lý luận về vấn đề nghiên cứu ... 4

2.1. Giới thiệu về Hệ thống Trả lời câu hỏi ... 4

2.2. Hệ thống Trả lời câu hỏi miền mở là gì? ... 5

2.3. Cơ chế hoạt động của Open-Domain Question Answering ... 5

2.4. Tìm kiếm mức độ tương tự văn bản ... 6

2.4.1. Thuật toán TF-IDF ... 6

2.4.2. Thuật toán BM25 ... 7

2.4.3. Tìm kiếm tương đồng dựa trên vector nhúng từ ... 8

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

2.5. Lịch sử hình thành mơ hình ngơn ngữ ... 8

2.5.1. Word Embedding ... 9

2.5.2. Mạng Nơ-ron Hồi tiếp truyền thống (RNN) ... 11

2.5.3. Mạng Nơ-ron Hồi tiếp hiện đại (LSTM và GRU) ... 13

2.5.4. Kiến trúc Mã hóa - Giải mã (Encoder - Decoder) ... 15

2.5.5. Cơ chế Tập trung (Attention)... 17

2.5.6. Kiến trúc mạng Transformer ... 18

2.5.7. Mơ hình BERT ... 23

2.5.8. Mơ hình GPT ... 27

2.6. Lượng tử hóa mơ hình (Quantization model) ... 30

CHƯƠNG 3: Xây dựng hệ thống trình bày ... 34

3.1. Tổng quan về ý tưởng hệ thống ... 34

3.2. Chuẩn bị dữ liệu ... 35

3.2.1. Làm sạch dữ liệu ... 36

3.2.2. Khám phá dữ liệu ... 40

3.3. Xây dựng lõi back-end ... 42

3.3.1. Xây dựng vector database ... 43

3.3.2. Xây dựng Retriver ... 44

3.4. Lựa chọn mơ hình ngơn ngữ lớn ... 46

3.4.1. Lượng tử hóa mơ hình ... 48

3.4.2. Huấn luyện mơ hình ... 49

3.4.3. Triển khai mơ hình ... 53

3.5. Xây dựng front-end ... 54

CHƯƠNG 4: Thực nghiệm và đánh giá ... 57

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>DANH MỤC CÁC BẢNG BIỂU </b>

Bảng 2.1: Thông số các phiên bản của GPT ... 30

Bảng 2.2: So sánh kết quả lượng tử trên độ đo Perplexity (PPL) ... 33

Bảng 3.1: So sánh trước và sau khi lượng tử hoá vietcuna-7b-v3 ... 49

Bảng 3.2: So sánh trước và sau khi lượng tử hoá zephyr-7b-beta ... 49

Bảng 3.3: Siêu tham số cài đặt cho training ... 51

Bảng 4.1: Kết quả hệ thống chạy mơ hình vietcuna-7b-v3-AWQ ... 59

Bảng 4.2: Kết quả hệ thống chạy mơ hình vietcuna-7b-v3 ... 59

Bảng 4.3: Kết quả hệ thống chạy mô hình PhoGPT-7B5-Instruct ... 60

Bảng 4.4: Kết quả hệ thống chạy mơ hình vietzephyr-7b-8bit-lora ... 60

Bảng 4.5: Tính điểm theo đánh giá con người qua 15 câu hỏi trên 2 mơ hình ... 62

Bảng 4.6: Kết quả BERT Score ... 63

Bảng 4.7: Kết quả dùng con người đánh giá ... 63

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>DANH MỤC CÁC BẢNG HÌNH </b>

Hình 2.1: Minh họa cho Hệ thống Trả lời câu hỏi ... 4

Hình 2.2: Cơ chế hoạt động của một hệ thống Information Retrieval. ... 5

Hình 2.3: Minh họa về kỹ thuật nhúng từ ... 9

Hình 2.9: Cấu trúc một tế bào GRU ... 15

Hình 2.10: Các kiểu kiến trúc của mạng hồi tiếp ... 16

Hình 2.11: Kiến trúc mơ hình seq2seq. ... 16

Hình 2.12: Mơ tả về cơ chế tập trung (attention) ... 17

Hình 2.13: Kiến trúc mơ hình Transformer ... 18

Hình 2.14: Scaled Dot-Product Attention ... 19

Hình 2.15: Multi-head Attention ... 20

Hình 2.16: Cấu trúc khối Encoder Transformer ... 22

Hình 2.17: Cấu trúc khối Decoder Transformer ... 23

Hình 2.18: Kiến trúc mơ hình BERT... 24

Hình 2.19: Quá trình huấn luyện BERT ... 25

Hình 2.20: Quá trình tinh chỉnh BERT ... 27

Hình 2.21: Kiến trúc mơ hình GPT ... 28

Hình 2.22: Minh họa việc cắt float-32 thành float-16 ... 31

Hình 2.23: So sánh việc ép kiểu bit hồn tồn và giữ lại 1% tham số quan trọng ... 32

Hình 2.24: Scale trọng số trước khi lượng tử hóa ... 32

Hình 3.1: Kiến trúc của hệ thống hỏi đáp ... 34

Hình 3.2: Sổ tay sinh viên 2023 - 2024 ... 36

Hình 3.3: Ví dụ về một mẩu dữ liệu trong database ... 37

Hình 3.4: Sử dụng ChatGPT để tăng cường dữ liệu (Câu hỏi) ... 38

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Hình 3.5: Sử dụng ChatGPT để tăng cường dữ liệu (Trả lời) ... 38

Hình 3.6: Mô tả cấu trúc dữ liệu 146 câu hỏi đáp sinh viên ... 39

Hình 3.7: Mơ tả dữ liệu vilm/OpenOrca-Viet ... 39

Hình 3.8: Mơ tả việc gộp dữ liệu thành cấu trúc hỏi đáp ... 40

Hình 3.9: Top 20 từ vựng có tần suất xuất hiện cao nhất ... 41

<i>Hình 3.10: Top 20 cặp từ vựng (bigram) có tần suất xuất hiện cao nhất ... 41 </i>

<i>Hình 3.11: Top 20 bộ ba từ vựng (trigram) có tần suất xuất hiện cao nhất ... 42 </i>

Hình 3.12: : Sơ đồ hoạt động của backend ... 43

Hình 3.13: Qdrant vector database ... 43

Hình 3.14: Cấu hình Qdrant Vector Database ... 44

Hình 3.15: Cấu trúc Retriver nâng cao kèm bộ lọc Rerank ... 45

Hình 3.16: Mơ hình BERT Re-ranker ... 45

Hình 3.17: Bảng đánh giá các LLM Tiếng Việt dựa trên các task bằng con người ... 46

Hình 3.18: Mơ hình vilm/vietcuna-7b-v3 trên HuggingFace ... 47

Hình 3.19: Mơ hình vilm/PhoGPT-7B5-Instruct trên HuggingFace ... 47

Hình 3.20: Hiệu năng mơ hình Zephyr-7b-beta ... 48

Hình 3.21: Phương pháp LoRA ... 50

Hình 3.22: Giá trị loss trên tập test trước khi huấn luyện ... 51

Hình 3.23: Tham số loss tại các steps khi training ... 52

Hình 3.24: Biểu đồ về sự suy giảm loss của mơ hình khi huấn luyện ... 52

Hình 3.25: Test một câu hỏi nhỏ ... 53

Hình 3.26: Thư viện vLLM ... 53

Hình 3.27: Sơ đồ thiết kế giao diện front-end ... 54

Hình 3.28: Giao diện trang chủ NTTU Chatbot ... 55

Hình 3.29: Giao diện trị chuyện ... 55

Hình 3.30: Giao diện FAQs ... 56

Hình 3.31: Giao diện trang phản hồi góp ý. ... 56

Hình 4.1: Mơ tả phương pháp BERTScore ... 57

Hình 4.2: Biểu đồ Histogram sự phân bố Precision, Recall và F1 (vietcuna-7b-v3-AWQ) ... 59

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

Hình 4.3: Biểu đồ Histogram sự phân bố Precision, Recall và F1 (vietcuna-7b-v3) ... 60

Hình 4.4: Biểu đồ Histogram sự phân bố Precision, Recall và F1 (PhoGPT-7B5-Instruct) ... 60

Hình 4.5: Biểu đồ Histogram sự phân bố Precision, Recall và F1 lora) ... 61

(vietzephyr-7b-8bit-Hình 4.6: Biểu đồ cột trực quan điểm số con người đánh giá ... 62

Hình Phụ Lục 1: Trang chủ NTTU Chatbot ... 69

Hình Phụ Lục 2: Giao diện hỏi đáp miền NTTU (1) ... 69

Hình Phụ Lục 3: Giao diện hỏi đáp miền NTTU (2) ... 70

Hình Phụ Lục 4: Giao diện trích dẫn nguồn tham khảo NTTU. ... 70

Hình Phụ Lục 5: Giao diện hỏi đáp miền Wikipedia ... 71

Hình Phụ Lục 6: Giao diện trích dẫn nguồn tham khảo Wikipedia ... 71

Hình Phụ Lục 7: Giao diện FAQs ... 72

Hình Phụ Lục 8: Giao diện báo lỗi/góp ý ... 72

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

IR Information Retrieval LoRA Low-Rank Adaptation LSTM Long short term memory MLM Masked Language Modeling NLP Natural Language Processing NSP Next Sentence Prediction NTTU Nguyen Tat Thanh University ODQA Open-Domain Question Answering PPL Perplexity

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<b>CHƯƠNG 1: Giới thiệu chung về đề tài </b>

<b>1.1. Giới thiệu để tài mục tiêu </b>

Trong thời đại công nghệ thông tin phát triển mạnh mẽ, nhu cầu truy vấn thông tin ngày càng tăng cao. Đặc biệt, với sự phát triển của trí tuệ nhân tạo (AI), các hệ thống trả lời câu

<i>hỏi (question answering - QA) đang trở nên phổ biến và được ứng dụng trong nhiều lĩnh </i>

vực khác nhau như giáo dục, y tế, kinh doanh,v.v. Đón đầu xu thế đó đề tài này tập trung nghiên cứu phát triển hệ thống được trình bày như sau.

<i><b>Tên đề tài: Xây dựng hệ thống và mơ hình trả lời câu hỏi miền mở trên Tiếng Việt </b></i>

<i><b>Mục tiêu đề tài: Xây dựng được một hệ thống có khả năng trả lời các câu hỏi dựa trên </b></i>

những thơng tin trích xuất được từ tài liệu và văn bản được lưu trữ trong hệ thống cơ sở dữ liệu. Có thể triển khai thành một ứng dụng chatbot có khả năng tương tác thơng qua giao diện và có khả năng thêm dữ liệu từ người dùng.

<b>1.2. Phương pháp đề tài </b>

Đề tài sử dụng những kiến thức đã học trong lĩnh vực học máy và học sâu để xây dựng, đào tạo và áp dụng một số phương pháp thống kê nhằm kiểm thử, đánh giá mức độ hiệu quả của mơ hình. Đồng thời cũng áp dụng những công nghệ bao gồm:

<i><b>Đề tài sử dụng các công nghệ như sau: </b></i>

<i><b>Thư viện học máy, học sâu: Pytorch, Hugging Face, Langchain. Triển khai Back-end: vLLM, FastAPI. </b></i>

<i><b>Triển khai Front-end: ReactJS, TailwindCSS, HTML. </b></i>

<b>1.3. Lý do chọn đề tài </b>

Trong tiếng Việt, sử dụng mơ hình ngơn ngữ làm hệ thống trả lời câu hỏi là một lĩnh vực nghiên cứu còn khá mới mẻ. Các hệ thống trả lời câu hỏi trên tiếng Việt hiện nay vẫn còn gặp nhiều hạn chế, đặc biệt là về độ chính xác và khả năng đáp ứng các câu hỏi mở, mang tính suy luận, sáng tạo.

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Do đó, việc nghiên cứu và xây dựng hệ thống QA trên tiếng Việt là một vấn đề cấp thiết, có ý nghĩa quan trọng trong việc đáp ứng nhu cầu truy vấn thông tin của người dùng tiếng Việt. Giải quyết vấn đề tổng hợp thông tin từ nhiều nguồn một cách nhanh chóng, hỗ trợ con người trong các tác vụ tìm kiếm thông tin, giải đáp thắc mắc và kiểm tra kiến thức. Giúp con người đưa ra quyết định một cách dễ dàng nhờ những gợi ý của hệ thống. Đón đầu xu hướng trí tuệ nhân tạo và xử lý dữ liệu trong thời đại ngày nay.

<b>1.4. Mục tiêu nghiên cứu </b>

Một số mục tiêu bao gồm việc tìm hiểu và đánh giá được độ hiệu quả của các mơ hình học sâu trong lĩnh vực xử lý chuỗi dữ liệu liên tục và xử lý ngôn ngữ tự nhiên, cách huấn luyện và triển khai mơ hình trong thực tiễn. Mục tiêu chính của đề tài này là xây dựng một hệ thống trả lời câu hỏi miền mở trên tiếng Việt có độ chính xác cao, khả năng đáp ứng tốt các câu hỏi mở, mang tính suy luận, sáng tạo. Cụ thể, hệ thống này cần đạt được các mục tiêu bao gồm:

• Hệ thống có thể trả lời được các câu hỏi mở, mang tính suy luận, sáng tạo một cách chính xác, đầy đủ và hữu ích.

• Hệ thống có khả năng xử lý được nhiều loại câu hỏi mở khác nhau, bao gồm câu hỏi về sự kiện, câu hỏi về khái niệm, câu hỏi về mối quan hệ, câu hỏi về ý kiến,...

<b>1.5. Đối tượng nghiên cứu </b>

Đối tượng nghiên cứu của đề tài này bao gồm:

• Các phương pháp và kỹ thuật xử lý ngơn ngữ tự nhiên (NLP) hiện đại, • Các mạng học sâu phục vụ các tác vụ NLP như Transformer, BERT, GPT.

• Các cơng nghệ tối ưu, lượng tử hố mơ hình và triển khai mơ hình lên mơi trường server cloud.

• Dữ liệu cần trích xuất, phương pháp tìm kiếm văn bản tương tự. • Các phương pháp đánh giá mơ hình ngơn ngữ lớn.

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<b>1.6. Bố cục đề tài </b>

Đề tài bao gồm 5 chương:

<b>• Chương 1: Giới thiệu chung về đề tài </b>

<b>• Chương 2: Cơ sở lý luận về vấn đề nghiên cứu • Chương 3: Xây dựng hệ thống trình bày </b>

<b>• Chương 4: Thực nghiệm và đánh giá • Chương 5: Kết luận và hướng phát triển </b>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<b>CHƯƠNG 2: Cơ sở lý luận về vấn đề nghiên cứu </b>

<b>2.1. Giới thiệu về Hệ thống Trả lời câu hỏi </b>

Từ lâu con người ln tìm cách trả lời những câu hỏi xung quanh mình, từ thực nghiệm đến kết luận chúng ta đã đúc kết những tri thức ấy qua nhiều năm và tạo nên một kho tàng đồ sộ những thông tin được lưu trữ dưới dạng giấy bút và ngày nay chúng được số hóa và lưu trữ gọn nhẹ trên những thiết bị phần cứng hiện đại.

Hình 2.1: Minh họa cho Hệ thống Trả lời câu hỏi

Do sự đồ sộ của nguồn thông tin được tăng dần theo cấp số nhân qua từng năm, một hệ thống tổng hợp thông tin và trả lời câu hỏi là vơ cùng cần thiết. Sơ khai nhất có lẽ là sự xuất hiện của Google hoặc gần đây là ChatGPT đã làm cách mạng hóa việc tìm kiếm thơng tin, giúp việc tìm kiếm thơng tin trở nên đơn giản và dễ dàng hơn. Vì vậy ta có thể hiểu tác vụ này có định nghĩa như sau:

<i>Trả lời câu hỏi (Question-Answering) là một tác vụ nhằm hiểu ngơn ngữ tự nhiên, trích </i>

xuất và truy xuất thơng tin, mục tiêu là tạo ra một hệ thống trả lời câu hỏi tự động dựa trên

<i>khả năng đọc hiểu của máy tính (machine reading comprehension), cho phép người dùng </i>

đặt câu hỏi bất kỳ và nhận được câu trả lời phù hợp từ một tập dữ liệu lớn và đa dạng [1]. Đây là một lĩnh vực thu hút nhiều nhà nghiên cứu trong lĩnh vực trí tuệ nhân tạo trong những năm gần đây bởi sự phát triển mạnh mẽ của các mơ hình dữ liệu lớn dựa trên khả năng đọc hiểu của máy tính, được ứng dụng trong nhiều lĩnh vực từ y tế, giáo dục, tài chính,.v.v

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<i>Hệ thống trả lời câu hỏi thường có 2 loại bao gồm : trả lời câu hỏi miền đóng (closed </i>

<i>domain) và trả lời câu hỏi miền mở (open domain) </i>

<b>2.2. Hệ thống Trả lời câu hỏi miền mở là gì? </b>

<i>Khác với một hệ thống Trả lời câu hỏi miền đóng chỉ cho phép trả lời câu hỏi trong một lĩnh vực nhất định ví dụ như luật pháp hoặc tài chính thì hệ thống Trả lời câu hỏi miền mở </i>

có thể trả lời câu hỏi ở bất kỳ lĩnh vực nào miễn là trong hệ thống dữ liệu có lưu trữ về nó.

<i>Về định nghĩa ta có thể hiểu như sau: Trả lời câu hỏi miền mở (Open-Domain Question </i>

<i>Answering) là một tác vụ giúp trả lời câu hỏi đầu vào dựa trên cơ chế Truy xuất thông tin </i>

(Information Retrieval - IR) với cơ sở dữ liệu có sẵn, hệ thống IR này sẽ tổng hợp và lựa chọn ra những tài liệu thông tin văn bản có mức độ liên quan cao trong hệ thống lưu trữ

<i>(cơ sở dữ liệu) và trả về với sắp xếp theo mức độ liên quan đó. Từ những thơng tin có được </i>

mơ hình sẽ dùng một số kỹ thuật Xử lý ngơn ngữ tự nhiên (NLP) để trích xuất ra một phần thông tin khả năng cao là câu trả lời cho câu hỏi [2].

<b>2.3. Cơ chế hoạt động của Open-Domain Question Answering </b>

Như ta đã tìm hiểu thì một hệ thống trả lời câu hỏi miền mở sẽ bao gồm 2 thành phần chính:

<i>Retriever (Người tha mồi) và Reader (Người chắt lọc). </i>

Hình 2.2: Cơ chế hoạt động của một hệ thống Information Retrieval.

<i><b>● Thành phần Retriever sẽ có nhiệm vụ trích xuất những tài liệu có liên quan (theo </b></i>

<i>top-K) trong hệ thống lưu trữ và sắp xếp nó theo mức độ liên quan từ cao đến thấp. </i>

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

Thơng thường phương pháp được dùng để tìm kiếm theo mức độ tương tự văn bản

<i>(text similarity) sẽ dựa trên TF-IDF, MB25 hoặc dense vector. </i>

<i><b>● Thành phần Reader trích xuất những thơng tin văn bản lấy được từ Retriever để </b></i>

lấy ra đoạn hoặc câu có khả năng cao là đáp án cho câu hỏi. Thông thường sẽ là 2

<i>biến giá trị số index của điểm bắt đầu và kết thúc của đáp án trong văn bản. Lúc này thông tin văn bản sẽ gọi là ngữ cảnh (context) để mơ hình Reader dựa vào. Mơ hình </i>

thường được dùng cho Reader là BERT, RoBERTa, DeBERTa, XLM,.v.v. Ngồi ra, thay vì dùng Reader một số hệ thống hiện đại sẽ thay thế Reader bằng một Generator như GPT-2, BLOOM hoặc LLaMA [3]. Giúp câu trả lời mang tính chất con người hơn kết hợp với những thông tin mà mô hình đã được huấn luyện trước đó. Trong đề tài này, một Generator sẽ được sử dụng thay cho Reader.

<b>2.4. Tìm kiếm mức độ tương tự văn bản </b>

<i>Để có thể tạo ra một Retriever phục vụ tìm kiếm những tài liệu (document) có liên quan đến câu truy vấn (query) ở đầu vào. Ta cần một thuật toán có thể đánh giá mức độ tương tự văn bản (text similarity), thuật tốn này sẽ dị xem những tài liệu và văn bản nào có khả </i>

năng cao chứa đựng nội dung liên quan truy vấn đó. Phổ biến nhất có lẽ là 2 thuật tốn IDF và BM25.

<b>TF-2.4.1. Thuật tốn TF-IDF </b>

<i>Trong truy xuất thơng tin, TF-IDF (term frequency–inverse document frequency) là một kỹ </i>

thuật giúp đánh giá, phản ánh mức độ quan trọng của một từ trong văn bản. [8]

<i>Trong đó TF (term frequency) được tính là tần suất xuất hiện của một từ trong văn bản. </i>

Được tính theo cơng thức.

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<i>Tiếp tục ta có IDF (inverse document frequency). Là tần số nghịch của một từ trong tập văn bản (corpus). </i>

𝐼𝐷𝐹(𝑡, 𝐷) = 𝑙𝑜𝑔|𝐷|

|𝑑 𝜖 𝐷 ∶ 𝑡 𝜖 𝑑|

Trong đó:

|𝐷|

: là tổng số văn bản trong tập mẫu D

|𝑑 𝜖 𝐷 ∶ 𝑡 𝜖 𝑑|

: là số lượng văn bản có chứa từ t

Từ 2 chỉ số TF và IDF tính được, nhân lại sẽ cho ra được giá trị của TF-IDF như sau.

𝑇𝐹𝐼𝐷𝐹(𝑡, 𝑑, 𝐷) = 𝑇𝐹(𝑡, 𝑑) × 𝐼𝐷𝐹(𝑡, 𝐷)

Một từ có giá trị TF-IDF cao chứng tỏ sự xuất hiện của từ đó trong tài liệu được bù đắp bởi số lượng những tài liệu có chứa từ đó, có nghĩa là từ có giá trị này cao sẽ xuất hiện nhiều trong văn bản này và xuất hiện ít hơn trong văn bản khác. Giúp việc lọc ra văn bản có liên quan đến từ khóa tìm kiếm trở nên chính xác hơn.

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

Để tính 𝐼𝐷𝐹(𝑞<sub>𝑖</sub>) ta dựa theo công thức sau:

𝐼𝐷𝐹(𝑞

<sub>𝑖</sub>

) = 𝑙𝑛 (<sup>𝑁 − 𝑛(𝑞</sup>

<sup>𝑖</sup>

<sup>) + 0.5</sup>

𝑛(𝑞

<sub>𝑖</sub>

) + 0.5<sup>+ 1) </sup>

Trong đó:

● 𝑁 là tổng số lượng văn bản

● 𝑛(𝑞<sub>𝑖</sub>) là số lượng văn bản chứa từ 𝑞<sub>𝑖</sub>

Tuy nhiên phương pháp tính này có một nhược điểm đó là đối với những từ vựng phổ biến

<i>ví dụ như: là, và, hoặc, nhưng, của,.v.v. Nếu nó xuất hiện nhiều hơn một nửa số văn bản </i>

trong tập, giá trị của 𝐼𝐷𝐹(𝑞<sub>𝑖</sub>) sẽ âm, vì vậy trong thực tế chúng ta cần đưa những từ phổ biến này vào một danh sách loại trừ để có thể lược bỏ, điều này tương tự việc loại bỏ 𝐼𝐷𝐹 có giá trị âm hoặc ta sẽ quy định một số 𝜀 nào đó đại diện cho mức 𝐼𝐷𝐹 thấp nhất có thể chấp nhận được để so sánh, tức là chỉ lấy nếu giá trị 𝐼𝐷𝐹 lớn hơn 𝜀, còn lại sẽ bằng 𝜀. Tuy nhiên BM25 cũng có những hạn chế của nó khi chỉ tìm kiếm theo xác suất xuất hiện nhưng khơng thể tìm dựa trên ý nghĩa của nó, vì vậy người ta đã sử dụng học sâu để tăng khả năng tìm kiếm thơng qua một phương pháp tìm kiếm tương tự bằng cách nhúng từ.

<b>2.4.3. Tìm kiếm tương đồng dựa trên vector nhúng từ </b>

Bằng cách trích xuất đặc trưng của từ vựng hoặc một câu thành các vector embedding, nếu biểu diễn vector này trên khơng gian nhiều chiều ta có thể tính tốn được khoảng cách giữa vector của câu tìm kiếm với các vector nội dung trong database từ đó có thể truy xuất được tài liệu có khoảng cách ngắn nhất, tức mức độ liên quan cao nhất. Việc tính tốn khoảng cách giữa 2 vector có thể dùng cơng thức tốn cấp 3 như cosine để thực hiện. Tuy nhiên vấn đề ở chỗ ta phải tìm được một mơ hình có khả năng trích xuất đặc trưng đủ tốt để chuyển đổi văn bản thành các vector có thể biểu diễn được ngữ nghĩa. Thơng thường một model BERT sử dụng cấu trúc Transformer Encoder sẽ là một lựa chọn phù hợp để sử dụng cho việc chuyển đổi này.

<b>2.5. Lịch sử hình thành mơ hình ngơn ngữ </b>

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<i>Một mơ hình ngơn ngữ (language model) là một mơ hình có thể gán được xác suất, khả </i>

năng xuất hiện của một phần tử từ trong một câu. Dưới góc nhìn tốn học thì một câu được biểu diễn dưới dạng một chuỗi liên tục kèm theo những từ mà ở đó xác suất, khả năng một từ xuất hiện của từ đó trong một chuỗi biết trước. Ta có thể hình dung một câu là một chuỗi 𝑃 như sau:

𝑃(𝑤<sub>1</sub>, 𝑤<sub>2</sub>, . . . , 𝑤<sub>𝑛</sub>)

= 𝑃(𝑤<sub>1</sub>)𝑃(𝑤<sub>2</sub>|𝑤<sub>1</sub>)𝑃(𝑤<sub>3</sub>|𝑤<sub>1</sub>, 𝑤<sub>2</sub>). . . 𝑃(𝑤<sub>𝑛</sub>|𝑤<sub>1</sub>, . . . , 𝑤<sub>𝑛−1</sub>) = ∏ 𝑃(𝑤<sub>𝑖</sub>|𝑤<sub>1:𝑖−1</sub>)

Ví dụ: 𝑃("𝐼 𝑙𝑜𝑣𝑒 𝑐𝑎𝑡") = 𝑃(𝐼) × 𝑃(𝑙𝑜𝑣𝑒|𝐼) × 𝑃(𝑐𝑎𝑡|𝐼 𝑙𝑜𝑣𝑒)

Để tính được xác xuất các từ được sinh ra ta cần biểu diễn chuỗi văn bản đầu vào sang dạng

<i>số, việc chuyển văn bản thành số gọi là encode (mã hóa) hay cịn gọi là nhúng từ (word </i>

Hình 2.3: Minh họa về kỹ thuật nhúng từ

Trong quá khứ, việc chuyển văn bản thành vector (tokenizer) sẽ thông qua các phương

<i>pháp mang tính chất đơn giản như phương pháp túi từ (Bag-of-Words - BOW), chỉ việc </i>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<i>trích xuất sự xuất hiện của các từ trong văn bản để lấy làm đặc trưng hoặc phương pháp </i>

<i>TF-IDF chỉ việc lấy tần suất xuất hiện của từ trong câu làm đặc trưng của từ đó. Tuy nhiên, </i>

hiện tại hai phương pháp này khơng cịn hiệu quả và người ta dần thay thế nó bằng các mơ hình phức tạp hơn áp dụng học sâu để có thể biểu diễn nhiều thông tin trong một từ hơn,

<i>từ đó kỹ thuật nhúng từ ra đời, một phương pháp nhúng từ hiệu quả cần phải thỏa mãn 2 </i>

<i>Một đại diện tiêu biểu của kỹ thuật nhúng từ được sử dụng phổ biến là word2vec ra đời </i>

2013 bởi Tomas Mikolov với mục tiêu biểu diễn embedding từ xuống một không gian tối

<i>ưu hơn rất nhiều so với số lượng từ có trong từ điển. Mơ hình word2vec là một mạng </i>

nơ-ron có 3 tầng, mơ hình sẽ lấy từ mục tiêu và các từ ngữ cảnh của từ đó để làm đầu vào và

<i>đầu ra, tùy thuộc vào cách ta sử dụng thông thường sẽ có 2 kiểu mơ hình word2vec: </i>

<i><b>● Skip-gram: Lấy từ mục tiêu làm đầu vào và các từ xung quanh nó (từ ngữ cảnh) </b></i>

làm đầu ra mong muốn để huấn luyện mạng nơ ron

<b>● CBOW (Continuous Bag of Words): Lấy từ mục tiêu làm đầu ra dự đoán từ đầu vào là các từ xung quanh nó để huấn luyện mạng </b>

<i>Mục tiêu cuối cùng của mơ hình word2vec là lấy đầu ra biểu diễn của một từ để làm đầu </i>

vào cho một mơ hình ngơn ngữ, một mơ hình xử lý chuỗi dữ liệu liên tục.

Ví dụ để encode được câu: "𝐼 𝑙𝑜𝑣𝑒 𝑐𝑎𝑡" có 3 từ ta cần đưa qua một vector embedding

<i>(véc-tơ nhúng từ), một vector embedding có chiều dài là số lượng từ trong câu tối đa mà ta muốn </i>

đưa vào mơ hình ví dụ 1024 làm tiêu chuẩn, thì lúc này đầu ra sau khi encode sẽ là 3 × 1024 = 3072 tham số, đó là chỉ với 3 từ. Trong thực tế số lượng từ đầu vào có thể là hàng trăm hoặc thậm chí hàng nghìn gần với độ dài vector embedding. Để một mơ hình học các đặc trưng với số lượng tham số lớn như vậy với ngơn ngữ thì mạng nơ ron truyền thống là khơng khả thi. Do đó ta cần mơ mơ hình có khả năng chia sẻ tham số lẫn nhau trong việc xử lý chuỗi liên tục. Để xây dựng một mơ hình ngơn ngữ lớn (LLM) cho tác vụ

<i>Sinh văn bản (Text generation) phục vụ cho việc xây dựng mơ hình hỏi đáp, ta cần tìm hiểu </i>

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

về khởi nguồn của các mạng xử lý chuỗi liên tục, từ đó làm tiền đề cho việc phát triển mơ hình này.

<b>2.5.2. Mạng Nơ-ron Hồi tiếp truyền thống (RNN) </b>

<i>Mạng nơ-ron Hồi tiếp (Recurrent Neural Network (RNN)) là một họ các mạng có khả năng </i>

xử lý dữ liệu dạng chuỗi bao gồm một chuỗi các giá trị 𝑥<sup>(1)</sup>, . . . , 𝑥<sup>(𝑡)</sup><b> với thời gian </b>𝒕. Ý

<i>tưởng của mạng này là sử dụng cách thức dùng chung tham số (parameter sharing) giữa các phần khác nhau của mô hình đơn cử là việc lưu lại thơng tin thơng qua biến tiềm ẩn </i>

<i>(hidden state), nơi kết nối giữa các nút để tạo thành đồ thị có hướng dọc theo một trình tự </i>

thời gian[4].

Hình 2.4: Cấu trúc một tế bào RNN

<i><b>Một tế bào (cell) của RNN sẽ nhận 2 tham số đầu vào tại thời điểm t hiện tại là 𝑥</b></i><small>(𝑡)</small>và ℎ<sup>(𝑡−1)</sup>. Tham số ℎ ở đây chính là trạng thái ẩn (hidden state) mà chúng ta đã nhắc đến phía

<i>trên, tế bào sẽ duy trì bộ nhớ thơng qua trạng thái ẩn này, sau đó sẽ nhân vơ hướng với </i>

<i><b>trọng số (weight) và hàm kích hoạt ϕ (activation) để cho ra đầu ra </b></i>ℎ<small>(𝑡)</small>. Công thức lan truyền thuận ở đây là:

ℎ<small>(𝑡)</small> = 𝜙<sub>1</sub>(𝑏 + 𝑊 ℎ<small>(𝑡−1)</small>+ 𝑈𝑥<small>(𝑡)</small>) ⇔ ℎ<sup>(𝑡)</sup> = 𝑡𝑎𝑛ℎ (𝑏 + 𝑊 ℎ<sup>(𝑡−1)</sup>+ 𝑈𝑥<sup>(𝑡)</sup>)

<i><b>Trong đó U, W là ma trận trọng số và b là hệ số tự do (bias). Ta có thể giả định 𝜙</b></i><sub>1</sub>là một hàm 𝑡𝑎𝑛ℎ(𝑥). Lúc này ta đã có một mạng nơ-ron hồi duy đơn giản (SimpleRNN) với đầu

Weight & Activation

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

ra 𝑦<small>(𝑡)</small>và ℎ<small>(𝑡)</small>là tương đương nhau. Tuy vậy, giả sử bài toán toán là dự đoán từ hoặc ký tự, giá trị đầu ra là rời rạc, để cho ra được 𝑦<sup>(𝑡)</sup> ta cần thêm một bước là nhân ℎ<sup>(𝑡)</sup> với một ma

<b>trận trọng số V rồi đưa qua một hàm kích hoạt 𝜙</b><sub>2</sub>.

𝑦<small>(𝑡)</small> = 𝜙<sub>2</sub>(𝑐 + 𝑉 ℎ<small>(𝑡)</small>) ⇔ 𝑦<sup>(𝑡)</sup> = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥 (𝑐 + 𝑉 ℎ<sup>(𝑡)</sup>)

<b>Tại đây, c cũng là một hệ số bias khác. Lúc này 𝜙</b><sub>2</sub> là một hàm 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑥).

Hình 2.5: Cấu trúc một tế bào RNN đầu ra rời rạc

Cứ như vậy, nhân này sẽ tiếp tục theo q trình đó xun suốt độ dài chuỗi. Tế bào nhân

<i>này được dàn trải (unfolding) ra, ta sẽ có một mạng có hình dáng như sau. </i>

Hình 2.6: Cấu trúc mạng RNN [5]

<small>Weight & Activation </small>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<b>Trạng thái ẩn h<small>t</small> là một bản sao của đầu ra dự đoán y<small>t </small></b>, ở tế bào đầu tiên của mạng thì trạng thái ẩn thường sẽ mang giá trị là 0. Mạng RNN có ưu điểm là nó có thể hoạt động bất kể chiều dài chuỗi đầu vào mà không tăng số lượng tham số bởi ta chỉ sử dụng duy nhất một

<i><b>nhân với ma trận trọng số W, U, V này để cập nhật qua các phần tử của chuỗi. Như hình </b></i>

<i>ví dụ trên ta thấy thì thực chất chỉ có một nhân được lặp qua 3 lần cho 3 phần tử liên tiếp chứ không phải 3 nhân tế bào như nhiều người vẫn lầm tưởng. Ví dụ về bài tốn dịch máy </i>

sử dụng mạng RNN như sau.

Hình 2.7: Mạng Nơ-ron Hồi tiếp cho bài toán dịch máy [5]

<i>Tuy nhiên mạng RNN cũng tồn đọng một vấn đề đó chính là vấn đề bộ nhớ ngắn hạn </i>

<i>(Short-term memory) tức là nếu đầu vào là một chuỗi càng dài, càng về sau trạng thái ẩn sẽ </i>

khơng cịn nhiều thơng tin về điểm bắt đầu của nó nữa. Vấn đề này cịn có một tên gọi khác

<i>là phụ thuộc xa (long-term dependencies), tức là tính tích một chuỗi dài các ma trận, giá trị gradient sau khi lan truyền qua nhiều giai đoạn có xu hướng tiêu biến (thường gặp) hoặc bùng nổ (ít khi xảy ra, có thể giải quyết bằng cắt gradient (clipping gradient)). Do đó kiến </i>

trúc mạng LSTM và GRU ra đời để giải quyết hạn chế này, thường là giải quyết việc đạo hàm tiêu biến.

<b>2.5.3. Mạng Nơ-ron Hồi tiếp hiện đại (LSTM và GRU) </b>

<i>Sự khác biệt đầu tiên so với RNN là các mạng hồi tiếp hiện đại như LSTM (Long </i>

<i>Short-Term Memory) và GRU (gated recurrent unit) có các cổng (gate) với cơ chế kiểm sốt </i>

<i>trạng thái ẩn, nghĩa là mạng sẽ có thể quyết định được những thông tin nào cần nhớ (cập </i>

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<i>nhật) và những thông tin nào có thể quên đi (xóa). Ý tưởng cốt lõi của mơ hình LSTM là </i>

sử dụng các vịng tự lặp để tạo ra các đường ống mà ở đó gradient có thể lan truyền trong một thời gian dài. Trong một tế bào LSTM có tính truy hồi nội tại (một vịng tự lặp) thay vì truy hồi bên ngoài như RNN và sử dụng hệ thống các cổng kiểm sốt dịng thơng tin.

<i>Tổng cộng sẽ có 3 cổng bao gồm: cổng vào (input gate), cổng quên (forget gate), cổng ra </i>

<i>(output gate). </i>

Hình 2.8: Cấu trúc một tế bào LSTM

<i>Cổng quên 𝑓</i><sub>𝑡</sub><i> (forget gate) sẽ quyết định xem sẽ giữ bao nhiêu phần trăm (%) thông tin từ </i>

trạng thái tế bào phía trước. Cổng vào 𝑖<sub>𝑡</sub><i> (input gate) quyết định sẽ giữ lại bao nhiêu phần trăm (%) thông tin từ bộ nhớ mới để tính vào trạng thái tế bào hiện tại. Cổng ra 𝑜</i><sub>𝑡</sub><i> (output </i>

<i>gate) sẽ quyết định bao nhiêu % thông tin từ trạng thái tế bào hiện tại ra ngoài trạng thái </i>

<i>ẩn (hidden state) ở đầu ra. Cả 3 cổng này đều dùng 𝑠𝑖𝑔𝑚𝑜𝑖𝑑(𝑥) làm hàm kích hoạt. Bộ </i>

nhớ mới 𝐶<sub>𝑡</sub> sẽ kết hợp giữa thông tin của đầu vào hiện tại với trạng thái ẩn của bước trước đó rồi dùng hàm 𝑡𝑎𝑛ℎ(𝑥) làm hàm kích hoạt, ta có thể coi đây như một mạng nơ-ron nhỏ. Ngồi ra, LSTM có thêm 1 trạng thái ẩn nữa là c<small>t</small>, . . , c<small>t+n</small> để sử dụng nội bộ sẽ vận chuyển

<i>thông tin xuyết suốt các bước thời gian (time-step). Nhờ vậy, mạng LSTM thường sẽ cho </i>

ra kết quả tốt hơn rất nhiều so với RNN truyền thống, mơ hình cho thấy khả năng học các phụ thuộc dài hạn tốt hơn. Về sau này mạng GRU ra đời như là một phiên bản tối giản hơn của LSTM.

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

Hình 2.9: Cấu trúc một tế bào GRU

Với chỉ có 2 cổng và loại bỏ trạng thái c<small>t</small> đã giúp cho hiệu xuất của mơ hình tăng lên đáng kể, ít tính tốn hơn, nhưng việc lựa chọn giữa LSTM hay GRU vẫn nên dựa vào bài toán cụ thể để đánh giá. Vì vậy ta cần kiểm thử cả 2 cấu trúc để đưa ra quyết định tối ưu. Tuy vậy so với RNN, thì LSTM và GRU vẫn chậm hơn do có nhiều bước tính tốn hơn, và một vấn đề nữa là cả 3 mạng này đều theo cơ chế tuần tự để tính tốn. Việc tính tuần tự

<i>như vậy sẽ khiến cho mơ hình bị chậm đi, một số mạng hiện đại như Transformer với cơ chế tập trung (attention) giúp ta có thể song song hóa làm tăng tốc độ tính tốn của mơ hình nhờ việc tận dụng tốt các luồng (threads) để sử dụng tối đa sức mạnh phần cứng. </i>

<b>2.5.4. Kiến trúc Mã hóa - Giải mã (Encoder - Decoder) </b>

<i>Bài toán dịch máy thường sử dụng mơ hình Chuỗi sang chuỗi (sequence to sequence </i>

<i>(seq2seq)) [9], hoặc có cách gọi khác cho dạng của nó là nhiều-nhiều (many-to-many) tức </i>

<i>ta sẽ sử dụng toàn bộ đầu ra từ đầu vào tương ứng, mơ hình này cũng được dùng cho bài tốn Nhận dạng giọng nói (speech recognition) . Ngồi ra cịn có 3 kiến trúc khác là một-nhiều (one-to-many) thường dùng cho bài toán sinh từ (text generation), nhiều-một (many-</i>

<i>to-one) thường dùng cho phân loại văn bản (text classification) và một cái tên nữa của </i>

<i>nhiều-nhiều gọi là Mã hóa-giải mã (encoder-decoder) được ứng dụng rất rộng rãi để xử lý </i>

các chuỗi đầu vào với độ dài khác nhau, chi tiết nằm ở [6].

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

Hình 2.10: Các kiểu kiến trúc của mạng hồi tiếp

<i>Cơ chế encoder và decoder hoạt động bằng cách encoder sẽ xử lý lần lượt từng giá trị vector đặc trưng của phần tử trong chuỗi đầu vào (vector sinh ra từ lớp embedding tương </i>

<i>ứng với đặc trưng của từ) và cố gắng nhét tồn bộ thơng tin đầu vào đó vào trong một vectơ ngữ cảnh (context vector) có độ dài cố định. Sau đó bộ mã hóa sẽ chuyển vector này sang </i>

bộ giải mã để giải mã đưa ra kết quả.

Hình 2.11: Kiến trúc mơ hình seq2seq.

<i><b>Cấu trúc Encoder </b></i>

Ví dụ chuỗi đầu vào 𝑥<sub>1</sub>, . . . , 𝑥<sub>𝑇</sub>, trong đó 𝑥<sub>𝑡</sub> là từ vựng tại bước thời gian thứ 𝑡. Lúc này một

<b>tế bào mạng nơ-ron hồi tiếp sẽ nhận 2 giá trị là vector đặc trưng x<small>t (vector embedding) của </small></b>

từ 𝑥<sub>𝑡</sub> và trạng thái ẩn ℎ<sub>𝑡−1</sub>của bước thời gian trước đó. Ta cho hàm 𝑓( ) là phép biến đổi các trạng thái ẩn của RNN.

ℎ<sub>𝑡</sub> <b>= 𝑓(x<small>t</small></b>, 𝒉<sub>𝒕−𝟏</sub>)

Tiếp tục như vậy ta sẽ có được các giá trị trạng thái ẩn ℎ<sub>1</sub>, . . , ℎ<sub>𝑇</sub> của toàn bộ chuỗi đầu vào, sau đó encoder sẽ mã hóa thông tin của trạng thái ẩn này qua hàm 𝑞 để có được vector ngữ cảnh 𝑐.

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

𝑃(𝑦<sub>𝑡′</sub>|𝑦<sub>1</sub>, . . . , 𝑦<sub>𝑡′−1</sub>, 𝑐)

<i>Tại bộ giải mã lúc này, ta coi đây như một RNN mới có các trạng thái ẩn là𝑠</i><sub>1</sub>, . . . , 𝑠<sub>𝑡′−1</sub>,

<i>lúc này trạng thái ẩn 𝑠</i><sub>𝑡′</sub><i><b> của tế bào ở decoder sẽ được tính dựa trên vector đặc trưng y</b></i><b><small>t’-1 </small></b>

của từ 𝑦<sub>𝑡′−1</sub> , vector ngữ cảnh c và trạng thái ẩn trước đó 𝑠<sub>𝑡′−1</sub>. Cũng giống như hàm 𝑓( )

<i>tại encoder, ta gọi 𝑔( ) là phép biến đổi các trạng thái ẩn của RNN này trên decoder. </i>

𝑠<sub>𝑡′</sub> <b>= 𝑔(y<small>t’-1</small></b>, 𝒄, 𝒔<sub>𝒕′−𝟏</sub>)

Trạng thái ẩn khởi tạo 𝑠<sub>0</sub><i> của decoder sẽ bằng với trạng thái ẩn cuối cùng ở encoder ℎ</i><sub>𝑇</sub>. Từ trạng thái ẩn 𝑠<sub>𝑡′</sub> này ta có thể kèm thêm một hàm kích hoạt rời rạc như softmax(x) để có đầu ra 𝑦<sub>𝑡′</sub> khi giả định đầu ra là rời rạc như đã được nhắc đến trước đó.

<b>2.5.5. Cơ chế Tập trung (Attention) </b>

<i>Hiểu một cách đơn giản thì cơ chế tập trung (attention mechanism) [10] cho phép mạng có </i>

thể chọn ra những phần tử nào trong chuỗi nên tập trung vào.

Hình 2.12: Mơ tả về cơ chế tập trung (attention)

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

<i>Ý tưởng của cơ chế này là sử dụng một vectơ ngữ cảnh (context vector) để tương tác với </i>

toàn bộ trạng thái ẩn của encoder. Nó gần như giải quyết vấn đề của seq2seq với những hạn chế khi nó buộc phải nén tất cả đầu vào thành một vector duy nhất, điều có thể gây khó khăn khi trích xuất thơng tin ở một số điểm mà có thể nó quan trọng hơn so với ở những điểm khác. Cơ chế này được ứng dụng rõ ràng hơn trong mạng Transformer hiện đại.

<b>2.5.6. Kiến trúc mạng Transformer </b>

Để giải quyết vấn đề tuần tự không thể song song và đạo hàm quá lớn hoặc quá bé của các mạng truy hồi truyền thống, năm 2017 nhóm nghiên cứu của Google Brain đã cho ra đời mơ hình Transformer [18]. Mơ hình này là một đột phá lớn trong việc xử lý dữ liệu liên tục và được ứng dụng rộng rãi trong các lĩnh vực như NLP (Xử lý ngôn ngữ tự nhiên) và Computer Vision (Xử lý ảnh).

<b>Hình 2.13: Kiến trúc mơ hình Transformer </b>

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

Mơ hình này gồm 2 thành phần là Khối Encoder và Khối Decoder giống như kiến trúc Seq2seq truyền thống. Tuy vậy, sự đột phá của mơ hình này đến từ sự xuất hiện của 3 kỹ

<i>thuật mới: Self-Attention, Multi-head Attention và Positional Encoding. </i>

<i><b>Tự tập trung (Self-attention) </b></i>

<i>Cụ thể lớp tự tập trung (self-attention) sẽ bao gồm 3 đầu vào là: Truy vấn (Query), Khóa </i>

<i>(Key) và Giá trị (Value). Áp dụng theo hướng Chú ý điểm tích có tỉ lệ (Scaled Dot-Product </i>

<i><b>Attention) như sau. </b></i>

<b>Hình 2.14: Scaled Dot-Product Attention </b>

Giả sử ta có chuỗi đầu vào là 𝑥<sub>1</sub>, . . , 𝑥<sub>𝑇</sub> , trong đó 𝑇 là độ dài chuỗi đầu vào, đưa chuỗi này qua lớp embedding độ dài 𝑑 ta có được vector embedding 𝑋<sub>𝑇×𝑑</sub> của chuỗi. Sau đó nhân lần lượt với 3 ma trận trọng số 𝑊<sub>𝑞</sub>, 𝑊<sub>𝑘</sub>, 𝑊<sub>𝑣</sub> để có được 3 vector ma trận 𝑄, 𝐾, 𝑉 tương ứng. Với 𝑑 là kích thước của vector embedding, để đơn giản, ta sẽ cho 𝑑 = 𝑑<sub>𝑘</sub> = 𝑑<sub>𝑣</sub>.

𝑄<sub>𝑇×𝑑</sub> = 𝑊<sub>𝑑×𝑑</sub><sup>𝑞</sup> ∙ 𝑋<sub>𝑇×𝑑</sub> với 𝑄 𝜖 ℝ<sup>𝑑</sup><small>𝑘</small>𝐾<sub>𝑇×𝑑</sub> = 𝑊<sub>𝑑×𝑑</sub><sup>𝑘</sup> ∙ 𝑋<sub>𝑇×𝑑</sub> với 𝐾 𝜖 ℝ<sup>𝑑</sup><small>𝑘</small>

𝑉<sub>𝑇×𝑑</sub> = 𝑊<sub>𝑑×𝑑</sub><sup>𝑣</sup> ∙ 𝑋<sub>𝑇×𝑑</sub> với 𝑄 𝜖 ℝ<sup>𝑑</sup><small>𝑣</small>

Tiếp tục ta sẽ nhân vô hướng ma trận 𝑄 với ma trận chuyển vị của 𝐾, ta thu được giá trị (𝑄𝐾<sup>⊤</sup>). Đây chính là giá trị của lớp 𝑀𝑎𝑡𝑀𝑢𝑙.

(𝑄𝐾<small>⊤</small>)<sub>𝑇×𝑇</sub> = 𝑄<sub>𝑇×𝑑</sub>∙ 𝐾<small>⊤𝑇×𝑑</small>

Tiếp tục ta sẽ tiến hành 𝑆𝑐𝑎𝑙𝑒 bằng cách chia cho căn bậc 2 của kích thước ma trận trọng số 𝑑 rồi đưa qua hàm 𝑠𝑜𝑓𝑡𝑚𝑎𝑥 ta sẽ có được ma trận điểm số 𝐴<sub>𝑇×𝑇</sub>. Ma trận này có giá trị các phần tử dao động trong khoảng [0,1] sẽ thể hiện mối quan hệ của từng từ trong câu với nhau ở từng vị trí thứ 𝑡 tương ứng.

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

𝐴<sub>𝑇×𝑇</sub> = 𝑠𝑜𝑓𝑡𝑚𝑎𝑥 ((𝑄𝐾<small>⊤</small>)<sub>𝑇×𝑇</sub>√𝑑 <sup>) </sup>

<i>Cuối cùng, ma trận giá trị tập trung 𝐴𝑡𝑡𝑒𝑛𝑡𝑖𝑜𝑛(𝑄, 𝑉, 𝐾) sẽ được tính bằng cách nhân vơ </i>

hướng 𝐴<sub>𝑇×𝑇</sub> với ma trận 𝑉<sub>𝑇×𝑑</sub> ban đầu.

𝐴𝑡𝑡𝑒𝑛𝑡𝑖𝑜𝑛(𝑄, 𝑉, 𝐾)<sub>𝑇×𝑑</sub> = 𝐴<sub>𝑇×𝑇</sub> ⋅ 𝑉<sub>𝑇×𝑑</sub>

<i>Như vậy ta đã đi qua cơng thức toán học của cơ chế Tự tập trung một đầu (Single Head </i>

<i>Self-Attention). Từ cơ chế này người ta đã </i>

<i><b>Tập trung đa đầu (Multi-head attention) </b></i>

<i>Ta có thể hình dung đơn giản, Tập trung đa đầu (Multi-head attention) là việc thực hiện cơ chế Tự tập trung (Self-attention) nhiều lần với mỗi một đầu (head) là một lần thực hiện </i>

tự tập trung. Sau đó sẽ tổng hợp kết quả ở lớp 𝐶𝑜𝑛𝑐𝑎𝑡, nhờ cơ chế này mà mạng Transformer có thể thực hiện song song khi tính tốn thay vì tuần tự.

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

Trong đó 𝑊<sub>𝑖</sub><small>𝑄</small> 𝜖 ℝ<sup>𝑑</sup><small>𝑚𝑜𝑑𝑒𝑙 × 𝑑</small><sub>𝑘</sub>, 𝑊<sub>𝑖</sub><sup>𝐾</sup> 𝜖 ℝ<sup>𝑑</sup><small>𝑚𝑜𝑑𝑒𝑙 × 𝑑</small><sub>𝑘</sub>, 𝑊<sub>𝑖</sub><sup>𝑉</sup> 𝜖 ℝ<sup>𝑑</sup><small>𝑚𝑜𝑑𝑒𝑙 × 𝑑</small><sub>𝑣</sub> là các trọng số cần học. Do việc giảm kích thước 𝑑<sub>𝑣</sub> =<sup>𝑑</sup><small>𝑚𝑜𝑑𝑒𝑙</small>

<small>ℎ</small> cho nên tổng chi phí tính tốn sẽ khơng tăng mà giữ ngun so với việc dùng self-attention với kích thước 𝑑<sub>𝑣</sub> = 𝑑<sub>𝑚𝑜𝑑𝑒𝑙</sub> .

<i><b>Positional Encoding </b></i>

<i>So với kỹ thuật Self-Attention và Multi-head Attention như đã trình bày ở phần trên thì </i>

<i>Positional Encoding chỉ đến việc mã hóa vị trí của từ đưa vào vector embedding của từ, ta </i>

bắt buộc phải mã hóa vị trí của input đầu vào trước khi đưa vào lớp encoder hoặc decoder

<i>(đi qua lớp Positional Encoding), bởi kiến trúc của Transformer không tuần như như RNN </i>

hoặc LSTM nên cơ chế scaled dot-product attention khơng thể biểu diễn được vị trí của

<i>một từ khi tạo ra vectơ ngữ cảnh của nó. Lớp Positional Encoding này là một ma trận có </i>

cùng kích thước với ma trận embedding được thực hiện qua hàm 𝑠𝑖𝑛 và 𝑐𝑜𝑠 có cơng thức như sau:

𝑃𝐸<sub>(𝑝𝑜𝑠,2𝑖)</sub> = 𝑠𝑖𝑛(𝑝𝑜𝑠/10000<small>2𝑖/𝑑𝑚𝑜𝑑𝑒𝑙</small>) 𝑃𝐸<sub>(𝑝𝑜𝑠,2𝑖+1)</sub> = 𝑐𝑜𝑠(𝑝𝑜𝑠/10000<small>2𝑖/𝑑𝑚𝑜𝑑𝑒𝑙</small>)

với 𝑝𝑜𝑠 là vị trí của từ trong câu và cũng là vị trí hàng trong ma trận PE, i là chiều thứ i

<i>của ma trận PE. Sau khi đã có được ma trận Positional Encoding ta sẽ cộng nó với ma trận </i>

embedding rồi nhân với √𝑑<sub>𝑚𝑜𝑑𝑒𝑙</sub> để nhúng thông tin về thứ tự của từ.

<i><b>Khối Encoder của Transformer: Bao gồm N = 6 lớp encoder (encoder layer) xếp chồng </b></i>

lên nhau với mỗi lớp sẽ có cấu trúc như sau:

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

Hình 2.16: Cấu trúc khối Encoder Transformer

<i>Ở lớp này sẽ bao gồm 2 lớp con thành phần (sub-layer) là lớp con thành phần thứ nhất bao gồm một lớp Multi-head Attention và Fully Connected Network để nhúng ngữ nghĩa các từ. Đầu ra của nó sẽ qua một lớp chuẩn hóa Add & Norm bao gồm lớp Residual Connection và Layer Normalization với mục tiêu hạn chế khả năng đạo hàm biến mất (vanishing </i>

<i>gradient) và giảm lỗi khi huấn luyện (training error), việc tính lớp này minh họa như sau: </i>

số mơ hình ngơn ngữ lớn hiện đại sử dụng kiến trúc Encoder có thể kể đến như BERT, DeBERTa.

<b>Khối Decoder của Transformer: Tương tự ở khối decoder cũng bao gồm N = 6 lớp </b>

<i>decoder (decoder layer) xếp chồng lên nhau với mỗi lớp có cấu trúc như sau: </i>

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

Hình 2.17: Cấu trúc khối Decoder Transformer

Tương tự với khối encoder thì khối decoder cũng có 2 lớp con thành phần giống encoder tuy nhiên sẽ xuất hiện thêm một lớp con thành phần thứ 3 nằm ở trước 2 lớp này để thực

<i>hiện attention với đầu ra của khối encoder phía trước. Ở đây là một lớp Masked Multi-head </i>

<i>Attention, về bản chất thì lớp này khơng khác gì so với lớp Multi-head Attention phía trên, </i>

tuy nhiên nó sẽ loại trừ những từ trong tương lai, tránh lấy thông tin từ các từ trong tương lai khi huấn luyện mơ hình. Mơ hình tiêu biểu sử dụng kiến trúc Decoder của Transformer kể đến như GPT.

<b>2.5.7. Mơ hình BERT </b>

<i>Ra đời năm 2018 bởi Devlin và các cộng sự tại Google, BERT (Bidirectional Encoder </i>

<i>Representations from Transformers) là một mơ hình tiền huấn luyện (pretrained model) sử </i>

dụng lớp Encoder của Transformer làm lõi chính. Mơ hình đã thực sự có hiệu quả khi đạt

<i>mức điểm số SOTA trên một loạt các tác vụ như hỏi đáp (question answering) và suy luận ngôn ngữ (language inference) mà không cần thực hiện việc sửa đổi cấu trúc của nó. Một </i>

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

<i>số ứng dụng của BERT hiện nay bao gồm: máy dịch (machine translation), phân tích cảm xúc văn bản (sentiment analysis), tóm tắt văn bản (text summarization) và hỏi đáp (question </i>

<i>answering). </i>

<b>Hình 2.18: Kiến trúc mơ hình BERT </b>

<i>Kiến trúc của mơ hình BERT tiêu chuẩn (BERT Base) bao gồm: một lớp embedding để encode câu đầu vào, một lớp gồm 12 các khối Transformer Encoder (kích thước ẩn = 768, </i>

<i>số lượng đầu self-attention = 12) và cuối cùng là một lớp mạng nơ ron kết nối hồn tồn (fully connected network). </i>

<b>Cách mơ hình BERT được tạo ra </b>

<i>Mơ hình được xây dựng trải qua 2 giai đoạn bao gồm: huấn luyện (pretraining) để mơ hình hiểu cấu trúc của ngơn ngữ tự nhiên và tinh chỉnh (fine-tuning) để sử dụng cho một tác vụ </i>

cụ thể.

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

<b>Hình 2.19: Quá trình huấn luyện BERT </b>

<i><b>Huấn luyện (pretraining): Mơ hình BERT được huấn luyện trên một tập dữ liệu lớn </b></i>

<i>(copus) sử dụng lớp embeddings WordPiece (30,000 token từ vựng) để encode với 2 mục </i>

<i>tiêu chính là huấn luyện mơ hình ngơn ngữ bằng cách che đi các từ (masked language </i>

<i>modeling - MLM) và dự đoán câu tiếp theo (next sentence prediction - NSP), cả 2 kỹ thuật </i>

này có thể được thực hiện đồng thời.

<i><b>• Việc huấn luyện bằng cách che (mask) - MLM được thực hiện bằng cách ở câu </b></i>

đầu vào mơ hình sẽ ngẫu nhiên thay thế một từ trong câu bằng token [MASK] rồi cố gắng dùng những từ còn lại xung quanh để dự đốn nó. Từ đây việc đi song song

<i>2 chiều (bidirectional) đã phát huy tác dụng khi mơ hình có thể nhìn thấy khơng </i>

gian tồn cảnh của câu. Việc che này được thực hiện ngẫu nghiên trên đầu vào với tỉ lệ 15% trên toàn bộ câu trong đó nếu một từ thứ 𝒊 được chọn thì 80% nó sẽ được thay thế bằng token [MASK], 10% là nó được thay thế bằng một từ khác và 10% cịn lại sẽ được giữ ngun. Do đó đầu ra của mơ hình BERT có thể được sử dụng như một lớp embedding của các từ được chắt lọc thông tin ngữ cảnh từ cả 2 hướng thông qua cơ chế seft-attention của từng khối Transformer encoder. Sau khi đã có

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

được đầu ra của khối này, sẽ được tiếp tục đưa qua một lớp mạng nơ ron kết nối

<i>hoàn toàn (fully connected network) với activation đầu ra là một hàm softmax nhằm tạo ra một vector phân bổ xác xuất của từng từ trong bộ từ vựng (vocab) tại vị trí </i>

tương ứng trong câu. Những giá trị xác xuất này sẽ cho ta biết được từ nào có khả năng cao phù hợp ở vị trí đó, đó là kết quả dự đốn của mơ hình. Trong q trình huấn luyện mơ hình BERT sẽ so sánh xác xuất của từ bị che MASK với từ tương ứng trong tập nhãn huấn luyện rồi xác định Cross Entropy Loss để cập nhật trọng số mơ hình.

<b>• Việc huấn luyện dự đoán câu tiếp theo - NSP sẽ được thực hiện bằng cách cho </b>

<i>đầu vào là các cặp chuỗi với ngăn cách ở giữa chúng là một token [SEP] (separate </i>

<i>token – token ngăng cách), tại đây mô hình sẽ cố gắng dự đốn xem hai chuỗi này </i>

có phải là một cặp câu liên tiếp nhau hay khơng? Như hình trên ta thấy với token

<i>[CLS] (classification token – token phân loại) sẽ quy định giá trị cho một giá trị đầu </i>

ra nhị phân C thể hiện kết quả của tác vụ NSP, nếu C = 1 thì 2 câu này là một cặp liên tiếp nhau, C = 0 thì ngược lại.

Từ đây ta có thể hiểu rằng BERT khi được huấn luyện có 2 phần là: lớp Transformer Encoder và một lớp Fully Connected. Sau khi đã huấn luyện không giám sát trên một tập

<i>dữ liệu lớn (copus) để mơ hình hiểu được về ngơn ngữ con người. Lớp Fully Connected sẽ </i>

được bỏ ra và lớp Transformer Encoder sẽ được giữ lại để sử dụng như một tầng embedding, tầng embedding này sẽ được sử dụng nhằm tạo ra các biểu diễn cho văn bản để tiếp tục phục vụ cho các bài toán khác.

</div>

×