Hình 4 .1 Mơ hình hiện thực bài toán
Hình 4.3 Kiến trúc hiện thực mơ hình ngơn ngữ mức từ
Mơ hình gần giống với mơ hình mức kí tự nhưng đơn giản hơn do lượng dữ liệu huấn luyện ở mức từ sẽ ít hơn nhiều. Tuy nhiên, các trọng số lớp embedding sẽ được huấn luyện bên ngồi trước với mơ hình CBOW và Skip-gram, sau đó sẽ được load lên trước khi huấn luyện và sẽ không được cập nhật trong suốt quá trình huấn luyện. Lớp cuối cùng tuỳ theo mỗi bộ dữ liệu mà có kích thước khác nhau, do chứa nhiều tên riêng và nhiễu, nếu giữ ngun sẽ làm cho chất lượng mơ hình kém và độ phức tạp của mơ hình rất lớn. Vì thế, khi huấn luyện các trọng số cho lớp embedding đối với dữ liệu wiki, chỉ giữ lại những từ có tần số xuất hiện trên 10 lần để loại bỏ bớt nhiễu. Kết quả, sau khi lọc bớt, số lượng từ vựng của tập dữ liệu wiki cịn khoảng 17000 từ. Tất cả các mơ hình đều dùng sequence length là 10.
Mơ hình ngơn ngữ mức từ từ trái sang phải
Model predefine param, epochs: 50, batchSize: 512
Corpus file: dataset/VNTQcorpus-small.txt , sequences file: dataset/VNTQcorpus-small_left2right_word_sequences.txt ,
proceeded_file: dataset/VNTQcorpus-small_proceeded.txt , right_size? False
Start create sequences, total lines: 197931 , sequence length: 5 Time taken (sec): 50.68779683113098
Create sequences duration: 54.0327365398407 Start tokenize
End tokenize, duration: 6.218344211578369 Word index size: 9991
Load sequence data
Load sequence data duration: 53.75298261642456 Total sequences 5297626
First sequence: [ 0 0 0 0 0 286]
Word vector keys size: 9992 , vocab size: 9993 Sequence shape: (5297626, 6)
Model: "sequential"
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding (Embedding) (None, 5, 100) 999300 _________________________________________________________________ lstm (LSTM) (None, 512) 1255424 _________________________________________________________________ dense (Dense) (None, 9993) 5126409 ================================================================= Total params: 7,381,133
Trainable params: 6,381,833 Non-trainable params: 999,300
Start training model, model type: left2right, last epoch: 0 Init SaveModel callback, ckpt_path: ckpt, model_path: model, model_prefix: WordLM, model_name: VNTQcorpus-small, model_type: left2right, ckpt_period: 1
Save check point file: ckpt/WordLM_VNTQcorpus-small_left2right_022.h5 Save model file: model/WordLM_VNTQcorpus-small_left2right.h5
Training time total: 5979.9904720783233694
Mơ hình ngơn ngữ mức từ từ phải sang trái
Model predefine param, epochs: 50, batchSize: 512
Start create sequences, total lines: 197931 , sequence length: 5 Time taken (sec): 50.451892137527466
Create sequences duration: 52.06351685523987 Start tokenize
End tokenize, duration: 6.196485996246338 Word index size: 9991
Load sequence data
Load sequence data, total lines: 5297626 Load sequence data, first lines: tìm Load sequence data, line length: 1
Load sequence data duration: 53.436360120773315 Total sequences 5297626
First sequence: [ 0 0 0 0 0 286]
Word vector keys size: 9992 , vocab size: 9993 Sequence shape: (5297626, 6)
Model: "sequential_1"
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding_1 (Embedding) (None, 5, 100) 999300 _________________________________________________________________ lstm_1 (LSTM) (None, 512) 1255424 _________________________________________________________________ dense_1 (Dense) (None, 9993) 5126409
================================================================= Total params: 7,381,133
Trainable params: 6,381,833 Non-trainable params: 999,300
Start training model, model type: right2left, last epoch: 0
Init SaveModel callback, ckpt_path: ckpt, model_path: model,
model_prefix: WordLM, model_name: VNTQcorpus-small, model_type:
right2left, ckpt_period: 1
Save check point file: ckpt/WordLM_VNTQcorpus-small_right2left_025.h5 Save model file: model/WordLM_VNTQcorpus-small_right2left.h5
Training time total: 6753.06451678276116203
Sau khi xử lý dữ liệu và huấn luyện tập dữ liệu, ta thu các mơ hình ngơn ngữ mức từ từ hai phía tương ứng.
Nhận xét mức từ
Chúng ta dùng mơ hình ngơn ngữ mức từ sinh ra một danh sách các từ ứng viên là các từ có xác suất cao nhất trong vector đầu ra. Sau đó, ta tính khoảng cách giữa từng từ ứng viên và từ cần thay thế rồi chọn từ có khoảng cách gần nhất.
* Kết hợp mơ hình ngơn ngữ để kết hợp và sửa lỗi chính tả (mức kí tự và mức từ).
Sử dụng vector xác suất đầu ra của mơ hình ngơn ngữ ta có thể xác định các lỗi sai trong văn bản, cụ thể đó là những từ hay kí tự có xác suất thấp hơn một giá trị ngưỡng cho trước.
Tuy nhiên, việc sử dụng vector xác suất này ta có thể tìm kiếm được từ hay kí tự có xác suất cao để thay thế các từ hay kí tự sai này. Vì vậy ta sẽ dựa vào điều này để quyết định sửa lỗi bằng mơ hình ngơn ngữ nào khi kết hợp nhiều mơ hình ngơn ngữ.
So sánh giữa 2 mơ hình ở mức kí tự và mức từ
Input Output_Char Output_Word
ạn vaat phụ âm nhi bão dươg trung hí dĩ vi hồ
ạn vật phụ âm nhi bão dương trung khí dĩ vi hồ
vạn vật phụ âm nhi bão dương trung khí dĩ vi hồ