Trong bài trước chúng ta đã làm quen với việc xây dựng một AnnotationPipeline, định nghĩa các thuộc tính của AnnotationPipeline và chạy thử 6 Annotators là tokenize, ssplit, pos, lemma, ner và parse. Trong bài này, chúng ta sẽ cùng tìm hiểu về 5 Annotators tiếp theo là sentiment, truecase, coref, relation và quote.

Trước hết ta tạo một Java Class với tên PipeLine2 và xây dựng một AnnotationPipeline cùng với các thuộc tính cần thiết như hướng dẫn ở bài trước

(Lưu ý: thứ tự các Annotators cũng rất quan trọng trong việc xây dựng Annotation Pipeline vì nó không chỉ phụ thuộc vào dependency của từng Annotator mà kết quả phân tích của Annotator sau cũng sẽ phụ thuộc vào các Annotator trước đó. Do đó việc sắp sếp thứ tự các Annotators khác nhau cũng có thể cho ta các kết quả khác nhau dù đều dùng các Annotators giống nhau)

Trước hết ta sẽ tiến hành phân tích sentiment của dữ liệu đầu vào bằng cách sử dụng sentiment annotatior. Lưu ý rằng sentiment, truecase và relation làm việc ở cấp độ câu (sentence) dó đó ta cần phải tiến hành truy cập từng câu để sử dụng các Annotators này. Hai Annotators còn lại là coref và quote làm việc ở cấp độ Annotation nên ta không cần truy cập từng câu trong trường hợp này. Việc đánh giá sentiment được thực hiện bằng đoạn code sau (khác với các Annotator trong bài trước với việc chỉ cần sử dụng hàm .get(Class), trong trường hợp này ta cần phải kết hợp với cả hàm : RNNCoreAnnotations.getPredictedClass để lấy kết quả đánh giá sentiment)

Chạy đoạn code trên ta được kết quả sau (mặc định CoreNLP trả về một trong bốn kết quả: 0 = very negative, 1 = negative, 2 = neutral, 3 = positive, and 4 = very positive)

Như vậy CoreNLP đánh giá câu đầu tiên của đoạn văn bản mang tính tích cực (có thể do làm việc tại tập đoàn công nghệ hàng đầu là Google) và câu thứ hai mang tính trung tính. Hai câu tiếp theo là đánh giá tích cực về Việt Nam và ẩm thực Việt nam còn câu cuối cùng phản ánh đánh giá tiêu cực về tình trạng giao thông tại nước ta.

Tiếp theo, ta sử dụng relation annotator để phân tích mối liên hệ giữa các thực thể trong câu đầu tiên của văn bản như sau:

CoreNLP trả về kết quả có 2 mối liên hệ trong câu ‘Bob work for Google’ là OrgBased_In và Work_For (mặc định CoreNLP có 4 mối liên hệ : Located_In, Live_In, OrgBased_In và Work_For). Dòng đầu tiên của kết quả liệt kê xác xuất của từng mối liên hệ sắp sếp theo thứ tự từ cao đến thấp ( CoreNLP trả về kết quả ‘_NR’(unrelated) khi hai entity không có mối liên hệ nào). ‘type’ cho ta biết mối liên hệ giữa hai entity là gì (đây cũng là mối liên hệ có xác suất cao nhất). Hai dòng tiếp theo cho ta biết thông tin về hai entity được nhắc đến (xem giá trị của entity ở mục ‘value’). Trong ví dụ trên CoreNLP đã trả về đúng kết quả mối liên hệ giữa Bob(PEOPLE) và Google(ORGANIZATION) là Work_For. Tuy nhiên nó cũng trả về cả kết quả mối liên hệ là OrgBased_In cho hai thực thể này(thông thường OrgBased_In chỉ mối liện hệ giữa một cơ quan, tổ chức và địa chỉ của cơ quan đó như OrgBased_In(Facebook, California)).

Tương tự, ta sử dụng truecase annotator để xác định cách các từ nên được viết (chữ thường hoặc chữ hoa) trong câu cuối của đoạn văn bản như sau.

Như vậy trong câu nguyên mẫu có tất cả 2 từ viết chưa đúng(‘Said’ nên được viết là ‘said’ và ‘Is’ nên được viết là ‘is’). Các từ này đã được sửa lại thành đúng trong kết quả hiện thị do ta đã thiết lập thuộc tính

Để xác định co-reference ta sử dụng đoạn code sau:

Đoạn code trên trả về kết quả có 2 coreference ( ‘he’ ở câu 2 và 5, ‘He’ ở câu 3 và 4, ‘his’ ở câu 2 đều nói về Bob; ‘it’ ở câu 5 nói về về ‘Vietnamese food’)

Cuối cùng ta liệt kê các câu trích dẫn trong đoạn văn trên bằng đoạn code sau:

Các bạn lưu ý, do các Annotators trong tutorials này yêu cầu nhiều tài nguyên để xử lý nên khi chạy chương trình nếu các bạn gặp lỗi “java.lang.OutOfMemoryError: Java heap space” thì các bạn cần vào phần Edit Configuration để tăng Heap Space (thường dùng 5GB) trong VM options như sau:

Như vậy ta đã hoàn thành việc chạy thử 5 Annotators (sentiment, truecase, coref, relation, quote) của CoreNLP. Các bạn có thể tham khảo full code của tutorial này dưới đây.

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