CoreNLP được phát triển dựa trên mô hình annotaion pipeline nên trước hết ta sẽ tìm hiểm về khái niệm Annotation và Annotator. Hiểu một cách đơn giản thì ta có thể coi một Annotator là một hàm chức năng trong NLP như PoS Annotator được dùng để tìm PoS hoặc NER Annotator được dùng để xác định NER… còn Annotation(là một Map trong Java) được sử dụng để lưu trữ dữ liệu và các kết quả phân tích dữ liệu đó.

AnnotationPipeline là một list các Annotators và các Annotators này được chạy lần lượt theo thứ tự sắp sếp của nó trong pineline (bản thân AnnotationPipeline cũng là một Annotator nên ta có thể có nested AnnotationPipeline (AnnotationPipeline bên trong một AnnotationPipeline khác)).

Khi chạy một chương trình CoreNLP, trước hết ta sẽ lưu dữ liệu vào một Annotation rồi chạy AnnotationPipeline trên Annotation đó. Từng Annotator trong pipeline sẽ đọc dữ liệu của Annotation, thực hiện chức năng của nó rồi ghi kết quả lại vào trong Annotation theo dạng Map (key và value). Mỗi một Annotator ghi kết quả phân tích của nó với một key khác nhau nên kết quả phân tích của Annotation mang tính tổng hợp chứ không bị ghi đè như việc sử dụng cùng một key. Mô hình hoạt động của Annotation có thể được mô tả như hình sau [1]

Trong CoreNLP có tất cả 15 Annotators được liệt kê trong bảng sau [2]:

Annotator                        Chức năng
cleamxml Loại bỏ xml token trong đoạn dữ liệu. Anotator này có thể được dùng để xác định việc kết thúc câu hoặc để trích xuất metadata
tokenize Tách từ trong đoạn dữ liệu
ssplit Tách câu trong đoạn dữ liệu
pos Xác định PoS cho từng token (sử dụng PennTree bank tagset)
lemma Xác định lemma cho từng token
ner Xác định và phân loại tên cho từng thực thể ứng với 1 trong 12 nhóm sau: tên (PERSON, LOCATION, ORGANIZATION, MISC), số lượng (MONEY, NUMBER, ORDINAL, PERCENT), và thời gian (DATE, TIME, DURATION, SET)
regexner Cùng chức năng với ner Annotator nhưng được phát triển dựa trên Java regular expression để bổ sung thêm nhóm tên cho các thực thể (Name entity) không được quy định trong các Corpus truyền thống. Annotator này bổ sung thêm 11 nhóm: EMAIL, URL, CITY, STATE_OR_PROVINCE, COUNTRY, NATIONALITY, RELIGION, (job) TITLE, IDEOLOGY, CRIMINAL_CHARGE, CAUSE_OF_DEATH .
sentiment Xác định sentiment của đoạn dữ liệu
truecase Xác định loại chữ (chữ thường, chữ hoa) cho các token. Thường được dùng để xác định các token nên được viết hoa hay được viết thường (ví dụ ‘bob’ nên được viết là ‘Bob’)
parse Đưa ra các phân tích về mặt syntax cho đoạn dữ liệu (ví dụ như xác định parse tree cho một câu). Annotator này bao gồm cả constituent và dependency parse
depparse Khác với parse, annotator này chỉ chuyên phân tích về dependency parse (không có constituent parse) với ưu điểm là tốc độ sử lý nhanh.
dcoref Thực hiện chức năng coreference resolution
relation Xác định mối liên hệ giữa hai thực thể trong đoạn dữ liệu
natlog Thường được xử dụng trong việc thực hiện nhiệm vụ logical reasoning (như xác định quantifiers và scope của nó)
quote Xác định các phần trích dẫn trong một văn bản.

[1]“Introduction to pipelines | Stanford CoreNLP.”. Available: https://stanfordnlp.github.io/CoreNLP/pipelines.html. [Accessed: 26-Nov-2018].

[2]“Annotators | Stanford CoreNLP.”. Available: https://stanfordnlp.github.io/CoreNLP/annotators.html. [Accessed: 26-Nov-2018].

Tháng Mười Một 26, 2018
ITechSeeker