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

XÂY DỰNG HỆ THỐNG PHÂN LOẠI VĂN BẢN TIẾNG VIỆT

73 1 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

Bài to¡n ph¥n lo⁄i v«n b£n, hay cÆn đưæc bi‚t đ‚n phŒ bi‚n tr¶n th‚ giới với c¡i t¶n Text Classification, là bài to¡n thuºc nhóm học có gi¡m s¡t (Supervised learning) trong học m¡y. Bài to¡n này y¶u cƒu dœ li»u đƒu vào cƒn g¡n nh¢n (label) trước. Mô h…nh s‡ học tł dœ li»u có nh¢n đó, sau đó mô h…nh đưæc dùng đ” dự đo¡n nh¢n cho c¡c dœ li»u mới mà mô h…nh chưa gặp. Mục ti¶u cıa ph¥n lo⁄i v«n b£n là tự đºng hóa ph¥n lo⁄i v«n b£n vào mºt hoặc nhi•u danh mục (chuy¶n mục) đ¢ đưæc x¡c định trước đó.Vi»c tự đºng ph¥n lo⁄i v«n b£n vào mºt chı đ• nào đó giúp cho vi»c s›p x‚p, lưu trœ và truy v§n tài li»u d„ dàng hơn v• sau

Trang 1

XÂY DỰNG HỆ THỐNG PHÂN LOẠI VĂN BẢN TIẾNG VIỆT

Trang 2

LỜI CẢM ƠN

Trước khi trình bày nội dung chính của đồ án, em xin gửi tới các thầy, cô của trườngĐại học Bách khoa Hà Nội lời chào trân trọng, lời chúc sức khỏe và lời cảm ơn sâu sắc.Với sự quan tâm, dạy dỗ, chỉ bảo tận tình chu đáo của thầy cô, em có thể tiếp thunhững kiến thức quan trọng, để em có thể hoàn thành đồ án tốt nghiệp và những côngviệc của em sau này.

Em xin gửi lời cảm ơn chân thành nhất tới giảng viên –ThS Nguyễn Duy Hiệp đãhướng dẫn và giúp đỡ em rất nhiều không chỉ trong quá trình thực hiện đồ án mà cònở một số môn học trong khoảng thời gian em ở trên giảng đường Cảm ơn thầy đã giúpđỡ em.

Cuối cùng, em xin chân thành cảm ơn gia đình và bạn bè, đã luôn tạo điều kiện,quan tâm, giúp đỡ, động viên em trong suốt quá trình học tập.

Hà Nội, ngày 10 tháng 06 năm 2021Sinh viên

Hoàng Mạnh Hiệp

Trang 3

TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP

Bài toán phân loại văn bản, hay còn được biết đến phổ biến trên thế giới với cáitên Text Classification, là bài toán thuộc nhóm học có giám sát (Supervised learning)trong học máy Bài toán này yêu cầu dữ liệu đầu vào cần gán nhãn (label) trước Môhình sẽ học từ dữ liệu có nhãn đó, sau đó mô hình được dùng để dự đoán nhãn chocác dữ liệu mới mà mô hình chưa gặp Mục tiêu của phân loại văn bản là tự động hóaphân loại văn bản vào một hoặc nhiều danh mục (chuyên mục) đã được xác định trướcđó.Việc tự động phân loại văn bản vào một chủ đề nào đó giúp cho việc sắp xếp, lưutrữ và truy vấn tài liệu dễ dàng hơn về sau.

Bài toán phân loại văn bản có rất nhiều cách tiếp cận, đơn giản nhất có thể sử dụngcác thuật toán học máy (machine learning) như: Naive Bayes, máy hỗ trợ vec-tơ(SVM),mô hình tuyến tính, Trong những thập niên gần đây, với sự phát triển nhanh chóngtốc độ xử lý của CPU, GPU và chi phí cho phần cứng ngày càng giảm, các dịch vụ hạtầng điện toán đám mây ngày càng phát triển, làm tiền đề và cơ hội cho phương pháphọc sâu Deep Learning Neural Network phát triển mạnh mẽ Kết hợp với các mô hình

trong lĩnh vực xử lí ngôn ngữ tự nhiên.

Trong phạm vi của đồ án, tôi đã cố gắng để thử nghiệm một vài phương pháp đãđược đề cập như sử dụng học sâu kết hợp với các mô hình học sẵn như Word2Vec,PhoBert áp dụng cho tiếng việt.

nơron

Trang 4

Mục lục

Chương 1 Giới thiệu đề tài 12

1.1.Đặt vấn đề 12

1.2.Mục tiêu và phạm vi của đề tài 12

1.2.1 Giới thiệu bài toán 12

1.2.2 Phạm vi 13

1.3.Hướng giải quyết 14

1.4.Bố cục đồ án 14

Chương 2 Dữ liệu văn bản Tiếng Việt 16

2.1.Đặc trưng văn bản tiếng Việt 16

2.1.1 Các đơn vị của tiếng Việt 16

2.1.1.1 Tiếng và đặc điểm của tiếng 16

2.1.1.2 Từ và các đặc điểm của từ 17

2.1.1.3 Câu và các đặc điểm của câu 17

2.1.2 Ngữ pháp của tiếng Việt 17

2.1.2.1 Trong phạm vi cấu tạo từ 17

2.1.2.2 Trong phạm vi cấu tạo câu 18

2.1.3 Từ tiếng Việt 18

2.1.3.1 Từ đơn - từ ghép 18

2.1.3.2 Từ loại 18

2.1.4 Các đặc điểm chính tả và văn bản tiếng Việt 19

2.2.Dữ liệu huấn luyện cho phương pháp sử dụng các mô hình học sâu 19Chương 3 Cơ sở lý thuyết 21

3.1.Mô hình mạng nơ-ron tích chập (Convolutional Neural Networks)

213.1.1 Giới thiệu về tích chập 21

3.1.2 Mô hình CNN 23

3.1.3 Một số ứng dụng của mô hình CNN 26

3.1.4 Áp dụng mô hình CNN vào trong NLP 27

3.2.Mô hình mạng trí nhớ ngắn hạng định hướng dài hạn (LSTM) 29

3.2.1 Mạng nơ ron hồi quy (RNN) 29

3.2.2 Một số ứng dụng mạng RNN 31

Trang 5

3.2.3 Hạn chế mạng nơ-ron hồi quy 31

