5 Lưu trữ tập từ điển kho từ vựng như một chuỗi

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu các phương pháp nén chỉ số trong các hệ thống tìm kiếm 04 (Trang 37)

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

Ví dụ 1: với khoảng cách là 5 thì mã hóa: 1000.0101

Ví dụ 2: Khoảng cách d=267=2*128+11 được đại diện bởi 2 byte 10000010 00001011

Để giải mã cho phương pháp VB code, đọc tuần tự từng byte với bit continuation là 0 và byte kết thúc bởi bit continuation là 1. Sau đó giải nén và ghép các phần 7bits với nhau.

Với phương pháp nén VB code, kích thước nén chỉ số cho tập tài liệu RCV1 đã được thử nghiệm trong [9] là 116MB. Phương pháp này làm giảm 50% so với kích thước khi chưa nén.

Ý tưởng của mã hóa VB cũng có thể được áp dụng cho các số lớn hơn hoặc nhỏ hơn các bytes: từ 32 bits, từ 16bits và từ 4 bits.

Hầu hết hệ thống tìm kiếm thông tin sử dụng phương pháp mã hóa Vbcode đều có sự cân đối giữa thời gian và không gian, thực hiện giải nén nhanh hơn đối với những tập tin lớn nhưng ít hiệu quả về tỷ lệ nén. Vì vậy nếu không gian ổ đĩa có hạn và để đạt được tỷ lệ nén tốt hơn thì nên sử dụng phương pháp mã hóa bởi các bits, đặc biệt là hai hệ mã hóa γ code và δ code.

b. Elias code: γ và δ code Gama (γ) code:

Ý tưởng: Mã hóa các khoảng cách bởi các bits (variable bit) bằng cách chia

khoảng cách thành 2 phần: length và offset.

Trong đó: offset là mã nhị phân của khoảng cách nhưng loại bỏ bit đầu Length là unary code của kích thước offset.

Với unary code là một số n được mã hóa bởi một chuỗi gồm n bit 1 theo sau là là một

bit 0 biểu diễn như sau:

Nguyên tắc mã hóa: giả sử 2n là khoảng cách G. Với 1≤ G ≤ 2n. Khi đó độ dài của offset là ⌊log2G⌋ bits, còn độ dài của length là ⌊log2G⌋+1 bits.

Do đó tổng độ dài của mã là: 2×⌊log2G⌋+1 bits

Ví dụ: Với khoảng cách có độ dài là 13. Ta có mã nhị phân của 13 là 1101 Loại trừ bít 1 đầu tiên ta có: 101. Vậy Offset là 101

Ta lại có ⌊log213⌋=3. Do đó độ dài length là n=3. Unary code là: 1110

Vậy độ dài khoảng cách được mã hóa bởi dãy bits theo phương pháp γ code là: 1110101.

Để giải mã γ code thì bắt đầu đọc dãy unary code cho đến khi gặp bit 0 thì dừng lại. Phần bit còn lại là phần offset. Tiếp tục đọc phần offset bằng cách thêm bit 1 vào đầu dãy bit offset. Thực hiện tính ra giá trị thập phân cho dãy bit ta tìm được khoảng cách.

Đánh giá phương pháp: khi thực hiện phương pháp nén γ code kích thước của nén chỉ

còn 101MB chỉ hơn 1/10 so với kích thước của tập tài liệu khi chưa nén. Thuộc tính của code phụ thuộc vào phân bố khoảng cách (đặt là P)

Dự kiến độ dài của code C, gọi là E(C)

Do đó γ code gần như luôn đạt tối ưu. Ngoài ra γ code đạt tỷ lệ nén cao tốt hơn 15% so với mã hóa VB code . Tuy nhiên việc giải mã lại phức tạp và mất nhiều thời gian hơn. Bởi phương pháp này được chia thành nhiều cấp bit.

2.3 Các phương pháp nén chỉ số cập nhật

Do sự tăng trưởng nhanh chóng về kích thước của trang Web và số người sử dụng, vì thế hệ thống tìm kiếm đang phải đối mặt với những thách thức đáng kể. Công cụ tìm kiếm hiện nay đã có thể xử lý hàng ngàn câu truy vấn trên mỗi giây với hàng tỷ tập tài liệu, và tổng số truy vấn vẫn đang tăng lên hàng năm do nhu cầu tìm kiếm thông tin ngày càng nhiều. Bên cạnh đó người dùng mong đợi cao về chất lượng, kết quả tìm kiếm đòi hỏi hệ thống phải điều chỉnh liên tục.

