BERT FOR TOEIC
Nội dung
Giới thiệu
Thi Toeic là vấn đề chung và nhức nhối của sinh viên. Thậm chí nhiều bạn học xong hết rồi nhưng vì vướng tiếng anh nên vẫn ra trường. Mục đích của bài này là ứng dụng Natural Language Processing (NLP) để giải quyết câu hỏi trong phần 5 của bài thi Toeic. Trong bài thi Toeic thì phần 5 chiếm đến 40/100 câu của bài đọc.
![](https://i1.wp.com/nttuan8.com/wp-content/uploads/2020/07/2.jpg?fit=1024%2C576&ssl=1)
Quá trình thực hiện
Thu thập dữ liệu
Dữ liệu được thu thập từ các bài thi toeic có trên các trang web cũng như các sách ETS, bộ Economy. Dữ liệu sau khi thu thập được lưu lại dưới dạng json gồm 3625 câu có cấu trúc như sau:
“3625”: {
“1”: “across”,
“2”: “into”,
“3”: “between”,
“4”: “despite”,
“answer”: “across”,
“question”: “Employees ___ several departments have been encouraged to minimize costs.”
}
Phần điền từ sẽ để thành dấu ___ để sau tiện xử lý trong code.
Dữ liệu và code được public ở đây.
Mô hình sử dụng
Giới thiệu Bert
Bert là viết tắt của Bidirectional Encoder Representations from Transformers là pre-trained model học ra các vector đặc trưng theo ngữ cảnh 2 chiều của từ, được sử dụng để transfer sang các bài toán khác trong lĩnh vực NLP. Dùng Bert làm pre-trained model đạt hiệu suất cao hơn các phương pháp trước đây trên nhiều bài toán về NLP như setiment analysis, question answer, NER. Chi tiết thêm về mô hình Bert mọi người xem thêm tại đây. Hiện tại, mô hình Bert của Google chưa có ngôn ngữ tiếng Việt. Tuy nhiên, viện nghiên cứu VinAI đã train mô hình Bert với tiếng Việt, gọi là PhoBert.
Giới thiệu Toeic Bert và Fit Bert
Điểm chung của Toeic Bert và Fit Bert là 2 mô hình đều sử dụng kết quả quả BertForMaskLM (trong thư viện Transformers) để đưa đáp án đúng nhất.
Câu hỏi sẽ được chuyển thành chuỗi các token(Tokenizer) các đoạn ‘___’ được thay thế thành [MASK]. Tokenizer sử dụng WordPiece embeddings với một từ điển 30.000 từ và sử dụng ## làm dấu phân tách. Ví dụ từ playing được tách thành play##ing.
Qua BertForMaskLM ta sẽ được 1 vector độ dài bằng số từ trong từ điển chứa xác suất mỗi từ để điền vào ngữ cảnh [MASK]. Toeic Bert sẽ chọn từ có xác suất lớn nhất lớn nhất trong đáp án. Kết quả đạt được độ chính xác ~80% với các đáp có 1 từ.
Fit bert sẽ dùng hàm softmax để tính xác suất đúng nhất. Với các đáp có hai từ trở lên thì sẽ nhân xác suất của các từ với nhau. Từ đó chọn ra từ có xác suất đúng nhất. Độ chính xác ~90% với đề thi gốc.
Hai mô hình này được phát triển dựa trên một bài báo đánh giá khả năng kiểm tra cú pháp của Bert.
Toeic Bert
Các câu trả lời được chuyển thành chuỗi token tương tự như câu hỏi. Các câu trả lời được thay thế vào [Mask] và được tính điểm cho mỗi từ. Đối với các đáp án gồm nhiều từ thì lấy điểm trung bình. Đáp án được chọn là đáp án có điểm cao nhất (chi tiết xem thêm tại đây).
#get score for options
def get_score(self,question_tensors, segment_tensors, masked_index, candidate):
candidate_tokens = tokenizer.tokenize(candidate)
candidate_ids = tokenizer.convert_tokens_to_ids(candidate_tokens)
predictions = model(question_tensors, segment_tensors)
predictions_candidates = predictions[0,masked_index,
candidate_ids].mean()
return predictions_candidates.item()
Fit Bert
Cũng giống như toeic Bert đầu vào là một câu hỏi khoảng trống cần điền được thay bằng ***mask***, các đáp án được có thể được điền vào chỗ trống sẽ được để trong list options. Hàm rank_with_prob hàm đưa ra các điểm số cho các đáp án, đáp án được lựa chọn là đáp án có điểm số cao nhất (chi tiết hàm rank_with_prob bạn có thể xem thêm tại đây).
from fitbert import FitBert
fb = FitBert()
masked_string = "Why Bert, you're looking ***mask*** today!"
options = ['buff', 'handsome', 'strong']
ranked_options = fb.rank_with_prob(masked_string, options=options)
Cài đặt
Thư viện flask được sử dụng để triển khai dự án trên web. Các bước cài đặt trên máy tính cá nhân như sau.
- Bước 1: clone repository sau: https://github.com/tranvien98/fill_toeic.git
- Bước 2: Cài đặt các thư viện cần thiết: pip install -r requirements.txt
- Bước 3: Chạy chương trình: python main.py
Quá trình chạy có thể mất nhiều thời gian. Giao diện của chương trình hiển thị ở địa chỉ localhost:4040
Câu hỏi phải nhập đúng định dạng như trong tab example thì mới có thể dự đoán được kết quả. Phần cần điền để 3 dấu _ . Các lựa chọn được phải bắt đầu bằng (A|B|C|D)
Kết luận
Mô hình BERT thực hiện rất tốt trên nhiều các bài toán về NLP. Tương lai không xa nhưng mô hình deep learning có thể giải quyết cả đề thi Toeic, Ielts, Toefl.