3.2.4 Mô hình mạng trí nhớ ngắn hạn định hướng dài hạn(LSTM) 32

3.3.Mô hình học sẵn Word2Vec 36

3.3.1 Giới thiệu cách biểu diễn từ 36

3.3.2 Mô hình Word Embedding 37

3.4.3 Phương pháp transformer 42

3.4.4 Mô hình BERT 47

3.4.4.1 Tinh chỉnh mô hình BERT 47

3.4.4.2 Masked ML (MLM) 48

3.4.4.3 Next Sentence Prediction (NSP) 49

3.4.4.4 Các kiến trúc mô hình BERT 50

3.4.5 Mô hình PhoBert 50

3.4.5.1 Kiến trúc Roberta 51

3.4.5.2 Tìm hiểu về mã hóa BPE (Byte Pair Encoding) 51

Chương 4 Phương pháp giải quyết 53

4.6.Áp dụng với mô hình PhoBert 63

Chương 5 Đánh giá và cài đặt thử nghiệm 66

5.1.Phương pháp sử dụng mô hình Word2Vec 66

5.1.1 Áp dụng với CNN 66

5.1.2 Áp dụng với mô hình LSTM 68

5.1.3 Áp dụng với mô hình Bi-LSTM 70

5.2.Phương pháp sử dụng mô hình PhoBert 73

Chương 6 Kết luận và hướng phát triển 74

6.1.Kết luận 74

Trang 6

Danh sách hình vẽ

1.1 Bài toán phân loại văn bản 13

3.1 Quá trình trượt theo chiều rộng W1 22

3.2 Thêm padding kích thước P vào 2 lề chiều rộng W1 23

3.3 Quá trình trượt trên ma trận 23

3.4 Một layer của convolution 24

3.5 Một layer của convolution 25

3.6 Ví dụ sử dụng pooling kích thước 2*2 25

3.7 Ví dụ về pooling layer 26

3.8 Ví dụ về fully connected layer 26

3.9 Ví dụ mô hình CNN trong NLP 27

3.10 Quá trình nhân tích chập lấy ra feature maps 28

3.11 Mạng nơ-ron hồi quy 30

3.12 Cấu trúc trải phẳng của mạng nơ-ron hồi quy 30

3.13 Mạng nơ-ron truyền thẳng 31

3.14 Mô hình LSTM 33

3.15 Ví dụ về một cổng trong LSTM 33

3.16 Tầng cổng quên(Forget gate layer) 34

3.17 Cập nhật giá trị cho ô trạng thái bằng cách kết hợp 2 kết quả từ tầngcổng vào và tẩng ẩn hàm tanh 35

3.18 Ô trạng thái mới 35

3.19 Điều chỉnh thông tin ở đầu ra thông qua hàm tanh 36

3.20 Mô hình CBOW và mô hình skip-gram 38

3.21 Sơ đồ kiến trúc transformer kết hợp với attention 43

3.22 Toàn bộ tiến trình pre-training và fine-tuning của BERT trong hệ thốngquestion and answering 47

3.23 Sơ đồ kiến trúc BERT cho tác vụ Masked ML[7] 49

3.24 Next Sentence Prediction[7] 50

4.1 Sơ đồ huấn luyện Word2Vector Tiếng Việt 56

5.1 Kết quả mô hình CNN accuracy và valid với bộ dữ liệu crawl 67

5.2 Kết quả mô hình CNN accuracy và valid với bộ dữ liệu VNTC 67

5.3 Kết quả mô hình LSTM accuracy và valid với bộ dữ liệu crawl 68

Trang 7

5.4 Kết quả mô hình LSTM accuracy và valid với bộ dữ liệu VNTC 69

Trang 8

Danh sách bảng

5.1 Bảng kết quả mô hình CNN với dữ liệu crawl 67

5.2 Bảng kết quả mô hình CNN với dữ liệu VNTC 68

5.3 Bảng kết quả mô hình LSTM với dữ liệu crawl 69

5.4 Bảng kết quả mô hình LSTM với dữ liệu VNTC 70

5.5 Bảng kết quả mô hình Bi-LSTM với dữ liệu crawl 71

5.6 Bảng kết quả mô hình Bi-LSTM với dữ liệu VNTC 72

5.7 Bảng so sánh kết quả giữa các mô hình học sâu 72

5.8 Bảng kết quả mô hình PhoBert với dữ liệu crawl 73

Trang 9

Danh mục từ viết tắt và các thuật ngữ

Trang 10

• Phân loại cảm xúc của người viết bài (vui, buồn, tức giận ) từ mạng xã hội.• Phân loại thư rác (spam hoặc non-spam)

• Tự động gán nhãn các truy vấn của khách hàng.

• Phân loại các bài báo thành các chủ đề đã được xác định trước.

• Ứng dụng chatbot trong đó bài toán phân loại văn bản được sử dụng để pháthiện mục đích của người dùng.

Phân loại văn bản là một lĩnh vực nghiên cứu rất tích cực cả trong học tập và trongcác ngành công nghiệp Với mong muốn tìm hiểu về phân loại văn bản cũng như nhữngthuật toán học sâu, tôi quyết định chọn đề tài phân loại văn bản hay cụ thể hơn là bàitoán phân loại các bài báo vào chủ đề xác định trước.

Trang 11

• Đầu vào: Cho một đoạn văn bản tiếng Việt và nhiệm vụ cần phải phân loại vănbản này vào một trong các chủ đề đã cho trước.

• Đầu ra của bài toàn có thể là một hoặc nhiều nhãn mà văn bản thuộc thể loại đó.

Hình 1.1: Bài toán phân loại văn bản

Ví dụ : Lãi suất liên ngân hàng kỳ hạn dài có xu hướng giảm Giá USD liên ngânhàng, tự do và USD của các NHTM tương đối ổn định Trong ngày 11/3, giá mua USDtrên thị trường tự do giảm 5 đồng/1USD so với ngày 10/3, phổ biến ở mức 21.115đồng/1USD, giá bán không thay đổi ở mức 21.130 đồng/1USD Chênh lệch mua-bánlà 15 đồng/1USD Tỷ giá niêm yết tại hầu hết các ngân hàng thương mại hiện đangổn định so với ngày đầu tuần Tỷ giá mua của Vietcombank tăng nhẹ 5 đồng/1USDso với ngày hôm qua, trong khi tỷ giá bán vẫn được giữ nguyên, ở mức 21.080-21.120đồng/1USD; tỷ giá các ngân hàng thương mại khác như BIDV, Eximbank, Maritimeđều giữ nguyên mức 21.080-21.120 đồng/1USD Giá niêm yết tại ACB và MBB cũngđược giữ nguyên ở mức 21.075-21.115 đồng/1USD.