Công cụ tìm kiếm Web sử dụng chỉ số ngược để xử lý truy vấn hiệu quả. Kích thước các cấu trúc thường trong khoảng GB đến TB và chúng lưu trữ cao ở dạng nén trên đĩa hoặc trong bộ nhớ chính. Nén chỉ số đảo ngược tiết kiệm không gian lưu trữ và quan trọng hơn tăng tốc độ truy cập và cho kết quả truy vấn nhanh hơn trong máy tìm kiếm.

Thông thường chỉ số ngược bao gồm các thông tin như docID, tần số xuất hiện tài liệu và vị trí xuất hiện trong tập tài liệu. Với phương pháp cơ bản hầu hết tập trung vào nén docID và tần số dữ liệu. Ngược lại phương pháp cập nhật tập trung vào vị trí chỉ số của dữ liệu Web, trong đó mỗi trang chỉ bao gồm vài trăm từ. Điều này là rất quan trọng bởi hai lý do. Đầu tiên, kích thước của vị trí dữ liệu thường là lớn hơn nhiều lần so với docID và tần số của dữ liệu, do đó có tác động đáng kể đến hiệu quả xử lý truy vấn. Thứ hai, vị trí đang trở nên quan trọng trong chức năng xếp hạng (ranking) trong máy tìm kiếm. Một yếu tố quan trọng trong việc nén vị trí là xu hướng các từ xuất hiện theo cụm. Ví dụ một từ xuất hiện trong một câu cụ thể trên một trang, sau đó nó có nhiều khả năng xuất hiện một lần nữa một trong những câu tiếp theo. Do đó khai thác các cụm và sử dụng các kỹ thuật thích hợp để nén sẽ được tốt hơn với cụm xuất hiện trong trường hợp thống nhất.

Hầu hết các máy tìm kiếm sử dụng cấu trúc chỉ số ngược để hỗ trợ truy vấn có hiệu quả. Chỉ số ngược của tập tài liệu là cấu trúc được lưu trữ với mỗi từ (term) xuất hiện trong tập tài liệu chứa thông tin tất cả vị trí mà nó xuất hiện. Mỗi từ t, chỉ mục chứa danh sách đảo It chứa thông tin của posting. Mỗi posting của It chứa thông tin về sự xuất hiện của t trong mỗi tài liệu d cụ thể, thường là ID của mỗi tài liệu (docID), số

lần xuất hiện của t trong d (tần số xuất hiện) và có thể là các thông tin khác như vị trí của mỗi tập tài liệu. Ở đây chúng ta chỉ xét 2 thông số cụ thể của posting là docID và tần số xuất hiện.

Nhiều kỹ thuật nén chỉ số ngược khác nhau đã được đề xuất trong tài liệu [13, 14]. Hầu hết các phương pháp đều giả định mỗi danh sách posting được biểu diễn (di, fi, di,0, ….,pi,f-1). Trong đó pi,j=k nếu w là từ thứ k trong tập tài liệu di. Hoặc có thể lưu trữ danh sách cho docID, tần số và vị trí xuất hiện sắp xếp theo thứ tự. Tuy nhiên trong phương pháp cập nhật chỉ quan tâm tới vị trí lưu trữ trong danh sách.

Một vấn đề của phương pháp này là để nén posting cụ thể thì sẽ phải giải nén tất cả các posting trước đó và thêm giá trị vào cho nó.

2.3.1 Mã Glomb

Ý tưởng: Số nguyên n được mã hóa thành 2 phần với q lưu trữ mã unary, phần còn lại r định dạng mã nhị phân.

Để mã hóa số nguyên, đầu tiên chọn tham số B. Cách chọn tốt nhất là

B=0.69×ave. Với ave là giá trị trung bình để mã hóa (ave=(N×n)/f. Trong đó N là số

tài liệu, n số từ riêng biệt, f số cặp (N,n)).

Với mỗi số nguyên n ta có thể tính: q=⌊n/B⌋ và r = n mod B. Nếu B là lũy thừa của 2 thì sử dụng log(B) bits để lưu trữ r, ngược lại sử dụng ⌊log(B)⌋ hoặc ⌈log(B)⌉ bits phụ thuộc vào r. Rice code được sử dụng trong trường hợp B là lũy thừa của 2.

