TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 4(39).2010
307
NGHIÊN CỨU ỨNG DỤNG MÃ NGUỒN MỞ LUCENE ĐỂ
XÂY DỰNG PHẦN MỀM TÌM KIẾM THÔNG TIN TRÊN VĂN BẢN
A CASE STUDY ON USING OPEN SOURCE LUCENE TO BUILD THE FULL
TEXT SEARCH ENGINE Huỳnh Đức Việt
Trung tâm Công nghệ Phần
mềm, Trường Đại học Duy Tân
Võ Duy Thanh
Trường Cao đẳng Công nghệ
Thông tin Hữu nghị Việt – Hàn
Võ Trung Hùng
Trường Đại học Bách khoa,
Đại học Đà Nẵng TÓM TẮT
Trong bài báo này chúng tôi giới thiệu những nghiên cứu về mã nguồn mở Lucene và chỉ
ra cách thức ứng dụng nó trong hệ thống tìm kiếm. Lucene là dự án mã nguồn mở được cung
cấp và quản lý bởi tổ chức Apache Software Foundation, đây là công cụ lập chỉ mục cho văn bản,
sử dụng trong hệ thống tìm kiếm. Lucene cho phép xử lý các văn bản đầu vào ở dạng văn bản
(text) để tạo ra tập chỉ
mục và cung cấp phương thức tìm kiếm trên tập chỉ mục đó. Nó cũng cho
phép người dùng kế thừa và phát triển để phù hợp với nhiều ngôn ngữ khác nhau. Chúng tôi đề
xuất mô hình ứng dụng Lucene để phát triển hệ thống tìm kiếm trên các văn bản lưu trữ. Trong
mô hình này, chúng tôi sử dụng mã nguồn của Lucene và xây dựng một số xử lý cho ngôn ngữ
tiếng Việt. Đầu tiên, chúng tôi tiến hành tách nội dung của các loại v
sản phẩm thương mại và mã nguồn được giữ bí mật. Hoặc các hệ thống tìm kiếm trên
máy cá nhân như Windows Search, Google Desktop… đã đáp ứng phần nào nhu cầu
của người sử dụng, miễn phí cho cá nhân, tuy nhiên cũng chỉ đáp ứng được trên phạm
vi nhỏ. Điều này dẫn tới kết quả là nhiều nhà phát triển riêng biệt hoặc các tổ chức sử
dụng sẽ phải tự mình xây dựng từ đầu một công cụ tìm kiếm nếu hệ thống của họ cần
chức năng tìm kiếm này. Một cách tiếp cận hiệu quả để giải quyết vấn đề này là sử dụng
các thư viện mã nguồn mở để xây dựng hệ thống tìm kiếm.
Trong bài báo này, chúng tôi giới thiệu những những tính năng nổi bật nhất củ
a
Lucene, cùng những kết quả thử nghiệm trên hệ thống này và đưa ra những phát triển
mở rộng cho văn bản tiếng Việt.
2. Tìm kiếm thông tin
Tìm kiếm thông tin (Information Retrieval – IR) là tìm kiếm tài nguyên (thường
là các tài liệu - documents) trên một tập lớn các dữ liệu phi cấu trúc (thường là văn bản
– text) được lưu trữ trên các máy tính nhằm thỏa mãn nhu cầu về thông tin [2].
Mục đích của IR là trả lại cho ngườ
i dùng một tập các thông tin thỏa mãn nhu
cầu của họ. Chúng ta định nghĩa rằng thông tin cần thiết là “câu truy vấn” (query) và
các thông tin được chọn là “tài liệu” (documents). Mỗi cách tiếp cận trong IR bao gồm 2
thành phần chính: một là các kỹ thuật để biểu diễn thông tin (câu truy vấn, tài liệu) và
hai là phương pháp so sánh các cách biểu diễn này. Mục đích là để thực hiện tự động
qui trình kiểm tra các tài liệu bằng cách tính toán độ tương quan giữa các câu truy vấn
và tài liệu. Qui trình tự động này thành công khi nó trả về các kết quả giống với các kết
quả được con người tạo ra khi so sánh câu truy vấn với các tài liệu.
với j: Q × D Æ [0,1] biểu diễn việc xử lý của người dùng về mối quan hệ của
thông tin trên câu truy vấn và thông tin trong tài liệu.
Có nhiều cách đo lường khác nhau cho việc đánh giá mức độ xử lý trả về kết quả
của một hệ thống tìm kiếm thông tin. Các cách đo lường đều đòi hỏi một tập tài liệu và
một câu truy vấn trên tập tài liệu đó, giả sử rằng mỗi tài liệu có thể liên quan hoặc
không liên quan đến câu truy vấn.
o Độ chính xác (Precision): được đo bởi tỉ lệ của tài liệu tr
ả về chính xác trên
tổng các tài liệu nhận được
o Độ bao phủ (Recall): được đo bởi tỉ lệ tài liệu trả về chính xác trên tổng các tài
liệu có liên quan
o Kết quả sai (Fall-out): được đo bởi tỉ lệ các tài liệu không có liên quan tả về
trên tổng các tài liệu không liên quan
Ví dụ trong tập 1000 tài liệu được sử dụng cho tìm kiếm với 200 tài liệu liên
quan đến thông tin “tin học”, một hệ thống tìm kiếm thông tin “tin học” trả về được 150
tài liệu, trong đó có 130 tài liệu chính xác. Khi đó:
Độ chính xác =
}150{
}150{}200{
∩
Kết quả sai =
{Tài liệu không liên quan} ∩ {Tài liệu nhận được}
{Tài liệu không liên quan}
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 4(39).2010
310
hợp các mục từ. Mỗi mục từ sẽ chứa một danh sách các tài liệu có chứa nó, danh sách
này gọi là posting, việc so khớp sẽ duyệt qua danh sách posting để kiểm tra các tài liệu
có chứa mục từ hay không.
- Phương pháp tính điểm: Mô hình so khớp chỉ trả về giá trị chân lý là có hoặc
không có trong tài liệu tìm kiếm, kết quả trả về không có thứ hạng. Điều này đã dẫn đến
kết quả tìm kiếm không được như mong muốn của người dùng. Để cải tiến mô hình này,
người ta áp dụng cách tính điểm cho kết quả trả về, dựa trên trọng số của mục từ trên tài
liệu.
Tần suất xuất hiện của mục từ t trên tài liệu d được ký hiệu là tf
t,d
. Tần suất
nghịch đảo của tài liệu d trên tập N tài liệu ký hiệu là idf
t
=log(N / df
t
), khi đó, trọng số
mục từ t trên tài liệu d sẽ là tf-idf
t,d
= tf
t,d
× idf
t
, điểm số của tài liệu d sẽ là tổng điểm
học
)
= 3 × log (1000/100) + 4 × log (1000/150) ~ 6.23
- Mô hình không gian vec-tơ (The vector space model): Mô hình so khớp và cả
phương pháp tính điểm số ở trên chưa xét vai trò của các mục từ trong câu truy vấn. Ví
dụ hai tài liệu chứa câu “Mary is quicker than John” và “John is quicker than Mary”, số
lượng các mục từ như nhau nhưng vai trò khác nhau hoàn toàn. Để giải quyết vấn đề
này người ta đưa ra mô hình không gian vec-tơ, mô hình này sẽ biểu diễn tài liệu d như
một vec-tơ tần suất các mục từ )(V d .Với hai tài liệu trên thì tuy có các mục từ giống
nhau, nhưng biểu diễn vec-tơ của chúng thì lại khác nhau, khi đó chúng ta có thể tính
mức tương quan giữa hai tài liệu:
sim (d
1
, d
2
) =
)(dV)(dV
)(dV).(dV
21
21
×
Đối với truy vấn q chúng ta cũng xem đây là một vec-tơ
)(V q
biểu diễn tần
suất các mục từ truy vấn. Mức độ tương quan giữa hai vector được tính theo hàm cosin
của góc giữa chúng:
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 4(39).2010
311
Thành phần chức năng chính của Lucene bao gồm hai phần: Thành phần tạo chỉ
mục và thành phần tìm kiếm. Đây là hai thành phần quan trọng cho một hệ thống tìm
kiếm.
sim(d
i
,q)= cos
θ
=
(q)V)(dV
(q)V).(dV
i
i
×
≈
)().( qvdv
i
Với :
)(/)()( dVdVdv =
,
)(/)()( qVqVqv =
là các vec-tơ đơn vị.
Length(d)=M, Length(q)=N
∑
=
=
M
i
• Document và Field: định nghĩa tài liệu và các trường thông tin của tài liệu sử
dụng cho lập chỉ mục, nó cũng sử dụng cho việc lấy kết quả trả về cho thành
phần Tìm kiếm
• Analyzer: thực hiện chức năng xử
lý và tách văn bản để lấy nội dung, chuẩn
hóa, loại bỏ mục từ không cần thiết,… để chuẩn bị cho việc lập chỉ mục
• IndexWriter: là phần chính trong thành phần Tạo chỉ mục, nó thực hiện việc
tạo mới hoặc mở chỉ mục, sau đó thực hiện thêm mới hoặc cập nhật nội dung
của chỉ mục
- Thành phần Tìm kiế
m: bao gồm các phần chức năng cho xử lý tìm kiếm, từ
yêu cầu của người dùng, thông qua biên dịch và so khớp để lấy về kết quả tốt nhất.
Lucene hỗ trợ nhiều loại truy vấn thuận tiện cho người sử dụng, nó cho phép tìm theo
trường thông tin hay các thiết lập nâng cao như sắp xếp kết quả, giới hạn thời gian hoặc
số lượng kết quả, phân trang…
• Term: Term là m
ột đơn vị cơ bản của tìm kiếm, tương tự như thành phần
Field, Term cũng bao gồm tên và giá trị tương ứng.
• Query: bao gồm nhiều loại truy vấn khác nhau, nó chứa nhiều phương thức,
nhưng hầu hết đều quan tâm đến việc thiết lập chỉ số Boost, cho phép Lucene
hiểu truy vấn con nào là quan trọng hơn.
• IndexSearcher: cho phép tìm kiếm trên tập chỉ mục do IndexWriter tạo ra,
đây là thành phần chỉ thực hiện nhiệm vụ mở tập chỉ mục, không cho phép
chỉnh sửa hay thay đổi. Có nhiều phương thức tìm kiếm, một trong số đó là
lớp thành phần thực thi Searcher, với cách đơn giản là cung cấp một Query
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 4(39).2010
313
truy vấn, số lượng các liên kết cần trả về, và kết quả trả về sẽ là tập các đối
tượng TopDoc.
dạng .txt), các mục từ trên tiếng Việt không được chuẩn hoá nên có thể dẫn đến tình
trạng dư thừa và tìm kiếm thiếu chính xác. Ví dụ với mục từ "trường" thì có thể tồn tại
đến 3-4 mục từ trong chỉ mục, mỗi mục từ là một bảng mã như Vni, Abc, Unicode,…
và nghiêm trọng hơn mục từ này không được tách chính xác do ký tự dấu làm cho thành
phần phân tích của Lucene không thể tách đúng từ vựng.
Trên cơ sở tạo chỉ mục của Lucene, chúng tôi đã kế thừa và xây dựng thành
phần tách nội dung các loại tệp tin văn bản, trong đó có hỗ trợ cho ngôn ngữ tiếng Việt
như xây dựng lại danh sách từ loại bỏ (stopword), thực hiện chuẩn hoá bảng mã Tiếng
Vi
ệt (stemming)…
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 4(39).2010
314
− VietnameseAnayzer: Chức năng chính là định nghĩa lại danh sách từ cần loại bỏ
stopword, thay vì loại bỏ một số từ tiếng Anh, chúng tôi định nghĩa lại danh sách
các từ loại bỏ trong tiếng Việt, đây là các từ ít nghĩa như:
"à","ạ","ấy","bây","bấy","bỗng",…
− VietnameseStemFilter: Chức năng chính là lọc các mục từ đọc ra từ thành phần
phân tích và thực hiện đưa sang thành phần chuyển mã.
− AutoGetFont: Thực hiện nhận diện các bảng mã tiếng Việt như ABC, Vni,
Vietware, Unicode Dựng sẵn hay Tổ hợp…
− AutoConvert: thực hiện chuyển đổi các bảng mã Tiếng Việt về dạng TCVN
6909.
− ExtractFile: Thực hiện việc lấy văn bản ký tự thuần từ các loại tệp tin khác nhau
như MS Word, MS Excel, MS PowerPoint, Pdf, Html… Trong đó có sử dụng các
thư viện hỗ trợ của MS Office, PDF Box, HTML Parse để tách văn bản và lấy nội
dung.
Hệ thống xây dựng gồm hai ứng dụng chính: ứng dụng thứ nhất là Tạo chỉ mục,
cho phép thực thi trên máy chủ, dành cho người quản trị với các chức năng chính là chỉ
định dữ liệu lập chỉ mục, tạo và cập nhật nội dung chỉ mục, quản lý người dùng… Ứng
-Tìm kiếm
TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 4(39).2010
315
Học Duy Tân, đây là nguồn tài liệu chưa lớn nhưng đầy đủ các loại văn bản thông dụng
như doc, docx, xls, xlsx, ppt, pptx, pdf, html,… và chứa đựng nhiều bảng mã tiếng Việt.
Hệ thống đã thực hiện thành công trên máy tính cá nhân với cấu hình Intel Core
2 Duo T6600 2.2GHz, 2GB RAM
và kết quả thống kê như sau:
S
T
T
Loại tài liệu,
số lượng
Tổng tệp
tin, Kích
thước
Thời
gian lập
Kích
thước
tệp chỉ
mục
Số
lượng
mục từ
Truy
vấn
Kết quả và
thời gian tìm
TS : 1288
(167 MB)
00:21:1
9
1.5 MB 25388
nh*
881kq ~
0.062s
4
(.doc):
11392
(.docx): 121
(.xls): 3753
(.pdf): 146
(.ppt): 10
(.pptx): 6
TS :
15428
(2.1 GB)
04:15:4
8
26.8 MB 302117
văn bản
4821kq ~
0.42s
Qua kết quả thống kê trên thực tế tài liệu gốc (thực hiện thủ công đối với trường
hợp ít tài liệu) cho thấy thử nghiệm cho kết quả tương đối chính xác và hiệu quả:
− Khoảng 3% tài liệu bị sai sót trong quá trình tách văn bản và chuyển mã.
− Kích thước chỉ mục trung bình giảm 20-30 lần cho văn bản ký tự, trên 30 lần cho
văn bản có chèn hình ảnh.
University of Glasgow, LonDon, United Kingdom, 1979.
[2] Christopher D. Manning, Prabhakar Raghavan and Hinrich
Schütze: “Introduction to Information Retrieval”, Cambridge University Press,
2008.
[3] Erik Hatcher, Michael McCandless, Otis Gospodnetic: “Lucene in Action”,
Apache Jakarta Project Management Committee, 2008.
[4] Grant Ingersoll, Ozgur Yilmazel, Niranjan Balasubramanian, Steve Rowe,
Svetlana Smoyenko, “Advanced Lucene”, Center for Natural Language
Processing, 2005.
[5] Peter Ingwersen, “Information Retrieval Interaction”, Taylor Graham Publishing,
LonDon, United Kingdom, 1992.
[6] Đỗ Phúc, Đỗ Hoàng Cường, Nguyễn Tri Tuấn, Huỳnh Thụy Bảo Trân, Nguyễn
Văn Khiết, “Phát triển một Hệ thống S.E Hỗ trợ Tìm kiếm Thông tin, thuộc lãnh
vực CNTT trên Internet qua từ khóa bằng tiếng Việt”, Đại Học Khoa Học Tự
Nhiên, TP.HCM.
[7] Ricardo Baeza-Yates, Berthier Ribeiro-Neto, “Modern Information Retrieval”, A
Division of the Association for Computing Machinary, New York, 2008.
[8] The Apache Software Foundation: “Apache Lucene.Net Class Library API”,
http://lucene.apache.org/lucene.net/docs/.
[9] Tổng cục tiêu chuẩn đo lường chất lượng: “Xử lý văn bản Tiếng Việt qua mạng”,
http://www.tcvn.gov.vn/webconvert/vietconvert.html.