Thông tin thu được là: ngân hàng

• Trong phạm vi của bài toán, chỉ có thể phân loại văn bản tiếng Việt và đầu racủa bài toán có thể là một hoặc nhiều chủ đề cho trước ứng với văn bản đầu vào.• Do việc sử dụng với những dữ liệu tự thu thập được trên những trang báo nên

những chủ đề của văn bản chưa được đa dạng.

Trang 12

1.3.Hướng giải quyết

Trong đồ án này, tôi có cài đặt thử nghiệm các phương pháp sử dụng học sâu kếthợp với các mô hình học sẵn như: Word2Vec, PhoBert sử dụng trên tập dữ liệu tiếngViệt.

• Với phương pháp sử dụng mô hình học sẵn Word2Vec, tôi đã thử nghiệm vớicác mô hình học sâu: mô hình mạng nơ-ron tích chập (Convolutional NeuralNetworks), mô hình mạng trí nhớ ngắn hạng định hướng dài hạn (LSTM), môhình LSTM hai chiều Tôi xây dựng một tập dữ liệu đã gán nhãn sẵn với các vănbản tiếng Việt, sau đó tôi sử dụng mô hình để học tham số và đánh giá độ chínhxác dựa trên dữ liệu tôi thu thập được và so sánh khi học với bộ dữ liệu VNTC

• Với phương pháp sử dụng mô hình học sẵn PhoBert, tôi sử dụng lại mô hình nàyvà tinh chỉnh cho phù hợp với bài toán phân loại văn bản sau đó đánh giá độchính xác dựa trên dữ liệu tôi thu thập được và bộ dữ liệu VNTC cho dữ liệu tintức.

• Sau khi có kết quả đánh giá 2 mô hình học sẵn trên tôi tiến hành đánh giá dựatrên 2 bộ dữ liệu và đưa ra những ưu nhược điểm của từng mô hình trong bàitoán phân loại văn bản.

Chi tiết các phương pháp sẽ được trình bày ở các chương sau.

Đồ án được trình bày theo bố cục sau:

• Chương 1 - Mở đầu: giới thiệu đề tài, đặt vấn đề, mục tiêu phạm vi đề tài,định hướng giải pháp và bố bục đồ án

• Chương 2 - Dữ liệu văn bản Việt Nam: đặc điểm phân cấp hành chính, đặcđiểm địa chỉ Việt Nam, các dữ liệu địa chỉ sử dụng trong đồ án.

• Chương 3 - Cơ sở lý thuyết: cơ sở lý thuyết về các phương pháp, công nghệsử dụng trong đồ án.

• Chương 4 - Phương pháp giải quyết: trình bày về việc áp dụng các phươngpháp với bài toán chuẩn hóa địa chỉ.

• Chương 5 - Đánh giá và cài đặt thử nghiệm: trình bày về dữ liệu thửnghiệm, các kịch bản thử nghiệm, đánh giá độ chính xác của các phương pháptheo các kịch bản này.

Trang 13

• Chương 6 - Kết luận và hướng phát triển: Nhận xét tổng quan về đề tài,những khó khăn, thiếu sót trong đề tài cũng như phương hướng phát triển trongtương lai.

Trang 14

Chương 2

Dữ liệu văn bản Tiếng Việt

Văn bản là một loại hình phương tiện để ghi nhận, lưu giữ và truyền đạt các thôngtin từ chủ thể này sang chủ thể khác bằng ký hiệu gọi là chữ viết Nó gồm tập hợp cáccâu có tính trọn vẹn về nội dung, hoàn chỉnh về hình thức, có tính liên kết chặt chẽ vàhướng tới một mục tiêu giao tiếp nhất định Hay nói khác đi, văn bản là một dạng sảnphẩm của hoạt động giao tiếp bằng ngôn ngữ được thể hiện ở dạng viết trên một chấtliệu nào đó (giấy, bia đá, ) [1] Các văn bản tiếng Việt có các đặc trưng riêng, và cósự khác biệt về mặt kí pháp, cú pháp và ngữ pháp của tiếng Việt trong văn bản so vớicác ngôn ngữ phổ biến trên thế giới như tiếng Anh, tiếng Pháp

Tiếng Việt là một ngôn ngữ đơn lập, đặc điểm này bao quát toàn bộ đặc trưng tiếngViệt về mặt ngữ âm, ngữ nghĩa và ngữ pháp Do đó, chúng ta phải tiến hành nghiêncứu đặc điểm này của tiếng Việt để có thể có được hướng nghiên cứu phù hợp cho bàitoán xử lý phân loại văn bản tiếng Việt

Trong tiếng Việt, cũng như trong các văn bản tiếng Việt, tiếng là một thành phầnkhá quan trọng Trong ký pháp, mỗi tiếng đứng độc lập, và có thể phát hiện được ngaycác tiếng trong tiếng nói cũng như trong văn bản.

• Tiếng và giá trị ngữ âm: Ngữ âm chính là mặt âm của ngôn ngữ Trên thực tế,các ứng dụng liên quan đến tiếng Việt như dịch thuật, lưu trữ người ta vẫn ghilại âm thành dạng văn bản, sau đó mới tiến hành các thao tác xử lý Mỗi tiếngchính là một âm tiết và được ghi lại thành một cụm trong văn bản

• Tiếng và giá trị ngữ pháp: Nếu xét về mặt ngữ nghĩa thì tiếng là đơn vị nhỏ nhấtcó thể có nghĩa Thực ra ta có thể thấy rằng đơn vị ngữ âm thấp nhất là âm vịthì hoàn toàn không có nghĩa (ví dụ như các chữ cái đứng riêng rẽ) Tuy nhiên

Trang 15

cũng có những tiếng có nghĩa (ví dụ như ạ, ừ) Các tiếng bao gồm: các tiếng tựnó có nghĩa (ví dụ như chuông, bút, gió), các tiếng bản thân không hề có nghĩamà chỉ dùng để kết hợp tạo thành nghĩa cho đơn vị trực tiếp cao hơn, đó là từ(ví dụ: lãng,dãng không có nghĩa nhưng lãng đãng có nghĩa).

