Tài liệu tham khảo công nghệ thông tin Tìm hiểu mô hình ngôn ngữ sử dụng phương pháp bloom filter
Trang 1Nguyễn Thạc Huy
TÌM HIỂU MÔ HÌNH NGÔN NGỮ
SỬ DỤNG PHƯƠNG PHÁP BLOOM FILTER
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
Trang 2Nguyễn Thạc Huy
TÌM HIỂU MÔ HÌNH NGÔN NGỮ
SỬ DỤNG PHƯƠNG PHÁP BLOOM FILTER
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
Cán bộ hướng dẫn: TS Nguyễn Văn Vinh
Trang 3giống như các mô hình truyền thống, loại mô hình ngôn ngữ này sử dụng một quy trình
mã hóa đặc biệt, cho phép chia sẻ một cách hiệu quả các bit khi lưu trữ thông tin thống kê
n-gram, nhờ đó tiết kiệm đáng kể bộ nhớ Sau khi tìm hiểu sơ lược về mô hình ngôn ngữ,
chúng ta sẽ nghiên cứu hai kiểu cấu trúc dữ liệu dựa trên Bloom Filter là Log-FrequencyBloom Filter và Bloom Map Qua các thử nghiệm, chúng tôi chỉ ra sự ưu việt của các môhình ngôn ngữ dựa trên Bloom Filter trên cả phương diện dung lượng và tính hiệu quả khiứng dụng trong thực tế, cụ thể ở đây là hệ thống dịch máy bằng phương pháp thống kê vớiMoses [21]
Trang 4Mục lục
TÓM TẮT NỘI DUNG 1
MỤC LỤC 2
LỜI CẢM ƠN 4
DANH MỤC TỪ VIẾT TẮT 5
DANH MỤC HÌNH 6
MỞ ĐẦU 1
CHƯƠNG 1 - Tổng quan về mô hình ngôn ngữ 3
1.1 N-gram 3
1.2 Xây dựng mô hình ngôn ngữ 4
1.2.1 Ước lượng cực đại hóa khả năng (MLE) 5
1.2.2 Các phương pháp làm mịn 5
1.2.2.1 Kneser-Ney 7
1.2.2.2 Kneser-Ney cải tiến (Modified Kneser-Ney) 8
1.2.2.3 Stupid Backoff 9
1.3 Đánh giá mô hình ngôn ngữ 10
1.3.1 Perplexity 10
1.3.2 MSE 11
CHƯƠNG 2 - Các cấu trúc dữ liệu dựa trên Bloom Filter 13
2.1 Các cấu trúc dữ liệu xác suất (PDS) 14
2.2 Hàm băm 16
2.3 Bloom Filter cơ bản 18
2.4 Mô hình ngôn ngữ sử dụng Bloom Filter 23
2.4.1 Bloom Filter tần số log 23
Trang 52.4.2 Bộ lọc dựa vào chuỗi con 25
2.4.3 Bloom Map 26
CHƯƠNG 3 - Thử nghiệm: Xây dựng LM với RandLM và SRILM 32
3.1 Ngữ liệu 33
3.2 Thuật toán làm mịn 34
3.3 Xây dựng LM với SRILM và RandLM 35
CHƯƠNG 4 - Thử nghiệm: Dịch máy thống kê với Moses 40
4.1 Dịch máy thống kê 40
4.1.1 Giới thiệu về dịch máy thống kê 40
4.1.2 Dịch máy thống kê dựa trên cụm 43
4.1.3 Điểm BLEU 45
4.2 Baseline System 46
4.3 Ngữ liệu 46
4.4 Kết quả thử nghiệm 47
KẾT LUẬN 50
PHỤ LỤC 51
Trang 6Lời cảm ơn
Trước tiên, tôi muốn gửi lời cảm ơn chân thành tới giảng viên, TS Nguyễn VănVinh, cảm ơn sự chỉ bảo tận tình của thầy trong suốt thời gian hướng dẫn tôi thực tậpchuyên ngành và nghiên cứu khóa luận này Tôi cũng xin cảm ơn anh Tống Tùng Khánh
và anh Vương Hoài Thu trong nhóm Digital Content Solution ở Công ty cổ phần tin họcLạc Việt, hai anh đã nhiệt tình giúp đỡ tôi với đề tài này và đóng góp nhiều ý kiến quýbáu để khóa luận được hoàn thiện hơn Nếu không có sự hướng dẫn của thầy và các anh,tôi đã không thể hoàn thành được khóa luận này
Sự động viên, khích lệ của bố mẹ, anh chị tôi là nguồn động lực, nguồn hỗ trợ lớnlao Và tôi cũng rất cảm ơn tất cả những người bạn đại học đã cùng chia sẻ quãng thờigian ý nghĩa của đời sinh viên dưới mái trường Đại học Công nghệ - ĐHQGHN Chúc cácbạn có kết quả tốt nghiệp tốt và thành công trong cuộc sống
Trang 7Danh mục từ viết tắt
BF-LM : Mô hình ngôn ngữ dựa trên Bloom Filter
LF-BF-LM : Mô hình ngôn ngữ Log-Frequency Bloom Filter
MKN : Phương pháp làm mịn Kneser-Ney cải tiến
PDS : Cấu trúc dữ liệu xác suất
SMT : Dịch máy bằng phương pháp thống kê
Trang 8Danh mục hình
Hình 1: Mô hình Markov bậc 2 4
Hình 2: Ví dụ về hàm băm 16
Hình 3: Ví dụ về bảng băm Xung đột trong bảng băm 17
Hình 4: Huấn luyện Bloom Filter 18
Hình 5: Truy vấn Bloom Filter 19
Hình 6: Lỗi-một-phía trong Bloom Filter 20
Hình 7: Tăng kích cỡ LM cải thiện điểm BLEU 42
Hình 8: Kiến trúc của một hệ thống SMT 43
Hình 9: Minh họa dịch máy thống kê dựa vào cụm 43
Trang 9Mở đầu
Mô hình ngôn ngữ (Language Model - LM) là một thành phần quan trọng trongnhiều ứng dụng như dịch máy, nhận dạng tiếng nói, … Các LM luôn cố gắng mô phỏngngôn ngữ tự nhiên một cách chính xác nhất Từ nhiều nghiên cứu và thử nghiệm [19, 28],chúng ta có thể thấy rằng mô hình ngôn ngữ với ngữ liệu càng lớn, bậc càng cao thì môphỏng càng chính xác
Trước đây việc xây dựng các ngữ liệu lớn rất khó khăn Nhưng với sự bùng nổ củaInternet như hiện nay, khối lượng thông tin sẵn có là vô cùng lớn Sẽ thật là lãng phí nếunhư chúng ta không tận dụng kho ngữ liệu khổng lồ này Do đó trong những năm gầnđây, kích thước các tập ngữ liệu dùng để huấn luyện LM đã phát triển đáng kinh ngạc,chúng lớn đến mức không còn có thể lưu trữ được trong bộ nhớ của những siêu máy tínhvới nhiều Gigabytes bộ nhớ RAM Điều này khiến cho nỗ lực mô phỏng chính xác hơnngôn ngữ tự nhiên bằng cách sử dụng các ngữ liệu lớn với kiểu mô hình truyền thống trởnên vô nghĩa, vì cần phải cắt giảm kích cỡ của ngữ liệu để LM có thể được chứa vừatrong bộ nhớ máy tính Điều này đi ngược lại với mục đích ban đầu của việc tạo ra nhữngtập ngữ liệu ngày càng lớn hơn Hạn chế này đòi hỏi các nhà nghiên cứu cần tìm ra nhữngphương pháp khác để mô hình hóa ngôn ngữ nếu vẫn muốn tận dụng lợi thế mà các bộngữ liệu lớn mang lại
Một giải pháp để thực hiện yêu cầu này là bỏ đi sự chính xác, chấp nhận mất mát
một lượng thông tin nhất định khi mô hình ngôn ngữ từ ngữ liệu Nghĩa là thay vì các LM không mất mát (losses LM), ta sử dụng các LM có mất mát thông tin (lossy LM) Các nghiên cứu về lossy LM tạo ra một lớp các loại cấu trúc dữ liệu mới là Cấu trúc dữ liệu ngẫu nhiên (Randomized Data Structure, viết tắt là RDS), hay còn gọi là Cấu trúc dữ liệu xác suất (Probabilistic Data Structure - PDS) Vài cấu trúc dữ liệu điển hình loại này là
Skip List [33], Sparse Partition [16], Lossy Dictionary [31], Bloom Filter [4] Ở Việt Namcũng đã có một số nghiên cứu về vấn đề mô hình ngôn ngữ [39], nhưng mới chỉ dừng lại
ở việc sử dụng các mô hình ngôn ngữ chuẩn Khóa luận này nghiên cứu và tìm hiểu về
mô hình ngôn ngữ dựa trên Bloom Filter do những cải tiến đáng chú ý những năm gầnđây của loại cấu trúc dữ liệu này để xây dựng mô hình ngôn ngữ [35, 36, 37] Nội dungkhóa luận tập trung nghiên cứu khả năng tiết kiệm bộ nhớ, không gian lưu trữ của loại
Trang 10LM này và hiệu quả của nó, so với các LM tiêu chuẩn [34], thông qua một ứng dụng cụthể là hệ thống dịch máy thống kê Moses.
Chương 1 trình bày các hiểu biết cơ bản cần biết về mô hình ngôn ngữ như n-gram,
các thuật toán làm mịn được sử dụng trong mô hình ngôn ngữ và các thước đo để đánhgiá một mô hình ngôn ngữ
Chương 2 tập trung nghiên cứu về các trúc dữ liệu dựa trên Bloom Filter được sử
dụng cho mô hình ngôn ngữ, cụ thể là Log-Frequency Bloom Filter và Bloom Map
Chương 3 thử nghiệm xây dựng mô hình ngôn ngữ trên một ngữ liệu tiếng Anh và
một ngữ liệu tiếng Việt
Chương 4 giới thiệu sơ lược về dịch máy thống kê, thử nghiệm dịch máy thống kê
với hệ thống dịch máy nguồn mở Moses sử dụng các mô hình ngôn ngữ xây dựng ởchương 3
Trang 11Chương 1 Tổng quan về mô hình ngôn ngữ
Mô hình ngôn ngữ (Language Model - LM) là các phân phối xác suất trên một ngữliệu đơn ngữ, được sử dụng trong nhiều bài toán khác nhau của xử lý ngôn ngữ tự nhiên,
ví dụ như: dịch máy bằng phương pháp thống kê, nhận dạng giọng nói, nhận dạng chữviết tay, sửa lỗi chính tả, … Thực chất, LM là một hàm chức năng có đầu vào là mộtchuỗi các từ và đầu ra là điểm đánh giá xác suất một người bản ngữ có thể nói chuỗi đó.Chính vì vậy, một mô hình ngôn ngữ tốt sẽ đánh giá các câu đúng ngữ pháp, trôi chảy caohơn một chuỗi các từ có thứ tự ngẫu nhiên, như trong ví dụ sau:
Pr(“hôm nay trời nắng”) > Pr(“trời nắng nay hôm”)
1.1 N-gram
Cách thông dụng nhất được dùng để mô hình hóa ngôn ngữ vào trong LM là thông
qua các n-gram Với mô hình n-gram, chúng ta coi một văn bản, đoạn văn bản là chuỗi các từ liền kề nhau, w1, w2, …, wN-1, wN, và sau đó phân tích xác suất của chuỗi với công
Trang 12trong rất nhiều trường hợp, chỉ sau khi duyệt vài từ trong lịch sử, ta đã nhận thấy rằng đó
là một câu chưa từng gặp trước đây Bởi vậy kể cả khi đã biết toàn bộ lịch sử của một từ,xác suất của nó vẫn có thể là không biết Thay vào đó, các mô hình ngôn ngữ thường ước
lượng tương đối xác suất dựa trên giả định Markov (hay mô hình Markov ẩn), rằng từ tiếp theo chỉ chịu ảnh hưởng từ một vài từ trước đó [25] Một mô hình Markov bậc n giả định rằng chỉ n từ trước đó có liên hệ ngữ cảnh với từ đang cần xác định Việc quyết định bao nhiêu từ trước đó mà LM quan tâm được gọi là bậc n (order) của LM, và thường được gọi
là 1-gram (unigram), 2-gram (bigram), 3-gram (trigram), 4-gram (fourgram) tương ứngvới các mô hình Markov bậc một, hai, ba, bốn Ví dụ, nếu chúng ta muốn ước lượng xác
suất 3-gram của một từ wi với mô hình Markov bậc 2 thì chúng ta sẽ dựa trên hai từ trước
i n là một n-gram chiều dài n kết thúc bằng từ wi Khi
đó để ước lượng xác suất n-gram cho một chuỗi chiều dài N ta sử dụng công thức:
1.2 Xây dựng mô hình ngôn ngữ
Để xây dựng (huấn luyện) một mô hình ngôn ngữ ta cần một ngữ liệu đơn ngữ (corpus) có kích thước tương đối và một bộ ước lượng thống kê có nhiệm vụ mô hình hóa
lượng xác suất của ngữ liệu Các bộ ước lượng được mà LM sử dụng, theo những cách
khác nhau, đều cần đến tần suất của các n-gram, do đó chúng ta cần phải đếm số lần xuất hiện của các n-gram từ 1-gram cho đến số bậc mô hình chúng ta đang huấn luyện.
Trang 131.2.1 Ước lượng cực đại hóa khả năng (MLE)
Chúng ta có thể sử dụng kết quả đếm các n-gram để xây dựng một mô hình ước lượng cực đại hóa khả năng (Maximium Likelihood Estimation - MLE) với tần suất tương đối của các n-gram trong ngữ liệu Với MLE, xác suất một unigram nhất định nào
đó sẽ xuất hiện tiếp theo đơn giản là tần suất nó xuất hiện trong ngữ liệu
' '
c c
trong đó c(wi’) = |wi’| chính là số lần xuất hiện của từ wi’ trong ngữ liệu Phương pháp này
được gọi như vậy bởi vì nó cực đại hóa giá trị đầu ra để mô hình hóa ngữ liệu huấn luyện
Ví dụ, trong ngữ liệu Brown 1, một ngữ liệu với một triệu từ, từ khóa “Chinese” xuất hiện
400 lần Vậy thì xác suất mà một mô hình ngôn ngữ dùng MLE sẽ gán cho unigram
tức là tần suất một từ nào đó thường xuyên xuất hiện sau lịch sử có bậc n – 1 Để minh
họa, ta tiếp tục ví dụ trên, xác suất bigram “Chinese food” xuất hiện là số lần từ “food”xuất hiện sau từ “Chinese” chia cho c(Chinese) = 400 Trong ngữ liệu Brown, cụm từ
“Chinese food” xuất hiện 120 lần, nên:
PrMLE(food|Chinese) = 0.3
1.2.2 Các phương pháp làm mịn
Tuy MLE là một phương pháp dễ hiểu, dễ sử dụng để ước lượng xác suất cho mô
hình, nhưng trong thực tế ta gặp phải vấn đề dữ liệu thưa (data sparseness problem) Tức
là tập ngữ liệu dùng để xây dựng LM dù lớn đến mấy, cũng chỉ là tập hữu hạn các câutrong vô số câu có thể của một ngôn ngữ tự nhiên Do đó một LM chỉ sử dụng MLE sẽ
gán xác suất bằng 0 cho nhiều n-gram tốt Để giảm thiểu vấn đề này, người ta thường
1 http://icame.uib.no/brown/bcm.html
Trang 14không sử dụng MLE mà thay vào đó là các phương pháp ước lượng xác suất thống kê
phức tạp hơn Các phương pháp này được gọi là làm mịn (smoothing) hay trừ hao
(discounting), khi mà một phần xác suất từ các sự kiện trong mô hình sẽ được dành chonhững sự kiện chưa từng xuất hiện Việc lấy từ cái gì và trừ hao như thế nào là một đề tàivẫn đang được nghiên cứu nhiều Ví dụ, cách cổ điển nhất của làm mịn là phương pháp
Add-one smoothing [13], trong phương pháp này, ta thêm một lượng l 1 vào kết quảđếm số lần xuất hiện của mọi từ vựng trong ngữ liệu
Hai khái niệm quan trọng được sử dụng trong quá trình làm mịn các mô hình ngôn
ngữ là backoff và interpolation Khi LM gặp một n-gram chưa biết, việc tính xác suất sẽ
sử dụng thông tin từ (n-1)-gram, nếu sự kiện (n-1)-gram cũng chưa từng xuất hiện trong
quá trình huấn luyện thì LM lại sử dụng thông tin xác suất từ (n-2)-gram, … Và cứ tiếp
tục như vậy cho đến khi tính được xác suất của n-gram Quá trình này được gọi là backoff
và được định nghĩa như sau:
1 1
là tham số backoff Khi số lượng từ vựng đủ lớn, chúng ta có thể sẽ cần gán xác suất
bằng 0 cho một số từ ngoài từ điển (out of vocabulary - OOV) khi ở mức unigram Chẳng
hạn khi ta có một cuốn từ điển chuyên ngành và không muốn chia sẻ lượng xác suất củacác từ vựng đó (các danh từ chung, các số thực đặc biệt, …) cho các OOV Một cách khác
là chúng ta làm mịn LM và dành một lượng xác suất nhỏ gán cho các OOV khi ở mứcunigram
Phương pháp Interpolation kết hợp thông tin thống kê n-gram qua tất cả các bậc của LM Nếu bậc của LM là n thì công thức đệ quy interpolation như sau:
Trang 15tính toán tùy theo điều kiện ngữ cảnh cụ thể, tức là theo tần suất của các bậc n-gram trong
lịch sử Các trọng số này không được tính toán từ dữ liệu huấn luyện, mà sử dụng tập dữ
liệu held-out riêng biệt – tập này chỉ được dùng để huấn luyện các tham số, mà trong
trường hợp này là các giá trị Cần phải nhận thấy rằng sự khác biệt cơ bản giữa haiphương pháp này là interpolation sử dụng thông tin từ các bậc thấp hơn ngay cả khi dữliệu xác suất của n-gram cần tính đã khác 0; trong khi backoff thì lại chỉ tìm kiếm đến dữliệu khác 0 gần nhất
Những tiểu mục tiếp theo trong phần này sẽ trình bày về một số phương pháp làm
mịn phổ biến nhất hiện nay, như Kneser-Ney [17] hay Stupid backoff của Google [5].
1.2.2.1 Kneser-Ney
Thuật toán làm mịn Kneser-Ney (KN) được phát triển bởi Reinhard Kneser và
Hermann Ney, công bố năm 1995 [17] Trong thuật toán KN, xác suất của một unigramkhông tỉ lệ thuận với tần suất xuất hiện của nó, mà với số tiền tố mà nó có
Có thể minh họa như sau, bigram “San Francisco” rất phổ biến trong cuốn sách
“Lịch sử thành phố San Francisco” Với tần suất bigram này cao như vậy thì nếu sử dụngcác phương pháp đơn giản, tần suất của từng từ “San” và “Francisco” cũng sẽ phải rất
cao Tuy nhiên trong thuật toán KN thì xác suất Pr(Francisco) lại có thể là rất thấp, vì từ
“Francisco” thường chỉ đứng sau từ “San” Do các LM bậc thấp thường được sử dụng choviệc tính xác suất backoff của các LM bậc cao hơn, nên thuật toán KN muốn tận dụng sựlãng phí lượng xác suất này trong các thuật toán trước đó để dành cho các sự kiện có khảnăng xảy ra lớn hơn
Trước tiên chúng ta định nghĩa số lượng tiền tố của một từ như sau:
1 ( w ) | w : (w w ) 0 |i i 1 i 1 i
Thuật ngữ N1 dùng để chỉ số lượng các từ xuất hiện một lần hoặc nhiều hơn và ký
tự chỉ một từ bất kỳ nào đó Thay vì sử dụng tần suất như trong MLE, tần suất thô củamỗi từ được thay thế bằng số lượng từ (khác nhau) đứng trước từ đó Vậy thì xác suất củaunigram trong thuật toán KN được tính là:
Trang 161 ' '
N N
N N
1.2.2.2 Kneser-Ney cải tiến (Modified Kneser-Ney)
Thuật toán làm mịn Kneser-Ney cải tiến (Modified Kneser-Ney - MKN) được phát
triển từ thuật toán KN, là kết quả nghiên cứu của Chen và Goodman, công bố năm 1999
[11], tức là 4 năm sau sự ra đời của thuật toán KN Thuật toán KN dùng phương pháp trừ hao tuyệt đối (absolutely discounting), trừ đi một giá trị D duy nhất, 0 < D < 1, cho mọi
kết quả đếm khác 0 Thuật toán MKN nâng cao hiệu quả của KN bằng cách sử dụng cácgiá trị trừ hao khác nhau trong những trường hợp khác nhau, dựa trên giá trị đếm của mỗi
n-gram Công thức tổng quát của MKN là:
Trang 171 1 1 1 1
' 1 '
0 if c 0
if c 1( )
1
1 2
2 1
1 3 2
2 4 3
n n D
n n D
với ni là tổng số n-gram có kết quả đếm là i của mô hình bậc n đang được nội suy Tổng
tất cả các phân phối phải bằng một, do đó:
1 1 {1,2,3+}
1
' 1 '
(w ) (w )
(w )
i
i i
i n i
D N c
nhiều, chẳng hạn như ngữ liệu n-gram Trillion Words của Google.
Google sử dụng một thuật toán làm mịn đơn giản, tên là Stupid Backoff Thuật toán
này sử dụng tần suất tương đối của các n-gram một cách trực tiếp như sau:
Trang 18w (w ) i i
S
N
trong đó N là cỡ của ngữ liệu huấn luyện Brants [5] đã tuyên bố rằng khi có lượng dữ
liệu đủ lớn, thì hiệu quả của Stupid Backoff xấp xỉ làm mịn MKN Lý do ở đây ký hiệu S được sử dụng thay cho P là để nhấn mạnh rằng phương pháp này trả lại điểm số tương đối
chứ không phải là xác suất đã được chuẩn hóa
1.3 Đánh giá mô hình ngôn ngữ
1.3.1 Perplexity
Sau khi LM đã được huấn luyện, chúng ta cần phải đánh giá chất lượng của môhình Cách đánh giá chính xác nhất một mô hình ngôn ngữ là kiểm tra trong thực tế Ví dụtrong nhận dạng tiếng nói, chúng ta có thể so sánh hiệu quả của 2 mô hình ngôn ngữ bằngcách chạy bộ nhận dạng ngôn ngữ 2 lần, mỗi lần với 1 mô hình và xem mô hình nào chokết quả chính xác hơn Nhưng cách này lại rất tốn thời gian, vì thế, chúng ta cần 1 công cụ
mà có thể nhanh chóng đánh giá hiệu quả của một mô hình Perplexity (PP) [3] là thước
đo thường được dùng cho công việc này
Perplexity thực chất là một dạng biến đổi của entropy chéo (cross entropy) của mô hình Entropy chéo là cận trên của entropy Entropy là một khái niệm cơ bản trong Thuyết thông tin, đánh giá lượng thông tin của dữ liệu bằng độ đo sự không chắc chắn Nếu một biến ngẫu nhiên x tồn tại trong khoảng X của thông tin đang được đánh giá với phân phối xác suất là p, thì khi đó entropy của x được định nghĩa là:
Trang 19Ví dụ khi tung một đồng xu, x chỉ có thể là mặt ngửa hoặc mặt sấp và xác suất
Entropy chéo của một mô hình là độ đo thông tin giữa hai phân phối xác suất Đối
với một phân phối xác suất q nào đó mà chúng ta sử dụng để mô hình hóa phân phối xác suất p, entropy chéo được định nghĩa là:
chéo chúng ta đều có thể bỏ đi thành phần p nếu chuỗi giá trị x đủ dài Nếu chúng ta cần
tính entropy cho từng từ thì chỉ việc chia cho tổng số từ:
Các mô hình LM có mất mát không đảm bảo xác suất chính xác vì nó lưu trữ dữliệu không đầy đủ, do đó làm biến dạng phân phối xác suất thông thường Chính vì lý donày mà ta không thể sử dụng các phương pháp đo dựa trên Entropy như Perplexity đểđánh giá chất lượng của mô hình Tuy nhiên chúng ta vẫn có thể sử dụng một mô hìnhđảm bảo phân phối xác suất thông thường làm chuẩn mực để so sánh xem các lossy LMkhác biệt như thế nào so với mô hình này Điều này có thể được thực hiện bằng cách sử
Trang 20dụng Lỗi trung bình bình phương (Mean Square Error - MSE) của lossy LM và lossless
LM, đều được huấn luyện và kiếm tra sử dụng các tập ngữ liệu giống nhau
Trang 21mà LM phải đối mặt Đó là làm thế nào tạo ra được mô hình đại diện hiệu quả ngôn ngữ
tự nhiên, bằng cách sử dụng nhiều dữ liệu, tăng bậc mô hình n-gram (n = 6, 7, 8, …)
nhưng không quá phức tạp trong tính toán và sử dụng ít bộ nhớ Một tập ngữ liệu như củaGoogle là quá lớn (24GB khi đã nén), không thể chứa vừa trong bộ nhớ RAM thôngthường Điều này thúc đẩy các nhà nghiên cứu cần tìm ra một giải pháp thay thế cách biểu
diễn n-gram truyền thống, nếu vẫn muốn tận dụng ưu thế của các tập ngữ liệu lớn mà
không cần sử dụng các phương thức tốn kém truyền thống như hệ thống siêu máy tínhtrong môi trường điện toán phân tán của Google
Trong chương này chúng ta sẽ tìm hiểu một loại cấu trúc dữ liệu có khả năng đáp
ứng phần nào những yêu cầu nêu trên, đó chính là Bloom Filter (BF) [4], sử dụng một dạng mã hóa có mất mát thông tin (lossy encoding), ý tưởng của BF là thay vì lưu trữ toàn bộ các n-gram, chúng ta chỉ lưu một tập đại diện mang tính ngẫu nhiên của nó Mã hóa có mất mát thông tin là một loại kỹ thuật phổ biến thường được dùng trong lưu trữ đa
phương tiện như chuẩn nén JPEG cho hình ảnh, MP3 cho âm thanh hay MPEG cho nénvideo Trong đó một phần dữ liệu bị mất đi khi mã hóa, nhưng đại diện mới được tạothành vẫn chứa đựng khá đầy đủ các thông tin hữu ích sau khi được giải mã
Bloom Filter là một cấu trúc dữ liệu xác suất, đầu tiên được xây dựng chỉ để trả lời
cho câu hỏi “Liệu phần tử x có thuộc tập S hay không ?” Nếu kết quả là có thì ta gọi đó là một HIT, còn ngược lại thì ta gọi là MISS Có hai loại lỗi có thể xảy ra khi trả lời câu hỏi truy vấn trên, đó là false positive và false negative Lỗi false positive xảy ra khi đối tượng được truy vấn không thuộc tập S, x S , nhưng lại HIT Còn false negative thì ngược lại
với false positive, tức là một đối tượng x S bị kết luận là MISS trong khi thực tế thì
Trang 22không phải như vậy Cấu trúc dữ liệu thống kê nào chỉ gặp một trong hai loại lỗi này được
gọi là có lỗi một phía (one-side error) và lỗi hai phía trong trường hợp còn lại BF là cấu
trúc dữ liệu chỉ có lỗi một phía
Cấu trúc dữ liệu này yêu cầu dung lượng lưu trữ thấp hơn khá nhiều ngưỡng dướicủa thuyết Entropy nhưng lại có tỉ lệ lỗi khá thấp và có thể xác định được Bloom Filternguyên bản không hỗ trợ lưu trữ cả cặp khóa-giá trị Tuy nhiên Talbot và Osborne [35,
36, 37] đã đề xuất những cách cho phép tích hợp giá trị vào trong mô hình ngôn ngữBloom Filter Cách thức thực hiện điều này được mô tả trong nội dung của chương
2.1 Các cấu trúc dữ liệu xác suất (PDS)
Một bước quan trọng trong khâu thiết kế của một chương trình là tìm cách thíchhợp để lưu trữ và xử lý dữ liệu Việc đánh giá và lựa chọn cẩn trọng cấu trúc dữ liệu được
sử dụng trong chương trình có ý nghĩa rất quan trọng: lựa chọn đúng có thể làm tăng đáng
kể hiệu năng của chương trình, tiết kiệm tài nguyên, dễ dàng bảo trì hệ thống trong tươnglai; ngược lại, khả năng vận hành của hệ thống có thể bị hạn chế do khối lượng tính toánquá lớn hay hoạt động thiếu ổn định, thậm chí không hoạt động được với những tập dữliệu lớn nếu sử dụng một cấu trúc dữ liệu tồi
Tồn tại nhiều dạng cấu trúc dữ liệu khác nhau, phù hợp cho những mục đích sửdụng khác nhau Một số cấu trúc dữ liệu chỉ là những kho chứa dữ liệu thông thường,trong khi một số khác lại được dùng cho những ứng dụng đặc biệt và chỉ phát huy đượchiệu năng tối đa trong điều kiện nhất định
Trong nhiều trường hợp, tập ngữ liệu quá lớn đến nỗi không một siêu máy tính nàohiện tại có khả năng quản lý được Và cũng không có cấu trúc dữ liệu chuẩn nào có thểlưu trữ được nó Ví dụ như, trong lĩnh vực dịch máy thống kê, năm 2006, Google đãkhiến cả cộng đồng ngành NLP phải sửng sốt khi họ công bố một ngữ liệu Ngram khổng
lồ 2 Với khoảng 3 tỉ từ, dung lượng là 24 GB khi đã nén, tập ngữ liệu này quá lớn thậmchí với hệ thống bộ nhớ của những siêu máy tính Hiển nhiên là ta có thể được lưu trữ nótrong ổ đĩa cứng, nhưng ví dụ như với dịch máy thống kê (SMT), một mô hình ngôn ngữ
có thể được truy vấn hàng trăm nghìn lần mỗi câu, vậy nên rõ ràng đây không phải là một
Trang 23phương án khả thi Chúng ta cần tìm ra một hướng tiếp cận khác cho những tập ngữ liệu
đồ sộ như thế này
Một hướng tiếp cận khả thi là thay vì tìm cách biểu diễn chính xác một tập ngữ liệu
lớn, không mất mát (lossless), ta chấp nhận ý tưởng sử dụng một tập đại diện có mất mát (lossy) của nó Nghĩa là bằng cách sử dụng một vài kỹ thuật nào đó:
i) Một lượng dữ liệu mà ta kiểm soát được bị mất đi.
ii) Tổn hại đến sự toàn vẹn dữ liệu gây ra bởi lượng dữ liệu đã mất có thể được
coi là nhỏ nếu so sánh với không gian lưu trữ ta đã tiết kiệm được Đồng
thời từ chỗ không thể kiểm soát được dữ liệu (không sử dụng được trong các
chương trình do tập này quá lớn, thời gian tìm kiếm lâu, …), giờ đây ta đã
có thể kiểm soát được chúng.
Hướng tiếp cận này phát triển thành một lớp cấu trúc dữ liệu mới, được gọi là các
Cấu trúc dữ liệu ngẫu nhiên (Randomised Data Structure - RDS) hay còn được gọi là các Cấu trúc dữ liệu xác suất (Probabilistic Data Structure) Trong các PDS, dữ liệu được mã hóa cẩn thận và tối ưu dưới dạng có mất mát, và từ “ngẫu nhiên” ám chỉ các cấu trúc dữ
liệu này dựa trên những thuật toán mã hóa mang tính ngẫu nhiên nhất định
Một thuật toán ngẫu nhiên có thể được định nghĩa là “thuật toán sử dụng các lựa chọn tùy ý, không xác định trước trong quá trình tính toán” [14] Một phần dữ liệu sẽ bị
mất khi được mã hóa vào một PDS Tuy nhiên thông tin vẫn sẽ được lưu trữ sao cho dạngmới này của dữ liệu vẫn hiệu quả tương đương dạng biểu diễn chính xác (không mất mát)của nó
Nhiều loại cấu trúc dữ liệu xác suất đã được nghiên cứu, phát triển và ứng dụngtrong những năm gần đây [30] Một số cấu trúc dữ liệu loại này có thể kể đến như SkipList [33], Sparse Partition [16], Lossy Dictionary [31], và một cấu trúc dữ liệu tuy đãđược đề xuất từ khá lâu nhưng hiện tại lại tiếp tục được nghiên cứu nhiều - Bloom Filter[24, 35, 36, 37]
Nhận thấy một số ưu điểm như tốc độ, khả năng tiết kiệm bộ nhớ đáng kể củaBloom Filter [24], chúng tôi đã chọn nghiên cứu loại cấu trúc dữ liệu này và trình bàytrong khóa luận Cấu trúc dữ liệu Bloom Filter cơ bản sẽ được giới thiệu trong phần saucủa chương này Tiếp đó là cải tiến đơn giản để có thể lưu trữ dữ liệu theo cặp {khóa, giá
Trang 24trị} – Logarithmic Frequency Bloom Filter (hay Bloom Filter tần số log) [35]; và mộtdạng cải tiến phức tạp hơn được ra đời sau là Bloom Map [37].
2.2 Hàm băm
Một thành phần rất quan trọng được sử dụng trong Bloom Filter đó là các hàmbăm Chính vì vậy trước khi đi sâu tìm hiểu cấu trúc dữ liệu BF ở các phần sau, mục nàytrình bày vài nét sơ lược về hàm băm
Hàm băm (Hash function) là một hàm ánh xạ phần tử từ tập này sang một tập khác
(thường là nhỏ hơn)
w
Hình 2: Ví dụ về hàm băm Các xâu ký tự được chuyển thành chữ ký đại diện.
Phần tử cần được băm là từ tập S có cỡ n, tập này nằm trong tập dữ liệu ban đầu U
với S U và U 0,1w Đại diện của phần tử đó trong miền b được gọi là chữ ký hoặc dấu ấn của dữ liệu Hàm h này phải mang tính ổn định, có nghĩa là nếu cùng một dữ liệu
đi qua hàm h nhiều lần thì luôn cho kết qua giống nhau Đồng thời nếu đầu ra của haiphần tử qua hàm h khác nhau thì ta cũng có thể kết luận hai phần tử đó là khác nhau
Khóa ki được đưa vào hàm băm h(k i ), kết quả của hàm băm này trỏ đến một ô trong
bảng giá trị cỡ m: 0,1, ,m 1 (được gọi là bảng băm), ô đó chứa giá trị ai Đặc tính
Trang 25đáng chú ý của bảng giá trị băm này là thời gian tìm kiếm không phụ thuộc vào kích cỡcủa tập dữ liệu được mã hóa vào bảng Hình 3 minh họa cấu trúc một bảng băm.
Hình 3: Cặp khóa k i và giá trị a i của tập S được ánh xạ thông qua hàm băm
vào bảng băm Xuất hiện xung đột giữa 2 phần tử k 1 và k 3
Trang 26Để có một hàm băm tốt thì giá trị của nó phải có phân phối đều Số lượng giá trị chúng ta có thể lưu trữ với b-bits là 2b Nếu tập S lớn và b w thì một số phần tử thuộc
tập S sẽ xung đột với nhau khi được ánh xạ từ không gian lớn cỡ w vào không gian nhỏ hơn là b Chúng ta có thể tối thiểu hóa va chạm nếu chọn được hàm băm có đầu ra phân phối đều trên b Bởi vì nếu hàm băm không có phân phối đều, đầu ra của chúng sẽ chỉ tập
trung ánh xạ vào một số vị trí trong bảng băm, trong khi nhiều vị trí khác lại bị bỏ trống
2.3 Bloom Filter cơ bản
Các cấu trúc dữ liệu dựa trên Bloom Filter được sử dụng để xây dựng mô hìnhngôn ngữ có nguồn gốc từ Bloom Filter (BF) cơ bản [4] BF, trước tiên là một cấu trúc dữliệu xác suất (PDS), hỗ trợ truy vấn kiểm tra một đối tượng có thuộc tập hợp hay không
BF sử dụng một thuật toán mã hóa độc đáo cho phép nó tiết kiệm đáng kể không gian lưutrữ, thời gian truy vấn bất biến không phụ thuộc vào kích cỡ của tập cần đại diện và có tỉ
lệ lỗi-một-phía điều khiển được
0 0 1 0 0 1 0 0 1 0 0
0 0 1 0 0 1 0 0 1 0 0
Hình 4: Huấn luyện Bloom Filter
Một BF đại diện cho một tập S x x1, , ,2 x n với n phần tử được lấy ngẫu nhiên từ tập ban đầu U cỡ N ( Nn ) Bộ nhớ đáng kể nhất mà BF sử dụng là một mảng bit cỡ m.
Trước quá trình huấn luyện, mảng này chỉ chứa các giá trị 0 Để huấn luyện BF, chúng ta
Trang 27sử dụng k hàm băm độc lập, mỗi hàm băm có đầu ra trỏ đến một vị trí trong mảng bít m tùy theo giá trị đầu vào x, h x k( )0,1, ,m1 Mỗi phần tử x trong tập S cỡ n chúng ta
đang cần biểu diễn được băm k lần sử dụng k hàm băm nêu trên, và bit tương ứng với đầu
ra của mỗi hàm băm trong bảng m được thiết lập giá trị bằng 1 Như vậy là với mỗi phần
tử x S , k vị trí tương ứng được “bật lên”, nếu một bit hk nào đó đã có giá trị bằng 1 rồithì bit đó vẫn giữ nguyên trạng thái Nghĩa là, một khi đã được thiết lập, giá trị này sẽkhông bao giờ bị thay đổi nữa qua cả quá trình huấn luyện Cần lưu ý rằng có thể tồn tại
khả năng k hàm băm của một phần tử có đầu ra không trỏ đến k vị trí riêng biệt trong
mảng bit, BF không tránh sự va chạm này Các bit trong mảng do cơ chế này mà có thểđược chia sẻ cho các phần tử dùng chung, đem lại khả năng tiết kiệm đáng kể bộ nhớ cho
BF, tuy nhiên lại tồn tại một xác suất lỗi false positive khác 0
1 0 1 0 0 1 0 1 1 0 1
1 0 1 0 0 1 0 1 1 0 1
Hình 5: Truy vấn Bloom Filter
Để kiểm tra một phần tử nào đó có thuộc tập đã được mã hóa trong BF hay không,chúng ta lại đưa nó chạy qua k hàm băm trên Nếu tất cả các bit được tham chiếu bởi k
hàm băm có giá trị bằng 1 thì ta coi phần tử đó thuộc tập hợp; còn nếu tồn tại bất cứ giá trị nào bằng 0 thì chúng ta biết chắc chắn nó không thuộc tập hợp Tại sao ở đây cần phải nhấn mạnh từ “coi” và “chắc chắn” ? Đó là vì các phần tử thực sự của tập S thì luôn được xác định chính xác, nhưng có một xác suất lỗi false positive sẽ xuất hiện nếu như k bit
Trang 28tương ứng thực ra được thiết lập do các phần tử trong tập huấn luyện mà phần tử đang xét
thì không thuộc tập này Đây được gọi là lỗi-một-phía.
Cần chú ý là, thay vì thực sự lưu trữ tập S, sử dụng Bloom Filter, thực chất chúng
ta chỉ đang lưu trữ một đại diện của nó – B, một mảng bit cỡ m Các phần tử trong S do đó
thực chất bị mất: chúng ta sẽ không thể khôi phục được tập đó từ Bloom Filter Tuy
nhiên, nếu chúng ta chỉ quan tâm đến liệu một phần tử có nằm trong tập S hay không thì
Bloom Filter lại có thể thực hiện được, đồng thời tiết kiệm đáng kể bộ nhớ trong khi tốc
độ truy vấn lại không đổi
Một ưu điểm đáng chú ý nữa của Bloom Filter, như được trình bày sau đây, đó làmặc dù không thể tránh khỏi, nhưng lỗi-một-phía của Bloom Filter lại là yếu tố mà ta cóthể kiểm soát được
1 0 1 0 0 1 0 1 1 0 1
1 0 1 0 0 1 0 1 1 0 1
Hình 6: Lỗi-một-phía trong Bloom Filter
Nếu chúng ta coi các hàm băm có phân phối đều và hoàn toàn ngẫu nhiên, tức là
chúng sẽ chọn các vị trí trong mảng m-bit với xác suất tương đương nhau thì xác suất một bit bất kỳ được thiết lập bằng 1 bởi một hàm băm là 1/m Xác suất một bit bất kỳ không
phải là 1 sau khi thực hiện một hàm băm là:
11
m
Xác suất một bit vẫn là 0 sau khi mới chỉ có một phần tử chạy qua k hàm băm là:
Trang 29k m
Trang 30Biểu đồ 2: Tỉ lệ lỗi và Số lượng khóa (giữ nguyên m) [24]
Nếu một phần tử nào đó không phải là thành viên của tập S, xác suất nó lúc nào
cũng trỏ tới những bit bằng 1 đối với tất cả k hàm băm nó được chạy qua, gây ra lỗi false positive, là:
1
1 1
k kn m
Để xác suất lỗi là nhỏ nhất, từ công thức trên ta lấy đạo hàm thì sẽ tính được số
hàm băm k tối ưu là:
luyện Điều này sẽ dẫn đến xác suất lỗi false positive là:
/
1
0.61852
Trang 31Như vậy là nếu giữ nguyên n, xác suất lỗi giảm nếu m tăng (sử dụng nhiều không gian lưu trữ hơn) Còn nếu m không đổi thì tỉ lệ lỗi tăng nếu n tăng Hai biểu đồ 1 và 2 có
thể chỉ ra sự tương quan giữa tỉ lệ lỗi với không gian lưu trữ, và số lượng khóa (số phần tử
2.4 Mô hình ngôn ngữ sử dụng Bloom Filter
Năm 2007, Talbot và Osborne lần đầu tiên giới thiệu phương pháp sử dụng mộtcấu trúc lưu trữ dữ liệu có mất mát như BF để mô hình ngôn ngữ, và cũng đưa ra ý tưởnggiúp giảm tỉ lệ lỗi false positive, tích hợp cả khóa và giá trị trong Bloom Filter với việccông bố hai cấu trúc dữ liệu Log Frequency Bloom Filter [35, 36] và Bloom Map [37]
2.4.1 Bloom Filter tần số log (Log-frequency Bloom Filter)
Khả năng lưu trữ hiệu quả dữ liệu thống kê n-gram vào trong BF có được là do
phân phối dạng Zipf (luật Zipf) 3 của các từ trong một ngữ liệu ngôn ngữ tự nhiên Theoluật này, thì trong một ngữ liệu thông thường, từ xảy ra thường xuyên nhất nhiều gấp đôi
từ xảy ra thường xuyên thứ hai, từ này lại nhiều bằng hai lần từ xảy ra thường xuyên thứ
tư, … Lấy ví dụ đối với ngữ liệu Brown, “the” là từ xảy ra nhiều nhất, chiếm 7% tổng số
từ Đúng theo luật Zipf, từ có số lượng xếp thứ hai là “of” chiếm khoảng trên 3.5% mộtchút Và chỉ cần khoảng 135 từ là đã chiếm một nửa tổng số từ của ngữ liệu Brown (theoWikipedia) Như vậy tức là chỉ có một số ít sự kiện xảy ra thường xuyên trong khi hầu hếtcác sự kiện khác đều hiếm khi xảy ra
Để biến BF thành một cấu trúc dữ liệu hỗ trợ lưu trữ cặp khóa – giá trị, với khóa là
n-gram còn giá trị là số lần xuất hiện n-gram trong ngữ liệu Nhằm tối thiểu hóa số bit cần
sử dụng, một thuật toán có tên mã hóa tần số log (log-frequency encoding) được sử dụng.
3 Tham khảo thêm trên Wikipedia: http://en.wikipedia.org/wiki/Zipf’s_law
Trang 32Số lần xuất hiện của các n-gram c(x) trước tiên được lượng tử hóa thành qc(x) sử dụng
công thức:
( ) 1 log ( )b
qc x c x Điều này có nghĩa là tần suất xuất hiện của các n-gram sẽ bị suy giảm theo hàm mũ
khi sử dụng quy trình mã hóa tần số log Tuy nhiên do có sự khác biệt lớn trong phân phốicủa các sự kiện này nên tỉ lệ của mô hình vẫn được lưu giữ gần như nguyên vẹn trong BF-
LM Kích thước khoảng giá trị qc(x) được quyết định bởi cơ số b trong công thức trên.
Từng n-gram được lưu trữ vào trong BF cùng với giá trị qc(x) được biểu diễn bằng một số nguyên j tăng từ 1 đến qc(x) Đến giai đoạn kiểm tra thì tần suất của một n-gram được lấy ra bằng cách đếm tăng dần lên bắt đầu từ 1 Với mỗi loạt k hàm băm có kết quả
trỏ tới các giá trị bằng 1 trong mảng bit BF, thì giá trị của n-gram lại được tăng thêm 1đơn vị Quá trình này tiếp diễn cho đến khi một hàm băm nào đó trỏ đến bit 0 trong mảnghoặc đạt đến giá trị đếm tối đa Và khi đó giá trị đếm hiện tại trừ đi một được trả lại, chính
là cận trên của qc(x) n-gram đó Đối với hầu hết các n-gram thì quá trình này chỉ diễn ra
một hoặc hai lần nhờ có quy trình mã hóa tần số log Đặc tính lỗi-một-phía của Bloom
Filter đảm bảo rằng giá trị lượng tử hóa qc(x) không thể lớn hơn giá trị được trả lại này Quá trình huấn luyện và kiểm tra được minh họa qua Thuật toán 1 và Thuật toán 2 [35].
Thuật toán 1: Thuật toán huấn luyện BF
- Đầu vào:S train, h1 , ,h k và BF
- Đầu ra: Bloom Filter
for all x in S train do
c(x) = tần suất của n-gram x in S train qc(x) = giá trị lượng tử hóa của c(x)
end for
return BF
Trang 33Thuật toán 2: Thuật toán kiểm tra BF
- Đầu vào: x, MAXQCOUNT, h1 , ,h k và BF
- Đầu ra: Cận trên của giá trị c(x) trong S train
2.4.2 Bộ lọc dựa vào chuỗi con
Các mô hình ngôn ngữ n-gram chuẩn lưu trữ xác suất điều kiện của n-gram trong
một ngữ cảnh cụ thể Hầu hết các mô hình ngôn ngữ này cũng lại sử dụng một số phương
pháp nội suy để kết hợp xác suất điều kiện của n-gram đang xét với xác suất n-gram bậc
thấp hơn Phụ thuộc vào phương pháp làm mịn được sử dụng, có thể chúng ta còn cần đếncác thông số thống kê phụ cho từng n-gram như số lượng hậu tố (đối với làm mịn Witten-Bell, Kneser-Ney) hay tiền tố ngữ cảnh (đối với làm mịn Kneser-Ney, Stupid Backoff).Chúng ta có thể sử dụng một BF duy nhất để lưu trữ những số liệu thống kê này nhưngcần chỉ rõ loại của chúng (tần suất xuất hiện thô, số tiền tố, số hậu tố, …), bằng cách sử
dụng các tập k hàm băm khác nhau cho từng loại.
Lý do nên lưu trữ các dữ liệu thống kê này một cách trực tiếp vào BF, thay vì lưucác xác suất được tính toán sẵn là: (i) tính hiệu quả của quy trình mã hóa nêu trên dựa vào
Trang 34phân phối tần suất dạng Zipf; điều này là hoàn toàn đúng cho dữ liệu thống kê n-gram
trong ngữ liệu ngôn ngữ tự nhiên, nhưng lại có thể là không đúng cho xác suất được ướclượng của chúng; (ii) sử dụng dữ liệu thống kê ngữ liệu trực tiếp, chúng ta có thể tiết kiệm
cả không gian lưu trữ đồng thời giảm tỉ lệ lỗi nhờ sử dụng các thông tin trung gian khácđược kết xuất từ ngữ liệu
Phân tích về tỉ lệ lỗi ở phần trên chỉ tập trung vào lỗi false positive của BF Nhưngthực tế, không giống như các cấu trúc dữ liệu thông thường khác, độ chính xác của môhình BF còn phụ thuộc vào các yếu tố khác trong hệ thống và cách thức mô hình đượctruy vấn
Chúng ta có thể tận dụng tính đơn điệu của không gian sự kiện n-gram trong ngữliệu ngôn ngữ tự nhiên để thiết lập một cận trên cho tần suất của tất cả các n-gram này.Nhờ đó mà có thể giảm bớt số lần thực hiện vòng lặp lớn trong thuật toán kiểm tra (Thuật
toán 2) Cụ thể là, nếu đã lưu trữ các n-gram bậc thấp hơn trong BF, ta có thể nói rằng một n-gram không thể tồn tại nếu bất kỳ chuỗi con nào của nó không tồn tại, ý tưởng này được gọi là bộ lọc dựa vào chuỗi con (sub-sequence filtering) [35] Do quy trình lưu trữ
tần suất BF sử dụng không bao giờ đánh giá thấp tần suất của một sự kiện, nên: tần suấtcủa một n-gram không thể lớn hơn tần suất của chuỗi con ít xảy ra nhất của nó
2.4.3 Bloom Map
Bloom Map [37] được phát triển dựa trên nghiên cứu của Chazelle với một cấu
trúc có tên là Bloomier Filter [10].
Bloom Map ra đời nhằm giải quyết nhu cầu lưu trữ hiệu quả cặp {khóa, giá trị}trong một cấu trúc dữ liệu tiết kiệm bộ nhớ Không giống như LF-BF, Bloom Map không
bị hạn chế với mã hóa chỉ các số nguyên dương Giả sử chúng ta có một bảng ánh xạ khóa– giá trị cần mã hóa như sau:
Trang 35trong đó mỗi phần tử trong tập V này phải là giá trị của ít nhất một khóa nào đó thuộc tập
X Ta giả sử phân phối của các giá trị trên các khóa được đại diện bởi véc tơ không đổi
Giải pháp đầu tiên được đề xuất để xây dựng một p- map ngẫu nhiên là Bloom
Map đơn giản: đây là một cải tiến của Bloom Filter, thay vì sử dụng k hàm băm ngẫu nhiên độc lập với nhau, chúng ta sẽ sử dụng một mảng của các mảng k hàm băm độc lập
ngẫu nhiên
1 2
1,1 1,2 1, 2,1 2,2 2,
Trong một ma trận như vậy, số dòng được cố định và bằng số lượng các giá trị
(i=1,…,b) Số lượng cột ở mỗi dòng không bằng nhau, tức là nó là một hàm của số thứ tự dòng: số phần tử ở mỗi hàng i đại diện cho ki hàm băm được chọn cho giá trị vi Nghĩa là