Thành phần thay thế (Macros) thường xuyên được sử dụng trong các mệnh đề trái. Nó thay thế cho một tập các lệnh, giúp cho bộ luật đơn giản và rõ ràng hơn. Một thành phần thay thế (Macros) có thể gọi một thành phần thay thế khác bên trong nó. Ngoài ra, khi một thành phần thay thế đã được khai báo thì mọi luật trong bộ luật đều có thể sử dụng nó mà không cần phải khai báo lại.
Ví dụ về thành thần thay thế (Macros) - khai báo thành phần thay thế NEWTITLE Macro: NEWTITLE ( {Title} ({Word.string == "."})? ({Title})? ({Word.string == "."})? )
Chương 3. Giới thiệu GATE Nguyễn Bá Đạt
18
Sử dụng NEWTITLE trong mệnh đề trái của luật TitlePerson.
Rule: TitlePerson ( (NEWTITLE) ({Upper}) ):name --> ... 3.4.3 Mệnh đề phải (RHS)
Mệnh đề phải sử dụng các mẫu (pattern) được cung cấp bởi mệnh đề trái để thực thi một mệnh lệnh nào đó, thông thường là tạo ra các nhãn (annotation) mới.
Ví dụ: Rule: City ( {Lookup.majorType == “name_city”} ):name
:name.Location = {kind="city", rule=„„Search in gazetters‟‟
Trong ví dụ trên, mệnh đề trái cung cấp cho mệnh đề phải các mẫu (pattern) là tên các thành phố (tìm trong từ điển có majorType =“name_city”). Mệnh đề phải tạo ra các nhãn mới (annotations) tương ứng với các mẫu (pattern) nhận được. Nhãn (annotation) mới được tạo ra có kiểu là “Location” và hai đặc trưng (feature) là kind = “city” và rule = “Search in gazetters”.
19
3.4.4 Sử dụng đoạn mã Java trong JAPE
Để tăng tính linh động và hiệu quả, bộ luật JAPE hỗ trợ chèn những đoạn mã JAVA vào trong mệnh đề phải. Nhờ đó ngoài việc tạo ra các nhãn (annotations) mới, mệnh đề phải còn có thể làm rất nhiều việc khác như: chèn thêm các đặc trưng (features), thay đổi kiểu nhãn (Type) hay xóa các nhãn đã tồn tại v.v…
Ví dụ: Rule: Person1 ( {Lookup.majorType == person } ):person {
gate.AnnotationSet person = gate.AnnotationSet)bindings.get("person"); gate.Annotation personAnn = (gate.Annotation)person.iterator().next(); gate.FeatureMap features = Factory.newFeatureMap();
features.put("gender", personAnn.getFeatures().get("minorType")); features.put("rule", "Person gazetteer");
outputAS.add(person.firstNode(), person.lastNode(), "Person",features); }
Rule: Person2 (
{Lookup.majorType == person } ):person
Chương 3. Giới thiệu GATE Nguyễn Bá Đạt
20
:person.Person = {kind = “Person”, rule = “Person gazetteer”}
Để thấy định tính hiệu quả của các đoạn mã JAVA trong mệnh đề phải, ta so sánh hai luật Person1 và Person2. Cả hai luật đều nhận từ mệnh đề trái các mẫu (pattern) thỏa mãn nằm trong từ điển có “majorType = person”. Ở luật Person2 (không dùng mã JAVA) người viết luật không thể sử dụng bất kỳ thông tin nào khác, vì thế việc tạo ra các nhãn mới (annotations) không mang đầy đủ thông tin cần thiết. Trong khi đó luật Person1 có thể sử dụng thêm nhiều thông tin khác như: các đặc trưng còn lại của mẫu do vế trái cung cấp (ví dụ: “personAnn.getFeatures().get("minorType")”) và sử dụng nó để tạo nên các nhãn mới mang nhiều thông tin hơn.
3.4.5 Một vài lựa chọn khi viết luật
Thành phần đầu tiên của mỗi luật (phase) JAPE luôn là các lựa chọn như:
Kiểu điều khiển (Control) để quản lý cách so khớp mẫu. Có 5 lựa chọn cho kiểu điều khiển là “brill”, “all”, “first”, “once” và “appelt”
o “brill”: khi có nhiều hơn một luật cùng thỏa mãn cho một đoạn của văn bản, thì tất cả các luật này đều được thực thi. Sau khi quá trình so khớp (matching) diễn ra ở tất cả các luật thì điểm bắt đầu quá trình so khớp tiếp theo sẽ là điểm kết thúc của luật được so khớp dài nhất trong quá trình trước (longest matching).
o “all”: cũng giống như “brill” nó cho phép thực hiện nhiều luật trên cùng một đoạn văn bản. Tuy nhiên có điểm khác biệt với “brill” đó là: điểm bắt đầu quá trình so khớp tiếp theo là điểm bắt đầu của nhãn (annotation) gần nhất sau nó.
o “first”: luật được thực hiện ngay khi quá trình so khớp đầu tiên được thỏa mãn. Bởi vậy nó không thích hợp cho các luật sử dụng “*”, “+”, “?”.
21
o “appelt”: chỉ một luật (rule) thỏa mãn quá trình so khớp và có độ thực thi cao nhất được thực hiện. Độ thực thi của các luật được tính như sau:
Tất cả các luật cùng thỏa mãn so khớp từ vị trí X thì luật nào so khớp được dài nhất (longest matching) sẽ có độ thực thi cao nhất.
Nếu có nhiều hơn một luật so khớp cùng một đoạn trong văn bản thì luật nào được định nghĩa độ ưu tiên cao hơn sẽ có độ thực thi cao hơn và được thi hành.
Nếu có hai hay nhiều luật so khớp cùng một đoạn trong văn bản và có độ ưu tiên như nhau thì luật nào được định nghĩa sớm nhất sẽ có độ thực thi cao nhất và được thi hành.
Kiểu gỡ rối (Debug): Khi kiểu gỡ rối được bật, kiểu điều khiển là “appelt” và có nhiều hơn hai sự so khớp có thể xảy ra, sự xung đột sẽ được hiển thị cho người dùng qua dòng thông báo trên màn hình.
Tập các nhãn đầu vào (Input Annotations): các nhãn (annotations) có kiểu (Type) thuộc tập các nhãn đầu vào sẽ được sử dụng như là đầu vào cho các mệnh đề trái (quá trình so khớp).
Ví dụ minh họa cho một luật JAPE:
Phase: Location
Input: Token SpaceToken Lookup Options: control = appelt
Rule: Location Priority: 25 ( ({Lookup.majorType == “pre_loc”} {SpaceToken})? {Lookup.majorType == location}
Chương 3. Giới thiệu GATE Nguyễn Bá Đạt
22
):locName -->
:locName.Location = {kind = "location", rule = "pre_loc + location"}
Rule: SearchGazetteers Priority: 20 ( ({Lookup.majorType == location}):loc ) -->
:loc.Name = {kind = "location", rule=GazLocation} Ví dụ trên đã sử dụng:
Tập các nhãn đầu vào gồm các nhãn có kiểu (Type): “Token”, “SpaceToken”, “Lookup”.
Kiểu điều khiển: “appelt”
Luật (phase) gồm hai luật nhỏ (rule) đó là: Location với độ ưu tiên là 25 và SearchGazetteers với độ ưu tiên là 20.
3.5 Tạo thêm thành phần tích hợp trên khung làm việc GATE
Một thành phần tích hợp (Plugin) có thể gồm ba loại: thành phần ngôn ngữ (Language Resources), thành phần xử lý (processing Resource), thành phần thể hiện (Visual Resource) (tham khảo khái niệm ở mục 3.1). Thành phần tích hợp được sử dụng để tạo nên các ứng dụng trong GATE (mục 3.6). Ví dụ: hệ thống nhận dạng thực thể trong văn bản tiếng Việt của chúng tôi gồm 3 thành phần tích hợp (mục 4.3):
23 Bộ từ điển – VNEgazetteer.
Bộ luật – VNEtransducer.
Ở đây với bài toán nhận dạng thực thể, tôi chỉ giới thiệu sâu về cách tạo một thành phần xử lý (processing Resource).
Việc tạo ra một thành phần xử lý rất đơn giản, được thực hiện qua các bước:
Tạo lớp Plugin (tên thành phần xử lý) kế thừa (extends) lớp AbstractProcessingResource và thể hiện (implements) lớp ProcessingResource. Tạo file creole.xml khai báo thành phần xử lý mới. Ví dụ:
<?xml version="1.0"?> <CREOLE-DIRECTORY> <CREOLE> <RESOURCE> <NAME>Coltech.NLP.tokenizer</NAME> <JAR>Vtokenizer.jar</JAR> <CLASS>Vtokenizer</CLASS>
<PARAMETER NAME="document" RUNTIME="true"> gate.Document </PARAMETER> <PARAMETER NAME="annotationOutputSetName" RUNTIME="true" OPTIONAL="true"> java.lang.String </PARAMETER> </RESOURCE> </CREOLE>
Chương 3. Giới thiệu GATE Nguyễn Bá Đạt
24
</CREOLE-DIRECTORY>
Sau khi đã có thành phần tích hợp (Plugin), có hai cách để thêm thành phần này vào khung làm việc của GATE.
Cách 1: đặt thư mục chứa toàn bộ thành phần tích hợp vào trong %GATE- HOME%/plugins. Chạy lệnh “bin/ant plugins.build”, hệ thống GATE sẽ tự động thêm thành phần tích hợp vào hệ thống.
Cách 2: Chọn File -> Manage CREOLE plugins -> Add new CREOLE repository -> Select a directory và chọn thư mục chứa thành phần tích hợp mới tạo (hình 3.2).
Như vậy, ta đã có một thành phần tích hợp mới sẵn sàng hoạt động trên khung làm việc GATE.
25
Hình 3.3 - Chọn các thành phần cho ứng dụng GATE
3.6 Tạo ứng dụng trên GATE
Một ứng dụng (Application) trên GATE bao gồm một tập các thành phần tích hợp (Plugin). Ta có thể chọn các thành phần phù hợp, hoặc loại bỏ những thành phần tích hợp không cần thiết cho ứng dụng (hình 3.3). Chính nhờ cơ chế này, chúng tôi có thể dễ dàng kết hợp sử dụng các thành phần tích hợp đã được xây dựng sẵn trong GATE cùng với những thành phần tích hợp mới do chúng tôi xây dựng để tiết kiệm chi phí và đạt hiệu quả cao hơn.
3.7 Các công cụ quản lý chất lượng
Khi phát triển một hệ thống, các công cụ quản lý chất lượng là rất cần thiết. Việc luôn luôn có sự đánh giá chất lượng ngay từ giai đoạn xây dựng tập dữ liệu cho đến những
Chương 3. Giới thiệu GATE Nguyễn Bá Đạt
26
giai đoạn cuối cùng (đánh giá kết quả làm việc của hệ thống) giúp hệ thống luôn vận hành tốt trong sự kiểm soát của người phát triển.
3.7.1 Công cụ đánh giá độ tương đồng khi gán nhãn hai văn bản (Annotation Diff) (Annotation Diff)
“Annotation Diff” cho phép người sử dụng so sánh hai văn bản được gán nhãn (Annotated Document) trên từng loại nhãn (annotation). Điều này mang lại rất nhiều lợi ích trong giai đoạn xây dựng tập dữ liệu. Bởi để mang tính khách quan, ta luôn luôn phải có hai đội xây dựng tập dữ liệu độc lập và khi đó “Annotation Diff” sẽ giúp so sánh những phần làm việc chung, để đi đến thống nhất tạo ra một tập dữ liệu chuẩn. Trong ví dụ ở hình 3.4 là giao diện của “Annotation Diff” khi so sánh hai văn bản doctest (Key Document) và doc (Respone Document) với kiểu nhãn (Annotation Type) “Location”. Khi so sánh hai văn bản, những nhãn (annotation) giống nhau sẽ được bỏ qua, những nhãn khác nhau sẽ được hiển thị lên giao diện đồ họa để người dùng có thể dễ dàng quan sát được. Ngoài ra “Annotation Diff” cũng cung cấp ba thông số đo độ chính xác cơ bản là “Recall, Precision và F-Measure”.
Tuy nhiên điểm hạn chế của “Annotation Diff” là chỉ so sánh được từng cặp văn bản, và từng kiểu nhãn khác nhau.
3.7.2 Công cụ đánh giá chất lượng của hệ thống (Corpus Benchmark tool) tool)
Đây là công cụ cho phép người sử dụng đánh giá độ tương đồng của các tập dữ liệu khác nhau như: tập dữ liệu được gán nhãn (annotated corpus) bằng tay, tập dữ liệu được xử lý bởi hệ thống hiện hành, hay tập dữ liệu được xử lý bởi một hệ thống được lưu trữ. Corpus Benchmark tool hoạt động cũng hoạt động tương tự như Annotation Diff, nhưng là trên một tập văn bản và tất cả các nhãn. Giao diện của Corpus Benchmark tool như hình 3.5.
27
Hình 3.4 - Giao diện của Annotation Diff
Chương 4. Nhận dạng thực thể trong văn bản tiếng Việt Nguyễn Bá Đạt
28
Chương 4
Nhận dạng thực thể trong văn bản tiếng Việt
Cùng với sự phát triển của lĩnh vực xử lý ngôn ngữ tự nhiên cho tiếng Việt, bài toán nhận dạng thực thể trong văn bản tiếng Việt đã hình thành và bắt đầu thu được những kết quả khả quan. Một số hệ thống tiêu biểu như: hệ thống nhận dạng thực thể trong văn bản dựa trên mô hình Conditional Random Fields (CRF) (Nguyễn 2005), hệ thống nhận dạng thực thể sử dụng phương pháp máy vector hỗ trợ (SVM) (Phạm 2007), hệ thống VN-KIM NE, nhận biết và chú thích tự động cho các thực thể (Cao 2007).
Tuy nhiên cho đến thời điểm này vẫn chưa có những quy chuẩn cho bài toán nhận dạng thực thể trong văn bản tiếng Việt, ví dụ như:
Chưa có tập các loại nhãn chuẩn cho thực thể: Nguyễn đưa ra 8 loại nhãn cho thực thể (Nguyễn 2005), Phạm đưa ra 22 loại nhãn (Phạm 2007), trong khi Cao nhận diện 7 loại thực thể (Cao 2007).
Chưa có một khung làm việc chuẩn. Các hệ thống nhận dạng thực thể hiện nay ở Việt Nam xây dựng trên nền mã nguồn đóng, và rất khó để cộng đồng có thể tiếp cận sử dụng và phát triển.
Bởi vậy, chúng tôi quyết định xây dựng một hệ thống nhận dạng thực thể trong văn bản tiếng Việt bắt đầu từ việc định nghĩa các thực thể, các loại thực thể cho đến một khung làm việc và tập dữ liệu được gán nhãn chuẩn. Hệ thống sẽ được xây dựng trên khung làm việc GATE và được mở cho cộng đồng có thể sử dụng và phát triển.
29
4.1 Định nghĩa thực thể, các loại thực thể và cách phân biệt các loại thực thể loại thực thể
Trước hết, chúng ta cần có những định nghĩa về thực thể, các loại thực thể được nhận dạng và cách phân biệt các loại thực thể. Tham khảo các khái niệm này trong tiếng Anh (Annotation Guideline for Named Entity Recognization) và các tài liệu tiếng Việt (Mai 2008) liên quan, chúng tôi đưa ra các khái niệm cơ bản cho bài toán nhận dạng thực thể trong văn bản tiếng Việt (tham khảo chi tiết tại phụ lục A).
4.1.1 Các khái niệm cơ bản
4.1.1.1 Định nghĩa thực thể và tên thực thể
Thực thể (entity): là một đối tượng hoặc một tập hợp đối tượng trong thế giới tự nhiên.
Thực thể thể hiện trong các dạng : o Tên riêng (name entity).
o Danh từ hoặc cụm danh từ chung (common noun, noun phrase). o Đại từ (pronoun).
Trong khuôn khổ của khóa luận, để thuận tiện chúng tôi sử dụng cụm “nhận dạng thực thể” để chỉ việc nhận dạng các thực thể có tên (thể hiện dưới dạng tên riêng).
4.1.1.2 Các loại thực thể được nhận dạng
o Person: Thực thể chỉ người
o Organization: Thực thể chỉ một tổ chức, một nhóm người được thành lập theo một cấu trúc phân cấp nào đó.
o Facility: Thực thể chỉ những thực thể do con người tạo ra thường là các thực thể xây dựng và kiến trúc, như sân vận động, bảo tàng, nhà ga v.v…
Chương 4. Nhận dạng thực thể trong văn bản tiếng Việt Nguyễn Bá Đạt
30
o Location: Thực thể chỉ những thực thể địa lý như vùng lãnh thổ, địa danh, sông, suối v.v…
o Nationality: Thực thể chỉ quốc tịch người, hoặc thuộc về quốc gia. o Religion: Thực thể chỉ các tổ chức tôn giáo.
4.1.2 Quy tắc nhận dạng thực thể
Khi nhận dạng thực thể trong văn bản ta phải đảm bảo quy tắc: không có các tên lồng nhau. Một tên mới chỉ được nhận khi tên cũ đã kết thúc (không bao giờ có hai tên có phần chung). Trong trường hợp có sự lồng nhau giữa các tên, chỉ một tên dài nhất được nhận (longest matching – dài thì thắng).
Ví dụ trong câu:
“Phòng Giáo dục huyện Mỹ Đức đang họp giao ban.”
ta chỉ nhận “Phòng Giáo dục huyện Mỹ Đức” là thực thể chỉ các tổ chức (Organization) và bỏ qua thực thể chỉ địa điểm “Mỹ Đức”.
4.2 Chuẩn bị tập dữ liệu
Tuy không cần thiết có một tập dữ liệu được gán nhãn lớn để dùng trong giai đoạn huấn luyện như những hệ thống sử dụng các phương pháp học máy, nhưng với mục đích xây dựng thêm một bộ dữ liệu chuẩn, cùng với những khó khăn trong vấn đề nhập nhằng ngôn ngữ khi viết luật, chúng tôi quyết định xây dựng song song hệ thống nhận dạng thực thể và tập dữ liệu được gán nhãn chuẩn, trong đó tập văn bản ban đầu được lấy từ đề tài: “Nghiên cứu phát triển một số sản phẩm thiết yếu về xử lý tiếng nói và
văn bản tiếng Việt”, mã số KC01.01/06-10. Quá trình phát triển đồng thời hai thành
phần như vậy mang lại rất nhiều lợi ích như:
Tiết kiệm thời gian và công sức so với việc hoàn toàn gán nhãn bằng tay cho tập dữ liệu.
31
Quá trình chuẩn hóa lại tập thực thể được nhận sai của hệ thống đem lại cho chúng tôi nhiều kinh nghiệm để hoàn thiện bộ luật cũng như bộ từ điển trong hệ thống.
Mô hình của hệ thống được mô tả quá trình phát triển của hệ thống trong hình 4.1.
Hình 4.1 - Mô hình các bước phát triển của hệ thống
Đầu tiên chúng tôi xây dựng rất nhanh một hệ thống nhận dạng thực thể sử dụng bộ luật Jape cho văn bản tiếng Việt có thể dùng được. Sau khi hệ thống đã hình thành, chúng tôi sử dụng nó để gán nhãn tự động cho văn bản (một tập văn bản). Tập văn bản được gán nhãn tự động này còn mang nhiều lỗi, được chúng tôi chuẩn hóa thành những văn bản được gán nhãn chuẩn và thêm nó vào tập dữ liệu (corpus). Tuy đã tiết kiệm được khá nhiều thời gian và công sức nhờ mô hình gán nhãn tự động nhưng việc chuẩn hóa lại cũng gặp phải một số khó khăn như:
Chương 4. Nhận dạng thực thể trong văn bản tiếng Việt Nguyễn Bá Đạt
32 Mang tính chủ quan, dễ mắc sai sót.
Nhiều trường hợp nhập nhằng rất khó để phân loại.
Chính vì những lý do trên, chúng tôi chia ra làm hai đội, gán nhãn lại độc lập với nhau. Sau đó sử dụng bộ công cụ Coltech.NE.tool do nhóm tự xây dựng dựa trên các bộ công cụ quản lý chất lượng của GATE (Annotation Diff, Corpus Benchmark tool) để so khớp và thống nhất. Quá trình chuẩn hóa và phân tích lỗi giúp chúng tôi tiếp tục hoàn thiện hệ thống nhận dạng thực thể. Các bước cứ được tiến hành như vậy cho đến khi hệ thống nhận dạng thực thể đạt hiệu quả như mong muốn.