• Tiếng và giá trị ngữ pháp: Khía cạnh ngữ pháp bao gồm những quy tắc cấu tạotừ, cấu tạo câu Và ta có thể thấy rằng tiếng là đơn vị ngữ pháp dùng để cấu tạotừ Các tiếng cấu tạo nên từ bao gồm 2 trường hợp sau: từ một tiếng(ví dụ: cây,đá, hoa) và từ nhiều tiếng.

Trong nghữ pháp tiếng Việt, từ và câu là những đơn vị ngữ pháp rất quan trọng.Đối với con người, từ được coi như sẵn có trong kho từ vựng được tích luỹ trong quátrình sống Còn để có thể hiểu, giao tiếp thì con người phải dùng đến câu Trong ngônngữ, câu là đơn vị ở bậc cao hơn cả Nói gì, viết gì cũng phải thành câu

• Câu có ý nghĩa hoàn chỉnh: Tính hoàn chỉnh về nghĩa của câu là tính hoàn chỉnhcủa cả một quá trình tư duy, quá trình thông báo diễn ra trong một hoàn cảnhnhất định

• Câu có cấu tạo đa dạng: Câu có dạng đơn giản như là câu đơn, và còn có nhữngcấu trúc phức tạp hơn gọi là câu ghép Xét về mặt ngữ nghĩa, câu đơn có nhiềudạng khác nhau, biểu lộ những ý nghĩa, trạng thái, nội dung cần thông báo khácnhau.

Trong phạm vi cấu tạo từ, phương tiện ngữ pháp chủ yếu là sự kết hợp các tiếng.Trật tự sắp xếp các tiếng rất quan trọng trong cấu tạo từ Kết hợp hai phương tiệnnày, có hai phương thức cấu tạo từ chủ yếu là láy và ghép Láy là việc sắp đặt các tiếngthành đôi, kề cận nhau, có sự phối hợp về ngữ âm tạo nên nghĩa Ghép là việc sắp đặtcác tiếng thành nhóm, kề cận nhau, có sự phối hợp về ngữ nghĩa tạo nên nghĩa của từghép.

Trang 16

2.1.2.2 Trong phạm vi cấu tạo câuBao gồm các phương diện như sau:

• Trật tự sắp đặt các từ là phương tiện chính để biểu thị quan hệ ngữ pháp• Hư từ là những từ dùng để biểu thị một số những quan hệ cú pháp nhất định Ví

dụ trong câu Anh, chị đã đi chơi rồi, có thể dùng từ và để nối hai từ anh, chị đểlàm rõ hơn mối quan hệ liên hợp, bình đẳng giữa hai từ

Từ trong tiếng Việt có thể có một tiếng hay gồm nhiều tiếng Những từ nhiều tiếnglại có thể được ghép bởi những tiếng hay từ khác có nghĩa Ví dụ hai từ đất, nước ghépvới nhau thành một từ có ý nghĩa trừu tượng hơn là đất nước Những từ này được gọilà các từ ghép Do tồn tại cả hai dạng từ đơn (một tiếng) và từ ghép, do đó việc táchcác từ trong một câu là vấn đề quan trong.

• Danh từ (Việt Nam, Hà Nội)• Động từ (đi, đứng, soạn bài)• Tính từ (xấu, đẹp, trắng, đỏ)• Phó từ (sẽ, đã, rồi, rất)• Liên từ (của, thì)

• Đại từ (tôi, nó, anh, em, hắn)• Trợ từ (nhỉ, hả, nhé)

• Cảm từ (ái chà, chao ôi, vâng, dạ)• Loại từ (con, cái)

• Giới từ (cùng, với, bằng, để)• Số từ (một, hai)

• Trạng từ (hôm qua)

Trang 17

2.1.4.Các đặc điểm chính tả và văn bản tiếng ViệtMột số vấn đề về chính tả tiếng Việt mà ta cần quan tâm như sau:• Các từ đồng âm thường sử dụng tùy tiện như “Mĩ”/“Mỹ”, “kĩ”/“kỹ”

• Từ địa phương: Người ta vẫn hay sử dụng một số từ địa phương thay cho các từphổ thông trong văn bản Ví dụ “cây kiểng” thay cho “cây cảnh”

• Vị trí dấu: Theo quy định đánh dấu tiếng Việt, dấu được đặt trên nguyên âm cóưu tiên cao nhất Tuy nhiên khi soạn văn bản, do có nhiều bộ gõ tiếng Việt khácnhau nên nhiều khi dấu được đặt không theo chuẩn Ví dụ hai chữ: “hỏa” hay“hoả”.

• Cách viết hoa: Theo quy định, đầu câu và đầu tên riêng phải viết hoa Tuy nhiênvẫn tồn tại một số cách viết như sau: “Công ty Xi măng Hà nội”.

• Phiên âm tiếng nước ngoài: Các cách viết như ví dụ sau vẫn mặc định được chấpnhận trong văn bản tiếng Việt: “Singapore”/ “Xinh-ga-po”

• Từ gạch nối: Do cách viết dấu gạch nối tuỳ tiện nên không thể phân biệt giữa nốitên riêng hay chú thích.

các mô hình học sâu

Trong phạm vi của đồ án lần này, tôi sử dụng mô hình các mô hình học sâu trongbài toán phân loại văn bản.

Về dữ liệu huấn luyện, được thu thập từ các nguồn:

từng bài báo vì vậy đã được gán nhãn cụ thể Trong bộ dữ liệu này tôi đã thuthâp được theo 8 chủ đề sau:

Trang 18

– Điện ảnh: 4866 văn bản– Du lịch: 5367 văn bản– Giáo dục: 5330 văn bản– Kinh doanh: 5750 văn bản– Ngân hàng: 5408 văn bản– Sức khỏe: 2984 văn bản– Thể thao: 3967 văn bản

– Thời sự pháp luật: 5718 văn bản

các thư mục, mỗi thư mục bao gồm nhiều đoạn văn bản trong đó.

Trang 19

