Kü thuËt ®iÖn tö & Khoa häc m¸y tÝnh<br />
<br />
<br />
Kü THUËT TèI ¦U §A MôC TI£U THIÕT KÕ<br />
B¶NG B¡M Tõ §IÓN CHO KIÓM LçI TIÕNG VIÖT<br />
TRẦN NGỌC ANH*, TRƯƠNG QUỐC HÙNG*, PHAN TUẤN ANH*,<br />
PHẠM HỒNG SƠN**, NGUYỄN LONG*.<br />
Tóm tắt: Bài toán thiết kế bảng băm cho từ điển âm tiết tiếng Việt phải giải quyết hai<br />
vấn đề có liên quan trong sự đối lập nhau, đó là kích thước bảng băm và khả năng đụng<br />
độ. Chúng tôi đưa ra cách giải quyết bài toán này nhằm cả hai mục tiêu là khả năng dụng<br />
độ và kích thước bảng băm cùng phải nhỏ. Kết quả thử nghiệm với các điểm tối ưu trên tập<br />
Pareto với kích thước bảng băm cỡ 1,11n (n là kích thước từ điển), độ phức tạp thời gian<br />
tìm kiếm trên bảng băm là O(1), cho thấy ưu điểm của thuật toán được đề xuất so với một<br />
số thuật toán khác như tìm kiếm nhị phân, automat hữu hạn đơn định hoặc phân tích dựa<br />
trên cấu trúc âm tiết tiếng Việt.<br />
Từ khoá: Tối ưu đa mục tiêu; Tập Pareto; Bảng băm tối ưu.<br />
<br />
1. ĐẶT VẤN ĐỀ<br />
Bài toán kiểm lỗi âm tiết tiếng Việt là một trong những bài toán cơ bản nhất của xử lý<br />
ngôn ngữ tự nhiên tiếng Việt[3][4]. Hiện nay, đã có rất nhiều phương pháp tiếp cận khác<br />
nhau như: Tìm kiếm nhị phân dựa theo từ điển đã được sắp xếp[3][4]; Dùng các từ điển và<br />
hàm băm dạng Soundex, Editex, Phontex hỗ trợ sửa lỗi[4]; Dùng mảng cấu trúc âm tiết<br />
tiếng Việt[3][4]; Dùng cây từ điển ký tự: B-Tree hay cây hậu tố Suffix-Tree[4]; Dùng<br />
Automat hữu hạn đơn định, Automat tối thiểu[4]; Dùng mô hình thống kê n-grams ký<br />
tự[2][4]; Dùng bảng băm từ điển tối ưu[4]. Trong đó, dùng bảng băm từ điển tối ưu là<br />
hướng tiếp cận mới, sử dụng lời giải tối ưu đa mục tiêu cho thiết kế bảng băm. Cụ thể:<br />
mục tiêu 1 là tối thiểu hoá đụng độ, và mục tiêu 2 là tối thiểu hoá kích thước bảng<br />
băm[14]. Rõ ràng hai mục tiêu này mâu thuẫn loại trừ lẫn nhau. Trên cơ sở nghiên cứu về<br />
bộ mã ký tự Việt[4], về bảng băm từ điển âm tiết[4], về thống kê âm tiết tiếng Việt[1] và<br />
phương pháp tìm lời giải tối ưu đa mục tiêu[7][10][12], để tìm ra các tham số thiết kế tối<br />
ưu cho bảng băm từ điển.<br />
Với cách tiếp cận đó, bài báo được trình bày tiếp tục theo thứ tự sau: Tách âm tiết tiếng<br />
Việt bằng Automat hữu hạn; Xây dựng các hàm mục tiêu cho thiết kế bảng băm từ điển<br />
âm tiết; Tìm tập Pareto thiết kế bảng băm tối ưu; Thử nghiệm đánh giá; cuối cùng là phần<br />
kết luận.<br />
2. VẤN ĐỀ TÁCH ÂM TIẾT TRONG VĂN BẢN<br />
Bước đầu tiên trước khi thực hiện kiểm tra âm tiết tiếng Việt là cần phải tách được từng<br />
âm tiết trong văn bản. Để thực hiện tách âm tiết tiếng Việt, có thể dùng Automat hữu hạn<br />
tiền định DFA (Deterministc Finite Automata) được mô tả như hình 1.<br />
DFA có 2 trạng thái q0 và q1, trong đó trạng thái bắt đầu q0 cũng là trạng thái kết thúc.<br />
Với là bảng chữ cái chấp nhận được (tiếng Việt). Ban đầu thẻ từ Token = (rỗng),<br />
trạng thái xuất phát q0, DFA sẽ đọc từng ký tự a để chuyển trạng thái. Tại trạng thái q1,<br />
dãy ký tự đọc vào sẽ đưa vào thẻ từ Token. Nếu trạng thái mới trở lại q0 mà thẻ từ Token <br />
thì xuất Token rồi gán lại thẻ từ Token = . Cứ như vậy, DFA sẽ tách được toàn bộ các<br />
âm tiết trong văn bản tiếng Việt. Bảng chữ cái chấp nhận được (tiếng Việt) gồm: 17 chữ<br />
cái phụ âm (b c d đ g h k l m n p q r s t v x) và 12 chữ cái nguyên âm (a ă â e ê i o ô ơ u ư<br />
y). Mỗi chữ cái nguyên âm có thể kết hợp với 6 thanh (ngang, huyền, hỏi, ngã, sắc, nặng),<br />
nên số chữ cái nguyên âm có dấu thanh là 126 = 72. Do vậy, tổng số ký tự Việt là<br />
17+72 = 89.<br />
<br />
<br />
<br />
<br />
76 T. N. Anh, … , Long, "Kü thuËt tèi u ®a môc tiªu… kiÓm lçi tiÕng ViÖt."<br />
Nghiªn cøu khoa häc c«ng nghÖ<br />
<br />
<br />
<br />
<br />
Hình 1. Automat hữu hạn tiền định (DFA) tách âm tiết.<br />
<br />
Thuật toán minh hoạ DFA tách âm tiết:<br />
(* trạng thái bắt đầu q0 *)<br />
1) Token ’’;<br />
2) Repeat<br />
a) i 0;<br />
b) SizeRealBuffer ReadFile(File, Buffer);<br />
c) While (i < SizeRealBuffer) Do<br />
c1) If Buffer[i] AlphabetTable Then<br />
(* chuyển sang trạng thái q1 *)<br />
c1t) Token Token + Buffer[i]<br />
Else (* chuyển sang trạng thái q0 *)<br />
c1f) If Token ’’ Then<br />
(*Kiểm tra thẻ từ Token, ví dụ:*)<br />
c1f1) (*If SyllableCheck(Token) Then *)<br />
(*-----------------------------*)<br />
c1f2) Token ’’; (*sau khi xử lý*)<br />
c2) i i + 1;<br />
Until SizeRealBuffer = 0; (*kết thúc tệp văn bản*)<br />
3) If token ’’ Then<br />
(*Kiểm tra thẻ từ Token sau cùng*)<br />
(* If SyllableCheck(Token) Then *)<br />
<br />
3. XÂY DỰNG CÁC HÀM MỤC TIÊU THIẾT KẾ BẢNG BĂM TỪ ĐIỂN<br />
3.1. Bảng băm và hàm băm<br />
Bảng băm T (hash table) là một mảng có kích thước M. Hàm băm h là một ánh xạ từ<br />
tập khoá K sang tập chỉ số i của bảng băm: h: K i, 0 i M-1. Phần tử của bảng băm:<br />
T[i] (hình 2). Ở đây, tập khoá chính là từ điển âm tiết tiếng Việt. Mỗi âm tiết (syllable) là<br />
một chuỗi ký tự Việt, ứng với một khoá K. Ta biết rằng, mỗi ký tự Việt tương ứng với một<br />
mã của nó. (Chẳng hạn, chúng ta sử dụng ký tự Việt theo bảng mã Unicode TCVN<br />
6909:2001). Như vậy, mỗi âm tiết w có thể tương ứng với một khoá K theo cách tính:<br />
Kw = m1an-1 + m2an-2 + ... + mna0,<br />
trong đó, n là độ dài của chuỗi âm tiết; m1, m2,..., mn là các mã tương ứng của từng ký tự<br />
trong chuỗi âm tiết; a là cơ số | | = 89 (là kích thước bảng chữ cái), a có thể được chọn<br />
khảo sát trong khoảng từ 89 đến 255. Từ đó, ta có hàm băm tương ứng cho âm tiết w<br />
như sau:<br />
h(w) = (m1an-1 + m2an-2 + ... + mna0) mod M. (1)<br />
<br />
<br />
<br />
<br />
T¹p chÝ Nghiªn cøu KH&CN Qu©n sù, Sè 30, 04 - 2014 77<br />
Kü thuËt ®iÖn tö & Khoa häc m¸y tÝnh<br />
<br />
<br />
<br />
<br />
Hình 2. Mô tả bảng băm và hàm băm.<br />
3.2. Khả năng đụng độ<br />
Trường hợp w1 w2 và h(w1) h(w2): không xảy ra đụng độ.<br />
Trường hợp w1 w2 và h(w1) = h(w2): xảy ra đụng độ.<br />
Trong thực tế khi thiết kế bảng băm, nếu không tính toán cẩn thận sẽ gặp phải khá<br />
nhiều đụng độ, điều đó làm tăng thời gian tìm kiếm.<br />
Để ước lượng thời gian tìm kiếm, có thể mô tả cấu trúc bảng băm như sau: Giả sử bảng<br />
băm T sử dụng phương pháp kết nối trực tiếp như hình 3.<br />
<br />
<br />
<br />
<br />
Hình 3. Mô tả bảng băm T theo phương pháp kết nối trực tiếp.<br />
Khi thêm một phần tử vào bảng băm mà xảy ra đụng độ, có nghĩa là danh sách kết nối<br />
tăng thêm một phần tử. Như vậy, có thể tính được tổng số đụng độ cho toàn bộ bảng băm<br />
khi các danh sách liên kết có kích thước lớn hơn 1. Cũng có thể nói một cách khác, đụng<br />
độ chính là chi phí thời gian tìm kiếm một từ khoá trong bảng băm.<br />
Với bảng băm T bằng phương pháp kết nối trực tiếp (hình 3), ta gọi T[k].count là kích<br />
thước danh sách liên kết của phần tử thứ k của bảng băm T, khi đó, D[k] là số khả năng<br />
đụng độ tại phần tử thứ k của bảng băm T, được xác định:<br />
T [k ].count 1 khi T [k ].count 1<br />
D[k ] , (2)<br />
0 khi T [k ].count 1<br />
khả năng đụng độ cực đại của bảng băm T là:<br />
Dmax max {D[k ]} , (3)<br />
k 0 M 1<br />
tổng khả năng đụng độ của toàn bộ bảng băm T là:<br />
M 1<br />
Ddic D[k ] .<br />
k 0<br />
(4)<br />
<br />
Xét văn bản huấn luyện thực tế, mỗi từ wi trong danh sách đụng độ là D[k] sắp xếp tần<br />
suất xuất hiện là fw[i] giảm dần, tương ứng với xác suất xuất hiện là pw[i] giảm dần. Do<br />
vậy, tổng khả năng đụng độ theo thống kê âm tiết sẽ là:<br />
M 1 D [ k ]<br />
D fre i p<br />
k 0 i 1<br />
w [i ] , (5)<br />
<br />
<br />
<br />
<br />
78 T. N. Anh, … , Long, "Kü thuËt tèi u ®a môc tiªu… kiÓm lçi tiÕng ViÖt."<br />
Nghiªn cøu khoa häc c«ng nghÖ<br />
<br />
M 1 D[ k ]<br />
trong đó, p<br />
k 0 i 0<br />
w [i ] 1 (tổng toàn bộ xác suất của bảng băm).<br />
<br />
3.3. Không gian bài toán<br />
Như vậy, bài toán thiết kế bảng băm tối ưu<br />
với 2 mục tiêu (xung đột[9]) cụ thể:<br />
- Tối thiểu hoá kích thước bảng băm:<br />
fM = M min a<br />
- Tối thiểu hoá thời gian tìm kiếm:<br />
fD = Ddic (hoặc Dfreq) min a)<br />
* Không gian quyết định (hình 4a). Qua thống<br />
kê từ điển tiếng Việt[11], chúng tôi xác định<br />
fM<br />
được từ điển có chứa 6950 âm tiết tiếng Việt<br />
khác nhau. Do vậy, ta có các tham số sau: fD<br />
+ Từ điển N = 6950 âm tiết<br />
+ Cơ số a: 89 a 255 (mã ký tự Việt)<br />
+ Giới hạn bảng băm: ta chọn kích thước<br />
bảng băm để khảo sát trong vùng lân cận trên<br />
so với kích thước từ điển. Có thể khảo sát M b)<br />
trong khoảng: N M 3N(6950 M 20850).<br />
* Không gian mục tiêu (hình 4b): {(fD, fM)}.<br />
fM<br />
Hình 4. Không gian bài toán<br />
3.4. Kiểm tra âm tiết tiếng Việt dựa vào bảng băm<br />
Với bảng băm T và hàm băm h(w), ta có thuật toán kiểm lỗi chính tả âm tiết sau:<br />
<br />
Function SyllableCheck(w: string): Boolean;<br />
1) List T[h(w)];<br />
2) i 0;<br />
3) Repeat<br />
i i + 1;<br />
Until (List[i] = w) or (i = List.Count);<br />
4) Return (List[i] = w);<br />
<br />
Trong thuật toán này, List là danh sách chứa các âm tiết có cùng địa chỉ băm, và<br />
List.count chính là khả năng đụng độ theo công thức (2). Do vậy, độ phức tạp của thuật<br />
toán này là O(Dmax). Tốc độ tìm kiếm không chỉ phụ thuộc Dmax, mà còn phụ thuộc hệ số<br />
tải = N/M của bảng băm, thường người ta chọn 0.9, tức là kích thước bảng băm<br />
thường chọn lớn hơn N/ số phần tử cần được lưu trữ. (Với từ điển tiếng Việt có N = 6950<br />
âm tiết, ta chọn M Mmin = 6950/0.9 7722).<br />
4. TÌM TẬP PARETO THIẾT KÊ BẢNG BĂM TỐI ƯU<br />
Trong bài toán tối ưu đa mục tiêu, kết quả cần đạt được là một tập giải pháp xấp xỉ để<br />
người ra quyết định lựa chọn phương án phù hợp, tập xấp xỉ này được gọi là tập tối ưu đa<br />
mục tiêu. Tập này thường được lựa chọn theo phương pháp tối ưu Pareto.<br />
<br />
<br />
<br />
<br />
T¹p chÝ Nghiªn cøu KH&CN Qu©n sù, Sè 30, 04 - 2014 79<br />
Kü thuËt ®iÖn tö & Khoa häc m¸y tÝnh<br />
<br />
<br />
<br />
<br />
Hình 5. Minh hoạ tập Pareto của miền mục tiêu (f1, f2) min.<br />
Một tập hợp điểm được gọi là tập tối ưu Pareto (hình 5) nếu di chuyển từ một điểm<br />
(ví dụ điểm A) đến một điểm khác (điểm B) trong tập, bất kỳ cải thiện nào trong các hàm<br />
mục tiêu từ giá trị hiện tại sẽ làm ít nhất một giá trị của một hàm mục tiêu khác kém đi so<br />
với giá trị hiện tại[9]. Theo định nghĩa này, điểm C không phải là điểm tối ưu Pareto.<br />
Điểm C là không thuộc Pareto vì nó bị trội bởi cả hai điểm A và điểm B. Điểm A và B<br />
hoàn toàn không bị trội bởi bất kỳ điểm nào khác, vì thế, chúng nằm trên đường cong<br />
Pareto. Cùng vì thế, tập Pareto còn được gọi là tập các điểm không bị trội.<br />
Một trong những phương pháp giải bài toán tối ưu đa mục tiêu, đó là phương pháp -<br />
Contraint. Theo phương pháp này, chỉ những mục tiêu nào được tối ưu trong khi các mục<br />
tiêu khác được chuyển hoá thành các ràng buộc của mục tiêu đã lựa chọn. Khi đó, bài toán<br />
tối ưu k mục tiêu (k ≥ 2) được mô tả:<br />
<br />
min f j ( x ) / ( x ) D (6)<br />
<br />
sao cho, f j (x ) ≤ với i =1, 2, ..., k; i j và D Rn. Trong phương pháp vector được<br />
xác định và sử dụng biên (biên trên trong trường hợp cực tiểu) cho tất cả các mục tiêu i.<br />
Để đưa ra vector , phương pháp này sẽ tìm một giải pháp tối ưu qua việc tối ưu mục tiêu<br />
j. Bằng việc thay đổi sẽ đạt được một tập tối ưu. Trong thực nghiệm chúng tôi áp dụng<br />
phương pháp -Contraint để thiết kế bảng băm tối ưu dựa trên 2 yếu tố: tối thiểu hoá đụng<br />
độ (Ddic min, hoặc Dfreq min) và tối thiểu hoá kích thước bộ nhớ (M min). Vì đây<br />
là hai mục tiêu xung đột với nhau, do vậy, đây là dạng bài toán tối ưu đa mục tiêu [9]. Có<br />
thể giải quyết một cách đơn giản bằng cách tìm các tham số tối ưu theo thứ tự: Tìm tập các<br />
giá trị tối ưu về khả năng đụng độ trước, sau đó tìm tập các giá trị tối ưu về kích thước bộ<br />
nhớ, đó cũng là tập Pareto [7], [13] cần tìm. Trong một số trường hợp, có thể kết hợp<br />
phương pháp tương tác để định hướng vào vùng kết quả trong không gian mục tiêu [12].<br />
Phương pháp -Contraint được xây dựng theo các bước sau:<br />
+ Bước 1: Với mỗi fM → Tìm min fD → Kết quả: fM, min fD.<br />
+ Bước 2: Sắp xếp min fD, fM giảm dần theo min fD, rồi đến fM.<br />
+ Bước 3: Với mỗi min fD chỉ giữ lại min fM → Tập tối ưu Pareto.<br />
Trên cơ sở đó, với mỗi từ điển âm tiết tiếng Việt được sắp xếp theo alphabet (Ddic) hay<br />
tần suất (Dfreq), ta có các thuật toán sau:<br />
Thuật toán 1: Tìm tập thiết kế tối ưu cho bảng băm với (Ddic, M) min<br />
B1) Tìm tập Ddic min theo M:<br />
For M Mmin To Mmax<br />
1) minDmax DIC.count;<br />
2) minDdic DIC.count;<br />
3) For a amin To amax<br />
a) For i 0 To M - 1<br />
<br />
<br />
<br />
<br />
80 T. N. Anh, … , Long, "Kü thuËt tèi u ®a môc tiªu… kiÓm lçi tiÕng ViÖt."<br />
Nghiªn cøu khoa häc c«ng nghÖ<br />
<br />
a1) T[i] ;<br />
b) For i 0 To DIC.count – 1<br />
b1) w DIC[i];<br />
b2) T[h(w)] T[h(w)] {w};<br />
c) Dmax 0;<br />
d) Ddic 0;<br />
e) For i 0 To M – 1<br />
e1) If (T[i].count - 1 > Dmax) Then<br />
e1t) Dmax T[i].count - 1;<br />
e2) If (T[i].count > 1) Then<br />
e2t) Ddic Ddic + T[i].count - 1;<br />
f) If (minDdic = Ddic) and (minDmax > Dmax) Then<br />
ft1) aopt a;<br />
ft2) minDmax Dmax;<br />
Else If (minDdic > Ddic) Then<br />
ff1) aopt a;<br />
ff2) minDmax Dmax;<br />
ff3) minDdic Ddic;<br />
4) List[M-Mmin].Mopt M;<br />
5) List[M-Mmin].aopt aopt;<br />
6) List[M-Mmin].Dmax minDmax;<br />
7) List[M-Mmin].Ddic minDdic;<br />
B2) Tìm tập M min theo Ddic (tìm tập Pareto)<br />
1) Sắp xếp List theo Ddic tăng dần;<br />
2) Mỗi Ddic chỉ giữ lại một phần tử có Mopt = min;<br />
3) i 0; //Loại bỏ tiếp các điểm bị trội.<br />
4) While (i < List.Count - 1)<br />
a) k i;<br />
b) minM = List[k].Mopt;<br />
c) For j i + 1 To List.Count - 1<br />
c1) If (List[j].Mopt < minM) Then<br />
i) k j;<br />
ii) minM List[j].Mopt;<br />
d) If (k > i) Then<br />
d1) j i;<br />
d2) d i;<br />
d3) while (d < k)<br />
i) List.RemoveAt(j);//Loại bỏ phần tử<br />
ii) d d + 1;<br />
e) i i + 1;<br />
<br />
Trong thực tế, có nhiều âm tiết xuất hiện với tần số cao [1], nếu chúng rơi vào những<br />
địa chỉ có khả năng đụng độ cao sẽ ảnh hưởng trực tiếp đến thời gian kiểm lỗi cho toàn<br />
văn bản. Chính vì vậy, có thể cải thiện thời gian thực hiện thông qua việc khảo sát với các<br />
văn bản tiếng Việt thực tế, thống kê âm tiết. Từ điển freqDIC với các âm tiết được sắp xếp<br />
giảm dần theo tần suất xuất hiện của chúng.<br />
Thuật toán 2: Tìm tập thiết kế tối ưu cho bảng băm với (Dfreq, M) min<br />
//Từ điển FreqDIC được sắp xếp giảm dần theo tần suất.<br />
B1) Tìm tập Dfreq min theo M:<br />
For M Mmin To Mmax<br />
1) minDmax freqDIC.count;<br />
2) minDfreq freqDIC.count;<br />
3) fmax f[0]; (*f[i]: tần suất của âm tiết freqDIC[i]*)<br />
4) For a amin To amax<br />
<br />
<br />
<br />
<br />
T¹p chÝ Nghiªn cøu KH&CN Qu©n sù, Sè 30, 04 - 2014 81<br />
Kü thuËt ®iÖn tö & Khoa häc m¸y tÝnh<br />
<br />
a) For i 0 To M – 1<br />
a1) T[i] ;<br />
b) For i 0 To freqDIC.count – 1<br />
b1) w freqDIC[i]; (* chèn vào cuối T[h(w)] *)<br />
b2) T[h(w)] T[h(w)] {w,f[i]/fmax};<br />
c) Dmax 0;<br />
d) Dfreq 0;<br />
e) For i 0 To M – 1<br />
e1) If T[i].count - 1 > Dmax Then<br />
e1t) Dmax T[i].count - 1;<br />
e2) If T[i].count > 1 Then<br />
e2t) For k = 1 To T[i].count – 1<br />
i) Dfreq Dfreq + k*T[i].Item[k].p;<br />
f) If (minDfreq = Dfreq) and (minDmax > Dmax) Then<br />
ft1) aopt a;<br />
ft2) minDmax Dmax;<br />
Else If minDfreq > Dfreq Then<br />
ff1) aopt a;<br />
ff2) minDmax Dmax;<br />
ff3) minDfreq Dfreq;<br />
4) List[M-Mmin].Mopt M;<br />
5) List[M-Mmin].aopt aopt;<br />
6) List[M-Mmin].Dmax minDmax;<br />
7) List[M-Mmin].Dfreq minDfreq;<br />
B2) Tìm tập M min theo Dfreq: Tương tự B2 ở thuật toán 1.<br />
(Ddic được thay bằng Dfreq trong phần này)<br />
<br />
Với các văn bản thực tế đủ lớn, đủ bao trùm nhiều lĩnh vực khác nhau của tiếng Việt,<br />
qua thống kê theo âm tiết để tính tần suất xuất hiện của chúng. Đối với các từ xuất hiện với<br />
tần suất rất cao, nếu rơi vào danh sách đụng độ cao sẽ ảnh hưởng đến thời gian tìm kiếm.<br />
Nếu những từ này đứng ở đầu danh sách đụng độ, thì vấn đề có thể xem như đã được giải<br />
quyết. Do đó, nếu từ điển được sắp xếp trước theo tần suất giảm dần thì thuật toán 2 sẽ tìm<br />
được kết quả có ý nghĩa thực tế hơn thuật toán 1. Với các tập kết quả tìm được qua 2 thuật<br />
toán, các tập tối ưu Pareto, ta có thể chọn một số điểm để thử nghiệm khảo sát đánh giá.<br />
5. THỬ NGHIỆM ĐÁNH GIÁ<br />
5.1. Tập tối ưu cho thiết kế bảng băm kiểm tra âm tiết tiếng Việt<br />
Các tham số cho thuật toán 1 và 2 (mục 4) như sau: từ điển 6950 âm tiết; hệ số a: 89 <br />
a 255; khoảng khảo sát bảng băm: 6950 M 20850. Các tập tối ưu pareto tìm được<br />
theo các thuật toán, biểu diễn ở dạng đồ thị dưới dây.<br />
<br />
<br />
<br />
<br />
a) Tập Pareto (Ddic min,M min) b) Tập Pareto (Dfreq min,M min)<br />
Hình 6. Các tập tối ưu Pareto<br />
<br />
<br />
<br />
<br />
82 T. N. Anh, … , Long, "Kü thuËt tèi u ®a môc tiªu… kiÓm lçi tiÕng ViÖt."<br />
Nghiªn cøu khoa häc c«ng nghÖ<br />
<br />
<br />
<br />
<br />
a) Tập cục bộ (Dsummin, Mmin) b) Tập cục bộ (Dfreqmin, Mmin)<br />
Hình 7. Các tập tối ưu cục bộ Dmax min<br />
5.2. Thử nghiệm và đánh giá bảng băm từ điển tối ưu<br />
5.2.1. Lựa chọn thiết kế tối ưu tiêu biểu cho bảng băm<br />
Như đã phân tích, độ phức tạp của thuật toán kiểm lỗi âm tiết bằng bảng băm chính là<br />
khả năng đụng độ O(Dmax). Theo hình 7.a và 7b thì {Dmax} = {3..6}, tức là O(Dmax) = O(1).<br />
Về toàn cục, ta phải lựa chọn Ddic/Dtext min và M min. Với kích thước từ điển<br />
n = 6950 âm tiết, ta thấy với: n M 3n thì O(M) = O(n). Các hình 6a và 6b minh hoạ các<br />
tập tối ưu Pareto. Chọn điểm tối ưu đầu tiên cho mỗi trường hợp, gần nhau và ở lân cận<br />
của Mmin = N/ 7722 để khảo sát (bảng 1).<br />
Bảng 1. Chọn điểm tối ưu tiêu biểu đầu tiên ở lân cận của Mmin.<br />
Chọn điểm đầu tiên Mopt aopt Dmax Dopt<br />
Ddic min (hình 6a) 7713 239 4 2177<br />
Dfreq min (hình 6b) 7735 163 4 2.528<br />
Thực hiện thử nghiệm kiểm lỗi âm tiết với 3 trường hợp sau:<br />
Thử nghiệm TN1: Bảng băm tối ưu: Mopt = 7713, Dopt = 2177 (Dopt = Ddic). Xây<br />
dựng bảng băm này với từ điển âm tiết được sắp xếp theo alphabet.<br />
Thử nghiệm TN2: Bảng băm tối ưu: Mopt = 7713, Dopt = 2177. Xây dựng bảng băm<br />
này với từ điển âm tiết được sắp xếp theo tần suất giảm dần.<br />
Thử nghiệm TN3: Bảng băm tối ưu: Mop t= 7735, Dopt = 2.528 (Dopt = Dfreq). Xây<br />
dựng bảng băm với từ điển âm tiết được sắp xếp theo tần suất giảm dần.<br />
Bộ chương trình kiểm lỗi âm tiết tiếng Việt trên file văn bản, thiết kế hàm<br />
SyllableCheck trên cơ sở bảng băm và hàm băm. Ngoài ra, dùng các thuật toán khác như:<br />
tìm kiếm nhị phân [1], cấu trúc âm tiết [1], Automat hữu hạn [1], [9], [5] để so sánh. Nếu<br />
âm tiết hợp lệ, hàm SyllableCheck sẽ trả về TRUE, ngược lại là FALSE. Các thử nghiệm<br />
chạy trên Laptop Lenovo-3000-Y410, Intel Core2Duo CPU T5750 @2.0GHz (2CPU),<br />
3GB RAM, 160GB HDD, hệ điều hành Windows XP SP2.<br />
Ngữ liệu văn bản tiếng Việt dùng cho thử nghiệm là kho ngữ liệu VietTreeBank với<br />
gần 2 triệu âm tiết, có kích thước cỡ 10MB. Cứ kiểm 10.000 âm tiết sẽ ghi nhận thời gian<br />
một lần để khảo sát. Chạy 10-15 lần, lấy 5 lần thử tốt nhất, rồi tính trung bình để so sánh<br />
ba thử nghiệm TN1, TN2 và TN3.<br />
5.2.2. Kết quả thử nghiệm kiểm lỗi âm tiết tiếng Việt với điểm tối ưu đầu tiên<br />
Kết quả thử nghiệm được trình bày trong bảng 2. Từ bảng 2, ta thấy thời gian chạy các<br />
thử nghiệm: T1 < T2 < T3. Như vậy, cả về lý luận (đã phân tích ở mục 3.2) lẫn thực nghiệm<br />
đều chứng tỏ việc thiết kế bảng băm tối ưu khi sử dụng từ điển được sắp xếp giảm dần<br />
theo tần suất thống kê âm tiết sẽ cho kết quả tốt hơn (thời gian chạy ngắn hơn). Tức là các<br />
âm tiết có tần suất cao được ưu tiên sinh khoá trước, các âm tiết có tần suất thấp được sinh<br />
khoá sau. Các phần tử đụng độ của bảng băm này chủ yếu chứa các âm tiết có tần suất<br />
thấp, làm cho việc tìm kiếm thực tế trở nên nhanh hơn.<br />
<br />
<br />
<br />
T¹p chÝ Nghiªn cøu KH&CN Qu©n sù, Sè 30, 04 - 2014 83<br />
Kü thuËt ®iÖn tö & Khoa häc m¸y tÝnh<br />
<br />
Bảng 2. So sánh thời gian chạy trung bình với các thử nghiệm.<br />
Lần Thử nghiệm TN1 Thử nghiệm TN2 Thử nghiệm TN3<br />
thử T1(giây) T2(giây) T3(giây)<br />
1 4,015 3,922 3,719<br />
2 4,078 3,953 3,766<br />
3 4,016 3,937 3,750<br />
4 4,016 3,953 3,812<br />
5 4,047 3,922 3,787<br />
TB 4,034 3,937 3,766<br />
<br />
5.2.3. So sánh thời gian thực hiện với một số thuật toán khác<br />
Thử nghiệm kiểm lỗi âm tiết tiếng Việt bằng tìm kiếm nhị phân (TKNP)[1], cấu trúc<br />
âm tiết (CTÂT)[1] và Automat hữu hạn đơn định DFA (Deterministic Finite Automat) [1],<br />
[9], [5] để so sánh thời gian chạy với bảng băm tối ưu đã nêu.<br />
Bảng 3. So sánh thời gian chạy của các thuật toán khác nhau.<br />
Lần TKNP CTÂT DFA TN1 TN2 TN3<br />
thử TB (giây) TC (giây) TA (giây) T1 (giây) T2 (giây) T3 (giây)<br />
1 9,906 7,406 5,360 4,015 3,922 3,719<br />
2 9,953 7,313 5,359 4,078 3,953 3,766<br />
3 9,891 7,437 5,422 4,016 3,937 3,750<br />
4 9,907 7,391 5,407 4,016 3,953 3,812<br />
5 9,937 7,391 5,391 4,047 3,922 3,781<br />
TB 9,919 7,388 5,388 4,034 3,937 3,766<br />
Kết quả thử nghiệm với<br />
giây các thuật toán (tìm kiếm nhị<br />
phân, luật cấu tạo âm tiết, và<br />
Automat hữu hạn đơn định)<br />
cho thấy: bảng băm được thiết<br />
kế với tham số tối ưu đầu tiên<br />
của tập tối ưu Pareto (hình 6)<br />
trong các trường hợp có và<br />
NAT<br />
không có sử dụng thống kê<br />
âm tiết, đều cho kết quả thực<br />
Hình 8. Đồ thị so sánh thời gian chạy nghiệm tốt hơn về thời gian<br />
của các thuật toán khác nhau. chạy, trong đó bảng băm tối<br />
ưu theo thống kê âm tiết là<br />
hiệu quả nhất. Các điểm tối ưu còn lại (ở bên phải) trên đường cong Pareto (hình 6a, 6b)<br />
hiển nhiên cho kết quả tốt hơn nữa về thời gian chạy.<br />
6. KẾT LUẬN<br />
Tối ưu đa mục tiêu là hướng tiếp cận mới trong thiết kế bảng băm từ điển. Qua thử<br />
nghiệm với các điểm tối ưu trên tập Pareto với kích thước bảng băm xấp xỉ từ điển,<br />
M ≈ 1,11n (n là kích thước từ điển âm tiết), độ phức tạp thời gian là O(1), cho thấy, thời<br />
gian kiểm lỗi âm tiết tiếng Việt bằng bảng băm này nhanh hơn các thuật toán khác như:<br />
tìm kiếm nhị phân, cấu tạo âm tiết, automat hữu hạn đơn định. Kết quả nghiên cứu này rất<br />
có ý nghĩa và giá trị cho hướng nghiên cứu về xử lý ngôn ngữ tiếng Việt.<br />
<br />
TÀI LIỆU THAM KHẢO<br />
[1]. Anh Nguyễn Lê, Lai Trần Duy, Long Phạm Thế, Xuất Nguyễn Văn, “Giáo trình Lý Thuyết<br />
Mã nén”, NXB. Học Viện KTQS, 2001.<br />
[2]. Anh Trần Ngọc, Tĩnh Đào Thanh, “Kỹ thuật mã hoá âm tiết tiếng Việt và các mô hình n-<br />
grams ứng dụng kiểm lỗi cách dùng từ và cụm từ tiếng Việt”, Tạp chí CNTT & TT, Tập V-1,<br />
Số 6 (26), 9/2011.<br />
<br />
<br />
<br />
84 T. N. Anh, … , Long, "Kü thuËt tèi u ®a môc tiªu… kiÓm lçi tiÕng ViÖt."<br />
Nghiªn cøu khoa häc c«ng nghÖ<br />
<br />
[3]. Anh Trần Ngọc, Tĩnh Đào Thanh, "Về bài toán kiểm lỗi chính tả tiếng Việt trên máy tính",<br />
Tạp chí Khoa học và Kỹ thuật, HVKTQS, số 116, 2006, tr.29-40.<br />
[4]. Anh Trần Ngọc, “Kỹ thuật mã hoá từ tiếng Việt và ứng dụng kiểm lỗi chính tả từ - cụm từ<br />
trong văn bản”, Luận văn thạc sĩ CNTT, Học viện KTQS, Hà Nội, 2007.<br />
[5]. Clifford A. Shaffer, “A Practical Introduction to Data Structures and Algorithm Analysis”,<br />
3rd Edition (C++ Version), Book, 2010.<br />
[6]. Daciuk J. Mihov S. Watson B.W. Watson R.E., “Incremental Construction of Minimal Acycle<br />
Finite-State Automata”, Book, 2000.<br />
[7]. Eckart Zitzler, Marco Laumanns and Stefan Bleuler, “A Tutorial on Evolutionary<br />
Multiobjective Optimization”, Book, 2004.<br />
[8]. Gilles Brassard, Paul Bratley, “Algorithmics: Theory and Practice”, Book, 1988.<br />
[9]. Huyen N.T.M., Luong V.X., Phuong L.H. (2003), "Tách từ bằng từ điển và gán nhãn từ loại<br />
bằng xác suất", In Kỷ yếu hội thảo quốc gia ICT.RDA, 2003.<br />
[10]. Lam T. Bui and Sameer Alam, “Multi-Objective Optimization in Computation Intelligence:<br />
Theory and Practice”, Information Science Reference. IGI Global, 5, 2008.<br />
[11]. Linh Hoàng Thị Tuyền, Lương Vũ Xuân, Thuỷ Phạm Thị, Thu Đào Thị Minh, Hoà Đặng<br />
Thanh, [Phê Hoàng], “Từ điển Tiếng Việt”, Book, 2011.<br />
[12]. Long Nguyen, and Lam Thu Bui, "A multi-point interactive method for multi-objective<br />
evolutionary algorithms". In Proceeding of International Conference on Knowledge Systems<br />
Engineering, IEEE Computer Society, CPS, 2012, pages 107–112.<br />
[13]. Shan Y., Ang Y., and Bui L.T., “Success in Evolutionary Computation”, Studies in<br />
Computational Intelligence. 2008.<br />
[14]. Thomas H.C., Charles E.L., Ronald L.R., Clifford S., Introduction to Algorithms, Third<br />
Edition, The MIT Press, 2009.<br />
<br />
<br />
ABSTRACT<br />
MULTI-OBJECTIVE OPTIMIZATION TECHNIQUES TO DESIGNHASH TABLES<br />
OF DICTIONARY FOR VIETNAMESE SPELL CHECKING<br />
<br />
To design a hash table for a dictionary of Vietnamese syllables, it is neccesary to<br />
solve both issues that relate in opposition each to other: size of hash table and hash<br />
collisions. In this paper the method to resolve this problem for both objectives: size of<br />
hash table and hash collisions, which should be optimality smaller, is proposed. The test<br />
results with some optimal points on the Pareto set, size of hash table 1.11n (n is the size of<br />
the dictionary) and the time complexity of searching the hash table O(1) shows that the<br />
advantages of the proposed algorithms are better than that of others as binary search,<br />
deterministic finite automata, or analysis based on Vietnamese syllable structure.<br />
<br />
Keywords: Multi-objects optimazation; Pareto set; Optimal hash table.<br />
<br />
<br />
Nhận bài ngày 15 tháng 02 năm 2014<br />
Hoàn thiện ngày 10 tháng 03 năm 2014<br />
Chấp nhận đăng ngày 20 tháng 03 năm 2014<br />
<br />
<br />
<br />
<br />
Địa chỉ: * Học viện Kỹ thuật Quân sự;<br />
** Trường Sĩ quan Tăng - Thiết giáp.<br />
<br />
<br />
<br />
<br />
T¹p chÝ Nghiªn cøu KH&CN Qu©n sù, Sè 30, 04 - 2014 85<br />