Rõ ràng việc này tốn một chi phí lớn nếu tập chỉ số ngược. Trong thực tế, tập tin chỉ số ngược tài liệu có thể chứa hàng trăm ngàn từ. Tuy nhiên, trong các hệ thống tìm kiếm thông tin, người ta chỉ cập nhật lại tập tin tại một khoảng thời gian định kỳ. Vì vậy, tập chỉ số ngược vẫn được sử dụng để lập chỉ mục.
KẾT LUẬN CHƯƠNG I
Kích thước quá lớn và bản chất thay đổi không ngừng của Web đã đặt ra nhu cầu to lớn trong việc hỗ trợ và cập nhật một cách không ngừng các hệ thống trích chọn các thông tin dựa trên nền Web. Sự phát triển của Internet dẫn đến nhu cầu sử dụng chỉ số, chỉ số ngược để xử lý truy vấn hiệu quả, tìm kiếm, khai thác, tổ chức, truy cập và
duy trì thông tin đối với người sử dụng thường xuyên hơn. Vì vậy yêu cầu lập chỉ mục trong máy tìm kiếm, cụ thể hơn là tài liệu Web trở thành bài toán cho các nhà khoa học nghiên cứu và giải quyết. Trong chương này, luận văn đã giới thiệu tổng quát bài toán tìm kiếm thông tin trên web và phân tích cấu trúc tập chỉ mục trong máy tìm kiếm. Từ những phân tích trên, luận văn sẽ trình bày các quy trình xây dựng chỉ mục, chỉ mục ngược và các phương pháp nén chỉ mục trong chương 2, đưa ra thuật toán cải tiến tối ưu và cài đặt trong chương 4.
CHƯƠNG II. MỘT SỐ PHƯƠNG PHÁP NÉN CHỈ SỐ, NÉN CHỈ SỐ NGƯỢC TRONG MÁY TÌM KIẾM
Bản chất của việc tìm kiếm là tìm các từ có trong truy vấn và xuất hiện trong tài liệu để đưa ra kết quả là những vị trí chính xác của truy vấn đó trong mỗi tài liệu. Cách tìm kiếm đơn giản nhất là quét liên tiếp văn bản để tìm sự xuất hiện của một mẫu trong tài liệu khi tài liệu chưa được tiền xử lý. Tìm kiếm liên tiếp chỉ phù hợp với các tài liệu có kích thước nhỏ. Cách tìm kiếm thứ hai là xây dựng cấu trúc dữ liệu cho các tài liệu
(gọi là các chỉ mục - index) để tăng tốc độ tìm kiếm, phù hợp với việc xây dựng và duy
trì các chỉ số khi tập tài liệu là lớn và biến đổi không ngừng. Đây chính là nhiệm vụ của module lập chỉ mục tài liệu - module đầu tiên trong các hệ tìm kiếm thông tin. Lập chỉ mục tài liệu, hiểu một cách đơn giản, là việc sắp xếp các tài liệu nhằm đáp ứng nhanh chóng yêu cầu tìm kiếm thông tin của người sử dụng. Hiệu quả của một phương pháp lập chỉ mục được đánh giá qua không gian lưu trữ mà nó đòi hỏi và thời gian cần thiết để thực hiện việc tìm kiếm thông tin. Các phương pháp lập chỉ mục giữ vai trò quan trọng trong việc xây dựng một hệ tìm kiếm thông tin hiệu quả.
2.1 Chỉ số ngược
Tập chỉ mục cho phép thu hẹp không gian tìm kiếm nhưng để khẳng định chính
xác văn bản nào có chứa truy vấn thì ta vẫn phải thực hiện giải thuật tìm kiếm trực tiếp. Nếu đặt hệ tìm kiếm vào tình huống phải xử lý trên khối lượng dữ liệu lớn, đồng thời nằm trong một hệ tìm kiếm thông tin thì thời gian truy tìm trên cấu trúc dữ liệu
Tập chỉ mục sẽ quá lớn, không phù hợp với hoàn cảnh thực tế.
Chỉ mục ngược là giải pháp trọn vẹn hơn, những kết quả của Moffat trong [15,16]
cho thấy: trong hầu hết các ứng dụng, Inverted file đạt hiệu quả hơn tập chỉ mục cả
kích thước kho chỉ mục lẫn tốc độ tìm kiếm. Chỉ mục ngược được hiểu là một dạng cấu trúc dữ liệu dùng để lưu trữ danh sách các tài liệu mà có chứa các từ khóa. Chẳng
hạn như chúng ta muốn tìm kiếm tài liệu có chứa từ khóa là “search engine” nếu dùng
chỉ mục thông thường phải quyét qua hết tất cả các tài liệu có trong cơ sở dữ liệu thì mới tìm ra được, do đó rất tốn thời gian khi số lượng dữ liệu lớn. Cách này tương ứng
với câu hỏi: các tài liệu nào có chứa từ “search engine”? Nếu có 100 tài liệu thì ta cần phải tìm 100 lần. Còn chỉ mục ngược sẽ tương ứng với câu hỏi ngược lại : Từ
“search engine” nằm trong các tài liệu nào? Tức là ta sẽ lập chỉ mục trước và chỉ tìm
với số lần đúng với số tài liệu có chứa từ “search engine” mà không cần duyệt qua tất
cả 100 tài liệu.
Để đạt được tốc độ lập chỉ số cao tại thời điểm tìm kiếm thông tin, chúng ta xây dựng các chỉ số trước. Các bước chính bao gồm:
1. Lập chỉ số (mục 1.3.3)
2. Chỉ số tài liệu mà có mỗi từ xuất hiện được tạo bởi chỉ số ngược bao gồm hai phần: bộ từ điển từ vựng (dictionary) và posting.
Hình 2.1- Xây dựng chỉ số bằng cách phân loại và nhóm các từ vựng [9]
Trong tập tài liệu, giả định mỗi tài liệu sẽ có một số duy nhất để định danh cho tài liệu (gọi là docID). Trong quá trình xây dựng cấu trúc chỉ số thực hiện gán số nguyên liên tiếp cho mỗi tài liệu khi gặp phải nó lần đầu. Đầu vào để lập chỉ mục là một danh sách các thẻ văn bản cho mỗi tài liệu đã gán một cặp bao gồm các từ đã được phân loại và docID chứa nó (hình 2.1). Danh sách sau lập chỉ mục là các từ được phân loại và sắp xếp theo thứ tự alphabetical. Nhiều từ giống nhau xuất hiện trong cùng một tài liệu sẽ được nhập lại. Trường hợp các từ giống nhau trong các tập tài liệu sẽ được nhóm lại và cho kết quả là một tập được chia thành hai phần bao gồm dictionary và positng (được biểu diễn bởi cột bên phải trong hình 2.1). Tổ chức dữ liệu này đã làm giảm được yêu cầu lưu trữ chỉ số. Bộ từ điển từ vựng đã lưu lại một số thống kê như số lượng tài liệu mà chứa các từ (tần số tài liệu, độ dài của mỗi danh sách posting).
Posting được sắp xếp theo docID và đây là cơ sở để xử lý truy vấn hiệu quả. Cấu trúc của chỉ số ngược hỗ trợ cho việc tìm kiếm văn bản.
Cấu trúc tập chỉ số ngược
Inverted files (Inverted index) là một cơ chế đánh chỉ số cho một tập văn bản theo thứ tự để tăng tốc độ tìm kiếm. Cấu trúc Inverted files (IF) gồm 2 thành phần: Từ vựng và tham số kèm theo :
- Bộ từ vựng (dictionary) là tập hợp toàn bộ các từ khác nhau trong văn bản. Mỗi từ lưu trữ một danh sách tất cả các vị trí văn bản mà từ đó xuất hiện cùng nhưng thông tin khác.
- Tập hợp tất cả các danh sách posting đó gọi là sự xuất hiện (occurrences). Dictionary được lưu trữ trong bộ nhớ, trong khi danh sách posting được lưu trữ trên đĩa vì vậy kích thước lưu trữ là rất quan trọng đối với chỉ số đảo ngược, nó quyết định không gian lưu trữ của hệ thống, thời gian truy vấn thông tin có tối ưu hay không. Bộ từ điển từ vựng (dictionary) lưu trữ các từ vựng và con trỏ trỏ tới danh sách posting cho mỗi từ. Nó cũng thường lưu trữ các thông tin khác như tần số xuất hiện của mỗi từ trong tài liệu. Thông tin này hỗ trợ hiệu quả trong việc cải thiện thời gian truy vấn và cũng quan trọng trong mô hình xếp hạng của máy tìm kiếm. Bên cạnh đó danh sách posting lưu trữ danh sách các tài liệu mà có các từ vựng xuất hiện và có thể lưu trữ thông tin khác như tần số của các từ vựng (tần số xuất hiện mỗi từ vựng trong một tài liệu) hoặc vị trí của các từ trong mỗi tài liệu.
2.2 Phương pháp nén chỉ số
Thành phần quan trọng của máy tìm kiếm là hệ thống chỉ số (chỉ số thuận, chỉ số ngược), trong đó chỉ số ngược giúp tìm kiếm nhanh tài liệu chứa từ khóa hoặc cụm từ khóa truy vấn người dùng. Máy tìm kiếm chỉ số hóa hàng tỷ/ hàng chục tỷ tài liệu vì vậy việc tiết kiệm không gian lưu trữ (nén chỉ số) đối với hệ thống nén chỉ số là rất cần thiết. Giải pháp nén chỉ số không chỉ đảm bảo tính hiệu quả về không gian lưu trữ mà còn đảm bảo tính hiệu quả về thời gian giải nén. Nhiều phương pháp nén chỉ số đã được đề xuất, trong đó có cả phương pháp cơ bản [2, 9] lẫn phương pháp cập nhập [1, 3, 5-8, 10-14] đã được ứng dụng và so sánh về hiệu suất của các phương pháp .
Một trong những yếu tố chính trong việc xác định thời gian đáp ứng của hệ thống tìm kiếm là số lượng thông tin trong ổ đĩa cần thiết tìm kiếm để xử lý một truy vấn. Nếu một bộ phận của từ điển là trên đĩa nhiều hơn so với số lượng có trong đĩa lưu trữ thì gây khó khăn cho việc đánh giá truy vấn trong tìm kiếm. Như vậy mục tiêu
chính của nén từ điển trong tập hợp tài liệu là để phù hợp với bộ nhớ chính của máy tính và hỗ trợ truy vấn cao trong tìm kiếm. Sau đây tôi xin trình bày một số phương pháp cơ bản trong nén từ điển.
2.2.1 Lưu trữ theo khối
Cấu trúc của Inverted files (IF) khá đơn giản, gồm các inverled list (IL) đặt liên tiếp nhau. Trong một IF mỗi phần tử của một danh sách chỉ tới một tài liệu hoặc một tên file.
Không gian cần thiết cho bảng từ vựng là khá nhỏ. Theo luật Heap, từ vựng tăng
với tốc độ O(nβ ), với β là một hằng số nhận giá trị giữa 0 và 1 phụ thuộc vào văn bản,
trong thực tế từ 0.4 đến 0.6. Chẳng hạn, cho 1 Gb tập hợp dữ liệu trong [9] (ví dụ: TREC-2) thì bảng từ vựng có kích thước chỉ 5Mb. Việc giảm kích thước này có thể thực hiện được bằng cách lược từ (stemming) hoặc một số kỹ thuật chuẩn hoá khác. Các vị trí xuất hiện yêu cầu không gian lớn hơn. Vì mỗi từ xuất hiện trong văn bản
đòi hỏi một cấu trúc như vậy, không gian cần bổ sung là O(n). Ngay cả khi bỏ qua các
từ kết thúc (trong thực tế là ngầm định khi đánh chỉ số các từ), trong thực tế toàn bộ không gian của các vị trí xuất hiện của các từ này chiếm khoảng 30% đến 40% kích thước văn bản.
Để giảm không gian yêu cầu, người ta đưa ra kỹ thuật đánh địa chỉ khối (block addressing): chia văn bản thành các block và các occurrence chỉ đến các block- nơi mà từ xuất hiện (gồm các vị trí chính xác). Các lớp index chỉ đến các vị trí xuất hiện chính
xác gọi là “full invenrted index’’. Kỹ thuật này không chỉ giảm khối lượng con trỏ (số
các block ít hơn các vị trí ) mà tất cả occurrence của một từ trong một block riêng lẻ được giảm tương ứng đến 1. Với kỹ thuật này, chỉ chiếm 5% toàn bộ kích thước văn bản.
Hình 2.2 - Lưu trữ theo khối [9]
Việc tăng kích thước khối k thì sẽ nhận được kết quả nén tốt hơn. Tuy nhiên cần có sự cân bằng giữa việc nén và tốc độ tìm kiếm các từ trong máy tìm kiếm (tỷ lệ thuận với tốc độ tìm kiếm).
Chẳng hạn cho tập từ điển 8 từ như trong hình 2.3, các bước tìm kiếm nhị phân được biểu diễn bởi đường nét đôi và các bước trong danh sách tìm kiếm bởi đường nét đơn. Chúng ta thực hiện tìm kiếm các từ khi không nén bằng cách tìm kiếm nhị phân (hình a). Ngược lại khi tập từ điển được nén, đầu tiên xác định vị trí khối của các từ bằng cách tìm kiếm nhị phân và sau đó xác định vị trí của nó trong danh sách bằng cách tìm kiếm tuyến tính thông qua các khối (hình b).
+ Việc tìm kiếm không nén trong hình a trung bình (0+1+2+3+2+1+2+2)/81.6 bước.
Giả sử mỗi từ đều có khả năng thực hiện truy vấn. Với ví dụ trên, để tìm kiếm 2
từ aid và box chúng ta cần tương ứng là 3 và 2 bước.
+ Với khối có kích thước k=4 (như trong hình b), chúng ta cần (0+1+2+3+4+1+2+3)/8=2 bước, tăng lên 25% so với việc không nén tập từ điển.
Hình 2.3 - Tìm kiếm các từ trong trường hợp không nén tập từ điển (hình a) và khi nén theo khối có kích thước k=4 (hình b)[9]
Các block có thể được cố định về kích thước hoặc có thể xác định bằng cách chia văn bản thành files, các tài liệu, các trang Web… việc chia văn bản thành các block làm tăng hiệu quả về thời gian và chất lượng tìm kiếm.
2.2.2. Nén bộ từ điển từ vựng như một chuỗi
Cấu trúc dữ liệu đơn giản của một tập từ điển là sắp xếp kho từ vựng (kho từ vựng lưu trữ các từ khóa đã được máy tìm kiếm đánh chỉ số) và lưu trữ nó trong một mảng có chiều rộng cố định được biểu diễn như hình 2.4
Hình 2.4 - Lưu trữ từ điển trong một mảng có độ rộng cố định [9]
Bởi vì chỉ có vài từ có nhiều hơn 20 ký tự trong tiếng anh nên chúng chỉ phân bổ 20 byte cho những thuật ngữ chính trong cụm từ điển, 4 bytes cho tần số xuất hiện của nó và 4 bytes cho con trỏ trỏ vào danh sách tài liệu (posting list). Với 4bytes cho con trỏ sẽ giải quyết được 4GB không gian bộ nhớ.
Việc sử dụng độ rộng cố định cho các từ là hết sức lãng phí. Chiều dài trung bình của các từ trong tiếng anh là khoảng 8 ký tự vì vậy chúng ta đã lãng phí 12bytes trong việc sử dụng độ rộng cố định để lưu trữ. Ngoài ra trong một số trường hợp khi gặp phải một số từ với độ rộng của nó hơn 20 ký tự (ví dụ như: hydrochlorofluorocarbons và supercalifragilisticexpialidocious) chúng ta không có
cách nào để lưu trữ các từ vựng này. Vì thế có thể khắc phục thiếu sót này bởi việc lưu trữ các từ vựng trong tập từ điển như một chuỗi dài các kí tự. Con trỏ để trỏ tới từ tiếp theo cũng là dùng phân ranh giới với từ hiện tại. Trước đây để xác định vị trí của các từ trong cấu trúc dữ liệu bằng cách tìm kiếm nhị phân. Với cách này chúng ta tiết kiệm được 60% so với lưu trữ với chiều rộng cố định. Tuy nhiên với cách này chúng ta cần lưu trữ con trỏ các từ.
Hình 2.5 - Lưu trữ tập từ điển kho từ vựng như một chuỗi [9]
Trong phương pháp này chúng ta có thể giảm được yêu cầu về không gian lưu trữ trong bộ nhớ đáng kể.
Ngay cả với những phương pháp nén tốt nhất nó cũng có thể không khả thi với việc lưu trữ toàn bộ tập từ điển trong bộ nhớ chính bởi tập văn bản rất lớn trong khi phần cứng máy tính thì có bộ nhớ giới hạn. Chính vì thế thay vì việc nén tập từ điển còn có phương pháp nén các posting của tập từ điển nhằm giảm được không gian lưu trữ các từ cần truy vấn trong ổ đĩa.
2.2.3 Nén tập tin posting
Hầu hết các công nghệ trước đã sử dụng docID để nén chỉ số. Tuy nhiên đã nhiều phương pháp nén đã chứng minh được sự khác nhau giữa chỉ số d-graps (viết tắt là khoảng cách d: khoảng cách giữa docID và docID trước) và docID. Các phương pháp nén số nguyên đã được sử dụng với khoảng cách d này. Thực tế đã chứng minh được sử dụng thuật toán nén số nguyên làm giảm giá trị trung bình mà cần phải được nén dẫn đến nén tốt hơn.
Ví dụ: một từ xuất hiện trong 8 tài liệu có số hiệu docId là: <3, 8, 12, 19, 22, 23, 26, 33>
Chúng ta có thể lưu trữ các khoảng cách là hiệu giữa các docID <3, 5, 4, 7, 3, 1, 3, 7>. Như vậy khoảng cách giữa các posting là ngắn lại. Vì vậy có thể mã hóa các khoảng cách này ít hơn 20 bits.
Để mã hóa các khoảng cách chúng ta cần sử dụng hai phương thức nén bytewise và nén bitwise tương ứng với việc khoảng cách được mã hóa bởi byte và bit.
a. Khoảng cách byte (Variable byte Code)
Variable byte code (VB code) là phương pháp mã hóa các khoảng cách bởi các bytes
Ý tưởng: Trong mỗi byte, sử dụng 7 bits thấp để lưu trữ giá trị của khoảng cách, bit
đầu (bit cao nhất) gọi là continuation bit như là bit cờ. Nó thiết lập là 1 cho byte cuối
cùng của khoảng cách được mã hóa, ngược lại là 0.
VB code sử dụng ⌊log128(d) ⌋+1 byte để đại diện cho khoảng cách