Tích chập là một khái niệm trong xử lý tín hiệu số nhằm biến đổi thông tin đầuvào thông qua một phép tích chập với bộ lọc để trả về đầu ra là một tín hiệu mới Tínhiệu này sẽ làm giảm những đặc trưng mà bộ lọc không quan tâm và chỉ giữ lại nhữngđặc trưng chính Mạng tích chập hay sử dụng nhất là tích chập 2 chiều được áp dụngtrên ma trận đầu vào và ma trận bộ lọc 2 chiều Phép tích chập của một ma trận :

trải qua các bước sau:

• Tính tích chập tại 1 điểm: Tại vị trí đầu tiên trên cùng của ma trận đầu vào ta

• Tiến hành trượt dọc ma trận theo chiều từ trái qua phải, từ trên xuống dưới với

quá trình này kết thúc ta sẽ thu được mà trận đầu ra Y hoàn chỉnh.

Trang 20

Trong một mạng nơ ron tích chập, đầu vào của các tầng ở sau chính là đầu ra của cáctầng ở phía trước Do đó việc xác định chính xác giá trị đầu ra của mỗi tầng sẽ giúpchúng ta hạn chế lỗi khi xây dựng mô hình Việc này có thế dựa vào kích thước đầu

Trong quá trình trượt, mỗi dòng tương ứng với một bước Tại mỗi bước ta cần phải

dư ở bước cuối cùng ta phải tiến hàng lát(padding) nhằm mục đích mở rộng thêm matrận để quá trình tích chập không bị dư ô.

Trang 21

Hình 3.2: Thêm padding kích thước P vào 2 lề chiều rộng W1

CNN là một mạng nơ ron bao gồm nhiều layer(tầng) Các layer trong mô hình CNNđược gọi là Convolution layer do nó sử dụng các thuật toán Convolution Ở đây ta cóthể hiểu convolution là sử dụng một cửa sổ trượt để tính toán các giá trị ma trận đầura Ví dụ:

Hình 3.3: Quá trình trượt trên ma trận

Trong hình trên ta sử dụng một ma trận đầu vào X kích thước 5x5 và cửa sổ trượtS kích thước 3x3 Ma trận đầu ra Y sẽ được tính bằng cách nhân từng vùng của X vớima trận S sau đó tính tổng của phép nhân này lại.

Trong CNN, các cửa sổ trượt này thường được gọi là các kernel, filter, Feature Detectorvà kích thước của các cửa sổ này thường là 3x3, 5x5, 7x7 Mục đích của việc sử dụngcác cửa sổ trượt này là để phát hiện các pattern trong dữ liệu đầu vào như: cạnh, đốitượng, Ngoài ra ta có thể sử dụng nhiều filter để có thể phát hiện nhiều patternskhác nhau Ví dụ: filter 1 để phát hiện vertical edge, filter 2 để phát hiện Horizontaledge khi đó kết quả thu được sẽ ở dạng 3 chiều Thêm giá trị bias b vào mỗi đầu racủa bộ filter và sử dụng 1 hàm activation (hàm kích hoạt) ta sẽ thu được kết quả đầura của một layer convolution như hình dưới đây.

Trang 22

Hình 3.4: Một layer của convolution

Thông thường trong mô hình CNN ta sử dụng nhiều convolution layer và mỗi layercó một nhiệm vụ phát hiện các pattern nhất định Các layer sau thường sẽ phát hiệncác pattern ở mức độ cao hơn các layer trước và đầu ra của các layer trước sẽ là đầuvào của layer tiếp theo sau nó.

Ví dụ: layer 1 để phát hiện các cạnh trong một hình ảnh, layer2 sử dụng các cạnh nàyđể phát hiện các shape của đối tượng và layer 3 lại sử dụng các shape này để phát hiệncác bộ phận như chân, tay, mắt,

Trong CNN để giúp model (mô hình) có độ chính xác cao hơn người ta thường kết hợpthêm các Pooling Layer và Fully Connected Layers.

• Lớp Pooling: pooling layer thường được dùng giữa các convolutional layer, để giảmkích thước dữ liệu nhưng vẫn giữ được các thuộc tính quan trọng Kích thước dữliệu giảm giúp giảm việc tính toán trong model.Giả sử đầu vào của pooling layercó kích thước H*W*D, pooling có kích thước là K*K Ta tách ma trận đầu vàora làm D ma trận có kích thước H*W và với mỗi ma trận thực hiện tìm giátrị lớn nhất hoặc thực hiện tính giá trị trung bình rồi viết vào ma trận kết quả.Trong ví dụ dưới đây ta sử dụng một max pooling với kích thước 3*3, stride = 1và padding = 0 Sau khi trượt lần lượt từng bước ta thu được ma trận kết quả làma trận nhỏ ở góc trái của ảnh.

Trang 23

Hình 3.5: Một layer của convolution

Tuy nhiên đa số các mô hình thường sử dụng với pooling có kích thước 2*2, stride= 2 và padding = 0 Với kích thước pooling này, người ta có thể giảm chiều dàivà chiều rộng của dữ liệu đi một nửa mà vẫn giữa nguyên được chiều sâu.

Hình 3.6: Ví dụ sử dụng pooling kích thước 2*2

Có hai loại pooling là max-pooling: lấy giá trị lớn nhất và avg-pooling: lấy trungbình các giá trị.

Trang 24

Hình 3.7: Ví dụ về pooling layer

• Lớp Fully Connected: Sau khi đã giảm kích thước đến một mức độ hợp lý, matrận cần được trải phẳng (flatten) thành một vector và sử dụng các kết nối hoàntoàn giữa các tầng Quá trình này sẽ diễn ra cuối mạng CNN và sử dụng hàmkích hoạt là ReLU Tầng kết nối hoàn toàn cuối cùng (fully connected layer) sẽcó số lượng đơn vị bằng với số classes và áp dụng hàm kích hoạt là softmax nhằmmục đích tính phân phối xác xuất.

Hình 3.8: Ví dụ về fully connected layer

Mô hình CNN thường sử dụng cho các dữ liệu đầu vào dạng ảnh Dưới đây là mộtsố ứng dụng của mô hình này:

• Image Classification: bài toán phân loại ảnh, phân loại chữ viết,

• Các bài toán phân tích video như: nhận dạng mặt trong video, bài toán ô tô tựlái,

• Ngoài ra gần đây CNN cũng được ứng dụng trong lĩnh vực xử lí ngôn ngữ tựnhiên, mô hình này giúp giảm bớt thời gian huấn luyện mà đạt được kết quảtương đối ấn tượng.

Trang 25

3.1.4.Áp dụng mô hình CNN vào trong NLP

