ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CNTT & TT
TRẦN TIẾN THÀNH
THÁI NGUYÊN 2015
SỬ DỤNG MÔ HÌNH NGÔN NGỮ BLOOM FILTER TRONG CẢI TIẾN DỊCH MÁY THỐNG KÊ
3
LỜI CAM ĐOAN
Em - Trần Tiến Thành, học viên lớp Cao học K12E Trường Đại học
Công nghệ thông tin và Truyền thông Thái Nguyên - cam kết Luận văn thạc
sỹ khoa học máy tính: “Sử dụng mô hình ngôn ngữ Bloom Filter trong cải
tiến dịch máy thống kê” là công trình nghiên cứu của bản thân em dưới sự
hướng dẫn của thầy giáo TS. Nguyễn Văn Vinh, Bộ môn Khoa học máy tính,
Khoa Công nghệ thông tin – Trường Đại học Công nghệ - Đại học Quốc gia
Hà Nội.
Các kết quả trong luận văn tốt nghiệp là trung thực, không sao chép
toàn văn của bất kỳ công trình nào khác.
Thái Nguyên, ngày 05 tháng 10 năm 2015
TÁC GIẢ
Trần Tiến Thành
4
LỜI CẢM ƠN
Em xin bày tỏ lòng biết ơn sâu sắc tới thầy giáo, TS. Nguyễn Văn
Vinh, Bộ môn Khoa học máy tinh, Khoa Công nghệ thông tin - Trường Đại
học Công nghệ - Đại học Quốc gia Hà Nội đã khuyến khích và tận tình hướng
dẫn em trong suốt quá trình thực hiện luận văn. Em cũng xin cảm ơn anh Trần
Hồng Việt, nghiên cứu sinh Trường Đại học Công nghệ, giảng viên Trường
Đại học Kinh tế kĩ thuật công nghiệp đã hết lòng giúp đỡ em trong quá trình
thực hiện đề tài. Nhờ sự quan tâm chỉ bảo và những ý kiến đóng góp quý báu
của thầy và của anh em mới có thể hoàn thành luận văn này.
Em xin chân thành cảm ơn tập thể các thầy, cô giáo Trường Đại học
Công nghệ thông tin và Truyền thông Thái Nguyên đã tận tình giảng dạy
truyền đạt cho em những kiến thức, kinh nghiệm quý báu trong suốt những
năm học vừa qua.
Em cũng xin cảm ơn Sở Giáo dục và Đào tạo Phú Thọ, Trường THPT
Minh Đài đã tạo điều kiện về kinh phí và thời gian để em có thể học tập và
hoàn thành luận văn.
Cuối cùng em xin chân thành cảm ơn gia đình, người thân đã hết lòng
giúp đỡ, hỗ trợ về vật chất lẫn tinh thần giúp em yên tâm học tập và nghiên
cứu trong suốt quá trình học tập và thực hiện luận văn.
Trong khoảng thời gian có hạn, cũng như kiến thức còn nhiều hạn chế
luận văn không tránh khỏi những sai sót về nội dung cũng như hình thức.
Kính mong nhận được sự góp ý của quý thầy cô, bạn bè và đồng nghiệp.
Thái Nguyên, ngày 05 tháng 10 năm 2015
TÁC GIẢ
Trần Tiến Thành
5
DANH SÁCH CÁC TỪ VIẾT TẮT
Viết tắt Đầy đủ
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ê
6
DANH MỤC CÁC HÌNH VẼ
Hình Tên hình Trang
Hình 1 Kiến trúc của một hệ thống SMT 14
Hình 2 Minh họa dịch máy thống kê dựa vào cụm 15
Hình 3 35 Ví dụ về hàm băm. Các xâu ký tự được chuyển thành chữ ký đại diện.
Hình 4 36
Cặp khóa ki và giá trị ai 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ử k1 và k3.
Hình 5 Huấn luyện Bloom Filter 37
Hình 6 Truy vấn Bloom Filter 38
Hình 7 Lỗi một phía trong Bloom Filter 39
7
MỤC LỤC
MỞ ĐẦU .......................................................................................................... 9
1. Đặt vấn đề .................................................................................................... 9
2. Đối tượng và phạm vi nghiên cứu ............................................................ 10
3. Nhiệm vụ nghiên cứu ................................................................................ 10
4. Những nội dung nghiên cứu chính .......................................................... 10
NỘI DUNG ..................................................................................................... 11
CHƯƠNG I .................................................................................................... 11
TỔNG QUAN VỀ DỊCH MÁY THỐNG KÊ DỰA VÀO CỤM TỪ ............. 11
VÀ MÔ HÌNH NGÔN NGỮ ........................................................................... 11
1.1 Dịch máy thống kê dựa trên cụm từ ...................................................... 11
1.1.1 Dịch máy và dịch máy thống kê ............................................................. 11
1.1.2 Dịch máy thống kê dựa trên cụm ......................................................... 15
1.2.1 N-gram ................................................................................................... 17
1.2.2 Mô hình ngôn ngữ ................................................................................ 19
1.2.3 Huấn luyện mô hình ngôn ngữ ............................................................ 21
1.2.3.1 Ước lượng cực đại hóa khả năng (Maximium Likelihood Estimation -
MLE) ................................................................................................................ 21
1.2.3.2 Các phương pháp làm mịn .................................................................. 22
1.2.3.2.1 Kneser-Ney ...................................................................... 24 1.2.3.2.2 Kneser-Ney cải tiến (Modified Kneser-Ney - MKN) ...... 25 1.2.3.2.3 Stupid Backoff ................................................................. 26 1.3 Đánh giá mô hình ngôn ngữ ................................................................... 27
1.3.1 Entropy – Độ đo thông tin .................................................................... 27
1.3.2 Độ hỗn loạn thông tin (Perplexity) ...................................................... 29
1.3.3 Tỉ lệ lỗi (Error rate) ............................................................................... 30
1.4 Đánh giá chất lượng dịch tự động dựa trên điểm BLEU .................... 31
CHƯƠNG 2 .................................................................................................... 32
8
MÔ HÌNH NGÔN NGỮ BLOOM FILTER .................................................... 32
2.1 Các cấu trúc dữ liệu xác suất (PDS) ...................................................... 33
2.2 Hàm băm (Hash function) ...................................................................... 35
2.3 Bloom Filter cơ bản ................................................................................. 37
2.4 Mô hình ngôn ngữ Bloom Filter ............................................................ 43
2.4.1 Bloom Filter tần số log (Log-frequency Bloom Filter) .......................... 43
2.4.2 Bộ lọc dựa vào chuỗi con (sub-sequence filtering) ............................... 45
CHƯƠNG 3 .................................................................................................... 47
ỨNG DỤNG BLOOM FILTER CHO HỆ DỊCH MÁY THỐNG KÊ DỰA
VÀO CỤM TỪ ................................................................................................ 47
3.1 Hệ dịch máy thống kê mã nguồn mở Moses ......................................... 47
3.2 Tích hợp Mô hình ngôn ngữ Bloom Filter vào hệ thống Moses ......... 48
3.2.1 Xây dựng LM với RandLM và SRILM ................................................ 48
3.2.1.1 Ngữ liệu ............................................................................... 49 3.2.1.2 Thuật toán làm mịn ............................................................. 53 3.2.1.3. Xây dựng LM với SRILM và RandLM .............................. 53 3.3 Thử nghiệm và đánh giá ......................................................................... 65
KẾT LUẬN .................................................................................................... 78
TÀI LIỆU THAM KHẢO ............................................................................ 79
9
MỞ ĐẦU
1. Đặt vấn đề
Mô hình ngôn ngữ (Language Model - LM) là một phần không thể
thiếu trong lĩnh vực xử lý ngôn ngữ tự nhiên. Mô hình ngôn ngữ được sử
dụng ở các lĩnh vực trong xử lý ngôn ngữ tự nhiên như: nhận dạng tiếng nói,
kiểm lỗi chính tả, phân đoạn từ hay dịch máy thống kê… Để ứng dụng tốt mô
hình ngôn ngữ phải lớn, cũng chính vì vậy mà việc tìm kiếm không gian lưu
trữ là vô cùng quan trọng trong mô hình ngôn ngữ. Chính vì thế, luận văn này
tôi lựa chọn và thực hiện đề tài: “Sử dụng mô hình ngôn ngữ Bloom Filter
trong cải tiến dịch máy thống kê”.
Trong luận vă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
kiểu cấu trúc dữ liệu dựa trên Bloom Filter là 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 [2].
10
2. Đối tượng và phạm vi nghiên cứu
- Luận văn này chúng tôi nghiên cứu về n-gram và cách ước lượng, tính toán
biễu diễn mô hình ngôn ngữ.
- Thực hiện thử nghiệm với dữ liệu tiếng Việt.
3. Nhiệm vụ nghiên cứu
- Thông qua luận văn, 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ữ.
- Luận văn 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.
- Thực hiện thử nghiệm xây dựng mô hình ngôn ngữ trên một ngữ liệu tiếng
Việt và một ngữ liệu tiếng Anh..
- Ngoài ra, luận văn còn 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 mã nguồn mở Moses sử dụng các
mô hình ngôn ngữ xây dựng ở chương 3.
4. Những nội dung nghiên cứu chính
Luận văn được trình bày thành 3 phần:
MỞ ĐẦU
NỘI DUNG
Chương 1 - Tổng quan về dịch máy thống kê dựa vào cụm từ và mô
hình ngôn ngữ
Chương 2 - Mô hình ngôn ngữ Bloom Filter
Chương 3 - Ứng dụng Bloom Filter cho hệ dịch máy thống kê dựa vào
cụm từ
KẾT LUẬN
11
NỘI DUNG
CHƯƠNG I
TỔNG QUAN VỀ DỊCH MÁY THỐNG KÊ DỰA VÀO CỤM TỪ
VÀ MÔ HÌNH NGÔN NGỮ
1.1 Dịch máy thống kê dựa trên cụm từ
1.1.1 Dịch máy và dịch máy thống kê
Dịch máy (Machine Translation - MT) xuất hiện từ thập kỷ 50 của thế
kỷ trước và đặc biệt được phát triển mạnh mẽ từ thập kỷ 80 cho đến ngày nay.
Trên thế giới, hiện tại có rất nhiều hệ dịch máy thương mại nổi tiếng như
Systrans, Kant, … hay những hệ dịch máy mở tiêu biểu là hệ dịch của
Google, hỗ trợ hàng chục cặp ngôn ngữ phổ biến như Anh-Pháp, Anh-Trung,
Anh-Nhật, Hoa-Nhật, … Các cách tiếp cận MT chia làm bốn lớp chính là dịch
trực tiếp (direct), dịch dựa trên luật chuyển đổi (transfer), dịch liên ngữ
(interlingua) và dịch dựa vào thống kê (statistical MT). Trước đây, phương
pháp dịch dựa trên luật chuyển đổi và dịch liên ngữ chủ yếu dựa vào cú pháp
có thời gian phát triển khá dài và hiện vẫn còn được sử dụng phổ biến trong
nhiều hệ dịch thương mại. Những hệ dịch máy loại này này đã đạt được kết
quả khá tốt với những cặp ngôn ngữ tương đồng nhau về cú pháp như Anh-
Pháp, Anh-Tây Ban Nha, … nhưng còn gặp nhiều hạn chế đối với các cặp
ngôn ngữ có cú pháp rất khác nhau như Anh-Trung, Anh-Nhật, …
Dịch Anh-Việt, Việt-Anh ở nước ta cũng vấp phải những khó khăn
tương tự do sự khác biệt về mặt cấu trúc ngữ pháp và tính nhập nhằng của
ngữ nghĩa. Hệ thống dịch Anh-Việt dựa trên luật chuyển đổi được thương mại
hóa đầu tiên ở Việt Nam là EVTran. Nhiều nghiên cứu với yêu cầu tăng chất
lượng dịch hiện nay vẫn đang được thực hiện và có thể thích nghi với đặc
điểm của các cặp ngôn ngữ khác nhau.
12
Dịch máy thống kê (SMT) là một phương pháp dịch máy, trong đó các
bản dịch được tạo ra trên cơ sở các mô hình thống kê có các tham số được bắt
nguồn từ việc phân tích các cặp câu song ngữ. Các phương pháp tiếp cận
thống kê tương phản với các phương pháp tiếp cận dựa trên luật trong dịch
máy cũng như với dịch máy dựa trên ví dụ.
Những ý tưởng đầu tiên của dịch máy thống kê đã được giới thiệu
bởi Warren Weaver vào năm 1949 [1], bao gồm cả những ý tưởng của việc áp
dụng lý thuyết thông tin của Claude Shannon. Dịch máy thống kê được tái
giới thiệu vào năm 1991 bởi các nhà nghiên cứu làm việc tại Trung tâm
nghiên cứu Thomas J. Watson của IBM[2] và đã góp phần đáng kể trong sự
hồi sinh việc quan tâm đến dịch máy trong những năm gần đây. Ngày nay nó
là phương pháp dịch máy được nghiên cứu nhiều nhất.
Dịch máy bằng phương pháp thống kê (Statistical Machine
Translation) đã chứng tỏ là một hướng tiếp cận đầy đầy tiềm năng bởi những
ưu điểm vượt trội so với các phương pháp dịch máy dựa trên cú pháp truyền
thống qua nhiều thử nghiệm về dịch máy. Thay bằng việc xây dựng các từ
điển, các luật chuyển đổi bằng tay, hệ dịch này tự động xây dựng các từ điển,
các quy luật dựa trên kết quả thống kê có được từ dữ liệu. Vì thế, dịch máy
dựa vào thống kê có tính khả chuyển cao, có khả năng áp dụng được cho cặp
ngôn ngữ bất kỳ. Hệ thống SMT được đề xuất lần đầu tiên bởi Brown năm
1990 sử dụng mô hình kênh nhiễu và đã phát triển áp đảo trong ngành MT
nhiều năm trở lại đây. Thêm vào đó dịch máy thống kê có những ưu điểm sau:
Dịch máy (MT) là vấn đề quyết định: Cho trước những từ trong ngôn
ngữ nguồn, chúng ta phải quyết định chọn những từ trong ngôn ngữ đích. Vì
vậy, nó tạo cho chúng ta một cảm giác là có thể giải quyết nó bằng định lý
quyết định thống kê. Điếu đó dẫn đến cách tiếp cận thống kê được đề xuất.
13
Mối quan hệ giữa đối tượng ngôn ngữ như từ, cụm từ và cấu trúc ngữ
pháp thường yếu và mơ hồ. Để mô hình hóa những phụ thuộc này, chúng ta
cần một công thức hóa như đưa ra phân phối xác suất mà nó có thể giải quyết
với những vấn đề phụ thuộc lẫn nhau.
Để thực hiện MT, chúng ta nhất thiết phải kết hợp nhiều nguồn trí thức.
Trong dịch thống kê, chúng ta dựa vào toán học để thực hiện kết hợp tối ưu
của các nguồn trí thức.
Trong dịch máy thống kê (SMT), trí thức dịch được học một cách tự
động từ dữ liệu huấn luyện. Với kết quả như vậy, việc phát triển một hệ dịch
dựa vào thống kê sẽ rất nhanh so với hệ dịch dựa vào luật.
SMT khá phù hợp với ứng dụng nhúng mà ở đây MT là một phần của
ứng dụng lớn hơn. Ví dụ, trong dịch các bài nói chuyện, máy nhận dạng tiếng
nói sẽ được thêm vào. SMT xem như rất phù hợp với cách tiếp cận này bởi vì
nó tận dụng được sức mạnh của ngôn ngữ tự nhiện.
Việc đưa ra khái niệm “chính xác” của mối quan hệ ngữ pháp, ngữ
nghĩa, văn phong là rất khó khăn nếu không nói là không thể. Vì vậy, việc
hình thức hóa vấn đề này càng chính xác càng tốt không thể dựa vào sự giằng
buộc bởi các luật mô tả chúng. Thay vào đó, trong cách tiếp cận thống kê, các
giả định mô hình được kiểm định bằng thực nghiệm dựa vào dữ liệu huấn
luyện.
SMT đã cho chất lượng dịch khá tốt. Hệ thống CANDIDE của IBM
được coi là một trong những hệ dịch tốt nhất hiện nay trên thế giới. Chất
lượng đạt trên 80%.
Với phương pháp dịch trực tiếp, từng từ được dịch từ ngôn ngữ nguồn
sang ngôn ngữ đích. Trong dịch dựa trên luật chuyển đổi, đầu tiên chúng ta
cần phải phân tích cú pháp của câu vào, rồi áp dụng các luật chuyển đổi để
biến đổi cấu trúc câu này ở ngôn ngữ nguồn sang cấu trúc của ngôn ngữ đích;
14
cuối cùng ta mới dịch ra câu hoàn chỉnh. Đối với dịch liên ngữ, câu vào được
phân tích thành một dạng biểu diễn trừu tượng hóa về ngữ nghĩa, được gọi là
“interlingua”, sau đó ta tìm cách xây dựng câu đích phù hợp nhất với
“interlingua” này. Dịch máy thống kê có cách tiếp cận hoàn toàn khác, khả
năng dịch có được là dựa trên các mô hình thống kê được huấn luyện từ các
ngữ liệu song ngữ. Kiến trúc chung của một hệ thống SMT được thể hiện
trong hình 1.
Mô hình của Brown (hay còn gọi là mô hình IBM) [7] biểu diễn quá
trình dịch bằng một mô hình kênh nhiễu (noisy channel model) bao gồm ba
thành phần: một mô hình dịch (translation model), có nhiệm vụ liên hệ các từ,
cụm từ tương ứng của các ngôn ngữ khác nhau; một mô hình ngôn ngữ (LM),
đại diện cho ngôn ngữ đích; một bộ giải mã (decoder), kết hợp mô hình dịch
và mô hình ngôn ngữ để thực hiện nhiệm vụ dịch.
Ngôn ngữ nguồn ( )
Tiền xử lý
Mô hình ngôn ngữ Bộ giải mã
Mô hình dịch
Hậu xử lý
Ngôn ngữ đích ( )
Hình 1: Kiến trúc của một hệ thống SMT
15
1.1.2 Dịch máy thống kê dựa trên cụm
He is a good doctor
Anh ấy là một bác sỹ giỏi
Hình 2: Minh họa dịch máy thống kê dựa vào cụm
Với dịch dựa trên cụm, một chuỗi các từ liên tiếp (cụm) được dịch sang
ngôn ngữ đích, với độ dài cụm ngôn ngữ nguồn và đích có thể không giống
nhau. Hình 2 minh họa phương pháp dịch cụm: câu vào được chia thành một
số cụm; từng cụm một được dịch sang ngôn ngữ đích và sau đó các cụm được
đảo trật tự theo một cách nào đó rồi ghép với nhau. Kết quả ta thu được câu
dịch trong ngôn ngữ đích.
Nếu gọi ngôn ngữ nguồn là f và ngôn ngữ đích là e, ta sẽ cố gắng tối
đa hóa xác suất với mong muốn có được bản dịch tốt nhất. Trong
thực tế tồn tại hơn một bản dịch đúng cho cùng một câu, mục đích của ta là
tìm ra câu ngôn ngữ e phù hợp nhất khi cho trước câu ngôn ngữ nguồn f. Dịch
dựa vào cụm áp dụng mô hình kênh nhiễu, sử dụng công thức Bayes ta có:
Vì Pr(f) là không thay đổi đối với e, bài toán trở thành việc tìm câu e
nhằm cực đại hoá giá trị , có giá trị cực đại khi
và cực đại. Việc xây dựng mô hình ngôn ngữ cần sử dụng một
ngữ liệu đơn ngữ lớn, trong khi đó mô hình dịch lại cần đến ngữ liệu song ngữ
16
tốt. Bộ giải mã được sử dụng để tìm ra câu dịch tốt nhất khi đã biết được
I . Giả
.
Để có được câu dịch, câu nguồn được chia thành I cụm liên tiếp f1
sử rằng phân phối xác suất là như nhau đối với các cụm này. Mỗi cụm fi trong
I được dịch thành cụm tương ứng trong ngôn ngữ đích ei . Các cụm trong
f1
ngôn ngữ đích có thể đảo ví trí cho nhau. Quá trình dịch cụm được mô hình
hóa bởi phân phối xác suất .
Việc đảo vị trí (reodering) của các cụm đầu ra được mô hình bởi phân
phối xác suất d(ai – bi-1), trong đó ai đại diện cho vị trí bắt đầu của cụm trong
câu nguồn được dịch thành cụm thứ i trong câu đích, và bi-1 là ký hiệu chỉ vị
trí kết thúc của cụm trong câu nguồn được dịch thành cụm (i-1) trong câu
đích. Ở đây chúng ta sử dụng mô hình đảo cụm như sau:
Trong đó α là giá trị tham số thích hợp.
Muốn xác định độ dài phù hợp của câu dịch, ta đưa thêm thừa số ω khi
sinh ra câu trong ngôn ngữ đích. Qua quá trình tìm kiếm câu dịch tối ưu thừa
số này sẽ được tối ưu. Độ dài của câu trong ngôn ngữ đích càng dài khi thừa
số này càng lớn hơn 1.
Như vậy, câu dịch tốt nhất được sinh ra từ câu nguồn theo mô
hình trong là:
Với được phân tích:
17
1.2 Tổng quan về mô hình ngôn ngữ
Mô hình ngôn ngữ là một phân bố xác suất trên các tập văn bản. Nói
đơn giản, mô hình ngôn ngữ có thể cho biết xác suất một câu (hoặc cụm từ)
thuộc một ngôn ngữ là bao nhiêu.
Ví dụ: Khi áp dụng mô hình ngôn ngữ cho tiếng Việt:
P[“hôm qua là ngày nghỉ lễ”] = 0.001
P[“nghỉ lễ là qua hôm ngày”] = 0
Mô hình ngôn ngữ được áp dụng trong rất nhiều lĩnh vực của xử lý
ngôn ngữ tự nhiên như: kiểm lỗi chính tả, dịch máy hay phân đoạn từ... Chính
vì vậy, nghiên cứu mô hình ngôn ngữ chính là tiền đề để nghiên cứu các lĩnh
vực tiếp theo.
Mô hình ngôn ngữ có nhiều hướng tiếp cận, nhưng chủ yếu được xây
dựng theo mô hình Ngram.
1.2.1 N-gram
Phương pháp đơn giản nhất để ngắt một chuỗi kí tự thành các thành
phần nhỏ hơn gọi là các chuỗi con. Mỗi chuỗi con n-từ như vậy được gọi là n-
gram.
Với n = 1 ta gọi là unigram hay còn gọi là từ;
Với n = 2 ta gọi là bigram;
Với n = 3 ta gọi là trigram.
Nếu một chuỗi kí tự có rất nhiều n-gram hợp lệ thì ta có thể kết luận
chuỗi kí tự đó là chuỗi hợp lệ. Kí hiệu b(y/x) là xác suất mà từ y theo sau từ x.
Chúng ta có thể ước lượng xác suất này dựa vào Corpus.
Xác suất bigram điều kiện là thương số của phép chia số lần xuất hiện
cụm “xy” cho số lần xuất hiện từ “x” trong Corpus, được kí hiệu là p(x|y).
Ví dụ về xác suất bigram điều kiện:
18
P(qua | hôm,): ta có thể hiểu là xác suất để từ “qua” xuất hiện sau từ
“hôm”. Về giá trị này, chúng ta có thể xác định trực tiếp và tự động từ corpus
tiếng Anh. Giả sử trong corpus mà ta test, “hôm” xuất hiện 468 lần, còn “hôm
qua” xuất hiện 63 lần, thì P(qua | hôm) = 63/468 = 0,13.
Tương tự, ta có định nghĩa tương tự đối với xác suất trigram điều kiện.
Ví dụ về xác suất trigram điều kiện:
P(là | hôm qua): ta có thể hiểu là xác suất để từ “là” xuất hiện sau dãy
hai từ “ hôm qua”. Giả sử trong corpus mà ta test, “hôm qua là” xuất hiện 9
lần, còn “hôm qua” xuất hiện là 28 lần, như vậy P(là | hôm qua) = 9/28 =
0,32.
Ta nhận thấy rằng 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ì hai 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à 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 ướ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 đó.
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ệt 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
19
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 đó:
Pr(w1, w2, ..., wi) ≈ Pr(wi|wi-2, wi-1)
Hình 1: Mô hình Markov bậc 2
Một cách tổng quát, gọi là một n-gram chiều dài n kết thúc bằng
từ . Khi đó để ước lượng xác xuất n-gram cho một chuỗi chiều dài N ta sử
dụng công thức:
1.2.2 Mô hình ngôn ngữ
Trước hết chúng ta xem xét về trật tự từ. Giả sử trong cách dịch của
chúng ta, có một hộp chứa các từ và chúng ta muồn lấy chúng ra theo một thứ
tự hợp lý. Nhưng giả sử rằng chúng ta có vài hộp khác nhau, tương ứng là tập
các nghĩa của cách dịch các từ ở hộp trên. Chúng ta có thể tìm thứ tự từ tốt
nhất của mỗi hộp nhưng làm thế nào để chúng ta chọn câu của ngôn ngữ đích
hợp lý nhất. Câu trả lời là chúng ta sử dụng mô hình n-gram, gán xác suất cho
bất kì một dãy các từ có thể hiểu được. Sau đó chúng ta chọn ra dãy có thể
nhất (xác suất cao nhất).
Ví dụ: dãy các từ “hôm qua là ngày nghỉ lễ” và “tôi vẫn phải đi làm” là
có thể hiểu được (có thể tồn tại) ngược lại dãy “nghỉ lễ là qua hôm ngày” và
“đi tôi vẫn làm phải” là không thể hiểu được (không tồn tại). Về ngôn ngữ
học, theo truyền thống chúng ta chia các dãy các từ này thành hai loại: đúng
ngữ pháp và sai ngữ pháp nhưng trong dịch máy chúng ta luôn luôn phải chọn
giữa hai câu đúng ngữ pháp.
Ví dụ: Cách dịch nào là tốt hơn trong (A) và (B)
(A) Hôm qua là ngày nghỉ lễ nhưng tôi vẫn phải đi làm.
(B) Ngày hôm qua là nghỉ lễ nhưng tôi vẫn phải đi làm.
20
Mặt khác, trong nhận dạng tiếng nói người ta sử dụng khá nhiều xác
suất theo kinh nghiệm gán cho dãy các từ. Ví dụ: “nghỉ lễ là” đúng hơn là “là
nghỉ lễ”.
Phương pháp sử dụng ở đây là dựa vào bigram hoặc trigram để chuyển
chúng thành xác suất để so sánh.
Để gán xác suất cho toàn bộ một câu, ta nhân xác suất điều kiện n-gram
mà nó bao gồm. Vì vậy, một câu tốt (càng đúng ngữ pháp) là câu mà có nhiều
dãy n-gram. Ví dụ trong bigram ta có:
P(Hôm qua là ngày nghỉ lễ) =
P(Hôm | đầu câu) *
P(qua | Hôm) *
P(là | qua) *
P(ngày | là) *
P(nghỉ | ngày) *
P(cuổi câu | nghỉ lễ)
Dễ dàng thấy rằng điều này có ích như thế nào đối với trật tự từ. Dựa
vào cách tính xác suất như trên ta thấy rằng câu “Hôm qua là ngày nghỉ lễ” tốt
hơn “Nghỉ lễ ngày là qua hôm”.
Như vậy, ta có thể coi toàn bộ các chủ đề về gán xác suất cho một câu
được gọi là mô hình ngôn ngữ.
Mô hình ngôn ngữ không chỉ có ích cho thứ tự các từ mà còn có ích
cho việc chọn nghĩa giữa các cách dịch khác nhau.
Ví dụ: Cho 2 câu (A) và (B)
(A) Áo trắng em đến trường, cùng đàn chim ca rộn ràng.
(B) Em đến trường áo trắng, cùng đàn chim ca rộn ràng.
Quyết định này dịch từ tiếng Anh sang tiếng Việt, cụm từ “Áo trắng em
đến trường” dùng để chỉ nữ sinh còn “Em đến trường áo trắng” lại dùng để
21
chỉ trang phục. Nếu trong corpus của chúng ta, giả sử trigram “Áo trắng em
đến trường” xuất hiện 10 lần, trong khi “Em đến trường áo trắng” không xuất
hiện (hoặc khá nhỏ so với “Áo trắng em đến trường”) thì (A) là câu tốt hơn
(được chọn). Điều đó có nghĩa là ta có thể giả quyết vấn đề nhập nhằng ngữ
nghĩa chỉ dựa vào ngôn ngữ đích.
1.2.3 Huấn luyện mô hình ngôn ngữ
Khi huấn luyện (xây dựng) một mô hình ngôn ngữ ta cần chuẩn bị dữ
liệu là một ngữ liệu đơn ngữ (corpus) (kích thước dữ liệu huấn luyện lớn sẽ
cho mô hình ngôn ngữ tốt) 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
đều cần đến tần suất của các n-gram, vì vậy ta cần đếm tần suất xuất hiện của
các n-gram từ 1-gram cho đến số bậc mô hình đang huấn luyện.
1.2.3.1 Ước lượng cực đại hóa khả năng (Maximium Likelihood
Estimation - MLE)
Để xây dựng một mô hình ước lượng cực đại hóa khả năng với tần suất
tương đối của các n-gram trong ngữ liệu ta có thể sử dụng kết quả đếm các n-
gram. Với ước lượng cực đại hoá khả năng, 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.
Với là số lần xuất hiện của từ 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 Brown1, 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à
.
22
Xác suất điều kiện của một n-gram tổng quát với bậc >1 là:
Nghĩa là một từ nào đó có tần suất xuất hiện thường xuyê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. Với ngữ liệu Brown, cụm từ ”Chinese food” xuất hiện 120
lần, ta có:
PrMLE(food|Chinese) = 0.3
1.2.3.2 Các phương pháp làm mịn
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, tuy nhiên trong thực tế ta gặp phải vấn đề dữ liệu thưa (data
sparseness problem). Nghĩa là tập ngữ liệu dùng để xây dựng LM dù lớn 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.
Để hạn chế vấn đề này, người ta thường sử dụng các phương pháp ước lượng
xác suất thống kê phức tạp hơn thay cho MLE. Những 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 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 vào
kết quả đếm số lần xuất hiện của tất cả từ vựng trong ngữ liệu.
Backoff và interpolation là hai khái niệm quan trọng được sử dụng
trong quá trình làm mịn. 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, khi 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ừ
23
(n-2)-gram, ... 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:
Với là hệ số trừ hao dựa trên tần suất xuất hiện của trong lịch
sử, 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. Ví dụ như 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.
Interpolation là phương pháp 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:
Với là trọng số quyết định bậc 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ường chúng sẽ tính toán theo điều kiện ngữ cảnh cụ
thể, nghĩa 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 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
24
cả khi dữ liệu xác suất của n-gram cần tính đã khác 0; trong khi đó backoff 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 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[6] hay Stupid backoff của
Google[5].
1.2.3.2.1 Kneser-Ney
Kneser-Ney (KN) là thuật toán làm mịn công bố năm 1995 [6], được
phát triển bởi Reinhard Kneser và Hermann Ney. 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 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 hết chúng ta định nghĩa số lượng tiền tố của một từ như sau:
Thuật 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ủa mỗi từ được thay thế bằng số lượng từ (khác nhau)
đứng trước từ đó. Xác suất của unigram trong thuật toán KN được tính là:
25
Tức là bằng số lượng tiền tố của từ chia cho tổng số tiền tố của tất
cả các unigram trong ngữ liệu.
Với các bậc cao hơn, xác suất này được tính như sau:
Trong đó tử số:
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
. Mô hình đầy đủ của thuật toán KN được nội suy và có dạng như dài
sau:
Với:
Là số lượng hậu tố (khác nhau) xuất hiện sau từ ; và D là tham số
trừ hao.
1.2.3.2.2 Kneser-Ney cải tiến (Modified Kneser-Ney - MKN)
Thuật toán làm mịn Kneser-Ney cải tiến do Chen và Goodman nghiên
cứu, công bố năm 1999 [11], được phát triển từ 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à:
26
Với:
Và:
Vớ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 vậy:
Trong đó và 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.3.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.
Thay vì sử dụng thuật toán KN và MKN, Google sử dụng một thuật
toán làm mịn đơn giản hơ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:
27
Với 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ữ
Để xây dựng được một mô hình ngôn ngữ hiệu quả, chúng ta phải có
cách để đánh giá chúng. Dưới đây là một số phương pháp phổ biến để đánh
giá một mô hình ngôn ngữ:
- Entropy – Độ đo thông tin
- Perplexity – Độ hỗn loạn thông tin
- Error rate – Tỉ lệ lỗi
1.3.1 Entropy – Độ đo thông tin
Entropy là thước đo thông tin, có giá trị rất lớn trong xử lý ngôn ngữ.
Nó thể hiện mức độ thông tin trong ngữ pháp, thể hiện sự phù hợp của một
câu với ngôn ngữ, và dự đoán được từ tiếp theo trong cụm n-gram. Entropy
của một biến ngẫu nhiên X được tính theo công thức:
Xét các câu gồm hữu hạn m từ trong ngôn ngữ L.
Ta có công thức tính entropy như sau:
28
Từ công thức trên, ta có thể đưa ra công thức tính tỉ lệ entropy trên các
từ như sau:
Thực tế thì tỉ lệ entropy trên các từ thường được sử dụng vì giá trị của
nó không phụ thuộc vào độ dài các câu. Tuy nhiên, để tính được entropy của
một ngôn ngữ L theo công thức trên thì ta phải xét tới các câu dài vô hạn (tất
cả các câu có thể có trong ngôn ngữ L), đó là điều không thể. Do đó, ta có thể
tính xấp xỉ tỉ lệ entropy trên các từ theo công thức sau:
Định lý Shannon-McMillan-Breiman đã chỉ ra rằng nếu ngôn ngữ ổn
định (chứa các câu gồm các từ với cấu trúc thông dụng) thì công thức trên có
thể biến đổi thành:
Với công thức trên, ta có thể sử dụng công thức Bayes và xác suất của
các n-gram để tính :
Công thức trên đã được biến đổi qua nhiều bước với các xấp xỉ gần
đúng, do vậy để tăng tính chính xác khi sử dụng độ đo entropy thì câu kiểm
tra cần phải đủ dài và tổng quát (phân tán rộng) để tránh tập trung vào các xác
suất lớn (chỉ chứa các cụm thông dụng).
Các bước biến đổi gần đúng công thức trên khiến giá trị H(L) tình theo
công thức cuối cùng sẽ lớn hơn giá trị H(L) gốc. Do vậy, khi tính H(L) của
29
các mô hình ngôn ngữ khác nhau trên ngôn ngữ L, mô hình nào cho H(L) nhỏ
hơn thì mô hình ngôn ngữ đó thể hiện chính xác ngôn ngữ L hơn.
1.3.2 Độ hỗn loạn thông tin (Perplexity)
LM sau khi được huấn luyện 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à:
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 p=0.5 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à . 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.
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à:
30
Định lý Shannon-McMillan-Breiman [3] chỉ ra rằng đối với tất cả
entropy và entropy chéo chúng ta đều có thể bỏ đi 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ừ:
Perplexity được định nghĩa là . Do entropy chéo là cận trên
của entropy, , 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ả
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.3 Tỉ lệ lỗi (Error rate)
Người ta thường sử dụng độ đo entropy và perplexity để so sánh độ
chính xác của các mô hình ngôn ngữ khi xây dựng một mô hình ngôn ngữ tổng
quát. Trong các bài toán cụ thể, người ta sử dụng tỉ lệ lỗi để so sánh độ chính
xác của các mô hình ngôn ngữ.
Soát lỗi chính tả: xét tỉ lệ giữa số lỗi phát hiện sai hoặc không phát hiện
được trên tổng số lỗi có trong văn bản.
Phân đoạn từ: xét tỉ lệ giữa từ phân đoạn sai trên tổng số từ có trong văn
bản.
Bỏ dấu tự động: xét tỉ lệ giữa số từ bị bỏ dấu nhầm trên tổng số từ có
trong văn bản.
31
Tỉ lệ lỗi thấp chứng tỏ mô hình ngôn ngữ hiệu quả. Việc sử dụng tỉ lệ lỗi
để đánh giá đưa lại kết quả chính xác nhất khi muốn chọn lựa mô hình ngôn
ngữ phù hợp để giải quyết bài toán cụ thể. Tỉ lệ lỗi thường tỉ lệ thuận với giá trị
entropy nhưng đôi khi mức độ tăng/giảm của tỉ lệ lỗi và entropy không đều.
1.4 Đánh giá chất lượng dịch tự động dựa trên điểm BLEU
Muốn đánh giá chất lượng các hệ thống dịch có thể sử dụng phương
pháp thủ công bởi chuyên gia hoặc sử dụng phương pháp đánh giá tự động.
Quá trình đánh giá thủ công cho điểm cho các câu dịch dựa trên sự trôi chảy
và chính xác của câu dịch. Có thể khẳng định rằng đây là phương pháp đánh
giá có độ chính xác nhất. Tuy nhiên, công việc đánh giá thủ công này lại tiêu
tốn quá nhiều thời gian, đặc biệt khi cần so sánh nhiều mô hình ngôn ngữ,
nhiều hệ thống khác nhau. Công bằng mà nói, mỗi phương pháp đều có ưu
nhược điểm riêng. Mặc dù đánh giá tự động có thể không phản ánh được hết
mọi khía cạnh của chất lượng dịch, nhưng nó có thể nhanh chóng cho ta biết:
chất lượng của hệ dịch ở mức nào, có tăng hay không sau khi được cải tiến
hoặc thay đổi một vài tham số nào đó. Thực tế, hai phương pháp này được sử
dụng song song, và điểm BLEU là độ đo chất lượng hệ dịch phổ biến nhất
hiện nay, được đề xuất bởi Papineni năm 2002.
Đối chiếu kết quả dịch với tài liệu dịch tham khảo và tài liệu nguồn là
cách tính điểm của BLEU. Dù [9] chỉ ra rằng điểm BLEU thường không thực
sự tương quan với đánh giá thủ công bằng chuyên gia với các loại hệ thống
khác nhau, thế nhưng vẫn có thể khá chính xác để đánh giá trên cùng một hệ
thống, hoặc những hệ thống tương tự nhau. Vì thế, trong khóa luận này, tôi sử
dụng điểm BLEU làm thước đo chất lượng dịch và từ đó so sánh các loại mô
hình ngôn ngữ khác nhau.
32
CHƯƠNG 2
MÔ HÌNH NGÔN NGỮ BLOOM FILTER
Mô hình ngôn ngữ kể từ khi xuất hiện đến nay đã có những bước 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]. Tuy
nhiên cũng còn nhiều 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 ngữ
liệu lớn, tăng bậc mô hình n-gram và giảm độ 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), bộ nhớ RAM thông thường không thế chứa vừa. Điều này là động lực
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.
Bloom Fillter (BF) [4] là 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à, 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ữ tất cả
các n-gram, chúng ta chỉ lưu 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ặc dù 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 sau khi được giải mã vẫn
chứa đựng khá đầy đủ các thông tin hữu ích.
Để trả lời cho câu hỏi “Liệu phần tử x có thuộc tập S hay không?” mà
một cấu trúc dữ liệu xác suất Bloom Filter đã được xây dựng. Nếu câu trả lời
là có thì ta gọi đó là một HIT, còn ngược lại thì ta gọi là MISS. Khi đối tượng
được truy vấn không thuộc tập S ( ), nhưng lại HIT có hai loại lỗi có thể
xảy ra. Còn false negative thì trái ngược với false positive, tức là một đối
33
tượng bị kết luận là MISS trong khi thực tế thì hoàn toàn ngược lại. 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 đã đề 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.
2.1 Các cấu trúc dữ liệu xác suất (PDS)
Lưu trữ và xử lý dữ liệu là một bước quan trọng trong khâu thiết kế của
một chương trình. Cấu trúc dữ liệu sử dụng trong chương trình được đánh giá
và lựa chọn cẩn trọng có ý nghĩa rất quan trọng: tiết kiệm tài nguyên, tăng
đáng kể hiệu năng của chương trình, dễ dàng bảo trì hệ thống trong tương lai
nếu được lựa chọn đúng; 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.
Hiện nay tuỳ thuộc vào mục đích sử dụng khác nhau mà tồn tại nhiều
dạng cấu trúc dữ liệu khác nhau. Một vài cấu trúc dữ liệu chỉ là những kho
chứa dữ liệu thông thường, còn 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.
Thực tế nhiều trường hợp, khi tập ngữ liệu quá lớn đến mức hiện tại
không một siêu máy tính nào có khả năng quản lý được và cũng chưa 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
kinh ngạc khi họ công bố một ngữ liệu Ngram khổng lồ. Với khoảng 3 tỉ từ,
34
chiếm 24 GB bộ nhớ khi đã nén, tập ngữ liệu như vậy là quá lớn, thậm chí
ngay cả với hệ thống bộ nhớ của những siêu máy tính. Rõ ràng là ta có thể 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
hiển nhiên đây không phải là một phươ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 khổng lồ như vậy.
Có một cách tiếp cận khả thi hơn là thay vì tìm cách biểu diễn đầy đủ
một tập ngữ liệu lớn, không mất mát (lossless), ta chấp nhận 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 số 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) Sự toàn vẹn dữ liệu bị tổn hại gây ra bởi lượng dữ liệu đã mất có
thể được coi là nhỏ khi so sánh với không gian lưu trữ đáng kể ta tiết kiệm
được. Đồng thời thay vì 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.
Phương pháp 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 - PDS). Trong các PDS, dữ liệu được mã hóa và tối ưu dưới dạng bị
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.
Có thể định nghĩa một thuật toán ngẫu nhiên 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]. Khi mã
hóa vào một PDS, một phần dữ liệu sẽ bị mất. Tuy vậy thông tin sẽ được lưu
trữ sao cho dạng biểu diễn mất mát này của dữ liệu vẫn có hiệu quả tương
đồng với dạng biểu diễn đầy đủ (không mất mát) của nó.
35
Trong những năm gần đây có 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, có thể kể đến như Skip List, Sparse
Partition [8], Lossy Dictionary và một cấu trúc dữ liệu tuy đã xuất hiện từ khá
lâu nhưng hiện tại lại tiếp tục được nghiên cứu nhiều đó là Bloom Filter.
Bloom Filter có một số ưu điểm như tốc độ, khả năng tiết kiệm bộ nhớ
đáng kể, 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
luận vă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ị} – Logarithmic Frequency Bloom Filter (hay Bloom Filter
tần số log).
2.2 Hàm băm (Hash function)
Hàm băm là một thành phần rất quan trọng được sử dụng trong Bloom
Filter. Vì vậy trước khi đi sâu tìm hiểu cấu trúc dữ liệu BF, mục này trình bày
vài nét sơ lược về hàm băm.
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) được gọi là Hàm băm.
INPUT OUTPUT
DFA2C4ED Quả Hàm băm
BE34C87A Quả táo Hàm băm
7 CD4ADE Quả cam Hàm băm
Hình 3: 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 thuộc 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 = . Đại diện của phần tử đó trong miền
b được gọi là chữ ký hay dấu ấn của dữ liệu. Hàm h này phải ổn định, nghĩa là
36
khi cùng một dữ liệu đi qua hàm h nhiều lần thì luôn cho kết quả không đổi và nếu đầu ra của hai phần tử qua hàm h khác nhau thì hai phần tử đó là khác nhau.
Khóa ki được đưa vào hàm băm h(ki), 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 đá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.
S
w , a k 1 4
w 1 , a k 2
w 2 , k a 4
… …
w , a k 3 3
… …
???
… …
U
… …
Hình 4: Cặp khóa ki và giá trị ai 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ử k1 và k3.
Hàm băm tốt khi 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. Ta có thể tối thiểu hóa va chạm khi 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.
37
2.3 Bloom Filter cơ bản
Mô hình ngôn ngữ có nguồn gốc từ Bloom Filter (BF) cơ bản [4] được
xây dựng dựa trên các cấu trúc dữ liệu dựa trên Bloom Filter. BF, trước hết 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 cho phép tiết
kiệm đáng kể không gian lưu trữ, thời gian truy vấn gần như giữ nguyê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
h k1 x ( k )
m bits
h k2 ( x k )
h k3 ( x k )
khiển được.
x k
1 0 1 0 0 1 0 1 1 0 1
Hình 5: Huấn luyện Bloom Filter
Một BF đại diện cho một tập S = với n phần tử được lấy
ngẫu nhiên từ tập ban đầu U cỡ N. Bộ nhớ 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 sử 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 bit m tùy theo giá trị đầu vào . 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
38
bảng m được thiết lập giá trị bằng 1. Như vậy là với mỗi phần tử 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ồi thì
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 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.
Hình 6: Truy vấn Bloom Filter
Chúng ta lại đưa nó chạy qua k hàm băm trên để kiểm tra một phần tử
nào đó có thuộc tập đã được mã hóa trong BF hay không. Khi 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 tương
39
ứ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.
Sử dụng Bloom Filter thay vì thực sự lưu trữ tập S, 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 thực chất bị mất: Bloom Filter không thể giúp chúng ta khôi phục
được tập đó. Nhưng nếu vấn đề chúng ta quan tâm đến là 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 một lượng lớn bộ nhớ trong khi tốc độ truy vấn là bất biến.
Mặc dù không thể tránh khỏi, tuy nhiên 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, đó cũng là một ưu điểm đáng chú ý
h k1 x ( k )
m bits
h k2 ( x k )
h k3 ( x k )
nữa của Bloom Filter.
x k k x S S xk Nhưng HIT
1 0 1 0 0 1 0 1 1 0 1
Hình 7: 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
40
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à:
Sau khi mới chỉ có một phần tử chạy qua k hàm băm xác suất một bit
vẫn là 0:
Sau quá trình huấn luyện xác suất một bit vẫn là 0:
Xác suất một bit xác định nào đó có giá trị bằng 1 sau quá trình huấn
luyện là:
41
Biểu đồ 1: Tỉ lệ lỗi và Không gian lưu trữ (giữ nguyên n)
Biểu đồ 2: Tỉ lệ lỗi và Số lượng khóa (giữ nguyên m)
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à:
Sử dụng giới hạn của cơ số logarit tự nhiên, công thức trên tương đương:
42
Để 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à:
nghĩa là một nửa số bit của mảng BF nên được thiết lập giá trị bằng 1 sau quá
trình huấn luyện. Điều này sẽ dẫn đến xác suất lỗi false positive là:
Vậy nếu giữ nguyên n, xác suất lỗi giảm khi 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.
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ử trong tập S).
Cấu trúc của Bloom Filter không cho phép liệt kê hoặc lấy giá trị các
phần tử lưu trong đó một cách trực tiếp. Ta cũng không thể loại bỏ một đối
tượng khỏi Bloom Filter mà không làm hỏng các phần tử khác. Thế nhưng BF
vẫn là một trong những cấu trúc dữ liệu xác suất được sử dụng rộng rãi trong
NLP do sự đơn giản và hiệu quả của nó. Các ứng dụng của BF có thể kể đến
như trong kiểm tra chính tả, các ứng dụng cơ sở dữ liệu [12] và định tuyến
mạng [6].
43
2.4 Mô hình ngôn ngữ Bloom Filter
Phương pháp sử dụng một cấu trúc lưu trữ dữ liệu có mất mát như BF
để mô hình ngôn ngữ được giới thiệu vào năm 2007 bởi David Talbot và
Miles Osborne (School of Informatics, University of Edinburgh 2 Buccleuch
Place, Edinburgh, EH8 9LW, UK), họ cũng đưa ra ý tưởng giúp giảm tỉ lệ lỗi
false positive, tích hợp khóa và giá trị trong Bloom Filter với việc công bố hai
cấu trúc dữ liệu Log Frequency Bloom Filter và Bloom Map.
2.4.1 Bloom Filter tần số log (Log-frequency Bloom Filter)
Một thuật toán có tên mã hóa tần số log (log-frequency encoding) được
sử dụng để 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. Số 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:
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ối củ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 BFLM. 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,
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, 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ảng hoặc đạt đến giá trị
44
đế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.
Thuật toán 1: Thuật toán huấn luyện BF
- Đầu vào: key/frequency pair x, f (x); Bloom filter B; Hàm băm
- Đầu ra: Bloom filter B
do
while while i ≤ k do
end while
end while
Thuật toán 2: Thuật toán kiểm tra BF
- Đầu vào: x ∈ U; Bloom filter B; Hàm băm
- Đầu ra: Ước tính tần số F (x)
while do
while i ≤ k do
45
if then
if then
return
else
return
end if
end if
end while
end while
Số lần xuất hiện của n-gram sau đó được ước lượng sử dụng công thức:
tiếp theo một thuật toán làm mịn sẽ được sử dụng để lấy ra lượng xác suất
thực tế sẽ sử dụng trong tính toán.
2.4.2 Bộ lọc dựa vào chuỗi con (sub-sequence filtering)
Xác suất điều kiện của n-gram trong một ngữ cảnh cụ thể được các mô
hình ngôn ngữ n-gram chuẩn lưu trữ. Phần lớn những mô hình ngôn ngữ này
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 đến cá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 WittenBell, Kneser-
Ney) hay tiền tố ngữ cảnh (đối với làm mịn Kneser-Ney, Stupid Backoff).
46
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ưng cầ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.
Cần thiết phải 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ưu các xác suất được tính toán sẵn bởi vì 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.
Khi phân tích tỉ lệ lỗi ở phần trên chỉ tập trung vào lỗi false positive
của BF. Tuy nhiên trong thự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 được truy vấn.
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ờ vậy 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ể, khi đã 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 có 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. 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ất củ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ó.
Với phương pháp làm mịn nội suy bộ lọc này giảm tỉ lệ lỗi của các mô
hình ngôn ngữ BF bằng cách sử dụng giá trị nhỏ nhất được trả lại bởi các mô
hình bậc thấp làm cận trên cho các mô hình cấp cao hơn.
47
CHƯƠNG 3
ỨNG DỤNG BLOOM FILTER CHO HỆ DỊCH MÁY THỐNG KÊ DỰA
VÀO CỤM TỪ
3.1 Hệ dịch máy thống kê mã nguồn mở Moses
Moses là hệ dịch máy thống kê cho phép người dùng dễ dàng tạo ra mô hình dịch cho bất cứ một cặp ngôn ngữ nào. Moses cung cấp cả hai loại mô hình dịch là dựa trên cụm và dựa trên cây. Bộ công cụ Moses (Moses Toolkit) là một bộ nghiên cứu dịch học thuật đầy đủ. Nó bao gồm đầy đủ các thành phần để tiền xử lý dữ liệu, huấn luyện mô hình ngôn ngữ và mô hình dịch. Nó cũng bao gồm các công cụ tuning cho các mô hình này sử dụng huấn luyện với lỗi tối thiểu và đánh giá kết quả dịch sử dụng điểm BLEU. Moses sử dụng các chuẩn công cụ ngoài cho một số công việc để tránh sự trùng lặp, như GIZA++[8](Och, et al., 2003) cho gióng hàng từ và SRILM cho mô hình hóa ngôn ngữ.
Moses sử dụng các chuẩn công cụ ngoài với một số công việc để tránh sự trùng lặp, như GIZA++ cho gióng hàng từ và SRILM cho mô hình hóa ngôn ngữ. Đồng thời, bởi các tác vụ thường tốn CPU, bộ công cụ được thiết kế để làm việc với Sun Grid Engine trong môi trường song song để tăng hiệu quả đầu ra.
Bộ công cụ được lưu trữ và phát triển trên sourceforge.net từ khi tạo ra. Moses có một cộng đồng nghiên cứu đang hoạt động . (Tải về tại: http://sourceforge.net/projects/mosesdecoder/).
Các thử nghiệm trình bày trong luận văn này đều được thực hiện trên
• CPU: Intel(R) Core(TM) i3 – 3110M 2.40GHz RAM: 4GB DDR2
• Hệ điều hành: Ubuntu 12.04 64-bit
cùng một máy tính cấu hình như sau:
Trong chương này, chúng tôi trình bày thử nghiệm xây dựng các mô hình
ngôn ngữ với hai công cụ RandLM và SRILM.
48
3.2 Tích hợp Mô hình ngôn ngữ Bloom Filter vào hệ thống Moses
Mô hình ngôn ngữ sử dụng trong huấn luyện là mô hình 3-gram và sử
dụng thuật toán làm mịn Kneser-Ney cải tiến. GIZA++ 2.0 1 , SRILM và bộ
huấn luyện cực tiểu hóa tỉ lệ lỗi (Minimum Error Rate Training – MERT) để
gióng hàng các từ, xây dựng mô hình ngôn ngữ, tối ưu hóa các tham số sử
dụng trong quá trình dịch được tôi sử dụng trong quá trình xây dựng hệ thống
dịch.
Một số script hỗ trợ 2 được tôi sử dụng khi xây dựng và thử nghiệm
Bộ tách từ tokenizer.perl
Script chuyển toàn bộ văn bản sang chữ thường lowercase.perl
SGML-Wrapper có nhiệm vụ đóng gói dữ liệu theo định dạng XML
trên hệ thống dịch này gồm:
Script NIST MTeval version 11b mteval-v11b.pl dùng để tính điểm
của hệ thống tính điểm NIST BLEU : wrap-xml.perl
BLEU
Các mô hình ngôn ngữ BF-LM được xây dựng với công cụ mã nguồn
3.2.1 Xây dựng LM với RandLM và SRILM
mở RandLM3. Công cụ này được phát triển để xây dựng LM dung lượng thấp
nhờ sử dụng các cấu trúc dữ liệu xác suất, điển hình là Bloom Filter. Sau khi
biên dịch, công cụ này tạo ra hai file thực thi là buildlm và querylm. File
2 Download từ http://www.statmt.org/wmt08/scripts.tgz Script MTeval: ftp://jaguar.ncsl.nist.gov/mt/resources/mteval-v11b.pl 3 Mã nguồn RandLM có thể được download miễn phí từ:
http://sourceforge.net/projects/randlm/
5 Tài liệu hƣớng dẫn và mã nguồn của SRILM có thể đƣợc download miễn phí
từ: http://www.speech.sri.com/projects/srilm/
1 http://code.google.com/p/giza-pp/
49
buildlm được dùng để xây dựng các mô hình ngôn ngữ. Còn file querylm sử
dụng để truy vấn LM, trả lại kết quả thống kê n-gram hoặc xác suất điều kiện
Các mô hình ngôn ngữ chuẩn, không mất mát được xây dựng sử dụng
log.
SRI Language Modelling Toolkit (SRILM) 5. SRILM là một dự án mã nguồn
mở bao gồm nhiều chương trình, thư viện C++ và script hỗ trợ trong việc xây
dựng và thử nghiệm các mô hình ngôn ngữ cho nhận dạng tiếng nói hoặc các
ứng dụng khác. Nó hỗ trợ nhiều kiểu mô hình ngôn ngữ khác nhau dựa trên
thống kê về n-gram. SRILM đã được phát triển từ năm 1995 ở Phòng nghiên
cứu công nghệ tiếng nói SRI, và vẫn còn đang được tiếp tục sửa chữa, mở
rộng bởi nhiều nhà nghiên cứu trong cộng đồng NLP.
3.2.1.1 Ngữ liệu
Thử nghiệm này được thực hiện trên bộ ngữ liệu đơn ngữ Tiếng Việt được
sưu tầm từ các bài báo, tạp chí. Các thống kê về ngữ liệu này được liệt kê
trong bảng dưới đây:
Bảng 1: Thống kê về ngữ liệu Tiếng Việt
Thống kê chung
Dung lượng Số lượng câu Số lượng từ Độ dài trung bình câu 131.9 MB 842,452 16,369,034 19.43
Thống kê n-gram
315,095 3,342,615 1,784,125 1,441,396 1-gram 2-gram 3-gram 4-gram
50
Do hạn chế về thời gian thử nghiệm, vì thế trong khuôn khổ luận văn
chỉ thực hiện thử nghiệm trên bộ ngữ liệu này (bộ ngữ liệu lớn nhất được sử
dụng trong thử nghiệm là bộ ngữ liệu 842,452 câu dịch). Toàn bộ ngữ liệu
được chuyển thành chữ thường sử dụng script lowercase.perl.
Ngữ liệu đầu vào là tệp tin đơn ngữ của ngôn ngữ đích - tiếng Việt. Ví
dụ: tệp tin 50001b_train.vn.1, có nội dung như sau:
50001b_train.vn.1
- Cảnh sát cố giải tán đám đông.
- Những người biểu tình cho biết WTO không công
bằng đối với nông dân và ngư dân của các nước
nghèo.
- Họ cho rằng các chính sách thương mại của tổ
chức này sẽ làm tổn hại điều kiện sinh sống.
- Một điều tra viên của Châu âu cho biết dường
như có bằng chứng là cơ quan tình báo trung ương
Mỹ đã bắt cóc người ở Châu âu.
- Thượng nghị sĩ Thụy sĩ Dick Marty cũng cho
biết bằng chứng này dường như cho thấy cia đã
chuyển những người bị bắt cóc từ nước này sang
nước kia một cách bất hợp pháp.
.....
51
Ngữ liệu này cần được tiền xử lý (prepare data): phân tích từ tố, tắt chữ
hoa ở đầu câu, và tách từ cho file tiếng Việt. Để làm việc này ta sử dụng 2
script đó là: tokenizer.perl và lowercase.perl. Ta thực hiện các lệnh sau:
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l fr
<~/tools/Work/50001_utf8/Baseline/data/50001b_train.
vn.1 >
~/tools/Work/50001_utf8/Baseline/data/50001b_train.t
ok.vn
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/50001b_train.t
ok.vn >
~/tools/Work/50001_utf8/Baseline/data/50001b_train.l
ower.vn
Tệp tin kết quả có nội dung như sau:
50001b_train.lower.vn
- cảnh _ sát cố giải _ tán đám _ đông .
- những người _ biểu _ tình cho biết wto không _
công bằng đối _ với nông _ dân và ngư _ dân của
các nước nghèo.
- họ cho rằng các chính _ sách thương _ mại của
tổ _ chức này sẽ làm _ tổn _ hại điều _ kiện
sinh _ sống .
52
- một điều _ tra viên của châu âu cho biết dường
_ như có bằng _ chứng là cơ _ quan _ tình _ báo
_ trung _ ương _ mỹ đã bắt _ cóc người _ ở châu
âu.
- thượng _ nghị _ sĩ thụy _ sĩ _ dick _ marty
cũng cho biết bằng _ chứng này dường _ như cho _
thấy cia đã chuyển những người _ bị _ bắt cóc từ
nước này sang nước kia một _ cách bất _ hợp _
pháp .
.....
Các tập ngữ liệu đã được trích xuất và tiền xử lý ở trên được sử dụng
để huấn luyện các mô hình ngôn ngữ 3-gram và 4-gram sử dụng hai bộ công
cụ SRILM và RandLM. Dung lượng các tập ngữ liệu này được thể hiện trong
Bảng 2.
Bảng 2: Thống kê các tập ngữ liệu tiếng Việt được sử dụng để xây dựng LM
(Set 1->3)
Set 1 Set 2 Set 3
Số lượng câu 442,453 642,452 842,452
Số lượng từ 7,013,558 11,894,513 16,369,034
Độ dài trung bình câu 15.85 18.51 19.43
Từ vựng 161,376 255,115 315,092
Dung lượng 56 MB 95.9 MB 131.9 MB
53
3.2.1.2 Thuật toán làm mịn
Mô hình ngôn ngữ không mất mát được huấn luyện sử dụng thuật toán
làm mịn Kneser-Ney cải tiến (MKN). Do trong những thử nghiệm này, chúng
ta chỉ quan tâm đến đặc tính, hiệu suất của các cấu trúc dữ liệu (không mất
mát và có mất mát thông tin) mà không cần xác suất chính xác của từng sự
kiện, nên thuật toán Stupid Backoff của Google được sử dụng trong quá trình
xây dựng BF-LM vì nó nhanh và đơn giản. Hơn nữa chất lượng của thuật toán
làm mịn Stupid Backoff đã được chứng minh là xấp xỉ với thuật toán MKN
với ngữ liệu lớn [5].
3.2.1.3. Xây dựng LM với SRILM và RandLM
Sau khi ngữ liệu được tiền xử lý, ta đi xây dựng mô hình ngôn ngữ (Build
Language Model). Để thấy rõ hiệu quả của mô hình ngôn ngữ RandLM so với
SRILM ngữ liệu được thử nghiệm ta tiến hành so sánh ngữ liệu đơn ngữ tiếng
Việt (ngôn ngữ đích).
Trước hết ta tiến hành xây dựng mô hình ngôn ngữ chuẩn. Các mô hình
ngôn ngữ chuẩn, không mất mát được xây dựng sử dụng SRI Language
Modelling Toolkit (SRILM). SRILM là một dự án mã nguồn mở bao gồm
nhiều chương trình, thư viện C++ và script hỗ trợ trong việc xây dựng và thử
nghiệm các mô hình ngôn ngữ cho nhận dạng tiếng nói hoặc các ứng dụng
khác. Nó hỗ trợ nhiều kiểu mô hình ngôn ngữ khác nhau dựa trên thống kê về
n-gram. SRILM đã được phát triển từ năm 1995 ở Phòng nghiên cứu công
nghệ tiếng nói SRI, và vẫn còn đang được tiếp tục sửa chữa, mở rộng bởi
nhiều nhà nghiên cứu trong cộng đồng NLP.
Ta sử dụng script ngram-count trong SRILM để xây dựng mô hình ngôn
ngữ, mô hình ngôn ngữ chỉ được xây dựng trên ngôn ngữ đích, ví dụ:
54
tranthanh@tranthanh:~$ ~/tools/srilm/bin/i686-
m64/ngram-count -order 4 -interpolate -kndiscount -
unk -text
~/tools/Work/50001_utf8/Baseline/lm/50001b_train.low
er.vn -lm
~/tools/Work/50001_utf8/Baseline/lm/5001b.srilm
Trong đó 50001b_train.lower.vn là tệp ngữ liệu đầu vào của ngôn
5001b.srilm
ngữ đích sau khi tiền xử lý, kết quả của quá trình này được lưu lại vào file
Khi thực hiện câu lệnh trên sẽ tạo ra một mô hình ngôn ngữ 4-gram
trong file 5001b.srilm từ file ngữ liệu 50001b_train.lower.vn.
Ngoài ra, ta có thể yêu cầu SRILM tạo ra những mô hình ngôn ngữ bậc cao
hơn như 5-gram, 6-gram, thậm chí lớn hơn nữa. Tuy nhiên, khi tham số này
tăng thì đồng thời kéo theo lượng bộ nhớ cần dùng cũng tăng lên rất nhanh.
SRILM sử dụng RAM để lưu trữ kết quả đếm n-gram tạm thời, với cấu hình
máy tính thử nghiệm đã nêu trên (sử dụng 4GB RAM), tôi đã xây dựng được
mô hình ngôn ngữ 4-gram từ tập ngữ liệu 131.9 MB; nhưng không tạo được
mô hình 5-gram với cùng lượng dữ liệu do thiếu RAM trong giai đoạn thống
kê n-gram. Tham số -kndiscount yêu cầu SRILM sử dụng thuật toán Kneser-
Ney cải tiến trong bước làm mịn. Cũng có thể sử dụng các thuật toán làm mịn
khác trong SRILM như Good-Turing hay Witten-Bell.
Quá trình xây dựng mô hình chiếm khoảng 1 phút cho tập ngữ liệu 56
MB (Set 1) cho đến hơn 3 phút đối với tập ngữ liệu 131.9 MB (Set 4). Ta có
thể xem có bao nhiêu n-gram mỗi bậc trong file mô hình ngôn ngữ vừa được
tạo ra sau khi xây dựng.
55
Bảng 4: Thống kê số lượng các n-gram trong các tập ngữ liệu
1-gram 2-gram 3-gram 4-gram
161,379 1,727,176 691,281 452,241 Set 1
255,118 2,659,220 1,194,095 854,777 Set 2
315,095 3,342,615 1,784,125 1,441,396 Set 3
File 5001b.srilm có cấu trúc như sau:
\data\
ngram 1=315095
ngram 2=3342615
ngram 3=1784125
ngram 4=1441396
\1-grams:
-2.619509 ! -1.174945
-5.019643 !' -0.1231811
-2.499407 " -0.362864
-5.180512 # -0.1231812
-5.180512 $ -0.1231812
-5.180512 $594 -0.1231812
56
-5.180512 $8,35 -0.1231812
-3.496327 % -0.3279912
-4.346717 & -0.1231812
-5.180512 &davis -0.1231812
-5.180512 &giữa -0.1231812
-4.922648 ' -0.1231812
-4.922648 'anh -0.1231811
-4.669695 'bạn -0.2013319
-5.180512 'bộ -0.1231812
-5.180512 'chia -0.1231811
-5.180512 'chill' -0.1231812
-5.019643 'chúng -0.2464038
-5.180512 'con -0.1231812
-5.180512 'cá -0.1231812
.....
\2-grams:
-3.702029 " anhchàng
57
-3.702029 " anhchị
-3.10137 " anhta
-3.236941 " anhấy
-3.741899 " annulus
-3.744986 " bannãy
-3.647394 " banđêm
-3.368595 " baogồm
-3.744986 " bigbird
-3.715676 " biểutượng
-3.734566 " blackfriday
-3.204183 " bongbóng -0.1929192
-7.111882 "D" -0.1273738
-7.111882 "DOS -0.1273738
-7.111882 "Danh -0.1273738
-7.111882 "De -0.1273738
-7.111882 "Debra" -0.1273738
-7.111882 "Dumbo" -0.1273738
58
-7.111882 "Dân -0.1273738.....
\3-grams:
-0.2644063 anh ) .
-1.433459 bà ) ,
-0.7637519 bà ) .
-1.476914 bà ) bị
-1.521228 bà ) có
-1.155089 bà ) cóthể
-1.413331 bà ) cần
-1.889307 bà ) dùng
-2.105258 bà ) giấychứngnhận
-2.435822 bà ) khoẻmạnh
-1.458335 bà ) không
-1.890747 bà ) khôngcần
-2.104658 bà ) khôngnên
-1.554726 bà ) khôngđược
-1.733998 bà ) là
59
-2.436294 bà ) mấtsức
-2.054061 bà ) một
-2.414719 bà ) nghỉviệc
-0.9841987 bà ) phải
-0.8705663 bà ) sẽ
-1.890674 bà ) ta
-2.156 bà ) trong
-1.959944 bà ) và
-2.432107 bà ) ăn
-0.2726102 bàn ) .
-0.5362333 bánhàng ) ,
......
\end\
Tiếp theo ta tiến hành xây dưng mô hình ngôn ngữ Bloom Filter. Để
xây dựng mô hình ngôn ngữ Bloom Filter ta sử dụng RandLM, có thể được
thực hiện theo 3 cách:
i) Từ ngữ liệu đã được chia từ sẵn;
ii) Từ một tập các cặp n-gram và số lần xuất hiện của nó (cặp ngram-
count);
60
iii) Từ một mô hình ngôn ngữ backoff đã được xây dựng trước đó với
định dạng ARPA (định dạng của mô hình ngôn ngữ được tạo ra từ SRILM).
Khi xây dựng theo cách đầu tiên hoặc thứ hai, mô hình được gọi là
CountRandLM, sử dụng loại thứ ba thì được gọi là BackoffRandLM.
CountRandLM có thể sử dụng làm mịn StupidBackoff hoặc Witten-Bell.
BackoffRandLM có thể sử dụng bất kỳ phương pháp làm mịn nào mà SRILM
hỗ trợ. Ví dụ ta xây dựng BloomMap-LM 4-gram từ tập ngữ liệu 131.9 MB
sử dụng lệnh sau:
tranthanh@tranthanh:~$~/tools/Work/corpus$
~/tools/randlm-0.2.5/bin/buildlm –struct BloomMap –
falsepos 8 –values 8 –output-prefix randlm_4-
grams_131.9MB –input-path /corpus/news.lowercased.gz
Tham số -falsepos quyết định tỉ lệ lỗi false positive của cấu trúc dữ
–order 4 –working-mem 1500
Tham số values quyết định khoảng lượng tử hóa của mô hình, bậc của
liệu, ví dụ falsepos 8 cho ta tỉ lệ lỗi là 1/28.
logarit sử dụng trong quá trình lượng tử hóa sẽ là 21/values nếu ta sử dụng
Tham số order xác định bậc của mô hình n-gram.
Tham số input-path: đường dẫn tới ngữ liệu được dùng để tạo LM.
Đặc biệt tham số -struct quyết định cấu trúc dữ liệu được sử dụng để
tham số -values 8.
xây dựng mô hình ngôn ngữ. Hiện tại, RandLM hỗ trợ hai loại cấu trúc
dữ liệu là Log-Frequency Bloom Filter (-struct LogFreqBloomFilter)
và Bloom Map (-struct BloomMap). Sử dụng RandLM, chúng tôi sẽ
61
xây dựng các mô hình ngôn ngữ với cả hai loại cấu trúc dữ liệu này để
Tham số “-working-mem 1500” có nghĩa là cho phép sử dụng 1500MB
so sánh kích thước cũng như hiệu quả của từng cấu trúc dữ liệu.
trong quá trình sắp xếp các n-gram.
- randlm_4-grams_131.9MB.BloomMap
Sau quá trình xây dựng LM với câu lệnh trên các file được tạo ra gồm:
Mô hình
- randlm_4-grams_131.9MB.counts.sorted.gz Thống
ngôn ngữ
- randlm_4-grams_131.9MB.stats.gz
kê n-gram
Thống kê
- randlm_4-grams_131.9MB.vcb.gz
kết quả đếm
File chứa
từ vựng
Trong đó, hai file .stats.gz và .counts.sorted.gz đều có thể được khai báo
sử dụng lại, không cần thiết phải tính toán nhiều lần khi xây dựng thêm LM từ
bộ ngữ liệu giống nhau. Trong thử nghiệm nhiều khi cần xây dựng LM nhiều
lần với giá trị các tham số khác nhau điều này là rất cần thiết, ví dụ:
tranthanh@tranthanh:~$~/buildlm –struct BloomMap –
falsepos 8 –values 10 –order 4 –output-prefix
randlm_4-grams_131.9MB_values10 –input-path
randlm_4-grams_131.9MB.counts.sorted.gz -input-type
counts -stats-path randlm_4-grams_131.9MB.stats.gz
–working-mem 1500
sẽ xây dựng một BloomMap-LM mới từ cùng ngữ liệu đã sử dụng trước đó
nhưng với giá trị lượng tử hóa khác (–values 10) mà không cần tính toán lại
các file thống kê.
62
Khi xây dựng các BF-LM sử dụng RandLM sẽ chiếm thời gian lâu hơn
với cùng lượng dữ liệu trong SRILM; mất xấp xỉ 6 phút RandLM mới xây
dựng xong mô hình ngôn ngữ 4-gram với 131.9 MB ngữ liệu (Set 3).
RandLM sử dụng đĩa cứng để lưu trữ, vì thế việc thống kê, sắp xếp cũng mất
nhiều thời gian hơn. Tuy nhiên, RandLM lại có thể xây dựng các mô hình
ngôn ngữ bậc cao hơn, sử dụng nhiều dữ liệu hơn SRILM. Ví dụ, trên máy
tính thử nghiệm, RandLM đã có thể xây dựng thành công mô hình ngôn ngữ
5-gram từ 131,9 MB ngữ liệu huấn luyện, trong khi SRILM thì không thể.
Với thời gian huấn luyện của RandLM lâu hơn SRILM nhưng đó không phải
là vấn đề lớn, vì ta chỉ cần xây dựng mô hình ngôn ngữ một lần duy nhất. Hơn
nữa, dung lượng các mô hình ngôn ngữ Bloom Filter xây dựng từ RandLM sử
dụng ít bộ nhớ hơn các mô hình chuẩn từ SRILM rất nhiều. Bảng 5 thống kê
dung lượng các mô hình ngôn ngữ 4-gram tạo bởi hai công cụ này (không
nén) với các bộ ngữ liệu kích thước khác nhau.
Bảng 5: Kích thước các loại LM khác nhau trên các tập ngữ liệu
Set 1 Set 2 Set 3
21.21 MB 32.73 MB 45.28 MB Log-Freq BF
97.3 MB 164 MB 235 MB SRILM
Qua bảng trên ta có thể thấy rằng dung lượng các mô hình ngôn
ngữ tạo bởi RandLM chỉ bằng khoảng 1/5 lần dung lượng mô hình ngôn ngữ
chuẩn tạo bởi SRILM nếu sử dụng cấu trúc dữ liệu Log-Frequency Bloom
Filter.
63
MB
Biểu đồ 1: Dung lượng các LM tạo từ RandLM và SRILM
Từ Biểu đồ 1, có thể kết luận rằng càng sử dụng nhiều dữ liệu huấn
luyện, thì càng tiết kiệm được không gian lưu trữ; nghĩa là tỉ lệ chênh lệch
giữa dung lượng LM chuẩn và mô hình xây dựng bằng công cụ RandLM tạo
ra từ cùng một ngữ liệu huấn luyện càng tăng. Bằng các thực nghiệm ta có thể
biết được rằng việc tiết kiệm dung lượng này làm hiệu quả LM giảm như thế
nào so với LM chuẩn.
Kết quả xây dựng LM bậc 2, 3 và 4 từ bộ ngữ liệu tiếng Việt được thể
hiện trong biểu đồ dưới đây:
64
MB
Biểu đồ 2: Dung lượng các LM tiếng Việt
Các LM này được xây dựng với bậc n-gram khác nhau, từ 2-gram cho
đến 4-gram. Kết quả thể hiện trong biểu đồ một lần nữa cho thấy sự chênh
lệch lớn về dung lượng giữa các mô hình ngôn ngữ SRILM chuẩn và
RandLM.
Các mô hình được xây dựng ở trên sẽ được dùng trong dịch máy thống
kê sử dụng hệ thống dịch máy mã nguồn mở Moses. Kết quả dịch sau đó
được đánh giá bằng điểm BLEU. Qua đó ta có thể so sánh hiệu quả của mô
hình ngôn ngữ sử dụng Bloom Filter với mô hình ngôn ngữ chuẩn truyền
thống.
65
3.3 Thử nghiệm và đánh giá
Hệ thống dịch được thử nghiệm với các mô hình ngôn ngữ SRILM và
RandLM, với việc dịch 1000 câu tiếng Anh. Quá trình thử nghiệm được tiến
hành như sau:
3.3.1 Chuẩn bị ngữ liệu
Ngữ liệu đầu vào là cặp ngữ liệu song ngữ với 44,638 câu Anh – Việt.
Để chuẩn hoá dữ liệu ta thực hiện các lệnh sau:
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l en
<~/tools/Work/50001_utf8/Baseline/data/t_train.en.1
>
~/tools/Work/50001_utf8/Baseline/data/t_train.tok.en
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l fr
<~/tools/Work/50001_utf8/Baseline/data/t_train.vn.1
>
~/tools/Work/50001_utf8/Baseline/data/t_train.tok.vn
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/t_train.tok.vn
>
~/tools/Work/50001_utf8/Baseline/data/t_train.lower.
vn
66
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/t_train.tok.en
>
~/tools/Work/50001_utf8/Baseline/data/t_train.lower.
en
3.3.2 Huấn luyện mô hình ngôn ngữ
- Với mô hình ngôn ngữ chuẩn ta thực hiện các lệnh sau:
tranthanh@tranthanh:~$ ~/tools/srilm/bin/i686-
m64/ngram-count -order 3 -interpolate -kndiscount -
unk -text
~/tools/Work/50001_utf8/Baseline/lm/t_train.lower.vn
-lm ~/tools/Work/50001_utf8/Baseline/lm/t.srilm
- Với mô hình ngôn ngữ Bloom Filter ta thực hiện các lệnh sau:
tranthanh@tranthanh:~$~/tools/Work/corpus$
~/tools/randlm-0.2.5/bin/buildlm -struct BloomMap -
falsepos 8 -values 8 -output-prefix model -order 3 <
~/tools/Work/corpus/t_train.lower.vn
3.3.3 Sinh bảng cụm từ
- Với mô hình ngôn ngữ chuẩn sinh ra ở trên, sinh bảng cụm từ được thực
hiện bởi các lệnh sau (quá trình này chiếm khoảng 40 phút):
tranthanh@tranthanh:~$
~/tools/Work/50001_utf8/Baseline$ nohup nice
~/tools/moses/scripts/training/train-model.perl -
root-dir ~/tools/Work/50001_utf8/Baseline -corpus
~/tools/Work/50001_utf8/Baseline/data/t_train.lower
\-f en -e vn -alignment grow-diag-final-and -
67
reordering msd-bidirectional-fe \-lm
0:3:/home/tranthanh/tools/Work/50001_utf8/Baseline/l
m/t.srilm:8 -external-bin-dir ~/tools/bin >&
~/tools/Work/50001_utf8/Baseline/training.out &
Tiếp theo ta tiến hành thực hiện các lệnh:
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l en
<~/tools/Work/50001_utf8/Baseline/data/t_dev.en.1 >
~/tools/Work/50001_utf8/Baseline/data/t_dev.tok.en
tranthanh@tranthanh:~$
~/tools/Work/50001_utf8/Baseline$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l en
<~/tools/Work/50001_utf8/Baseline/data/t_dev.vn.1 >
~/tools/Work/50001_utf8/Baseline/data/t_dev.tok.vn
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/t_dev.tok.vn >
~/tools/Work/50001_utf8/Baseline/data/t_dev.lower.vn
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/t_dev.tok.en >
~/tools/Work/50001_utf8/Baseline/data/t_dev.lower.en
68
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l fr
< ~/tools/Work/50001_utf8/Baseline/data/t_test.vn.1
>
~/tools/Work/50001_utf8/Baseline/data/t_test.tok.vn
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l en
< ~/tools/Work/50001_utf8/Baseline/data/t_test.en.1
>
~/tools/Work/50001_utf8/Baseline/data/t_test.tok.en
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/t_test.tok.en
>
~/tools/Work/50001_utf8/Baseline/data/t_test.lower.e
n
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/t_test.tok.vn
>
~/tools/Work/50001_utf8/Baseline/data/t_test.lower.v
n
69
- Với mô hình ngôn ngữ Bloom Filter sinh ra ở trên, sinh bảng cụm từ được
thực hiện bởi các lệnh sau:
tranthanh@tranthanh:~$
~/tools/Work/50001_utf8/Baseline$ nohup nice
~/tools/moses/scripts/training/train-model.perl -
root-dir ~/tools/Work/50001_utf8/Baseline -corpus
~/tools/Work/50001_utf8/Baseline/data/t_train.lower
\-f en -e vn -alignment grow-diag-final-and -
reordering msd-bidirectional-fe \-lm
0:3:/home/tranthanh/tools/Work/50001_utf8/Baseline/l
m/model.BloomMap:8 -external-bin-dir ~/tools/bin >&
~/tools/Work/50001_utf8/Baseline/training.out &
Sau đó ta thực hiện các lệnh:
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l en
<~/tools/Work/50001_utf8/Baseline/data/t_dev.en.1 >
~/tools/Work/50001_utf8/Baseline/data/t_dev.tok.en
tranthanh@tranthanh:~$
~/tools/Work/50001_utf8/Baseline$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l en
<~/tools/Work/50001_utf8/Baseline/data/t_dev.vn.1 >
~/tools/Work/50001_utf8/Baseline/data/t_dev.tok.vn
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
70
~/tools/Work/50001_utf8/Baseline/data/t_dev.tok.vn >
~/tools/Work/50001_utf8/Baseline/data/t_dev.lower.vn
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/t_dev.tok.en >
~/tools/Work/50001_utf8/Baseline/data/t_dev.lower.en
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l fr
< ~/tools/Work/50001_utf8/Baseline/data/t_test.vn.1
>
~/tools/Work/50001_utf8/Baseline/data/t_test.tok.vn
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/tokenizer.perl -l en
< ~/tools/Work/50001_utf8/Baseline/data/t_test.en.1
>
~/tools/Work/50001_utf8/Baseline/data/t_test.tok.en
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/t_test.tok.en
>
~/tools/Work/50001_utf8/Baseline/data/t_test.lower.e
n
71
tranthanh@tranthanh:~$
~/tools/moses/scripts/tokenizer/lowercase.perl <
~/tools/Work/50001_utf8/Baseline/data/t_test.tok.vn
>
~/tools/Work/50001_utf8/Baseline/data/t_test.lower.v
n
3.3.4 Huấn luyện các tham số của mô hình dịch máy
Ta thực hiện lệnh sau (quá trình này chiếm khoảng hơn 10 phút):
tranthanh@tranthanh:~/tools/Work/50001_utf8/Baseline
$ nohup nice ~/tools/moses/scripts/training/mert-
moses.pl
~/tools/Work/50001_utf8/Baseline/tuning/t_dev.lower.
en
~/tools/Work/50001_utf8/Baseline/tuning/t_dev.lower.
vn ~/tools/moses/bin/moses
~/tools/Work/50001_utf8/Baseline/model/moses.ini --
mertdir ~/tools/moses/bin/ &>
~/tools/Work/50001_utf8/Baseline/tuning/mert.out &
Sau khi thực hiện lệnh trên ta tiến hành copy file moses.ini như sau:
home/tools/Work/50001_utf8/Baseline/mert-work/moses.ini
Vào:
home/tranthanh/tools/Work/50001_utf8/Baseline/tuning
Sau đó ta thực hiện các lệnh sau:
tranthanh@tranthanh:~$ ~/tools/moses/scripts/reuse-
weights.perl
~/tools/Work/50001_utf8/Baseline/tuning/moses.ini <
~/tools/Work/50001_utf8/Baseline/model/moses.ini >
72
~/tools/Work/50001_utf8/Baseline/tuning/moses-
tuned.ini
tranthanh@tranthanh:~$
~/tools/moses/scripts/training/filter-model-given-
input.pl
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.l
ower ~/tools/Work/50001_utf8/Baseline/tuning/moses-
tuned.ini
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.l
ower.en
tranthanh@tranthanh:~$
~/tools/moses/scripts/recaser/train-recaser.perl -
train-script ~/tools/moses/scripts/training/train-
model.perl -ngram-count ~/tools/srilm/bin/i686-
m64/ngram-count -corpus
~/tools/Work/50001_utf8/Baseline/data/t_test.tok.en
-dir
/home/tranthanh/tools/Work/50001_utf8/Baseline/recas
er -scripts-root-dir ~/tools/moses/scripts
- Riêng đối với hệ dịch máy thống kê Moses sử dụng mô hình ngôn ngữ
Bloom Filter ta thực hiện cấu hình lại tham số trong file moses.ini như sau:
Mở tệp moses.ini tại phần [feature] thay KENLM path=filename.arpa ….
bằng RANDLM path=filename.irstlm …
3.3.5 Dịch văn bản
Ta thực hiện các lệnh sau:
73
tranthanh@tranthanh:~$
~/tools/Work/50001_utf8/Baseline$ nohup nice
~/tools/moses/bin/moses -config
~/tools/Work/50001_utf8/Baseline/tuning/moses-
tuned.ini -input-file
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.l
ower.en 1>
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.t
uned.output 2>
~/tools/Work/50001_utf8/Baseline/evaluation/tuned.de
code.out &
tranthanh@tranthanh:~$ nohup nice
~/tools/moses/bin/moses -config
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.l
ower/moses.ini -input-file
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.l
ower.en 1>
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.t
uned-filtered.output 2>
~/tools/Work/50001_utf8/Baseline/evaluation/tuned-
filtered.decode.out &
tranthanh@tranthanh:~$
~/tools/moses/scripts/recaser/recase.perl -model
~/tools/Work/50001_utf8/Baseline/recaser/moses.ini -
in
74
~/tools/Work/50001_utf8/Baseline/evaluation/50001_te
st.tuned-filtered.output -moses
~/tools/moses/bin/moses >
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.t
uned-filtered.output.recased
tranthanh@tranthanh:~$
~/tools/moses/scripts/detokenizer.perl -l vn <
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.t
uned-filtered.output.recased >
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.t
uned-filtered.output.detokenized
3.3.6 Đánh giá kết quả
Ta thực hiện các lệnh:
tranthanh@tranthanh:~$
~/tools/Work/50001_utf8/Baseline/plain2sgm -r test
~/tools/Work/50001_utf8/Baseline
~/tools/Work/50001_utf8/Baseline
~/tools/Work/50001_utf8/Baseline/data/t_test.vn.1
~/tools/Work/50001_utf8/Baseline/t_test.vn.sgm
tranthanh@tranthanh:~$
~/tools/Work/50001_utf8/Baseline/plain2sgm -s test
~/tools/Work/50001_utf8/Baseline
~/tools/Work/50001_utf8/Baseline
~/tools/Work/50001_utf8/Baseline/data/t_test.en.1
~/tools/Work/50001_utf8/Baseline/t_test.en.sgm
75
tranthanh@tranthanh:~$
~/tools/Work/50001_utf8/Baseline/plain2sgm -t test
~/tools/Work/50001_utf8/Baseline
~/tools/Work/50001_utf8/Baseline
~/tools/Work/50001_utf8/Baseline/evaluation/t_test.t
uned-filtered.output
~/tools/Work/50001_utf8/Baseline/t_test.tuned-
filtered.output.sgm
tranthanh@tranthanh:~$
~/tools/Work/50001_utf8/Baseline/mteval-v11b.pl -r
~/tools/Work/50001_utf8/Baseline/t_test.vn.sgm -s
~/tools/Work/50001_utf8/Baseline/t_test.en.sgm -t
~/tools/Work/50001_utf8/Baseline/t_test.tuned-
filtered.output.sgm -c
Bảng 6: Thống kê ngữ liệu sử dụng trong dịch thử nghiệm
Độ dài Ngữ liệu Ngôn ngữ Câu Từ trung bình
Tiếng Anh 44,638 498,041 11.15 Ngữ liệu huấn luyện Tiếng Việt 44,638 463,795 10.39
Tiếng Anh 201 Ngữ liệu điều chỉnh 2,403 11.95
tham số Tiếng Việt 201 2,221 11.04
Tiếng Anh 500 5,620 11.24 Ngữ liệu đánh giá Tiếng Việt 500 5,264 10.52
Thời gian để dịch hết 500 câu này khi sử dụng mô hình ngôn ngữ
SRILM là 415 giây, đối với LF-BF-LM là 539 giây. Như vậy là khi sử dụng
76
các loại BF-LM, thời gian dịch lâu hơn khi sử dụng mô hình ngôn ngữ chuẩn
khoảng 1.3 lần. Khoảng thời gian dịch lâu hơn này không phải là tồi khi ta
xem xét đến phần bộ nhớ đã tiết kiệm được nhờ sử dụng các LM dựa trên
Bloom Filter.
Bảng 7: Thời gian dịch 500 câu tiếng Anh khi sử dụng các loại
LM khác nhau
Loại LM 3 gram Thời gian dịch (giây)
SRI-LM LF-BF-LM 415 539
Để đánh giá kết quả dịch, chúng tôi sử dụng điểm BLEU. Do đó, sau
khi dịch, kết quả được đóng gói lại theo định dạng XML của hệ thống tính
điểm NIST MT. Script MTeval sử dụng ba đầu vào để đánh giá kết quả dịch:
file chứa văn bản ở ngôn ngữ nguồn, file chứa kết quả dịch ở ngôn ngữ đích
và một file dịch chuẩn dùng để tham chiếu.
Điểm BLEU cho kết quả dịch với các LM khác nhau được thể hiện
trong bảng 8. Các mô hình ngôn ngữ này đều được xây dựng từ tập ngữ liệu
Set 3 gồm 131.9 MB ngữ liệu tiếng Việt. Nhìn vào kết quả này ta có thể thấy
rằng nếu cùng sử dụng mô hình 3-gram thì hệ thống dịch sử dụng mô hình
ngôn ngữ SRI-LM có điểm cao hơn khi sử dụng mô hình các mô hình
RandLM. Nhưng sự chênh lệch này không phải là lớn, trong trường hợp này
là SRILM cho điểm cao hơn LF-BF-LM 0,79 nên ta có thể coi các điểm số
này là tương đương nhau với cùng bậc n-gram. Thế nhưng, như đã nói ở phần
trên, với cấu hình máy tính dùng cho thử nghiệm, ta chỉ có thể xây dựng mô
hình ngôn ngữ 4-gram nếu sử dụng BF-LM. Sử dụng mô hình ngôn ngữ 4-
gram BF-LM này trong hệ thống dịch cho điểm số là 31.90, cao hơn rõ rệt khi
sử dụng mô hình ngôn ngữ SRI-LM với 30.25 điểm.
77
Bảng 8: Điểm BLEU cho kết quả dịch với các LM khác nhau
Cỡ LM 173 MB 35.17 MB 58.46 MB Điểm BLEU 30.25 29.46 31.90 SRI-LM 3-gram LF-BF-LM 3-gram LF-BF-LM 4-gram
Nhìn vào kết quả này, ta có thể thấy rõ ưu thế vượt trội của của cấu trúc
dữ liệu LF-BF-LM so với cấu trúc dữ liệu SRI-LM, vừa sử dụng ít bộ nhớ
hơn, vừa hiệu quả hơn.
78
KẾT LUẬN
Dịch máy là một trong những vấn đề khó của lĩnh vực xử lý ngôn ngữ
tự nhiên. Hiện nó vẫn là vấn đề thách thức và có nhiều công việc cần giải
quyết đối với các nhà tin học hiện nay. Hướng tiếp cận thống kê là hướng tiếp
cận dựa vào dữ liệu và được phát triển khá mạnh từ cuối thế kỉ XX cho tới
nay. Hướng tiếp cận này đã khắc phục được các nhược điểm của cách tiếp cận
dựa vào luật (dịch chuyển đổi). Qua ba chương, luận văn đã trình bày cách
tiếp cận, phương pháp giải quyết cho vấn đề dịch máy bằng thống kê và đồng
thời cải tiến về mô hình ngôn ngữ của hệ dịch nhằm giảm thiểu dung lượng
bộ nhớ mà mô hình ngôn ngữ chiếm dụng. Tuy chất lượng dịch chưa cao
nhưng khi chúng ta huấn luyện với nhiều dữ liệu hơn, chất lượng dịch sẽ được
nâng cao. Mặt khác ta hoàn toàn có thể áp dụng cho chiều dịch ngược lại
Việt-Anh.
1- Các kết quả đạt được
- Trình bày về cách tiếp cận dịch máy bằng thống kê;
- Xây dựng mô hình ngôn ngữ bằng SRI-LM và RAND-LM;
- Áp dụng cách tiếp cận này vào bài toán dịch Anh-Việt;
- Xây dựng chương trình thử nghiệm dịch Anh-Việt bằng
thống kê.
2- Hướng phát triển
- Tiếp tục cải tiến các mô hình dịch cho bài toán dịch Anh-Việt;
- Thử nghiệm với ngữ liệu đa dạng hơn và lớn hơn;
- Áp dụng cho chiều dịch từ Việt – Anh.
79
TÀI LIỆU THAM KHẢO
Tiếng Việt
[1] Nguyễn Văn Vinh (2005). “Xây dựng chương trình dịch tự động Anh-Việt bằng phương pháp dịch thống kê”. Luận văn Thạc sĩ, Đại học Công nghệ, ĐHQGHN.
Tiếng Anh
[2] Brants, T., Popat, A. C., Xu, P., Och, F. J., and Dean, J.. “Large language models in machine translation”. In Proceedings of the 2007 Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural Language Learning (EMNLP-CoNLL), 2007, pages 858–867.
[3] Callison-Burch, Chris, Miles Osborne, and Philipp Koehn. “Re- evaluating the role of Bleu in machine translation research”. In EACL 2006: Proceedings the Eleventh Conference of the European Chapter of the Association for Computational Linguistics, 2006.
[4] Costa, L. H. M. K., Fdida, S., and Duarte, O. C. M. B. “Incremental service deployment using the hop-by-hop multicast routing protocol”. IEEE/ACM Trans. Netw., 2006, 14(3): pages 543–556.
[5] de Laplace, M.. “A Philosophical Essay on Probabilities”. Dover
Publications, 1996.
[6] To Hong Thang. “Building language model for Vietnamese and its application”. Dissertation, Bachelor of IT, College of Technology, Vietnam National University, 2008.
[7] Koehn, P.. “Empirical Methods in Natural Language Processing”.
From course slides at http://www.inf.ed.ac.uk/teaching/courses/emnlp/, 2007. [8] Talbot, D. and Talbot, J.. “Bloom maps”. In Proceedings of the Fourth Workshop on Analytic Algorithmics and Combinatorics (ANALCO). Society for Industrial and Applied Mathematics, 2008.
[9] Koehn, P. and Hoang, H.. “Factored translation models”. In Proceedings of the 2007 Joint Conference on Empirical Methods in Natural
80
Language Processing and Computational Natural Language Learning (EMNLP-CoNLL), 2007, pages 868–876.
[10] Levenberg, A. D. “Bloom filter and lossy dictionary based language models”. Dissertation, master of science, School of Informatics, University of Edinburgh, 2007.
[11] Masao Utiyama. “A survey of statistical machine translation”.
Lecture slides, Kyoto University, 2006.
[12] Och, F. “The Google Statistical Machine Translation System for the 2005 NIST MT Evaluation”. Oral presentation at the 2005 NIST MT Evaluation workshop, 2005.
[13] Pagh, A., Pagh, R., and Rao, S. S.. “An optimal bloom filter replacement”. In SODA ’05: Proceedings of the sixteenth annual ACM-SIAM symposium on Discrete algorithms, Philadelphia, PA, USA. Society for Industrial and Applied Mathematics, 2005, pages 823–829.
[14] Talbot, D. and Osborne, M., “Randomised language modelling for statistical machine translation”. In Proceedings of the 45th Annual Meeting of the Association of Computational Linguistics, Prague, Czech Republic. Association for Computational Linguistics, 2007a, pages 512–519.
[15] Talbot, D. and Osborne, M., “Smoothed Bloom filter language models: Tera-scaleLMs on the cheap”. In Proceedings of the 2007 Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural Language Learning (EMNLP-CoNLL), 2007b, pages 468–476.