ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễ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
HÀ NỘI - 2010
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễ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
HÀ NỘI - 2010
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Tóm tắt nội dung
Mô hình ngôn ngữ là một thành phần quan trọng trong các ứng dụng như nhận dạng
tiếng nói, phân đoạn từ, dịch thống kê, … Và chúng thường được mô hình hóa sử dụng các
n-gram. Trong khóa luận này, chúng tôi nghiên cứu và tìm hiểu mô hình ngôn ngữ xây
dựng dựa trên cấu trúc dữ liệu Bloom Filter. Không lưu trữ toàn bộ tập n-gram giố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-Frequency Bloom 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ới Moses [21].
i
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Mụ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) ..................................................... 4
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
ii
Nguyễn Thạc Huy Khóa luận tốt nghiệp
2.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
iii
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Lờ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ăn
Vinh, 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ập
chuyê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ọc Lạ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ớn
lao. 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ời gian
ý nghĩa của đời sinh viên dưới mái trường Đại học Công nghệ - ĐHQGHN. Chúc các bạn
có kết quả tốt nghiệp tốt và thành công trong cuộc sống.
iv
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Danh mục từ viết tắt
BF : Bloom Filter
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
LM : Mô hình ngôn ngữ
MKN : Phương pháp làm mịn Kneser-Ney cải tiến
MLE : Ước lượng cực đại hóa khả năng
MSE : Lỗi trung bình bình phương
MT : Dịch máy
NLP : Xử lý ngôn ngữ tự nhiên
PDS : Cấu trúc dữ liệu xác suất
RDS : Cấu trúc dữ liệu ngẫu nhiên
SMT : Dịch máy bằng phương pháp thống kê
v
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Danh 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
vi
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Mở đầu
Mô hình ngôn ngữ (Language Model - LM) là một thành phần quan trọng trong
nhiề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ỏng
ngô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ủa
Internet 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ếu
như 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ính vớ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ơn ngô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ừa trong 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ững tậ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ững phươ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 Nam
cũ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 dung khó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 LM này và
1
Nguyễn Thạc Huy Khóa luận tốt nghiệp
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 để đánh giá
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.
2
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Chươ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ột chuỗ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 cao hơ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, w
1
, w
2
, …, w
N-1
, w
N
, và sau đó phân tích xác suất của chuỗi với công thức
xác suất kết hợp:
1 2 3 1
1 2 1 3 1 2
1 1 2 3 2 1 2 3 2 1
1
1
Pr(w , w ,w ,..., w ,w )
Pr(w )Pr(w |w ) Pr(w |w ,w )...
...Pr(w |w ,w ,w ,...,w )Pr(w |w ,w ,w ,...,w w )
Pr(w | )
N N
N N N N N
N
i
i i
i
w
−
− − − −
−
=
=
=
∏
và do vậy mỗi từ sẽ liên quan có điều kiện tới toàn bộ các từ trước nó (ta sẽ gọi đây là lịch
sử của sự kiện hoặc từ đó).
Tuy nhiên, việc sử dụng toàn bộ các từ trước đó để đoán nhận từ tiếp theo là không
thể thực hiện được vì 2 nguyên nhân sau. Đầu tiên là phương pháp này không khả thi về
mặt tính toán do tốn quá nhiều thời gian, tài nguyên hệ thống cho mỗi lần dự đoán. Hai là,
trong 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à
3
Nguyễn Thạc Huy Khóa luận tốt nghiệp
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 ứng vớ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ừ w
i
với mô hình Markov bậc 2 thì chúng ta sẽ dựa trên hai từ trước đó:
1 2 2 1
Pr(w ,w ,..., w ) Pr(w | w , w )
i i i i− −
≈
Hình 1: Mô hình Markov bậc 2
Một cách tổng quát, gọi
1
w
i
i n− +
là một n-gram chiều dài n kết thúc bằng từ w
i
. 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
1 1
1
Pr(w ) Pr(w | w )
N
N i
i i n
i
−
− +
=
≈
∏
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.
1.2.1 Ước lượng cực đại hóa khả năng (MLE)
4
w
i-
w
i-
w
i-
w
i
w
i+
Nguyễn Thạc Huy Khóa luận tốt nghiệp
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.
'
'
(w )
Pr (w )
(w )
i
MLE i
i
i
c
c
=
∑
trong đó c(w
i’
) = |w
i’
| chính là số lần xuất hiện của từ w
i’
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
“Chinese” là
400
Pr ( ) .0004
1000000
MLE
Chinese = =
.
Xác suất điều kiện của một n-gram tổng quát với bậc > 1 là:
1
1
1
1
1
(w )
Pr (w | w )
(w )
i
i
i n
MLE i i n
i
i n
c
c
−
− +
− +
−
− +
=
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:
Pr
MLE
(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âu trong
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 khô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à
1
5
Nguyễn Thạc Huy Khóa luận tốt nghiệp
một phần xác suất từ các sự kiện trong mô hình sẽ được dành cho nhữ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ài vẫ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
1l ≤
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 1
1 1 1
1
1
2
(w )Pr (w | w ) if c(w ) 0
Pr (w | w )
Pr (w ) otherwise.
i i i
i n LM i i n i n
i
BO i i n
i
BO i n
δ
α
− − −
− + − + − +
−
− +
− +
>
=
Trong đó
δ
là hệ số trừ hao dựa trên tần suất xuất hiện của
1
1
w
i
i n
−
− +
trong lịch sử và
α
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ủa cá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ức
unigram.
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:
1 1 1 1
1 1 2
Pr (w | w ) Pr (w | w ) (1 )Pr (w | w )
n i i n i
I i i n LM i i n I i i n
λ λ
− − − −
− + − + − +
= + −
Trong đó
λ
là trọng số quyết định bậc nào của LM có ảnh hưởng lớn nhất đến giá
trị đầu ra. Tổng trọng số
λ
được sử dụng cho tất cả các bậc n-gram bằng một. Có nhiều
cách để xác định giá trị cho các trọng số
λ
này, đối với phương pháp interpolation đơn
giản thì các giá trị
λ
này giảm theo số bậc n-gram. Tuy nhiên thường thì chúng sẽ được
tí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ữ
6
Nguyễn Thạc Huy Khóa luận tốt nghiệp
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 hai
phươ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 unigram
khô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ụng
cá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 cho
việ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 1 1
( w ) | w : (w w ) 0 |
i i i i
N c
+ − −
= >
o
Thuật ngữ
1
N
+
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ự
o
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ủa
mỗ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ủa
unigram trong thuật toán KN được tính là:
1
1 '
'
( w )
Pr (w )
( w )
i
KN i
i
i
N
N
+
+
=
∑
o
o
tức là bằng số lượng tiền tố của từ w
i
chia cho tổng số tiền tố của tất cả các unigram trong
ngữ liệu.
7
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Đối với các bậc cao hơn, xác suất này được tính như sau:
1
1 2
2
'
1 ' 2
'
( w )
Pr (w | w )
( w )
i
i
i n
KN i i n
i
i n
i
N
N
−
+ − +
− +
+ − +
=
∑
o
o
trong đó tử số:
{ }
1 2 1 1 2
( w ) | w : (w w ) 0 |
i i
i n i n i n i n
N c
+ − + − + − + − +
= >
o
và mẫu số là tổng số lượng tiền tố của tất cả các n-gram có cùng chiều dài
2
w
i
i n− +
. Mô hình
đầy đủ của thuật toán KN được nội suy và có dạng như sau:
{ }
1
1 1
1 1 1 2
' '
' 1 ' 1
' '
ax (w ) ,0
Pr(w | w ) (w )Pr (w )
(w ) (w )
i
i n
i i i
i i n i n KN i n
i i
i n i n
i i
m c D
D
N
c c
− +
− −
− + + − + − +
− + − +
−
= +
∑ ∑
o
với:
{ }
1 1
1 1 1
(w ) | w : (w w ) 0 |
i i
i n i i n i
N c
− −
+ − + − +
= >
o
là số lượng hậu tố (khác nhau) xuất hiện sau từ
1
1
w
i
i n
−
− +
; và D là tham số trừ hao.
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ác giá 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à:
1 1 1
1 1
1 1 2
'
' 1
'
(w ) ( (w ))
Pr (w | w ) (w )Pr (w |w )
(w )
i i
i i i
i n i n
MKN i i n i n MKN i i n
i
i n
i
c D c
c
γ
− − −
− + − +
− + − + − +
− +
−
= +
∑
trong đó:
8
Nguyễn Thạc Huy Khóa luận tốt nghiệp
1
2
3
0 if c 0
if c 1
( )
if c 2
if c 3
D
D c
D
D
+
=
=
=
=
≥
và:
1
1 2
2
1
1
3
2
2
4
3
3
2
1 2
2 3
3 4
n
n n
n
D
n
n
D
n
n
D
n
γ
γ
γ
γ
+
=
+
= −
= −
= −
với n
i
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
'
' 1
'
(w )
(w )
(w )
i
i i i n
i
i
i n
i
i n
i
D N
c
γ
−
− +
∈
−
− +
− +
=
∑
∑
o
trong đó N
2
và N
3+
tương ứng đại diện cho số sự kiện có kết quả đếm là hai và ba hoặc
nhiều hơn ba.
1.2.2.3 Stupid Backoff
Thuật toán Kneser-Ney và Kneser-ney cải tiến ở trên tuy hiệu quả trong thực tế
nhưng việc tính toán lại khá phức tạp, khối lượng tính toán sẽ trở nên rất lớn khi dữ liệu
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:
1
1
1
1
1
1
2
(w )
if c(w )>0
(w | w )
(w )
(w ) otherwise
i
i
i n
i n
i
i
i i n
i n
i
i n
c
S
c
S
α
− +
− +
−
−
− +
− +
− +
=
9
Nguyễn Thạc Huy Khóa luận tốt nghiệp
trong đó
α
là một hằng số có giá trị bằng 0.4. Quá trình đệ quy kết thúc ngay khi đạt đến
mức unigram:
w
(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ằng
cá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 cho
kế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à:
2
( ) log
x X
H x p p
∈
= −
∑
Ví 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
0.5p =
trong cả hai trường hợp. Nhưng khi tung một hột xúc xắc 6 mặt, khoảng giá trị có
thể của kết quả rộng hơn, và các xác suất là
1
6
p =
. Vì hành động tung xúc xắc có độ đo
không chắc chắn lớn hơn, nên entropy của nó cũng cao hơn hành động tung đồng xu.
10
Nguyễn Thạc Huy Khóa luận tốt nghiệp
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à:
2
( , ) log
x X
H p q p q
∈
= −
∑
Định lý Shannon-McMillan-Breiman [3] chỉ ra rằng đối với cả entropy và entropy
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ừ:
1
2 2
1 1
( , ) log ( ) log ( )
n
x
H p q q x q x
n n
= − = −
∑
Perplexity được định nghĩa là
( , )
2
H p q
PP =
. Do entropy chéo là cận trên của entropy,
( , ) ( )H p q H p≥
, chúng ta sử dụng entropy chéo trong Perplexity để không bao giờ đánh giá
thấp entropy thực sự của mô hình. Perplexity của một mô hình được đánh giá trên tập kiểm
tra. Trong thực tế, Perplexity là thước đo đầu tiên để đánh giá một mô hình ngôn ngữ, và có
thể được coi là hàm của cả cả ngôn ngữ và mô hình. Trên phương diện là hàm của mô hình,
nó đánh giá một mô hình mô phỏng ngôn ngữ chính xác đến mức độ nào. Còn trên phương
diện là hàm của ngôn ngữ, nó đo tính phức tạp của ngôn ngữ.
1.3.2 MSE
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ý do nà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 LM khá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ử dụ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.
2
1
( ' )
1
n
i i
i
MSE X X
n
= −
−
∑
11
Nguyễn Thạc Huy Khóa luận tốt nghiệp
trong đó X là xác suất sự kiện i trong lossless LM và X’ là xác suất của cùng sự kiện đó
trong lossy LM.
12
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Chương 2
Các cấu trúc dữ liệu dựa trên
Bloom Filter
Từ khi ra đời đến nay, việc mô hình ngôn ngữ đã có nhiều phát triển đáng kể cùng
với các thuật toán làm mịn ngày càng tốt hơn [5]. Thế nhưng cũng có không ít thách thức
mà 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ủa Google
là quá lớn (24GB khi đã nén), không thể chứa vừa trong bộ nhớ RAM thông thườ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ính trong 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én video. 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ạo thà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ì
13
Nguyễn Thạc Huy Khóa luận tốt nghiệp
khô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ưới
của thuyết Entropy nhưng lại có tỉ lệ lỗi khá thấp và có thể xác định được. Bloom Filter
nguyê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ích hợ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ương lai;
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án quá
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 được hiệ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ào
hiệ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ậm chí 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 phương án
2
14
Nguyễn Thạc Huy Khóa luận tốt nghiệp
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ạng
mớ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ụng
trong 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ư Skip List
[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ủa
Bloom 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ày trong
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 sau củ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á trị} –
15
Nguyễn Thạc Huy Khóa luận tốt nghiệp
Logarithmic Frequency Bloom Filter (hay Bloom Filter tần số log) [35]; và một dạ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àm bă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ày trì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
: U 0,1 0,1
b
h
× →
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à
{ }
w
0,1U =
. Đạ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 hai phầ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 k
i
đượ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,..., 1m −
(được gọi là bảng băm), ô đó chứa giá trị a
i
. Đặc tính đáng
16
Cây Hàm băm
DFA2C4ED
Cây táo Hàm băm
BE34C87A
Cây cam Hàm băm
7CD4ADE
INPUT
OUTPUT
Nguyễn Thạc Huy Khóa luận tốt nghiệp
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
.
17
4
( )
b
h k
a
4
… …
2
( )
b
h k
a
2
… …
1 3
( ) ( )
b b
h k h k=
???
… …
… …
S
U
{ }
w
4 1
,k a
{ }
w
1 2
,k a
{ }
w
2 4
,k a
{ }
w
3 3
,k a