Nghiên cứu và đề xuất một kiến trúc khung cho xử lý tài liệu tiếng Việt<br />
Hồ Bảo Quốc, Hồ Tú Bảo, Đinh Điền<br />
<br />
Tóm tắt : Trong bài báo này chúng tôi muốn trình bày một quan<br />
điểm tổng thể về các đối tượng liên quan đến hệ thống xử lý tài<br />
liệu, một kiến trúc phần mềm khung cho việc xử lý tài liệu từ đó đề<br />
nghị một giải pháp xây dựng một hệ thống xử lý văn bản tiếng Việt.<br />
<br />
1. Giới thiệu<br />
<br />
Trước hết xin được xác đinh rõ nghĩa của thuật ngữ xử lý tài liệu (Text processing) trong ngữ<br />
cảnh của bài này là các xử lý liên quan đến việc phân tích nội dung tài liệu (content analyse)<br />
chứ không đề cập đến việc soạn thảo, hiệu đính và thể hiện tài liệu. Các ứng dụng liên quan<br />
đến phân tích nội dung tài liệu như : xác định ranh giới các đối tượng trong tài liệu như : từ,<br />
ngữ, đoạn, câu...đến việc gán nhãn ngữ pháp (từ gốc, từ loại) hay nhãn ngữ nghĩa cho các đối<br />
tượng và rút trich thông tin từ nội dung tài liệu để phục vụ cho một lớp các ứng dụng khác<br />
nhau như : lập chỉ mục, tìm kiếm, phân lớp .... Các ứng dụng này thao tác trên một tài liệu<br />
hay một tập các tài liệu, được gọi là kho tài liệu (corpus) và có thể sử dụng một số tài nguyên<br />
ngôn ngữ học như các các danh sách cho trước (Gazetteers), danh mục từ (lexicons), hay các<br />
ontologies.<br />
<br />
Nếu các ứng dụng này được phát triển một cách rời rạc, thao tác trên những kho tài liệu với<br />
định dạng khác nhau thì sẽ dẫn đến một hệ quả là không thể tích hợp trao đổi kết quả với<br />
nhau, mà đây là yêu cầu không thể thiếu được trong xử lý tài liệu : kết quả của một ứng dụng<br />
này có thể là đầu vào cho một ứng dụng khác để hình thành một ứng dụng hoàn chỉnh. Ví dụ<br />
: chúng ta cần có một ứng dụng rút trích các thực thể được định danh (bài toán NER : Named<br />
Entity Recognition), chúng ta sẽ phải thực hiện việc : xác định ranh giới từ (Word<br />
Segmentation), gán nhãn từ loại cho từ (POS Tagging), rút trích cụm từ (chunking).<br />
<br />
Nếu các bài toán (con) này được cài đặt theo cách khác nhau, thao tác trên những định dạng<br />
tài liệu khác nhau thì rất khó để có thể kết nối chúng lại với nhau. Chính vì lý do đó nếu<br />
chúng ta nhìn bài toán xử lý tài liệu ở mức độ tổng quát hơn, xác định rõ các đối tượng dữ<br />
liệu cũng như xử lý tham gia vào bài toán này từ đó đưa ra một khung phần mềm (Software<br />
Framework/Software Architecture) thống nhất để tích hợp chúng lại với nhau trong một thể<br />
hoàn chỉnh thì sẽ dễ dàng cho việc phát triển, tích hợp cũng như tiến hóa của cả hệ thống xử<br />
lý tài liệu.<br />
<br />
Trong bài báo này chúng tôi cố gắng trình bày lại một cách tổng quát các đối tượng của bài<br />
toán xử lý tài liệu, nghiên cứu một khung phần mềm cho xử lý tài liệu đã được phát triển và<br />
sử dụng hơn 10 năm nay trên thế giới từ đó đề xuất một khung phần mềm cho xử lý tài liệu<br />
tiếng Việt phù hợp với yêu cầu đặt ra cho phần xử lý tài liệu của đề tài KC01 mã số<br />
KC.01.01.04/06-10 mà chúng tôi đang thực hiện.<br />
<br />
2. Các đối tượng (tài nguyên) trong bài toán xử lý tài liệu<br />
<br />
Theo quan điểm của nhóm phát triển GATE [1], mà chúng tôi nhận thấy khá hợp lý, các đối<br />
tượng liên quan đến xử lý tài liệu được chia thành 3 loại như sau : các đối tượng dữ liệu, các<br />
đối tượng xử lý và các đối tượng thể hiện.<br />
<br />
- Các đối tượng dữ liệu : là các tài liệu cần xử lý, chúng có thể chỉ là một tài liệu đơn lẻ<br />
hay là một tập tài liệu, chúng có thể có các loại định dạng khác nhau. Các tài nguyên<br />
ngôn ngữ như : các danh sách (Gazetteers), các bộ từ vựng (lexicons). hay các tài<br />
nguyên có cấu trúc phức tạp như các ontologies<br />
- Các đối tượng xử lý : là các đơn thể chương trình cài đặt của các thuật toán trong xử<br />
lý tài liệu như : xác định ranh giới từ (Word Segmentation), gán nhãn từ loại(POS<br />
Tagger), xác định cụm từ (Chunker), bộ phân tích (Parser) ...<br />
- Các đối tượng thể hiện: là các giao diện (Interface) để thể hiện các tương tác, các kết<br />
quả của việc thực hiện một đối tượng xử lý nào đó trên một đối tượng dữ liệu nào đó.<br />
Ví dụ: giao diện thể hiện bài toán phân đoạn từ gồm việc tương tác để xác định các<br />
tham số, thể hiện kết quả ...<br />
<br />
Các ứng dụng (application) sẽ là tổ hợp của 3 đối tượng này với nhau theo nghĩa : các đối<br />
tượng xử lý nào sẽ thao tác trên các đối tượng dữ liệu theo một cấu trúc điều khiển xác định<br />
trước và tương tác hay thể hiện thông qua đối tượng thể hiện<br />
<br />
Sau đây chúng ta sẽ đi chi tiết vào thuộc tính của từng loại đối tượng nêu trên<br />
<br />
2.1 Đối tượng dữ liệu<br />
<br />
Như đã trình bày ở trên, các đối tượng dữ liệu có thể là kho tài liệu (corpus) hay các tài<br />
nguyên ngôn ngữ như : danh sách (Gazeteers), bộ từ vựng (lexicons) hay một cấu trúc phức<br />
tạp như ontology.<br />
<br />
Mỗi đối tượng dữ liệu có thể bao gồm tối thiểu các thuộc tính như sau :<br />
- Tên : Tên của đối tượng<br />
- Vị trí lưu trữ trên đĩa : đường dẫn vật lý đến tập tin hay thư mục<br />
- Định dạng : text, doc, pdf, xml ...<br />
- Tính chất : xử lý tạm thời trong bộ nhớ hay xử lý và lưu trữ thường trực trên thiết bị<br />
lưu trữ<br />
- Loại : kho nhữ liệu, danh mục từ, ontologies<br />
- Bộ nhãn (Annotation Set) : Các thành phần trong đối tượng dữ liệu như từ (word),<br />
cụm từ (chunk), đoạn (paragraph), câu (sentence) sẽ được gán nhãn theo một bộ nhãn<br />
nào đó. Mỗi nhãn (Annotation) trong bộ nhãn sẽ có các đặc tính (feature) và mỗi đặc<br />
tính sẽ có một giá trị tương ứng. Ví dụ : giả sử chúng ta xét nhãn “từ” , thì nhãn này<br />
có thể có các đặc tính như : vị trí (tương đối trong tài liệu mà từ xuất hiện), từ gốc,<br />
bản thân từ, từ loại của từ…<br />
<br />
2.2 Đối tượng xử lý<br />
<br />
Mỗi đối tượng xử lý là một đơn thể chương trình cài đặt thuật toán nào đó theo một tiêu chí<br />
chung để có thể dễ dàng gắn thêm (plugin) vào hệ thống. Thường chúng có các tính chất như:<br />
<br />
- Các thông số môi trường<br />
- Các tham biến của chương trình<br />
- Các thông số chương trình thực thi (tên chương trình, đường dẫn…)<br />
<br />
Các đối tượng xử lý sẽ thao tác trên đối tượng dữ liệu, cụ thể là với các nhãn của một bộ<br />
nhãn nào đó và các đặc tính của nhãn đó. Vi dụ với vài toán xác định ranh giới từ thì chỉ là<br />
việc gán nhãn “từ” cho từng từ trong câu, gán giá trị cho đặc tính vị trí cuản nhãn “từ” của<br />
từng từ. Sau đó bài toán gán nhãn từ loại chính và gán thêm giá trị cho đặc tính “từ loại” của<br />
các từ đã được xác định ranh giới ở bước trước<br />
<br />
<br />
2.3 Đối tượng thể hiện<br />
<br />
Là các giao diện cài đặt sẳn phù hợp cho từng bài toán cụ thể, các giao diện này thao tác với<br />
các bộ nhãn (Annotation Set), với các nhãn và các đặc tính của nhãn để thể hiện các kết quả<br />
trên một giao diện thân thiện với người dung. Hay nói cách khác chúng phân tích tài liệu đã<br />
được gán nhãn để thể hiện lên giao diện.<br />
<br />
<br />
Tóm lại, có thể nhìn một các tổng quát như sau :<br />
<br />
Các đối tượng kho tài liệu sẽ bao gồm một hay nhiều tài liệu, mỗi tài liệu sẽ có một nội dung<br />
và nội dung đó sẽ được phân tích và gán nhãn (annotate) theo một hay nhiều bộ nhãn<br />
(annotation set) khác nhau. Mỗi nhãn (annotation) trong một bộ nhãn sẽ gồm các đặc<br />
trưng(feature), mỗi đặc trưng sẽ được gán một giá trị (value). Các đối tượng xữ lý thao tác<br />
trên các bộ nhãn (Annotation Set) của các thành phần trong đối tượng dữ liệu để gán các giá<br />
trị cho các đặc trưng của các nhãn trong bộ nhãn đó. Do đó có thể tổng quát hóa các bài<br />
toán xử lý tài liệu là các bài toán gán nhãn (Annotate) trên các thành phần trong đối tượng<br />
dữ liệu. Các đối tượng thể hiện dựa vào các dữ liệu đã được gán nhãn để thể hiện lên giao<br />
diện thân thiện với người dùng.<br />
Ngay khi đã có được một góc nhìn mang tính tổng quát như trên thì việc thiết kế một khung<br />
phần mềm để tích hợp các đối tượng này lại với nhau thì chúng ta cũng cần phải xem xét đến<br />
các thành phần như :<br />
<br />
- Các bộ phân tích loại tài liệu khác nhau để có thể làm việc với nhiều loại tài liệu khác<br />
nhau<br />
- Quản lý lưu trữ các tài liệu trong bộ nhớ và trên đía trong quá trình thao tác<br />
- Quản lý các bộ nhãn, nhãn và các đặc trưng của nhãn<br />
- Quản lý việc tích họp các đối tượng xử lý<br />
- Quản lý thể hiện<br />
<br />
Tât cả các công việc trên đòi hỏi đầu tư công sức và kinh phí khá lớn nếu chúng ta xuất phát<br />
từ con số không. Do đó chúng ta không nên xuất phát từ số không mà nên tận dụng các<br />
khung phần mềm có sẳn, đây cũng chính là đề nghị của chúng tôi. Trong phần sau chúng tôi<br />
sẽ trình bày chi tiết hơn về một khung phần mềm mã nguồn mở GATE của đại học Sheffield,<br />
Anh Quốc mà chúng tôi hy vọng có thể tận dụng để đề xuất cho hệ thống xử lý tài liệu tiếng<br />
Việt của đề tài chúng tôi.<br />
<br />
<br />
3. Kiến trúc tổng quát cho công nghệ ngôn ngữ GATE (General Architecture for Text<br />
Enginering)<br />
<br />
3.1 Giới thiệu về GATE<br />
<br />
GATE là một kiến trúc phần mềm tổng quát cho công nghệ tài liệu do nhóm của giáo sư<br />
Cunninggham tại đại học Sheffield Anh quốc phát triển từ năm 1997 [1]. GATE dựa trên<br />
quan điểm về các đối tượng liên quan đến xử lý tài liệu như đã nêu trong phần trên. GATE<br />
cung cấp một khung cơ bản và đầy đủ các công cụ như : quản lý các đối tượng dữ liệu (trong<br />
GATE được gọi là Language Resources), các đối tượng xử lý (trong GATE được gọi là các<br />
Process Resources) và các đối tượng thể hiện (Visual Resources). GATE cho pháp làm việc<br />
với các loại tài liệu khác nhau như : text, pdf, xml …Các đối tượng xử lý được thiết kế và các<br />
đặc dưới dạng các công cụ gắn vào (plugin) cho phép dễ phát triển thêm và tích hợp vào các<br />
công cụ cho sẳn. GATE cũng cho phép kết nối với các công cụ khác như : máy học (machine<br />
learning), truy tìm thông tin (information retrieval)…GATE cũng cung cấp một giao diện đồ<br />
họa (GUI) cho phép người dung tương tác với hệ thống. Các thư viện của GATE cung cấp<br />
một khả năng lập trình API khá linh hoạt cho việc phát triển các tài nguyên xử lý cũng như<br />
các ứng dụng.<br />
GATE được phát triển bắng ngôn ngữ lập trình Java.<br />
<br />
3.2 Kiến trúc chung của GATE<br />
<br />
Kiến trúc chung của GATE có thể được mô tả bằng sơ đồ sau<br />
Hình 1. Kiến trúc tổng quát của GATE<br />
<br />
GATE gồm các lớp (Layer) như sau :<br />
<br />
1. Lớp quản lý các loại tài liệu (Document Format Layer)<br />
2. Lớp quản lý lưu trữ (DataStore Layer)<br />
3. Lớp quản lý kho tài liệu (Corpus Layer): Kho tài liệu được qaurn lý ở nhiều mức khác<br />
nhau :<br />
a. Kho tài liệu -Æ tài liệu : một kho tài liệu bao gồm một hay nhiều tài liệu<br />
b. Nội dung tài liệu -Æ bộ nhãn: nội dung của một tài liệu liên kết với một hay<br />
nhiều bộ nhãn<br />
c. Nhãn -Æ các đặc trưng của nhãn : một nhãn có một hay nhiều đặc trưng.<br />
Đặc trưng Æ giá trị : một đặc trưng sẽ được gán một giá trị cụ thể nào đó<br />
4. Lớp quản lý các đối tượng dữ liệu đặc biệt (Language Resources Layer) như :<br />
a. Ontology<br />
b. Ontology được tổ chức theo Protégé<br />
c. WordNet<br />
d. Các danh sách (Gazetteers)<br />
5. Lớp các đối tượng xử lý căn bản như (Processing Resource Layer) :<br />
a. Gán nhãn từ loại (POS)<br />
b. Nhận dạng thực thể được định danh (NE)<br />
6. Lớp giao diện (IDE GUI Layer) : giao diện cho phép người dung thao tác trực tiếp<br />
7. Lớp ứng dụng (Application Layer) : là các ứng dụng mà nhóm phát triển đã xây dựng<br />
gồm úng dụng (ANNIE và OBIE)<br />
<br />
Trên kiến trúc chung của GATE như trên, nhóm làm xử lý tài liệu tiếng Việt hoàn toàn có<br />
thể phát triển các đói tượng xử lý cho tiếng Việt như : Xác định ranh giói từ, gán nhãn từ<br />
loại, xác định cụm tuwd, bộ phân tích cú pháp cho tiếng Việt để gắn thêm vào lớp các<br />
đối tượng xử lý căn bản của GATE. Tiếp theo hoàn toàn có thể xây dựng các ứng dụng<br />
cho tìm kiếm, phân loại tài liệu theo kiểu các ứng dụng ANNIE va OBIE của GATE [2].<br />
<br />
Dĩ nhiên GATE cũng còn các hạn chế của nó như về giao diện thể hiện chưa ổn định, các<br />
định dạng kết xuất có thể còn khá phức tạp (do phải phục vụ cho nhiều mục tiêu khác<br />
nhau), quản lý lưu trữ có thể chưa tốt..<br />
<br />
3.3 Một ví dụ minh họa<br />
<br />
Trong ví dụ minh họa này chúng tôi sử dụng GATE để tiến hành các công việc sau: xác định<br />
ranh giới câu, xác định ranh giới từ, xác định từ gốc (stemming) và gán nhãn từ loại cho từ<br />
trên một kho tài liệu chỉ gồm một văn bản thông qua tương tác với giao diện đồ họa của<br />
GATE. Cửa sổ bên trái của GATE là phần chứa các tài nguyên và ứng dụng của GATE, cửa<br />
sổ ở giữa là nội dung văn bản đã được phân tích và gán nhãn và cửa sổ bên phải và các bộ<br />
nhãn.<br />
<br />
1. Trong cửa sổ bên trái, chúng ta có thể thấy 4 mục :<br />
a. Language Resources : kho tài liệu chúng ta cần phân tích, trong ví dụ này là một<br />
corpus có tên “tét” chỉ gồm một tài liệu có tên “GATE document ….”<br />
b. Processing Resources : là các công cụ (chương trình) chúng ta cần nạp vào bộ nhớ để<br />
thực thi, trong thí dụ này gồm bốn chương trình<br />
i. Phân đoạn câu (ANNIE Sentence Splitter)<br />
ii. Phân đoạn từ (ANNIE English Tokenisez)<br />
iii. Xác định gốc từ (Stemmer) : đây là một công cụ gắn vào do một nhóm khác<br />
phát triển (Snowball) theo dạng plugin và gắn vào dễ dàng với khung của<br />
GATE<br />
iv. Gán nhãn từ loại (ANNIE POS Tagger)<br />
c. Application : cho phép chúng ta xây dựng một ứng dụng kiêu ống dẫn (PipeLine) từ<br />
các công cụ đã load vào bộ nhớ. Nói cách khác xác định một cấu trúc điều khiển việc<br />
thực hiện các công cụ trên để đạt được kết quả mong muốn<br />
2. Trong cửa sổ bên trái là các bộ nhãn (Annotation Set) sử dụng trong ứng dụng này<br />
3. Ở cửa sổ giữa là kết quả của tài liệu sau khi phân tích và đã chọn một nhãn (annotation)<br />
là token cho từ “congestive” để thấy các đặc trưng và giá trị tương ứng đã được gán cho<br />
chúng (trong cửa sổ nhỏ màu xanh nước biển).<br />
a. Vị trí của từ đă được xác đinh (thông qua vệt sáng tô từ đó – highlighted)<br />
b. Từ loại (categogy) là : JJ – tính từ<br />
c. Loại từ (kind) là từ (word) (chứ không phải số (number),,,)<br />
d. Lối viết (Orthograph) là chữ in thường (lowercase)<br />
e. Từ gốc (stem) là “congest”<br />
f. Chuổi khí tự của từ (string) là “congestive”<br />
<br />
<br />
<br />
<br />
Hình 2. Giao diện đồ họa của GATE<br />
<br />
Đây là một ví dụ minh họa qua giao diện đồ họa để dễ trình bày, tất cả các công việc này đều<br />
có thể lập trình thành một chương trình rất dễ dàng dựa vào các thư viện của GATE.<br />
4. Một đề nghị cho hệ phần mềm xử lý tài liệu tiếng Việt<br />
<br />
Chúng ta không nên bắt đầu từ con số không để có được một khung phần mềm cho xử lý tài<br />
liệu tiếng Việt tương tự như GATE. Quan điểm của chúng tôi là thừa kế tất cả những gì có<br />
thể thừa kế được từ GATE hoặc một khung phần mềm tổng quát nào đó tương tự để phát<br />
triển hệ thống phần mềm xử lý tiếng Việt. Làm như vậy chúng ta sẽ đở tốn công sức cho việc<br />
tạo khung quản lý chung như các lớp quản lý dạng tài liệu, quản lý lưu trữ, quản lý các thành<br />
phần khá phức tạp của kho ngữ liệu, nội dung tài liệu, các bộ nhãn và các đặc trưng của nhãn.<br />
<br />
Cụ thể, theo quan điểm của chúng tôi, chúng ta có thể thừa kế các lớp từ 1 – 4 của GATE,<br />
phát triển các tài nguyên xử lý cho tiếng Việt dưới dạng các plugin vào GATE để bổ sung<br />
vào lớp thứ 5 của GATE. Chúng ta có thể tận dụng hoặc viết mới lớp thứ 6 để có một giao<br />
diện tiếng Việt hợp lý và phát triển các ứng dụng ở lớp thứ 7 như: phân loại văn bản tiếng<br />
Việt, tìm kiếm thong tin trên văn bản tiếng Việt...<br />
<br />
Để làm được điều đó, chúng ta có thể tiến hành các bước như sau:<br />
<br />
1. Nghiên cứu và nắm bắt chi tiết kỹ thuật của GATE<br />
2. Phát triển các công cụ theo dạng plugin thêm vào GATE như :<br />
a. Công cụ phân đoạn từ<br />
b. Công cụ gán nhãn từ loại<br />
c. Công cụ trích cụm từ<br />
d. Công cụ phân tích câu<br />
3. Phát triển một giao diện riêng cho hệ thống xử lý văn barnt iếng Việt<br />
4. Thay đổi hay viết mới các thành phần mà GATE chưa đáp ứng nhu cầu của chúng ta<br />
như các dạng kết xuất, các giao tiếp với các ứng dụng khác.<br />
<br />
Dĩ nhiên chúng ta có thể không hoàn toàn sử dụng GATE như một hộp đen, mà<br />
chúng ta phải hiểu rõ GATE để khai thác, thừa kế các điểm mạnh và khắc phục các<br />
điểm yếu hoặc chưa phù hợp với mong muốn của chúng ta.<br />
<br />
<br />
5. Kết luận<br />
<br />
Qua phần trình bày trên chúng tôi mong muốn trình bày một cách nhìn tổng thể, thống<br />
nhất về các đối tượng của bài toán xử lý tài liệu, nêu lên sự cần thiết nên có một khung<br />
phần mềm tổng quát cho bài toán đó. Chúng tôi cũng trình bày một khung phần mềm xử<br />
lý tài liệu được nhiều nhóm nghiên cứu trên thế giới sử dụng như một minh họa, từ đó đề<br />
xuất một giải pháp tận dụng các hệ phần mềm khung này cho việc phát triển một hệ phần<br />
mềm xử lý văn bản tiếng Việt, với mong muốn chúng ta có một chuẩn và một công cụ<br />
chung cho việc xử lý văn bản tiếng Việt và chuẩn đó cũng phù hợp với cái mà cộng đồng<br />
nghiên cứu thế giới đang thực hiện.<br />
Tài liệu tham khảo<br />
<br />
[1] H. Cunningham, D. Maynard, K. Bontcheva, V. Tablan. GATE: A Framework and Graphical<br />
Development Environment for Robust NLP Tools and Applications. Proceedings of the 40th<br />
Anniversary Meeting of the Association for Computational Linguistics (ACL'02).<br />
Philadelphia, July 2002.<br />
<br />
[2] Y. Li, K. Bontcheva, and H. Cunningham. SVM Based Learning System For Information<br />
Extraction. J. Winkler, M. Niranjan and N. Lawerence (Eds.): Deterministic and Statistical<br />
Methods in Machine Learning, LNAI 3635, Springer Verlag, pp. 319-339. 2005<br />