Mặc dù mô hình CNN thường được áp dụng cho lĩnh vực xử lí ảnh tuy nhiên, gầnđây nó đã được áp dụng vào các vấn đề về NLP và kết quả rất đáng mong đợi.Khiáp dụng CNN vào NLP, ta coi đoạn văn bản là một ma trận 2 chiều với hàng là cáctokens trong câu và giá trị của hàng chính là giá trị vector của từng token(ở đây sửdụng kĩ thuật Word Embedding mà tôi sẽ trình bày ở phần sau) Ta có kích thước củama trận đầu vào:height= len(tokens), width=dimension(WordEmbedding) Áp dụngvới các layer convolution ta sẽ sử dụng các bộ lọc cũng là các ma trận 2 chiều và kíchthước bộ lọc thường sẽ là:

• width: giá trị này sẽ bằng giá trị width của đầu vào

• heigth: giá trị này thường sẽ là 3, 4, 5 tương ứng với 3-grams, 4-grams, 5-grams.Việc áp dụng mô hình CNN vào NLP có thể mô tả như trong hình dưới đây [2]

Hình 3.9: Ví dụ mô hình CNN trong NLP

Trong mô hình này chúng ta sử dụng 3 bộ lọc có kích thước lần lượt là 2, 3, 4 và vớimỗi kích thước có 2 bộ lọc khác nhau Các bộ lọc thực hiện nhân tích chập(convolution)lên ma trận của câu văn đầu vào và mỗi bộ lọc tạo ra một map lưu trữ các đặctrưng(features map) Có tất cả 6 map đặc trưng này từng map sẽ đi qua 1-max pooling– để lấy giá trị lớn nhất trong mỗi map đặc trưng và lưu lại Do vậy, một vector có 1phần tử được tạo ra ở mỗi map đặc trưng Sau đó, các giá trị này được nối lại với nhautạo nên lớp gần cuối ở trong hình Và cuối cùng, kết quả này đi qua một hàm softmax

Trang 26

ví dụ này ta giả sử đây là bài toán phân loại văn bản chỉ có 2 lớp(binary classification)nên ở đây đầu ra chỉ có 2 trạng thái.

Đầu vào của ví dụ trên sử dụng câu văn “I like this movie very much!” Câu văn nàycó 6 từ và một dấu câu nữa Dấu câu này ở đây sẽ được coi như là một từ Như vậy làchúng ta có 7 từ tất cả Ở đây ta chọn số chiều của word vector là d = 5(tức là mỗi từ

x 5.

Một tính chất của thuật toán CNN trong xử lý ảnh là giữ được tính không gian 2 chiềutheo góc quan sát của máy tính Văn bản cũng có tính chất này như ảnh Nhưng thayvì 2 chiều, văn bản chỉ có một chiều và đó là các chuỗi từ liên tiếp Ở ví dụ trên mỗitừ lại là một vector 5 chiều, do vậy ta cần cố định số chiều của bộ lọc cho phù hợp vớisố chiều của từ Như vậy bộ lọc của chúng ta nên có kích thước (? x 5) Dấu ? thể hiệnsố từ(số hàng) mà chúng ta muốn lấy vào Ở đây, tác giả sử dụng 6 bộ lọc, các bộ lọcđược sử dụng có kích thước (2, 3, 4) từ.

Tại bước feature maps này là lúc bộ lọc nhân tích chập(convolutions / filtering) Chitiết được mô tả như hình dưới đây.

Hình 3.10: Quá trình nhân tích chập lấy ra feature maps

Ảnh phía trên thực hiện việc tính toán cho bộ lọc có kích thước là 2(2 từ) Với giátrị đầu tiên, bộ lọc màu vàng kích thước 2 x 5 thực hiện nhân từng thành phần với 2hàng đầu tiên của văn bản(I, like) Giá trị đầu tiên được tính như sau:

0.51 = 0.6 ∗ 0.2 + 0.5 ∗ 0.1 + 0.2 ∗ 0.2 + + 0.1 ∗ 0.1.

Trang 27

Quá trình này liên tiếp trượt xuống từng dòng một cho đến khi hết độ dài văn bản.Đến đây ta thu được ma trận đầu ra có kích thước là 6x1 Để đảm giá trị của map đặctrưng, chúng ta cần sử dụng một activation function(ReLu).

Để đưa ma trận đặc trưng này về kích thước như nhau Hoặc trong nhiều trường hợpngười ta chỉ muốn giữ lại các đặc trưng tiêu biểu Chúng ta có thể sử dụng max-poolingđể lấy ra các giá trị lớn nhất trong map đặc trưng Điều này giúp giảm chiều dữ liệu,tăng tốc độ tính toán Trong ví dụ này, ta sử dụng 1-max-pooling Tức là lấy ra 1 giátrị lớn nhất trong từng map đặc trưng Việc này giúp ta có ma trận output có cùng

lấy 1 đặc trưng trội nhất ở tất cả các lớp cnn để phục vụ cho bài toán.

của 6 thành phần(bằng số bộ lọc) Vector cố định kích thước này sau đó được đưa vàomột hàm softmax(lớp fully-connected) để giải quyết việc phân loại.

dài hạn (LSTM)

Trong mô hình mạng nơ-ron thông thường (Feed forward network), dữ liệu đầu vàothường là các dữ liệu độc lập và không có mối liên hệ với nhau Tuy nhiên, trong ngônngữ tự nhiên thì mối liên hệ giữa các từ và ngữ cảnh đóng một vai trò quan trọng, quyếtđịnh ý nghĩa của câu văn Do đó việc áp dụng mô hình mạng nơ-ron thông thường vàocác bài toán NLP thì kết quả thu được thường không như mong muốn.

Và mô hình RNN ra đời đã giải quyết vấn đề này Trong RNN, dữ liệu đầu vào là mộtchuỗi liên tục nối tiếp nhau theo thứ tự thời gian Ví dụ, một đoạn văn bản có thể coilà một chuỗi các từ (words) hoặc chuỗi các kí tự (character).

t+1 Việc này chính là điểm mạnh của mô hình RNN đó là có thể lưu trữ và truyềnthông tin đến thời điểm tiếp theo Mô hình hoạt động của RNN có thể được mô tảtrong hình dưới đây (thông thường hàm activation function gh được sử dụng là tanhcòn gy có thể là sigmoid hoặc softmax function tùy thuộc vào từng bài toán cụ thể).

Trang 28

Hình 3.11: Mạng nơ-ron hồi quy

qua bước khác của mạng nơ-ron.

được gọi là các timesteps): Trong các mô hình mạng nơ-ron thông thường thì kết quả

