RHS của luật chứa những thông tin về việc chú giải tới một mẫu cho trước. Thông tin
về mẫu được chuyển từ LHS của luật bằng cách sử dụng nhãn và sẽ được chú giải với loại thực thể (theo sau nó). Cuối cùng, những đặc trưng và các giá trị tương ứng được thêm vào chú giải.
Trong luật ví dụ dưới đây, nhãn là “loc”. RHS của luật là phần theo sau mũi
tên. Nhãn “loc” được chuyển tới RHS của luật và chú giải có kiểu Location được
thêm vào mẫu. Chú giải xác định hai đặc trưng, kind và rule với giá trị “city” và
“GazCity” tương ứng. Cả hai đặc trưng này đều tùy chọn. Đặc trưng đầu tiên được sử
dụng để đưa cho nhiều thông tin cụ thể hơn về chú giải, đó chính là một loại liên quan
của Location. Đặc trưng thứ hai được sử dụng các cho mục đích sửa lỗi. Kết quả chú
giải và các đặc trưng với giá trị tương ứng sẽ được hiện thị (cùng với xâu và các giá trị bắt đầu, kiến thúc) trong bảng các chú giải tại GATE GUI ( giả định rằng văn phạm
pháp đã được chạy trên tài liệu và luật đã được sử dụng).
Rule: GazCity
({Lookup.minorType == city}):loc
37
3.3.5. Sử dụng độ ƣu tiên
Mỗi một pha văn phạm sẽ có thể có một trong năm kiểu điều khiển: “brill”, “all”, “once”, “first” và “applet”. Các kiểu này phải được xác định khi bắt đầu mỗi văn phạm. Dùng cho nhiệm vụ NER kiểu ―appelt‖ là thích hợp nhất. Khi viết các văn phạm JAPE cho các nhiệm vụ khác, các kiểu còn lại thường hiệu quả hơn.
Kiểu “brill” nếu nhiều luật khớp từ cùng một ví trí trong tài liệu thì sẽ thực thi tất cả các luật đó. Kiểu “all” cho phép tất cả các luật được khớp từ mọi ví trí trong tài liệu đều được thực thi. Kiểu “once” thực thi duy nhất một luật được khớp, bỏ qua tất cả pha Jape vào sau. Kiểu “first” thực thi luật đầu tiên bắt đầu khớp với một vị trí
trong tài liệu.
Kiểu “appelt” xét sự so khớp dài nhất. Nếu nhiều luật được khớp từ cùng một ví trí trong tài liệu, chỉ có duy nhất một luật là được thực thi theo nguyên tắc sau đây:
Luật tạo ra được sự so khớp dài nhất được lựa chọn.
Nếu nhiều luật cùng tạo ra sự so khớp dài nhất, lựa chọn một luật với độ ưu tiên cao nhất.
Nếu nhiều luật có cùng độ ưu tiên, thì luật đầu tiên trong văn phạm JAPE được lựa chọn.
Tùy chọn khai báo độ ưu tiên(là một số nguyên dương) sẽ được liên kết tới mỗi luật. Số càng lớn thì độ ưu tiên càng cao. Mặc định độ ưu tiên cho tất cả các luật là -1.
3.3.6. Sử dụng Java cho JAPE
Giới hạn của văn phạm JAPE là: Không thể, thêm, xóa, sửa một đặc trưng của một chú giải có sẵn. Hoặc không thể xóa một chú giải có sẵn.
Sử dụng Java cho JAPE có thể giải quyết các vấn đề nêu trên. Ví dụ áp dụng nhúng mã Java vào JAPE được mô tả ở phụ lục A.
38
Chƣơng 4. Phƣơng pháp phân tích câu hỏi cho hệ thống hỏi đáp tiếng Việt
4.1. Kiến trúc hệ thống
Kiến trúc chung (trong hình 4-1) của một hệ thống hỏi đáp gồm 2 thành phần đó là thành phần phân tích câu hỏi ngôn ngữ tự nhiên (Natural Language Question Analysis) và thành phần tìm kiếm câu trả lời (Answer Retrieval). Vai trò của thành
phần phân tích là sinh ra một biểu diễn trung gian của câu hỏi để sử dụng trong phần
còn lại của hệ thống nhằm mục đích xác định câu trả lời. Một hệ thống trả lời câu hỏi lý tưởng là hệ thống đưa ra được một câu trả lời ngữ nghĩa, và thành phần phân tích câu hỏi chính là thành phần quan trọng nhất góp phần đưa câu trả lời mong muốn.
Hình 4-1: Kiến trúc chung của một hệ thống trả lời ngôn ngữ tự nhiên
Thành phần phân tích câu hỏi
Natural Language Question Analysis Bộ biểu diễn trung gian Thành phần tìm kiếm câu trả lời Answer Retrieval
Câu hỏi ngôn ngữ tự nhiên
Câu trả lời ngữ nghĩa
39
Thành phần xử lý câu hỏi ngôn ngữ tự nhiên được thiết kế trong các hệ thống hỏi đáp phụ thuộc vào phương pháp phân tích câu hỏi. Để sử dụng cho một hệ thống hỏi đáp tiếng Việt, ví dụ như hệ thống hỏi đáp dựa trên Ontology được xây dựng bởi Nguyễn Quốc Đại [42], chúng tôi đưa ra một hướng thiết kế (trong hình 4-2) gồm 3 module: tiền xử lý (Pre Processing), phân tích cú pháp (Syntactic Analysis) và phân tích ngữ nghĩa (Semantic Analysis). Module phân tích ngữ nghĩa gồm có 2 module con là: phân loại câu hỏi (Question Classifier) và so khớp mẫu (Pattern Matching).
Hình 4-2: Các module của thành phần xử lý câu hỏi ngôn ngữ tự nhiên
Đầu ra của module so khớp mẫu chính là bộ biểu diễn trung gian của câu hỏi
gồm có: “Dạng cấu tạo câu hỏi” và một (hoặc nhiều) bộ biểu diễn con. Mỗi bộ biểu diễn con có dạng:
GATE Tiền xử lý
Câu hỏi ngôn ngữ tự nhiên Phân tích cú pháp Phân tích ngữ nghĩa Phân lớp câu hỏi So khớp mẫu Bộ biểu diễn trung gian
40
(Dạng cấu tạo bộ biểu diễn, Lớp câu hỏi, Thuật ngữ 1, Mối quan hệ, Thuật ngữ 2, Thuật ngữ 3).
Trong đó “Thuật ngữ 1” là một khái niệm (lớp đối tượng), ―Thuật ngữ 2‖ và
“Thuật ngữ 3‖ (đối tượng) là các thực thể. “Mối quan hệ” (thuộc tính) được dùng để
liên kết các thuật ngữ và luôn chứa đựng khái niệm trong nó.
Khi bộ biểu diễn trung gian có nhiều hơn một bộ con, điều này có nghĩa là câu hỏi được tổng hợp từ ít nhất hai câu hỏi con. Và “Dạng cấu tạo bộ biểu diễn” trong
mỗi bộ con chính là “Dạng cấu tạo câu hỏi” của câu hỏi con tương ứng. Do đó, nếu câu hỏi mà chỉ có một bộ biểu diễn con thì “Dạng cấu tạo bộ biểu diễn” là “Dạng cấu
tạo câu hỏi”. “Lớp câu hỏi” trong mỗi bộ con chính là lớp của câu hỏi con tương ứng.
“Dạng cấu tạo câu hỏi”: nhận một trong các giá trị sau đây: “Normal”,
“Unknterm”, “Unknrel”, “Definition”, “And”, “Or”, “Compare”, “ThreeTerm”, “Clause”, “Combine”, “AffirmNeg”, “AffirmNeg_3Term”, “AffirmNeg_2Triple”.
Trong đó, mỗi giá trị biểu diễn cho một tập các nguyên tắc cấu tạo (gọi là mẫu) của các câu hỏi.
Ví dụ: bộ biểu diễn trung gian của câu hỏi “ai có quê ở Hà Tây?” hoặc câu hỏi “ai
là sinh viên của lớp khoa học máy tính?” sẽ có “Dạng cấu tạo câu hỏi” nhận giá
trị là “UnknTerm”.
“Lớp câu hỏi” sẽ nhận một trong các giá trị: ―QU HowWhy”, “QU YesNo”, “QU
What”, “QU When”, “QU Where”, “QU Who”, “QU Many”, “QU ManyClass”, “QU List”, “QU Entity‖. Nó chính là kết quả của quá trình phân lớp được thực hiện
trong module phân loại câu hỏi.
Chúng tôi đưa ra một phương pháp chung để phân tích câu hỏi tiếng Việt. Dựa vào đó xây dựng hệ thống thử nghiệm về trên miền tri thức trường đại học mà cụ thể là đại học Công Nghệ. Kết quả phân tích sẽ được sử dụng trong hệ thống hỏi đáp tiếng Việt dựa trên Ontology do Nguyễn Quốc Đại xây dựng và thử nghiệm [42].
Một ví dụ về kết quả phân tích câu hỏi: “số lượng sinh viên học lớp khoa học máy tính là 45 phải không?” được đưa ra như trong hình 4-3 sau đây.
41
42
4.2. Tiền xử lý
Module tiền xử lý xác định lại cụm từ dùng để hỏi, từ loại của một số từ đặc biệt, để đưa ra những kết quả chú giải ngữ nghĩa với các đặc trưng phù hợp, phục vụ cho các module sau đó.
Chúng tôi sử dụng GATE [40][45]để thực hiện quá trình phân tích một câu
hỏi ngôn ngữ tự nhiên thông qua JAPE. Một thành phần tích hợp có tên là
Coltech.NLP.Tokenizer được Nguyễn Bá Đạt [43] đóng gói cho GATE dựa trên bộ
phân đoạn Tiếng Việt sử dụng gán nhãn từ loại của Phạm Đức Đăng [44]. Khi sử
dụng thành phần tích hợp này, có một kiểu chú giải TokenVn cho mỗi từ trong
tiếng Việt với các đặc trưng category, kind, string được sinh ra. Trong đó, category với giá trị tương ứng là xâu biểu diễn nhãn từ loại, kind nhận giá trị là
xâu ―word” và string tương ứng với xâu ký tự biểu diễn từ tiếng Việt. Hình 4-4
mô tả giao diện trong GATE khi sử dụng Coltech.NLP.Tokenizer. Ngoài ra còn
kiểu chú giải Split được tạo ra để chú giải cho các dấu tách câu như: dấu hỏi (?),
dấu chấm (.), dấu phảy (,), dấu chấm than (!), …
43
Trong các thành phần phân tích câu hỏi của các hệ thống hỏi đáp tiếng Anh thường không có sự xuất hiện của module Tiền xử lý. Một trong những lý do giải thích cho sự có mặt của module Tiền xử lý trong thành phần phân tích câu hỏi tiếng Việt là
vì các bộ tách từ tiếng Việt hiện nay và cả bộ tách từ được sử dụng trong
Coltech.NLP.Tokenizer được tạo ra trên tập dữ liệu văn bản chuẩn, khi áp dụng bộ tách
từ cho câu hỏi thì kết quả còn chưa tốt.
Ví dụ như trong hình 4-4, trong ngôn ngữ tự nhiên “phải không” là một từ để hỏi, nhưng khi áp dụng bộ tách từ thì “phải không” bị tách thành 2 từ “phải” và “không”, điều đó có nghĩa là “phải không” là một cụm từ. Vấn đề này hoàn toàn
tương tự với nhiều từ để hỏi khác như: “đúng không”, “ở đâu”, “khi nào”, “lúc nào”,
“cho biết”, “người nào”, “như thế nào”, “tại làm sao”, “cái gì”…
4.2.1. Xác định cụm từ để hỏi chuẩn trong câu hỏi ngôn ngữ tự nhiên
Vì lý do nêu trên, xác định lại chính xác cụm từ để hỏi là một nhiệm vụ quan trọng. Để thực hiện, chúng ta có thể áp dụng cách nhúng mã Java vào JAPE (Mã chương trình nhúng Java vào JAPE để xác định lại một số từ để hỏi được đặt trong phụ lục A). Có hai phương án được đưa ra để giải quyết vấn đề này:
Phƣơng án thứ nhất: Chúng ta tạo ra một luật mà LHS khớp với tất cả các từ để hỏi có thể có trong tự nhiên (vì số lượng từ để hỏi là hạn chế, trong tiếng Anh, tập từ để hỏi chuẩn gồm có: who, when, what, where, why, how). Sau đó, các cụm từ (hoặc từ) được chú giải bởi kiểu TokenVn với các đặc trưng category có giá trị tương ứng là xâu “Tudehoi” biểu diễn nhãn từ loại, đặc trưng string với giá trị tương ứng là xâu biểu diễn từ để hỏi.
Phƣơng án thứ hai: Thay vì tạo ra một luật, chúng ta tạo ra nhiều luật mà mỗi luật có LHS khớp với một nhóm các cụm từ (hoặc từ) để hỏi với phân loại ngữ nghĩa
câu hỏi như: hỏi đúng sai, hỏi về thời gian, hỏi về địa điểm, hỏi về người, hỏi số lượng… Sau đó, chúng ta tạo chú giải ngữ nghĩa cho các nhóm này, kiểu chú giải TokenVn (trong hình 4-5) cho mỗi cụm từ (hoặc từ) trong nhóm, với đặc trưng type
nhận các giá trị khác nhau đối với mỗi nhóm, đặc trưng category nhận giá trị “Tudehoi”, đặc trưng “string” là xâu tương ứng biểu diễn từ để hỏi.
44
Chúng ta có thể thấy rằng, sử dụng phương án thứ hai chính là phân loại câu hỏi nhưng ở mức độ đơn giản nhất: phân loại chỉ dựa trên các từ để hỏi chuẩn. Và chúng
tôi lựa chọn phương án này để thực hiện.
Hình 4-5: Một số từ để hỏi đã đƣợc xác định lại bằng cách sử dụng JAPE
Chúng tôi xác định một số nhóm dưới đây chứa các cụm từ (hoặc từ) để hỏi mà có cùng phân loại về mặt ngữ nghĩa:
Nhóm các cụm từ (hoặc từ) để hỏi mà câu trả lời mong muốn ở dạng Đúng hoặc Sai như: phải không, đúng không, có đúng là, có phải là, có đúng, có phải, Có đúng, Có phải, Có đúng là, Có phải là.
Kiểu chú giải TokenVn được tạo ra cho các cụm từ (hoặc từ) này, có đặc trưng type nhận giá trị là “YesNo”, đặc trưng category nhận giá trị là ―Tudehoi‖, đặc trưng string là xâu ký tự biểu diễn cụm từ (hoặc từ).
Nhóm các cụm từ (hoặc từ) dùng để hỏi về thời gian như: bao giờ, Bao giờ, ngày
45
nào, khi nào, Khi nào, là khi nào, thời gian nào, là thời gian nào, vào thời gian nào, dịp nào, Dịp nào, hồi nào, Hồi nào, là dịp nào, vào hồi nào, …
Kiểu chú giải TokenVn được tạo ra cho các cụm từ (hoặc từ) này, có đặc trưng type nhận giá trị là “When”, đặc trưng category nhận giá trị là ―Tudehoi‖, đặc trưng string là xâu ký tự biểu diễn từ hoặc cụm từ.
Nhóm các cụm từ (hoặc từ) dùng để hỏi về số lượng như: “bao nhiêu”, “là bao
nhiêu”, “số lượng”, có kiểu chú giải TokenVn được tạo ra cho các cụm từ (hoặc
từ) này, có đặc trưng type nhận giá trị là “Many”, đặc trưng category nhận giá trị là ―Tudehoi‖, đặc trưng string là xâu ký tự biểu diễn từ hoặc cụm từ.
Nhóm các cụm từ (hoặc từ) dùng để hỏi về người như: ―ai”, “ai nào”, “người
nào”, “những ai”, “những người nào”, “là ai”, “là ai nào”, “là người nào”, “là những ai”, là những ai nào” “là những người nào”.
Kiểu chú giải TokenVn được tạo ra cho các cụm từ (hoặc từ) này, có đặc trưng type nhận giá trị là “Who”, đặc trưng category nhận giá trị là ―Tudehoi‖, đặc trưng string là xâu ký tự biểu diễn từ hoặc cụm từ.
Nhóm các cụm từ (hoặc từ) dùng để hỏi về địa điểm như: ở đâu, Ở đâu, là ở đâu, là ở đâu nào, nơi nào, Nơi nào, ở nơi nào, là nơi nào, ở nơi nào đó, là nơi nào đó, địa điểm nào, chỗ nào, là chỗ nào, là chỗ nào đó,…
Kiểu chú giải TokenVn được tạo ra cho các cụm từ (hoặc từ) này, có đặc trưng type nhận giá trị là “Where”, đặc trưng category nhận giá trị là ―Tudehoi‖, đặc trưng string là xâu ký tự biểu diễn từ hoặc cụm từ.
Nhóm các cụm từ (hoặc từ) được dùng như mệnh lệnh: “cho biết”, “Cho biết”, “Kể ra”, “kể ra”, “tìm”, “Tìm”, “Tìm ra”, “tìm ra”, “liệt kê”, “Liệt kê”, “Danh sách”, “danh sách”, “đưa ra”, “Đưa ra”, “hiện ra”, “Hiện ra”, “chỉ ra”, “Chỉ ra”.
Kiểu chú giải TokenVn được tạo ra cho các cụm từ (hoặc từ) này, có đặc trưng type nhận giá trị là “List”, đặc trưng category nhận giá trị là ―Tudehoi‖, đặc trưng string là xâu ký tự biểu diễn từ hoặc cụm từ.
46
Nhóm các từ hoặc cụm từ dùng để hỏi các thức, nguyên nhân: “thế nào”, “là thế nào”, “như thế nào”, “làm sao”, “tại sao”, “là tại làm sao”, “là sao”.
Kiểu chú giải TokenVn được tạo ra cho các cụm từ (hoặc từ) này, có đặc trưng type nhận giá trị là “HowWhy”, đặc trưng category nhận giá trị là ―Tudehoi‖, đặc trưng
string là xâu ký tự biểu diễn từ hoặc cụm từ.
Nhóm các từ hoặc cụm từ dùng để hỏi các thức, nguyên nhân: “cái gì”, “Cái gì”, “là gì”, “Là gì”, “những gì”, “Những gì”, “những cái gì”, “Những cái gì”, “là cái gì”, “Là cái gì”, “là những cái gì”.
Kiểu chú giải TokenVn được tạo ra cho các cụm từ (hoặc từ) này, có đặc trưng type nhận giá trị là “What”, đặc trưng category nhận giá trị là ―Tudehoi‖, đặc trưng string là xâu ký tự biểu diễn từ hoặc cụm từ.
47
4.2.2. Tạo chú giải ngữ nghĩa cho các từ đặc biệt
Đối với những cụm từ hay được viết tắt như “khoa học máy tính” được viết thành “KHMT” hoặc những từ đặc biệt xuất hiện trong mỗi miền tri thức, thì bộ tách từ dựa
trên gán nhãn từ loại đem lại kết quả phân tích câu hỏi không như mong muốn.
Hình 4-6: Kiểu chú giải TokenVn cho những từ đặc biệt
Ví dụ hình 4-6 :
“sinh viên nào học lớp K50 công nghệ phần mềm?”
Từ ―K50‖ chỉ xuất hiện trong một miền tri thức nhất định, có kiểu chú giải TokenVn với đặc trưng category nhận giá trị là xâu ―X‖, nghĩa là không xác định từ
loại. Điều này khiến cho việc phân tích câu hỏi trở nên khó khăn hơn và gây ra mất thông tin, chẳng hạn: không thể nhận biết đuợc “lớp K50 công nghệ phần mềm” là một cụm danh từ (Trong phần 4.3.1).
Mặt khác, hầu như những từ viết tắt hoặc những từ đặc biệt chỉ xuất hiện trong miền tri thức nhất định đều là nằm trong một cụm danh từ. Ví dụ: “lớp KHMT”, “khóa K50”,... Bởi vậy, chúng ta thay đổi giá trị đặc trưng category của chú giải TokenVn thành một giá trị thích hợp. Gán lại giá trị cho đặc trưng này hoàn toàn phụ