Đánh giá phương pháp: Glomb là phương pháp tối ưu có ý nghĩa với các từ riêng biệt

và khi xác suất B là cao thì việc sử dụng mã hóa số học này tạo nên hiệu quả nén cao. Phương pháp này sử dụng dãy bit mã hóa tài liệu trong danh sách chỉ số ngược theo thứ tự không liên tục, vì vậy mỗi khoảng cách được mã hóa được giới hạn trong phạm vi có sẵn theo số lượng bit tương ứng cần thiết trong từ tương ứng. Khi giải mã cần phải truy cập đến từng bit riêng lẻ dẫn đến việc xử lý truy vấn chậm.

2.3.2 Simple9 Coding

Ý tưởng: Simple9 code (S9) cố gắng đóng gói mỗi từ trong 32bit. Mỗi từ khác

nhau được lưu trữ vào các số nguyên khác nhau. Để làm được điều này mỗi từ trong Simple9 được chia thàng 4 bit trạng thái và 28bit dữ liệu. Bits dữ liệu có thể được phân chia trong 9 cách khác nhau. Ví dụ có 7 giá trị liên tiếp nhau có giá trị nhỏ hơn 16=24 chúng ta có thể lưu trữ chúng trong 4 bit. Hoặc 3 giá trị tiếp theo nhỏ hơn 512=29 chúng ta có thể lưu trữ 3 giá trị này với 9bit (bỏ 1 bit không sử dụng)

Bảng 2.1- Bảng phân chia bits dữ liệu trong S9

Trong bảng trên thể hiện 9 cách khác nhau có thể sử dụng trong đó có thể phân chia thành các phân vùng có cùng độ dài mã nhị phân. Sử dụng 4 bits trạng thái để lưu trữ với 9 trường hợp trên.

Ví dụ1: Xét cấu trúc khoảng cách d sau:

<14; 4, 6, 1, 1, 3, 5, 1, 7, 1, 13, 20, 1, 12, 20>

=> Sử dụng 5bits để mã hóa cho mỗi codeword là lãng phí, không cần thiết (Tổng là 14x5=70bits)

Nếu chúng ta áp dụng dòng a sử dụng bit đại diện để mã hóa thì ta thấy có giá trị lớn hơn 2=21 vì vậy dòng a không thể dùng. Tương tự như vậy dòng b cũng không thể sử dụng bởi có giá trị lớn hơn 4=22. Tuy nhiên ta thấy ở dòng c lại thỏa mãn bởi không có giá trị nào lớn hơn 8=23 trong đoạn gồm 9 giá trị. Do đó cấu trúc trên được mã hóa cho các từ như sau: (thực tế có thể trừ đi 1 giá trị để mã hóa 000)

c, 011, 101, 000, 000, 010, 101, 000, 110, 000,.,

Phần còn lại của danh sách khoảng cách d (bắt đầu từ 13 có 5 giá trị để mã hóa) cũng được mã hóa tương tự như vậy

e, 01100, 10011, 00000, 01011, 10011, ….,

có 3 bit không sử dụng trong 32 bit từ. Và đây là kết thúc cho danh sách khoảng cách d vì vậy việc nén danh sách ngược đã được hoàn thành.

Như vậy có 2 phân đoạn sử dụng 32 bit để mã hóa. Vậy tổng cộng 64bit để mã hóa cho danh sách có 14 khoảng cách d.

Đánh giá phương pháp: Như vậy so với tổng dung lượng thì việc nén đã làm giảm

được không gian lưu trữ từ 70bits xuống 64 bits. Đây là phương pháp nén đã được sử dụng nhiều và phổ biến trong nén chỉ số bởi nó đạt tỉ lệ nén tốt hơn so với variable-

byte coding đồng thời có cải thiện về tốc độ giải nén. Giải nén có thể được thực hiện một cách có hiệu quả cao bằng cách thực hiện chuyển đổi các bit trạng thái. Trong đó mỗi số trong 9 trường hợp được áp dụng một mặt nạ bit cố định để truy xuất số nguyên.

Thuật toán cải tiến:

S16 sử dụng cơ bản ý tưởng giống S9 nhưng S16 có 16 cách phân vùng bit dữ liệu, mỗi trường hợp trong 16 cách sử dụng tất cả 28 bits dữ liệu. Kết quả là tốc độ nén tương đương với S9, tuy nhiên tỉ lệ nén tốt hơn.

2.3.3 Binary Code