Hình 3.12: Cấu trúc trải phẳng của mạng nơ-ron hồi quy

đầu ra của một layer cũng trở thành đầu vào để tính toán kết quả cho layer tiếp theo.Tuy nhiên điểm khác biệt với các mô hình mạng nơ-ron thông thường là:

• Mạng nơ-ron thông thường: sử dụng các ma trận trọng số (weights matrix) tại

Trang 29

• Speech to text: Chuyển giọng nói sang text.

• Sentiment classification: phân loại số sao cho các bình luận, ví dụ: input: “ứngdụng tốt”, output: 4 sao.

• Machine translation: Bài toán dịch tự động giữa các ngôn ngữ.• Video recognition: Nhận diện hành động trong video.

• Heart attack: Dự đoán đột quỵ tim.

Một trong những điểm đặc biệt của mô hình hồi quy đó là nó có khả năng kết nốicác thông tin liền trước với nhiệm vụ hiện tại.

Trang 30

đằng trước "chim bay trên bầu " ta có thể dự đoán được từ cần điền là "trời" Trongtình huống này, khoảng cách tới thông tin có được cần để dự đoán là nhỏ, nên RNNhoàn toàn có thể học được Tuy nhiên, trong nhiều tình huống ta cần phải sử dụngnhiều ngữ cảnh hơn để dự đoán như ví dụ sau: hôm qua tôi đi học nhưng không mangáo mưa Trên đường đi học trời mưa Cặp sách của tôi bị ướt chúng ta cần phải học vớingữ cảnh dài hơn để dự đoán từ ướt Ở đây, ta cần biết sự kiện trước đó là trời mưavà không mang áo mưa để suy ra sự kiện bị ướt Tuy nhiên, với khoảng cách càng lớndần thì RNN bắt đầu không thể nhớ và học được nữa[3].

Về mặt lý thuyết thì RNN có thể xử lý và lưu trữ thông tin của một chuỗi dữ liệu với độdài bất kỳ Tuy nhiên trong thực tế thì RNN chỉ tỏ ra hiệu quả với chuỗi dữ liệu có độdài không quá lớn (short-term memory hay còn gọi là long-term dependency problem).Một trong những nguyên nhân chính được giải thích đó là sự triệt tiêu đạo hàm củahàm cost function sẽ diễn ra khi trải quả chuỗi dài các tính toán truy hồi[4] Một phiênbản mới của mạng RNN là mạng LSTM ra đời nhằm khắc phục hiện tường này nhờmột cơ chế đặc biệt.

Mạng trí nhớ ngắn hạn định hướng dài hạn còn được viết tắt là LSTM là một kiếntrúc đặc biệt của RNN có khả năng học được sự phục thuộc trong dài hạn (long-termdependencies) được giới thiệu bởi Hochreiter & Schmidhuber (1997)[5] Mô hình LSTMđã khắc phục được tương đối nhiều hạn chế của mô hình RNN về vấn đề triệt tiêu đạohàm Cấu trúc của mô hình này phức tạp hơn mô hình RNN nhưng vấn giữ được cáctư tưởng chính của nó đó là sự sao chép các kiến trúc theo dạng chuôi Hình dưới đâythể hiện một trạng thái thứ t của mô hình LSTM.

của trạng thái trước đó.

Trang 31

Hình 3.14: Mô hình LSTM

Mô hình LSTM bao gồm 4 tầng ẩn bao gồm 3 tầng có hàm kích hoạt sigmoid và 1tầng có hàm kích hoạt tanh Phép cộng trong mô hình này là cộng ma trận, phép nhântương ứng với element-wise multiplication[6].

Ý tưởng chính của mô hình LSTM chính là các ô trạng thái (cell state) - chính là một

tất cả các mắt xích (các nút mạng) và chỉ tương tác tuyến tính đôi chút Do đó, cácthông tin có thể dễ dàng truyền đi thông suốt mà không sợ bị thay đổi Các cell statenày được coi là bộ nhớ của mô hình LSTM và có thể lưu trữ bộ nhớ của các trạng tháiđầu tiên Do đó, nó tránh được hiện tượng phụ thuộc gần (short-term memory).Trong mô hình LSTM, nó có khả năng tự loại bỏ hoặc thêm các thông tin cần thiếtcho các ô trạng thái và cổng (gate) trong mô hình này đảm nhận công việc này Cổngthường kết hợp bởi một hàm sigmoid và một phép nhân như trong hình dưới đây.

Hình 3.15: Ví dụ về một cổng trong LSTM

Trang 32

cả, và bằng 1 cho tất cả các thông tin đi qua Với mỗi ô trạng thái sẽ được hình thànhtừ 3 cổng: Forget gate, Input gate và Output gate

• Forget gate (cổng quên): tầng này có nhiệm vụ quyết định thông tin của các ôtrạng thái trước đó (t-1) có được giữ lại hay không Thông tin đầu vào là giá trị

khi các giá trị output càng gần 1 thì thông tin sẽ được giữ lại, ngược lại thôngtin sẽ bị loại bỏ.

Hình 3.16: Tầng cổng quên(Forget gate layer)

• Input gate (cổng vào): Tầng này có nhiệm vụ quyết định xem thông tin nào sẽđược lưu trữ vào ô trạng thái Trong cổng này bao gồm 2 phần: phần đầu là mộttầng ẩn của hàm sigmoid được gọi là tầng cổng vào (input gate layer) quyết địnhgiá trị bao nhiêu sẽ được cập nhật, phần còn lại là tầng ẩn hàm tanh sẽ tạo ra

định xem thông tin có được cập nhật hay không.

Ví dụ: Trong mô hình ngôn ngữ, chúng ta muốn thêm loại của một chủ ngữ mớivào ô trạng thái để thay thế phần trạng thái cũ muốn quên đi.

Trang 33

Hình 3.17: Cập nhật giá trị cho ô trạng thái bằng cách kết hợp 2 kết quả từ tầng cổngvào và tẩng ẩn hàm tanh

Hình 3.18: Ô trạng thái mới

