8 Tổng kết
4.6 Mô hình tổng quan của Universal Transformer
KIẾN TRÚC MÔ HÌNH HỎI-ĐÁP Sự khác biệt cơ bản giữa mô hình Universal Transformer và mô hình Transformer gồm những điểm sau đây:
• Mô hình Universal Transformer áp dụng encoder cho một số lượng biến thiên cho mỗi token (T lần), trong khi đó mô hình Transformer áp dụng chính xác 6 tầng encoder.
• Universal Transformer có một sự thay đổi nhỏ khi biểu diễn dữ liệu đầu vào: thêm vào “timestep embedding” cùng với “positional embedding”
Hình 4.7: Trạng thái tính toán6của khối Encoder Block trong Universal Transformer Sự khác biệt ở 2 ý đầu tiên, lượng biến thiên số lượng tính toán đạt được bằng cách dùng cơ chế “Adaptive Computation Time” [7], có thể giải thích ngắn gọn rằng “Adaptive Computation Time” là một cơ chế động trên từng vị trí dừng tính toán, cho phép số lượng khác nhau số lần tính toán của mỗi kí tự. Hình 4.7 diễn tả cách tính toán trong mỗi khối Encoder trong mô hình Universal Transformer.
Một ví dụ tại sao cơ chế tính toán trên Universal Transformer lại hữu ích. Xét câu sau: “I arrived at the bank after crossing the river”. Trong trường hợp này, từ “bank” cần nhiều quá trình tính toán để suy diễn hơn là các từ ít tối nghĩa như “I” hay là “river”. Khi encode câu này với mô hình Transformer cơ bản, số lần tính toán được áp dụng một cách không điều kiện lên tất cả các từ. Đối với cơ chế của UT sẽ cho phép mô hình thực hiện tăng số lần tính toán với các từ tối nghĩa: ví dụ tính toán nhiều hơn từ “bank” để làm sáng tỏ nghĩa, trong khi thực hiện ít tính toán trên các từ đã rõ nghĩa.
Cơ chế ACT1[7] có thể được hiểu một cách tóm tắt như sau.
• Ở mỗi bước chúng ta có những tham số như sau:
– Vector xác suất Halting probabilities và trạng thái biểu diễn trước của các từ (được khởi tạo bởi các giá trị 0).
– Mỗi biến scalar gọi là giá trị ngưỡng halt có giá trị ở giữa 0 và 1 (giá trị này là do chúng ta chọn để dừng tính toán)
• Đầu tiên chúng ta sẽ tính toán trạng thái mới cho mỗi vị trí dùng Universal Transformer. 5Tham khảo tại: Universal Transformer [4]
6Tham khảo tại:https://glassboxmedicine.com/2019/09/07/universal-transformers/
1Tham khảo code hiện thực: https://github.com/cfiken/universal_transformer/blob/master/ model/ut.py
KIẾN TRÚC MÔ HÌNH HỎI-ĐÁP
Hình 4.8: Mô hình QANet với kiến trúc Transformer
• Tiếp đến chúng ta tính toán giá trị “pondering” sử dụng một tầng fully-connected để chuyển vector trạng về giá trị scala. Đây là giá trị “pondering”, giá trị này sẽ giúp mô hình ước tính cần thêm bao nhiêu tính toán cho mỗi giá trị đầu vào.
• Chúng ta sẽ quyết định dừng tính toán cho mỗi vị trí mà vượt giá trị halt:
– Dừng tính toán nếu: halting probability + pondering) > halt threshold
– Tiếp tục tính toán: (halting probability + pondering) halt threshold
• Với những vị trí tiếp tục tính toán, cập nhật vector halting probabilities: halting probability += pondering
• Cập nhật vector biểu diễn cho các ví trị còn lại cho đến khi mô hình dừng tính toán trên tất cả vị trí hoặc đạt đến giá trị ngưỡng số lần tính toán tối đa.
Với mô hình QANet với kiến trúc Transformer này, nhóm đã thay thế Encoder Block thông thường bằng khối Recurrent Encoder Block trong mô hình Universal Transformer. Sau quá trình thử nghiệm nhiều cách khác nhau, nhóm chọn cách tích hợp tối ưu nhất đó là nhóm chỉ thay khối Encoder Block ở tầng Encoder của QANet còn phần Decoder của QANet nhóm vẫn giữ nguyên kiến trúc cũ để đạt được độ chính xác cao trên hai hàm đánh giá là: F1_score và EM.
Chương 5
Hiện thực mô hình
Với bất kì bài toán nào trong xử lý ảnh hoặc xử lý ngôn ngữ từ nhiên đều cần đến quá trình tiền xử lý dữ liệu. Bởi vì mô hình sẽ cần một dạng dữ liệu đầu vào thống nhất và xóa bỏ những phần dữ liệu dư thừa không ảnh hưởng đến ý nghĩa bài toán hoặc kết quả của mô hình. Đặc thù của xử lý ngôn ngữ tự nhiên khi dùng mạng học sâu thì tiền xử lý là bắt buộc vì mô hình sẽ không "hiểu được" những từ ở mức kí tự như "deep learning" mà chỉ hiểu được khi tất cả từ được biểu diễn dưới dạng số.
Mỗi phần dưới đây, chúng tôi sẽ nêu ra chi tiết nhóm đã hiện thực các công việc như thế nào và những cách giải quyết.
5.1 Tiền xử lý dữ liệu
Như đã đề cập ở trên, những bài toán sử dụng mạng học sâu để dự đoán đều cần đến quá tình tiền xử lý dữ liệu và xử lý ngôn ngữ tự nhiên cũng vậy. Phần xử lý ngôn ngữ tự nhiên này là bắt buộc vì thứ nhất giúp mô hình hiểu được dữ liệu đầu vào, vì mô hình chỉ làm việc với những con số không làm việc với dữ liệu ở mức kí tự, thứ hai tiền xử lý giúp cho giải thuật dễ dàng cho quá trình training, suy diễn.
Đối với bộ dữ liệu cho hệ thống Hỏi-Đáp như SQuAD [16] được lưu trữ dưới dạng file JSON gồm 5 trường chủ yếu sau:
• Đoạn văn (context): gồm nhiều câu dưới dạng kí tự mô tả một chủ đề nào đó, với bộ SQuAD v1.1 thì đáp án của câu hỏi sẽ nằm trong đoạn văn này.
• Câu hỏi (query): câu hỏi về một vấn đề nằm trong đoạn văn.
• Câu trả lời (answer): có thể là một từ, cụm từ, một câu hoặc 1 con số là đáp án của câu trả lời tương ứng.
• Vị trí bắt đầu câu trả lời: là số thứ tự của kí tự bắt đầu câu trả lời trong đoạn văn bản.
• Id: đây là mã số cho mỗi của cặp câu hỏi và câu trả lời để phân biệt các cặp câu hỏi và câu trả lời trong tập dữ liệu.
Trong đó 3 trường dữ liệu đoạn văn, câu hỏi và đáp án được dùng để huấn luyện mô hình; vị trí bắt đầu câu trả lời được dùng trong quá trình đánh giá độ chính xác; mã số được dùng để truy vấn lại cặp câu hỏi và câu trả lời khi cần thiết.
Phân rã dữ liệu
Nhóm sẽ phân rã dữ liệu thô của tập SQuAD về dạng cấu trúc có thể dùng để huấn luyện mô hình, song song với việc phân rã là chuyển đổi các mẩu dữ liệu thành các token, lấy ra tập
HIỆN THỰC MÔ HÌNH hợp các token và tập hợp các kí tự xuất hiện trên toàn bộ tập dữ liệu để chuẩn bị cho công đoạn số hoá sau đó. Bên cạnh đó, nhóm cũng biểu diễn mỗi từ trong đoạn văn bằng một cặp giá trị số là vị trí bắt đầu và vị trí kết thúc của từ đó trong đoạn văn (bắt đầu từ đầu tiên của đoạn văn có vị trí là 0). Việc này giúp kiểm tra tính chính xác của dữ liệu, và cũng để lấy ra vị trí bắt đầu và vị trí kết thúc của câu trả lời nằm trong đoạn văn.
Ví dụ: Giả sử chúng ta có đoạn văn ngắn một câu:“Super Bowl 50 was an American football game.”, khi biểu diễn đoạn văn bằng cặp giá trị chứa vị trí bắt đầu và vị trí kết thúc là: [0, 5], [6, 10], [11, 13], [14, 17], [18, 20], [21, 29], [30, 38], [39, 43], [44, 45].
Sau khi phân rã dữ liệu, mục tiêu cần thu được đó là hai danh sách: một dùng để huấn luyện và một dùng để kiểm tra độ chính xác.
• Danh sách thứ nhất: dùng để huấn luyện mô hình, mỗi mẩu dữ liệu sẽ gồm các thành phần:
– context_tokens: danh sách chứa các token của đoạn văn.
– context_chars: danh sách chứa các danh sách kí tự của từng token trong đoạn văn. – ques_tokens: danh sách chứa các token của câu hỏi.
– ques_chars: danh sách chứa các danh sách kí tự của từng token trong câu hỏi. – y1s: vị trí bắt đầu của câu trả lời nằm trong đoạn văn.
– y2s: vị trí kết thúc cuả câu trả lời nằm trong đoạn văn. – id: mã id dùng để phân biệt các mẩu dữ liệu.
HIỆN THỰC MÔ HÌNH
Ví dụ:Chúng ta có đoạn văn:“Super Bowl 50 was an American football game.” và câu hỏi:“What is Super Bowl 50?”. Sau quá trình phân rã sẽ thu được:
1 {
2 context_tokens: [" Super ", " Bowl ", "50", " was ", " an ",
3 " American ", " football ", " game ", "."], 4 5 context_chars: [ 6 [‘S ’, ‘u ’, ‘p ’, ‘e ’, ‘r ’], 7 [‘B ’, ‘o ’, ‘w ’, ‘l ’], 8 [‘5’, ‘0’], 9 [‘w ’, ‘a ’, ‘s ’], 10 [‘a ’, ‘n ’],
11 [‘A ’, ‘m ’, ‘e ’, ‘r ’, ‘i ’, ‘c ’, ‘a ’, ‘n ’], 12 [‘f ’, ‘o ’, ‘o ’, ‘t ’, ‘b ’, ‘a ’, ‘l ’, ‘l ’], 13 [‘g ’, ‘a ’, ‘m ’, ‘e ’],
14 [‘.’]
15 ],
16
17 ques_tokens: [" What ", " is ", " Super ", " Bowl ", "50", 18 "?"], 19 20 ques_chars: [ 21 [‘W ’, ‘h ’, ‘a ’, ‘t ’], 22 [‘i ’, ‘s ’], 23 [‘S ’, ‘u ’, ‘p ’, ‘e ’, ‘r ’], 24 [‘B ’, ‘o ’, ‘w ’, ‘l ’], 25 [‘5’, ‘0’], 26 [‘?’] 27 ], 28 29 y1s: [4], 30 y2s: [7], 31 id: " abpikxkqrttzurz " 32 }
Nếu câu trả lời là “an America football game”, thì vị trí bắt đầu của câu trả lời là từ token 5, và vị trí kết thúc là token thứ 7 (thứ tự đếm từ 0).
• Danh sách thứ hai: dùng để đánh gía trong từng bước huấn luyện (epoch) và dùng để đánh giá sau khi huấn luyện. Gồm các thành phần:
– context: chứa chuỗi là đoạn văn.
– spans: danh sách chứa các cặp giá trị vị trí bắt đầu và vị trí kết thúc tương ứng với từng
token trong đoạn văn.
– answers: chứa chuỗi là câu trả lời. – uuid: chứa mã dùng để phân biệt.
HIỆN THỰC MÔ HÌNH
Ví dụ:Chúng ta có đoạn văn:“Super Bowl 50 was an American football game.” và câu hỏi:“What is Super Bowl 50?”. Câu trả lời được định là “an America football game”:
{
c o n t e x t : " Super Bowl 50 was an American f o o t b a l l game . " ,
s p a n s : [ [ 0 , 5 ] , [ 6 , 1 0 ] , [ 1 1 , 1 3 ] , [ 1 4 , 1 7 ] , [ 1 8 , 2 0 ] , [ 2 1 , 2 9 ] , [ 3 0 , 3 8 ] , [ 3 9 , 4 3 ] , [ 4 4 , 4 5 ] ] ,
answers : " an America f o o t b a l l game " , u u i d : " a b p i k x k q r "
}
Việc lưu trữ như trên sẽ tiện lợi cho quá trình kiểm thử , với gái trị đầu ra của mô hình, sẽ lấy đuợc vị trí bắt đầu và kết thúc của câu trả lời thông qua spans. Sau đó thực hiện đánh gía độ chính xác bằng nhãn của mẩu dữ liệu làanswer
Chọn các vector từ tương ứng từ tập embedding
Trong quá trình phân rã dữ liệu trước đó, song song với việc sinh ra hai danh sách chứa mẫu dữ liệu cho việc huấn luyện và kiểm tra, nhóm cũng tính ra được các từ và các kí tự xuất hiện trong văn và câu hỏi, từ đó chọn ra các vector từ tương ứng trong thư viện GloVe (hoặc fasttext) và lập thành một ma trận với mỗi hàng là một vector từ.
Đầu ra của quá trình này là hai tập từ điển và hai ma trận chứa các vector biểu diễn, lần lượt là một biểu diễn từ và một biểu diễn kí tự:
• Tập từ điển token: lưu cặp khóa - giá trị với khóa là token còn giá trị là trị số chỉ mục của vector biểu diễn token đó trong ma trận chứa các vector được lấy ra từ thư viện GloVe. Nhóm sẽ cho các giá trị chỉ mục này lớn hơn hoặc bằng 2, bởi vì hai giá trị 0 và 1 nhóm sẽ dùng để đại diện cho 2 token: <NULL> và <OOV>; token <NULL> được dùng trong trường hợp độ dài của mẩu dữ liệu đoạn văn hoặc câu hỏi ngắn hơn so với độ dài được chọn làm chuẩn, thì token <NULL> sẽ đại diện cho các từ còn thiếu để đưa độ dài chuỗi token về bằng với độ dài chuẩn; Token <OOV> được dùng để đại diện cho các từ có trong đoạn văn hoặc câu hỏi nhưng không có trong thư viện GloVe( hoặc thư viện fasttext)
• Tập từ điển kí tự: lưu cặp khóa- gía trị với khóa là kí tự còn giá trị là trị số chỉ mục của vector biểu diễn đó trong ma trân chứa các vector kí tự. Do thư viện GloVe không cung cấp các biểu diễn cho kí tự, nên nhóm sẽ tạo ngẫu nhiên các vector này theo phân phối chuẩn có độ lệch chuẩn là 0.1. Các giá trị chỉ mục 0 và 1 cũng đại diện cho <NULL> và <OOV>.
HIỆN THỰC MÔ HÌNH
Ví dụ:Chúng ta có đoạn văn:“. ”. Khi đó gỉa sử ta có được tập từ điển token như sau: { "−−NULL−−" : 0 , "−−OOV−−" : 1 , " Super " : 2 , " Bowl " : 3 , " 50 " : 4 , " was " : 5 , " an " : 6 , " American " : 7 , " f o o t b a l l " : 8 , " game " : 9 , " . " : 10 }
Ma trận tập hợp các vector biểu diễn token, chỉ số của mỗi vector biểu diễn trong ma trận trùng với trị số chỉ mục của token đó trong tập từ điển.
[ [ 0 . 0 0 . 0 0 . 0 0 . 0 . . . 0 . 0 ] , [ 0 . 0 0 . 0 0 . 0 0 . 0 . . . 0 . 0 ] , [ 0 . 3 4 6 0 . 6 4 2 0 . 9 1 1 0 . 2 8 7 . . . 0 . 6 1 1 ] , . . . [ 0 . 7 7 9 0 . 6 1 1 0 . 2 2 6 0 . 3 6 9 . . . 0 . 2 0 1 ] ]
Số hóa các mẩu dữ liệu:
Nhóm cố định chiều dài của đoạn văn là 400 và chiều dài cuả câu hỏi là 50. Mỗi token cố định với chiều dài 16 kí tự. Nhóm sẽ lược bỏ các token có vị trí lớn hơn độ dài 400, ngược lại thêm vào các token <NULL> nếu độ dài đoạn văn không đủ 400, làm tương tự đối với các kí tự. Mục tiêu của quá trình này là chuyển các mẫu dữ liệu (gồm đoạn văn và câu hỏi) về dạng vector số hóa với mỗi từ trong đoạn văn và mỗi kí tự trong đoạn văn sẽ được thay bằng chỉ mục tương ứng đã được đánh số từ quá trình trước. Đầu ra cuả quá trình này sẽ gồm có các thành phần:
• context_idxs: ma trận chứa các đoạn văn được biểu diễn dưới dạng các số nguyên đại diện
cho các token. Ma trận gộp từ các vector được số hoá đại diện cho mỗi đoạn văn, với kích thước vector là 400.
• context_char_idxs: ma trận chứa các đoạn văn được biểu diễn dưới dạng các số nguyên
đại diện cho các kí tự. Đây là một ma trận ba chiều, lần lượt là chiều dài nhất chuẩn của đoạn văn(400), chiều dài chuẩn của mỗi token (16), và số lượng tập mẫu.
• ques_idxs: ma trận chứa các câu hỏi được biểu diễn dưới dạng các số nguyên đại diện cho
các token. Ma trận gộp từ các vector được số hoá đại diện cho mỗi câu hỏi, với kích thước vector là 50.
• ques_char_idxs: ma trận chứa các câu hỏi được biểu diễn dưới dạng các số nguyên đại diện
HIỆN THỰC MÔ HÌNH chiều dài chuẩn của mỗi câu hỏi là 50.
• y1s: danh sách chứa vị trí bắt đầu của câu trả lời trong đoạn văn của từng mẩu dữ liệu.
• y2s: danh sách chứa vị trí kết thúc của câu trả lời trong đoạn văn của từng mẩu dữ liệu.
• id: danh sách chứa mã của từng mẩu dữ liệu.
Ví dụ:Ta có đoạn văn: “Super Bowl 50 was an American football game.”. Giả sử ta có tập từ điển token như ví dụ trên và tập từ điển kí tự như sau:
{ ‘S ’ : 2 , ‘ u ’ : 3 , ‘ p ’ : 4 , ‘ e ’ : 5 , ‘ r ’ : 6 , ‘B ’ : 7 , ‘ o ’ : 8 , ‘w’ : 9 , ‘ l ’ : 10 , ‘5 ’ : 11 , ‘0 ’ : 12 , ‘ a ’ : 13 , ‘ s ’ : 14 , ‘ n ’ : 17 , ‘A’ : 18 , ‘m’ : 19 , ‘ i ’ : 2 0 , ‘ c ’ : 21 , ‘ f ’ : 22 , ‘ t ’ : 23 , ‘ g ’ : 24}
Khi đó ta sẽ thu được mẩu dữ liệu sau khi số hóa: { c o n t e x t _ i d x s : [2 3 4 5 6 7 8 9 1 0 ] , c o n t e x t _ c h a r _ i d x s : [ [2 3 4 5 6 ] , [7 8 9 1 0 ] , . . . ] , q u e s _ i d x s : . . . , q u e s _ c h a r _ i d x s : . . . }
Đến đây là hoàn tất quá trình tiền xử lí dữ liệu, số hóa toàn bộ đoạn văn và câu hỏi thành các con số đại diện, để thuận tiện cho việc luư trữ và tính toán, nhóm sẽ lưu các ma trận và vector này vào kiểu dữ liệu của numpy. Kết quả của quá trình xử lí dữ liệu sẽ được dùng trong các quá trình huấn luyện và kiểm tra.
5.2 Huấn luyện mô hình
Để tiến hành huấn luyện mô hình dữ liệu đầu vào là văn bản và câu hỏi. Trong đó với mỗi văn bản hoặc câu hỏi đều được biểu dạng ở hai mức: token và kí tự. 4 vector biểu diễn là:c_word,
q_word, c_char, q_char, các vector này đều có chiều dài cố định, nếu các vector có chiều dài nhỏ hơn giá trị mặc định sẽ được gán cho giá trị 0. Với tập dữ liệu SQuAD v1.1 gồm hơn 100 nghìn điểm dữ liệu thì mỗi điểm dữ liệu sẽ là một bộ 4 vector như thế. Ngoài 4 thành phần trên,