Ý tưởng: Danh sách chỉ số có cấu trúc của từ t:

<ft; d1, d2, d3, .... , df> ft: số tài liệu có chứa từ t.

di: xác định từ t xuất hiện ở vị trí thứ i trong tài liệu.

Danh sách đảo ngược được lưu trữ với các khoảng cách khác biệt giữa các tài liệu: <ft; d1, d2-d1, d3-d2,...., dft -1>

=> giảm số bit cần thiết đại diện cho docID.

Ví dụ 1: [17] Xét cấu trúc sau:

<12; 38, 17, 13, 34, 6, 4, 1, 3, 1, 2, 3, 1>

=> Sử dụng 6bits để mã hóa cho mỗi codeword là lãng phí, không cần thiết (Tổng là 12x6=72bits)

Ý tưởng: phân đoạn các khoảng cách thành các cụm bits như sau: <12; (6,4: 38, 17, 13, 34), (3, 1: 6), (2, 7: 4, 1, 3, 1, 2, 3, 1)>

Ký hiệu: (w, s: d1, d2,....,ds). Với w là số bit cần mã hóa cho s giá trị d1, d2,....,ds.

Bảng 2.2 – Bảng phân đoạn các khoảng cách thành các cụm bits

Giả sử lựa chọn s1=1, s2=2, s3=4.

<12; 38, 17, 13, 34, 6, 4, 1, 3, 1, 2, 3, 1> Từ bảng trước ta có:

 Mỗi bộ chọn lọc có 4bits (2bits cho w, 2bits để chọn s1-s3. Vì vậy cần 16bits cho 4 cặp w-s)

 Vậy cần 16+ (6×4+3×1+2×4+2×3)=57bits để mã hóa cho danh sách này.

Ví dụ 2: [17] Xét cấu trúc khoảng cách d sau:

<14; 4, 6, 1, 1, 3, 5, 1, 7, 1, 13, 20, 1, 12, 20> phân đoạn các khoảng cách thành các cụm bits như sau:

<14; (3,9: 4, 6, 1, 1, 3,5,1,7), (4, 2: 6), (1,1:1), (4, 2: 12, 20)>

Mỗi bộ chọn lọc có 4bits (2bits cho w, 2bits để chọn s1-s3. Vì vậy cần 16bits cho 4 cặp w-s)

Vậy cần 16+(3×9+4×2+1×1+4×2)=60 bits để mã hóa

=> so với tổng dung lượng trong phương pháp nén S9 thì việc nén đã làm giảm được không gian lưu trữ từ 64bits xuống 60bits

Đánh giá phương pháp: Như vậy so với tổng dung lượng thì việc nén đã làm giảm

2.3.4 PforDelta

Ý tưởng:[11] Nén hoặc giải nén nhiều giá trị trong cùng một block.

PFD chia danh sách chỉ số ngược vào trong các khối (blocks), thường mỗi khối khoảng 128 khoảng cách. Để mã hóa các khoảng cách d vào trong các khối nó sẽ loại bỏ khoảng 10% các khoảng cách d lớn nhất vào trong một khối và lưu trữ chúng vào không gian bộ nhớ riêng biệt. Đây là những trường hợp ngoại lệ (Exception array) của khối. Còn lại chúng ta sẽ lưu trữ chúng vào trong một khối, thường mỗi khối như vậy lưu trữ các khoảng cách d khác nhau là bội số của 32 .

Đầu tiên PFD sẽ xác định b bit cho hầu hết các giá trị nhỏ hơn 2b được mã hóa. Các giá trị còn lại gọi là trường hợp ngoại lệ được mã hóa một cách riêng biệt. Mặc dù các trường hợp ngoại lệ được lưu trữ trong một không gian riêng biệt nhưng vẫn duy

trì các slots cho chúng ở các vị trí tương ứng. Điều này tạo điều kiện cho quá trình giải mã. Đối với mỗi khối (block) duy trì một header để chỉ thông tin nén được sử dụng

trong khối.

Để lấy lại vị trí của các trường hợp ngoại lệ, trong header sẽ lưu trữ các ngoại lệ đầu tiên. Trong slot (khe) của mỗi ngoại lệ sẽ lưu trữ thông tin cho các ngoại lệ tiếp

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu các phương pháp nén chỉ số trong các hệ thống tìm kiếm 04 (Trang 37)

Tải bản đầy đủ (PDF)

(77 trang)