cho trạng thái tiếp theo Đầu tiên, chúng ta chạy qua một tầng sigmoid nơi quyếtđịnh phần nào của ô trạng thái sẽ ở đầu ra.Sau đó, ô trạng thái được đưa quahàm tanh (để chuyển giá trị về khoảng -1 và 1) và nhân nó với đầu ra của mộtcổng sigmoid, do đó chỉ trả ra phần mà chúng ta quyết định.

state).

Trang 34

Hình 3.19: Điều chỉnh thông tin ở đầu ra thông qua hàm tanh

Trong mô hình xử lí ngôn ngữ tự nhiên, đầu vào sẽ là các chữ số và dấu câu Vậycâu hỏi đặt ra là làm sao có từ đầu vào là các từ và dấu câu có thể đưa vào mô hìnhmạng nơ-ron Kĩ thuật one-hot véc-tơ là một phương pháp biểu diễn giúp ta thực hiệnviệc này Trước khi biểu diễn từ ta cần xác định từ điển của văn bản Từ đó ta có thểmã hòa từ thành véc-tơ và các câu thành ma trận.

One-hot véc-tơ: Giả sử ta có 1 tập gồm n từ vựng bao gồm:anh, em, bạn bè, thầycô, gia đình Mỗi từ sẽ được đại diện bởi index của chính nó, ví dụ từ anh có index=0,em có index=1, Giá trị one-hot véc-tơ của từ vựng thứ i (với i <= n-1) là vector

• Mối quan hệ tương quan giữa các cặp từ bất kì luôn là không tương quan (tứcbằng 0) Do đó không có tác dụng trong việc tìm mối liên hệ về nghĩa.

• Kích thước của véc tơ sẽ phụ thuộc vào số lượng từ vựng có trong bộ văn bảndẫn đến chi phí tính toán rất lớn khi tập dữ liệu lớn.

• Khi bổ sung thêm các từ vựng mới số chiều của véc tơ có thể thay đổi theo dẫnđến sự không ổn định trong shape.

Từ những hạn chế trên, mô hình nhúng từ(word embedding) được tạo ra để tìm vec-tơđại diện cho mỗi từ sao cho: một từ được biểu diễn bởi véc-tơ có số chiều xác địnhtrước, các từ cùng một nhóm thì có khoảng cách gần nhau.

Trang 35

3.3.2.Mô hình Word Embedding

Word Embedding là một kĩ thuật trong xử lí ngôn ngữ tự nhiên để chuyển hóa text(characters, words hoặc phrases) thành dạng vector số để từ đó làm đầu vào cho việchuấn luyện các mô hình Deep learning Các vec-tơ từ biểu diễn theo phương pháp wordembedding thể hiện được ngữ nghĩa của các từ.

Có rất nhiều mô hình word embedding và được chia vào 3 nhóm chính:

• Mô hình nhúng từ dựa trên tần suất: là phương pháp vector hóa dựa trên tần sốxuất hiện của các từ trong Corpus Ví dụ tiêu biểu về phương pháp này là Glove(đề xuất năm 2014) và TF-IDF.

• Mô hình sử dụng các thuật toán giảm chiều dữ liệu như: SVD, PCA, auto encoder,word2vec

• Mô hình sử dụng mạng nơ-ron: là phương pháp vector hóa dựa trên kết quả củamột mô hình dự đoán Ví dụ: word2vec, ELMo, BERT.

Trong phạm vi của đề tài tôi sử dụng mô hình word2vec và mô hình PhoBert phục vụcho bài toán.

Mô hình Word2Vec học trực tiếp các vec-tơ của các từ và có số chiều thấp trongquá trình dự đoán các từ xung quanh Đặc điểm của phương pháp này là nhanh và cóthể dễ dàng biểu diễn 1 câu văn bản mới hoặc thêm từ điển Word2Vec là một mạngneural 2 lớp với duy nhất 1 tầng ẩn, lấy đầu vào là một corpus (bộ văn bản) lớn vàsinh ra không gian vector(với số chiều khoảng vài trăm) thông thường số chiều hay sửdụng là 300 hoặc 400, với mỗi từ duy nhất trong corpus được gắn với một vector tươngứng trong không gian Với các từ tương tự nhau sẽ có giá trị vector gần giống nhau.Ví dụ như vector của King, Queen hoặc vector của Man, Woman là tương tự nhau vàđặc biệt ta có King – Man + Woman ≈ Queen Mô hình word2vec có hai cách tiếp cậnchính:

• Mô hình CBOW (Continuous Bag of Words): Sử dụng ngữ cảnh để dự đoán mụctiêu

• Mô hình skip-gram: Sử dụng một từ để dự đoán ngữ cảnh mục tiêu

Trang 36

Hình 3.20: Mô hình CBOW và mô hình skip-gram

Trong mô hình skip-gram một từ có thể được sử dụng để sinh ra các từ khác xungquanh nó trong một chuỗi văn bản Ví dụ như: "the", "man", "loves", "his", "son".Khi ta sử dụng từ "loves" làm trung tâm và đặt kích thước cửa sổ ngữ cảnh bằng 2.Mô hình skip-gram đến xác suất có điều kiện sinh ra các từ ngữ cảnh sao cho khoảngcánh nhỏ hơn hoặc bằng 2.

Ta giả sử rằng, với từ đích trung tâm cho trước, các từ ngữ cảnh được sinh ra độc lậpvới nhau Khi đó, công thức (3.3.1) có thể được viết lại thành:

P ("the" | "loves") ∗ P ("man" | "loves") ∗ P ("his" | "loves") ∗ P ("son" | "loves")(3.3.2)Trong mô hình skip-gram, mỗi từ sẽ được biểu diễn dưới 2 véc-tơ d-chiều để tính xácsuất điều kiện Ta giả sử, chỉ số của một từ trong từ điển là i, véc-tơ biểu diễn của từ

thể thu được xác suất có điều kiện sinh ra từ ngữ cảnh từ một từ đích trung tâm chotrước bằng phép toán softmax trên tích vô hướng của vector như sau:

Trong đó tập chỉ số của bộ từ vựng là V = {0, 1, , |V| − 1} Giả sử chuỗi văn bản có

hợp lý (likelihood) của mô hình skip-gam là xác suất kết hợp sinh ra tất cả các từ ngữcảnh với bất kì từ trung tâm nào.

Ngày đăng: 25/06/2024, 17:38

Xem thêm:

w