Tuần vừa rồi tôi đã bảo vệ xong luận văn tốt nghiệp đại học, bài viết này nhằm ghi nhận lại một số điểm chính trong luận văn kẻo sau này quên mất. :)
Nội dung luận văn của tôi là tìm hiểu về kiến trúc UIMA (Unstructured Information Management Architecture). Đây là kiến trúc dùng để xây dựng các chương trình phân tích một lượng lớn dữ liệu phi cấu trúc (văn bản, hình ảnh, âm thanh, ...) để rút trích ra các ngữ nghĩa bên trong chúng. Những chương trình như vậy được tài liệu UIMA gọi là chương trình quản lí dữ liệu phi cấu trúc (Unstructured Information Management Applications).
UIMA
Kiến trúc UIMA ra đời do một yêu cầu thực tế: hiện nay các chương trình quản lí dữ liệu phi cấu trúc phát triển rất nhiều, nhưng mỗi chương trình được xây dựng theo một phương pháp, công nghệ khác nhau, vì vậy cần qui định một kiến trúc chung cho những chương trình này để việc xây dựng các dễ dàng hơn và có thể kết hợp những chương trình này lại. UIMA ban đầu được phát triển bởi IBM, hiện nay đã trở thành một chuẩn được quản lí bởi OASIS và có 2 phiên bản cài đặt bằng Java và C++ mã nguồn mở phát triển bởi Apache.
Kiến trúc UIMA chia chương trình quản lí dữ liệu phi cấu trúc thành nhiều component, mỗi component này thực hiện một công đoạn nào đó trong quá trình phân tích dữ liệu. UIMA qui định chuẩn cho các component, chuẩn cho dữ liệu trao đổi giữa các component và chuẩn lắp ráp các component thành qui trình phân tích dữ liệu. Điều này giúp cho những component trong các chương trình UIMA có tính tái sử dụng cao; và các component UIMA mã nguồn mở xuất hiện rất nhiều trên mạng (ví dụ: các component có sẵn trong project Apache UIMA), thực hiện nhiều công việc khác nhau như tách từ, gán nhãn từ loại, phát hiện entities dựa vào regular expression, ...
Việc chia chương trình thành nhiều component như trên còn giúp cho việc triển khai chương trình dễ dàng hơn. Toàn bộ chương trình gồm nhiều component có thể chạy trên cùng một máy hoặc chia ra cho nhiều máy (mỗi máy chạy một hay nhiều component) và ta có thể cấu hình load balance, replicate, ... để việc chạy chương trình trên nhiều máy hiệu quả hơn (UIMA hiện thực việc triển khai chương trình trên nhiều máy bằng ActiveMQ).
Quá trình làm luận văn với UIMA
Cảm giác ban đầu khi bắt đầu làm luận văn về UIMA là "ngợp" trong một đống tài liệu :P. Tài liệu quá nhiều và nói về nhiều vấn đề khác nhau. Sau vài ngày, tôi nghĩ ra một cách tiếp cận hiệu quả hơn là đọc các paper có sử dụng UIMA để xây dựng chương trình. Các paper này đều dành một đoạn ngắn khoảng 1/2 trang nói về UIMA và hầu hết đều nhấn mạnh việc chia chương trình thành nhiều component. Nhờ đó, bọn tôi nắm được ý tưởng chính trong kiến trúc UIMA và sau đó xem các example có sẵn dễ dàng hơn rất nhiều.
Luận văn của chúng tôi làm về một chương trình phân tích các bệnh án điện tử. Trong quá trình làm, bọn tôi đã thử nhiều cách phân tích và sử dụng nhiều component phân tích khác nhau. Kiến trúc UIMA giúp cho việc thay đổi qui trình phân tích rất dễ dàng và nhanh chóng. Ví dụ: để thêm khả năng nhận diện tên bệnh trong bệnh án, bọn tôi chỉ cần download component Dictionary Annotator có sẵn, sau đó chuyển từ điển các tên bệnh (nhóm tôi dùng SNOMED CT) thành dạng input mà component yêu cầu rồi đưa component vào qui trình hiện có. Việc thêm một component chỉ đơn giản là sửa đổi một số file XML cấu hình, không hề ảnh hưởng gì đến các component đã có trong qui trình.
Nhóm bọn tôi chưa thử nghiệm nhiều với các khả năng triển khai chương trình của UIMA. Tuy nhiên trong quá trình làm luận văn, có một giai đoạn tôi vừa phải lập trình GUI cho chương trình, vừa phải chạy một số ứng dụng khá nặng khác nên máy chạy rất chậm. Lúc đó bọn tôi đã nghĩ ra cách dùng khả năng triển khai chương trình rất flexible của UIMA để chuyển toàn bộ qui trình phân tích thành một service trên máy của bạn tôi. Sau đó phần GUI của tôi chỉ việc gửi dữ liệu qua cho service này thực hiện phân tích rồi nhận kết quả nên máy chạy nhẹ hơn nhiều. Toàn bộ việc chuyển đổi này được bọn tôi làm chỉ mất khoảng 30 phút!
Kết
Tôi thấy UIMA là một kiến trúc khá mạnh và thú vị, và một số project sau này của tôi có thể sẽ sử dụng nó để việc phát triển thuận tiện hơn. Tuy nhiên UIMA yêu cầu khả năng developer của người sử dụng ở mức trên trung bình (đôi lúc phải track những lỗi phát sinh từ trong framework khá rắc rối) nên đối với người dùng bình thường hoặc người làm nghiên cứu có lẽ GATE là một lựa chọn thích hợp hơn. Còn đối với những chương trình lớn chạy trong thực tế, khả năng triển khai linh hoạt sẽ làm cho UIMA trở thành candidate sáng giá.
Wednesday, August 5, 2009
Subscribe to:
Post Comments (Atom)
2 comments:
Post a Comment