Hầu hết các hệ thống NER tập trung vào việc áp dụng các phương pháp máy học và không đòi hỏi nhiều kiến thức chuyên sâu về mặt ngôn ngữ. Chúng ta có thể gom nhóm các phương pháp máy học trong NER thành 2 nhóm lớn. Các phương pháp trong nhóm đầu tiên áp dụng các kỹ thuật trích xuất đặc trưng bằng tay và kết hợp với thuật toán gán nhãn theo chuỗi như Conditional Random Field (CRF), Hidden Markov Model (HMM), hoặc Maximum Entropy Markov Model (MEMM). Các phương pháp này đã nghiên cứu kỹ lượng trong thời gian dài và đặc biệt thích hợp với các ngôn ngữ có nguồn dữ liệu ít như Tiếng Việt. Tuy nhiên, điểm yếu của nhóm phương pháp này chính là độ chính xác phụ thuộc rất lớn vào việc lựa chọn chuẩn xác các đặc trưng bằng tay.
Trong vài năm trở lại đây, cùng với quá trình phát triển của Deep Learning một vài kiến trúc Neural Network đã được đề xuất để giải quyết các bài toán gán nhãn chuỗi. Các phương pháp này hình thành nên nhóm phương pháp thứ 2 cho bài toán NER. Ưu điểm vượt trội của các kiến trúc Deep Neural Network là khả năng End-to-end Learning, tức là khả năng học được các quy luật gán nhãn chuỗi từ tập dữ liệu gán nhãn trước mà không cần có bất cứ sự can thiệp của con người. Điều này đã loại bỏ đi nhược điểm của nhóm phương pháp 1 phải dựa trên kiến thức ngôn ngữ để lựa chọn các đặc trưng. Tuy nhiên, nhóm phương pháp 2 cũng tồn tại nhược điểm liên quan đến kích cỡ tập dữ liệu huấn luyện. Thông thường, các kiến trúc Deep Neural Network yêu cầu tập dữ liệu khá lớn để có thể đạt được độ chính xác cao. Đối với ngôn ngữ có ít dữ liệu có nhãn như Tiếng Việt, giải pháp hữu hiệu nhất chính là sử dụng một ma trận Word Embedding tốt đã được huấn luyện từ một tập dữ liệu không nhãn lớn (vd, tin tức online, diễn đàn, …).
Trong blog này, chúng tôi sẽ trình bày kiến trúc Neural Network phù hợp nhất cho bài toán NER. Kiến trúc này dựa trên sự kết hợp giữa Bidirectional Long Short-Term Memory (Bi-LSTM) và Conditional Random Field (CRF) trong một hệ thống End-to-end Learning. Ngoài ra, chúng tôi cũng tìm cách kết hợp các tri thức đạt được từ cấp độ ký tự để tạo nên một ma trận Word Embedding phù hợp cho bài toán NER. Hệ thống của chúng tôi đã đạt được F1 tổng quát 89.20% và 74 % lần lượt trên tập dữ liệu Development và Test, xếp thứ 2 chung cuộc của cuộc thi VLSP 2018 NER Shared Task [1].
Recurrent Neural Network (RNN) là một loại Neural Network trong đó mỗi node trong các lớp ẩn có một kết nối với chính bản thân. Chính kết nối này tạo ra các trạng thái nội tại của kiến trúc mạng cho phép mô hình hoá các chuỗi với độ dài bất kỳ.
Hình 1: Recurrent Neural Network (nguồn: Colah’s blog)
Một RNN có thể nhận vào một chuỗi có chiều dài bất kỳ và tạo ra một chuỗi nhãn có chiều dài tương ứng nên kiến trúc này rất phù hợp với bài toán NER. Như mô tả trong Hình 1 bên trên, tại mỗi thời điểm t một RNN điển hình A sẽ tạo ra một vector h_t chứa toàn bộ thông tin của các dữ liệu đầu vào từ X_0 tới X_t. Tuy nhiên, kiến trúc RNN cổ điển rất khó để áp dụng trong thực tế vì vấn đề liên quan đến việc mất mát hoặc bùng nổ giá trị được dùng để cập nhật các trọng số của mạng thông qua quá trình học khi phải mô hình hoá các chuỗi rất dài (vanishing and exploding gradient).
Long Short-Term Memory (LSTM), một biến thể nổi tiếng của RNN, được đề xuất như là một giải pháp cho vấn đề vừa được nêu trên. Điểm chính trong kiến trúc mạng của LSTM chính là các memory cell với các cổng cho phép lưu trữ hoặc truy xuất thông tin. Các cổng này cho phép ghi đè (input gate), loại bỏ dư thừa (forget gate) và truy xuất (output gate) các thông tin được lưu trữ bên trong các memory cell.
Hình 2: Long Short-Term Memory (nguồn: Colah’s blog)
Chi tiết về Long Short-Term Memory và cách thức hoạt động, bạn đọc có thể ghé thăm blog “Understanding LSTMs” của tác giả Colah tại link sau: http://colah.github.io/posts/2015-08-Understanding-LSTMs/
Việc nhận dạng chính xác tên riêng trong một đoạn văn bản phụ thuộc không chỉ vào các thông tin phía trước của từ đang xét mà còn cả các thông tin phía sau. Tuy nhiên, một kiến trúc LSTM truyền thống với một lớp duy nhất chỉ có thể dự đoán nhãn của từ hiện tại dựa trên thông tin có được từ các từ nằm trước đó. Bidirectional LSTM (BiLSTM) đã được tạo ra để khắc phục điểm yếu trên. Một kiến trúc BiLSTM thường chứa 2 mạng LSTM đơn được sử dụng đồng thời và độc lập để mô hình hoá chuỗi đầu vào theo 2 hướng: từ trái sang phải (forward LSTM) và từ phải sang trái (backward LSTM) — Hình 3.
Hình 3: Bidirectional LSTM = forward LSTM + backward LSTM
Conditional Random Field (CRF) là một mô hình xác suất cho các bài toán dự đoán có cấu trúc và đã được áp dụng rất thành công trong rất nhiều lĩnh vực như thị giác máy tính, xử lý ngôn ngữ tự nhiên, sinh-tin học, … Trong mô hình CRF, các node chứa dữ liệu đầu vào và các node chứa dữ liệu đầu ra được kết nối trực tiếp với nhau, đối nghịch với kiến trúc của LSTM hoặc BiLSTM trong đó các đầu vào và đầu ra được kết nối gián tiếp qua các memory cell. CRF có thể được sử dụng để gán nhãn tên riêng với đầu vào là các đặc trưng của một từ được rút trích bằng tay như:
Chi tiết về CRF, bạn đọc có thể tìm hiểu thêm từ link sau: Overview of CRF của ml2vec.
Hình 4: Kết hợp BiLSTM và CRF cho NER
Kiến trúc kết hợp BiLSTM và CRF được mô tả như Hình 4. Kiến trúc BiLSTM+CRF hoạt động theo các bước:
Các tham số học của kiến trúc BiLSTM+CRF bao gồm: ma trận word embedding, ma trận trọng số của lớp BiLSTM, ma trận chuyển vị của lớp CRF. Toàn bộ các tham số này được cập nhật trong quá trình huấn luyện trên tập dữ liệu có nhãn thông qua thuật toán Back-propagation với Stochastic Gradient Descent (SGD).
Trong quá trình huấn luyện, chúng tôi áp dụng kỹ thuật Dropout để tránh việc bị over-fitting, tức là kiến trúc mất đi tính tổng quát khi nhận diện tên riêng trên các đoạn văn bản mới ngoài tập huấn luyện. Dropout là kỹ thuật xét giá trị 0 cho ngẫu nhiên r phần trăm các node trong mỗi lớp của kiến trúc. Điều này tạo ra một lượng nhiễu (noise) ngẫu nhiên nhỏ trong quá trình học và làm cho kiến trúc trở nên linh động hơn khi xử lý các câu trong văn bản.
Cách kết hợp 2 mô hình BiLSTM và CRF này tận dụng được điểm mạnh của cả 2: khả năng rút trích đặc trưng thông minh của LSTM và khả năng dự đoán chuỗi nhãn mạnh mẽ của CRF. Điều này đưa đến việc kiến trúc BiLSTM+CRF đạt độ chính xác cao trong bài toán NER trên Tiếng Anh.
Dựa trên các minh chứng về mô hình toán học và kết quả đạt được trên các ngôn ngữ khác, chúng tôi mong đợi việc áp dụng kiến trúc BiLSTM+CRF vào bài toán NER trên Tiếng Việt sẽ đạt được độ chính xác cao.
Các phương pháp máy học đều luôn yêu cầu đầu vào là một tập các giá trị số được thể hiện dưới dạng vector. Tuy nhiên, với các bài toán xử lý ngôn ngữ tự nhiên, dữ liệu đầu vào luôn là các chuỗi ký tự. Để áp dụng được các mô hình máy học, chúng ta cần phải chuyển đổi các chuỗi ký tự này thành dạng số mà vẫn giữ được các yếu tố về hình thái (hoa thường, nguyên âm, hợp âm, …), ngữ nghĩa và ngữ pháp.
Đối với các thuật toán máy học dự đoán chuỗi như CRF, chúng ta làm bước chuyển đổi này bằng cách rút ra các đặc trưng và hiển hiện bằng các giá trị nhị phân — 0 thể hiện chuỗi đang xét không có tính chất f_i và 1 trong trường hợp ngược lại — hoặc các giá trị số thực bằng cách tính tần số xuất hiện (Tf-idf).
Với các kiến trúc Neural Network, chúng ta sử dụng ma trận Word Embedding để ánh xạ các từ thành các vector số thực. Ma trận word embedding có số cột tương đương với số từ nằm trong bộ từ điển từ vựng, số dòng là số chiều của vector đại diện cho từ. Như vậy, khi chuyển đổi một từ thành vector số thực, chúng ta chỉ cần truy cập vào ma trận word embedding và lấy ra cột tương ứng. Các giá trị trong ma trận đạt được bằng cách áp dụng các thuật toán như word2vec (CBOW, Skip-gram), GloVe hoặc FastText trên tập dữ liệu văn bản không có nhãn như tin tức online. Ngoài ra, chúng ta cũng có thể khởi tạo các giá trị này ngẫu nhiên và được cập nhật chung trong quá trình huấn luyện mô hình gán nhãn. Bạn đọc xem thêm bài blog: Word Embeding của Data Science Group, IITR.
Tuy ma trận word embedding có thể chứa đựng ngữ nghĩa của một từ ở một vài cấp độ, nhưng vẫn có thể gặp phải vấn đề về dữ liệu thưa (data sparity problem). Ví dụ, các từ có tần số xuất hiện rất thấp được đại diện bởi vector có đa số thành phần có giá trị gần 0, các từ không có trong danh sách từ điển, từ sai lỗi chính tả. Chúng tôi giải quyết vấn đề này bằng cách gia tăng các thông tin cho word embedding từ cấp độ ký tự. Như đã nói ở trên, BiLSTM phù hợp với việc mô hình hoá chuỗi các từ, nên chúng tôi sẽ áp dụng một BiLSTM thứ 2 (C-BiLSTM) để mô hình hoá chuỗi các ký tự của mỗi từ để tạo nên một vector đại diện cho từ đó. Sau đó kết hợp vector này với vector từ ma trận word embedding để tạo nên một vector duy nhất đại diện cho một từ. Hình 5 mô tả quá trình tạo ra vector word embedding cho mỗi từ trong từ điển.
Hình 5: Quá trình xây dựng vector word embedding
Dữ liệu
+--------------+-------+-------------+------+-------+
| | Train | Development | Test | TOTAL |
+--------------+-------+-------------+------+-------+
| LOC | 6289 | 795 | 2377 | 9461 |
| MISC | 743 | 63 | 178 | 984 |
| ORG | 5587 | 723 | 2126 | 8436 |
| PER | 4600 | 492 | 1883 | 6975 |
| #total of NE | 17219 | 2073 | 6564 | 25856 |
| #sentence | 14467 | 1601 | 5381 | 21499 |
+--------------+-------+-------------+------+-------+
Bảng 1: Thống kê dữ liệu VLSP 2018 NER Shared Task
Tiền xử lý dữ liệu
Vì dữ liệu VLSP NER 2018 được lưu dưới dạng XML nên chúng tôi tiến hành tiền xử lý và chuyển về dạng chuẩn CoNLL — mỗi dòng là một từ cùng với nhãn của từ đó, các câu phân tách nhau bởi dòng trống. Quá trình tiền xử lý như sau:
Chúng tôi sử dụng bộ nhãn BIO cho việc gán nhãn cho từng từ. Ví dụ:
ngư_dân tỉnh Bình_Định tham_gia ...
O B-LOC I_LOC O
Trong đó, O — Outside: nhãn bên ngoài cụm tên riêng, B-xxx — Begin: nhãn bắt đầu cụm tên riêng loại xxx và I-xxx — Inside: nhãn bên trong cụm tên riêng loại xxx.
Độ đo đánh giá chất lượng hệ thống
Bài toán Nhận dạng tên riêng thường sử dụng độ đo Precision (P), Recall (R) và F1. Precision là tỷ lệ tên riêng được xác định chính xác trên toàn bộ tên riêng mà hệ thống nhận dạng được. Recall là tỷ lệ tên riêng mà hệ thống nhận diện được trên tổng số tên riêng có trong tập Testing. F1 được tính bằng công thức 2*P*R /(P+R).
Cài đặt thực nghiệm các biến thể kiến trúc BiLSTM+CRF trong thực nghiệm
Bảng 2 tóm tắt lại sự khác biệt quan trọng giữa các biến thể của kiến trúc BiLSTM+CRF được dùng trong thực nghiệm
+----------+---------+------------------+---------------------+
| Model | Tách Từ | Character BiLSTM | Word Embedding |
+----------+---------+------------------+---------------------+
| Baseline | Không | Không | Khởi tạo ngẫu nhiên |
| Sys.1 | Không | Có | Khởi tạo ngẫu nhiên |
| Sys.2 | Có | Có | Khởi tạo ngẫu nhiên |
| Sys.3 | Có | Có | FastText |
| Sys.4 | Có | Có | GloVe |
+----------+---------+------------------+---------------------+
Bảng 2: Danh sách các hệ thống thực nghiệm
Kết quả thực nghiệm
Bảng 3 thể hiện kết quả thực nghiệm của toàn bộ các hệ thống trên cả 3 độ đo Precision, Recall và F1. Cả 4 hệ thống biến thể (Sys.1–4) đạt được độ chính xác cao hơn hệ thống Baseline ở cả 3 độ đo. Điểm F1 và Recall của hệ thống 1 tăng vượt bậc so với baseline. Điều này chỉ ra các thông tin từ cấp độ ký tự của mỗi từ là cực kỳ hữu ích cho bài toán NER. Hơn thế nữa, khi áp dụng việc tách từ ở giai đoạn tiền xử lý cũng giúp cho hệ thống 2 tạo ra kết quả tốt hơn ở cả 3 độ đo so với hệ thống 1. Khi sử dụng ma trận word embedding (Sys.3–4) đạt được từ tập dữ liệu tin tức Báo Mới cũng giúp hệ thống đạt được độ chính xác vượt trội hơn trên cả 3 độ đo.
+----------+-----------+--------+-------+
| Model | Precision | Recall | F1 |
+----------+-----------+--------+-------+
| Baseline | 81.14 | 73.03 | 76.98 |
| Sys.1 | 81.98 | 79.49 | 80.72 |
| Sys.2 | 82.49 | 80.15 | 81.30 |
| Sys.3 | 89.02 | 89.38 | 89.20 |
| Sys.4 | 88.19 | 89.08 | 88.63 |
+----------+-----------+--------+-------+
Bảng 3: Kết quả đạt được của các hệ thống trên tập Development
Kết quả chính thức của BTC VLSP 2018
Dựa trên các kết quả thực nghiệm ở trên, chúng tôi quyết định gửi 2 hệ thống 3 và 4 đến BTC VLSP 2018 để đánh giá độ chính xác trên bộ dữ liệu Test. Bảng 4 thể hiện kết quả đạt được trên 2 cấp độ nhãn: Top-level — nhãn ngoài cùng và Nested Level — nhãn ở tất cả cấp độ.
+-------+-------------------------+---------------------------+
| | Top-level Evaluation | Nested Level Evaluation |
+ Model +-----------+--------+----+-------------+--------+----+
| | Precision | Recall | F1 | Precision | Recall | F1 |
+-------+-----------+--------+----+-------------+--------+----+
| Sys.3 | 77 | 70 | 74 | 71 | 65 | 68 |
| Sys.4 | 76 | 72 | 74 | 70 | 66 | 68 |
+-------+-----------+--------+----+-------------+--------+----+
Bảng 4: Kết quả chính thức của BTC VLSP 2018
Trong blog này, chúng tôi đã trình bày phương pháp áp dụng kiến trúc kết hợp Bidirectional Long Short-Term Memory và Conditional Random Field để giải quyết bài toán Nhận dạng tên riêng trong văn bản Tiếng Việt. Ngoài ra, chúng tôi cũng đã tích hợp thêm kiến trúc BiLSTM ở cấp độ ký tự để giúp hệ thống BiLSTM+CRF có được ma trận word embedding tốt hơn.
Với hệ thống nêu trên, chúng tôi đã đạt được độ chính xác F1 tổng quát 74% (Level 1) và 68% (Nested Level) trên tập dữ liệu Test của cuộc thi VLSP NER Shared Task, xếp vị trí thứ 2 chung cuộc.
Điểm yếu trong mô hình của chúng tôi là không có khả năng xử lý các trường hợp nhãn lồng nhau. Để xử lý được vấn đề này, chúng tôi sẽ xem xét bài toán nhận dạng tên riêng như bài toán phân tích cây (tree parsing) như vậy sẽ thể hiện được các cấp độ khác nhau của nhãn tên riêng. Đây sẽ là hướng đi trong thời gian sắp tới của nhóm nghiên cứu.
[1] VLSP 2018 http://vlsp.org.vn/vlsp2018