Xõy dựng hàm tỡm kiếm văn bản

Một phần của tài liệu Bài toán tìm kiếm văn bản sử dụng giải thuật di truyền (Trang 44)

4. PHƯƠNG PHÁP NGHIấN CỨU

3.2.Xõy dựng hàm tỡm kiếm văn bản

Để xỏc định tiờu chớ tớnh toỏn cho bài toỏn tỡm kiếm văn bản bằng giải thuật di truyền ta sẽ xõy dựng hàm tỡm kiếm như sau:

Hàm tỡm kiếm cú tiờu chớ đỏnh giỏ bằng tổng của hai đại lượng: 1) độ dài của xõu con chung dài nhất giữa đoạn văn bản đú và mẫu (đều cú độ dài M ký tự), 2) độ dài trựng khớp về giỏ trị và vị trớ của đoạn văn bản đú với mẫu. Xõu con chung dài nhất ở đõy là dóy ký tự dài nhất theo thứ tự giống nhau giữa hai xõu (khụng nhất thiết phải liền nhau), trường hợp tốt nhất xảy ra là xõu con chung dài nhất cú độ dài M (dài bằng văn bản mẫu) - tức là hai xõu so sỏnh là giống nhau – đú chớnh là vị trớ xuất hiện của cả mẫu. Để tỡm

xõu con chung dài nhất thuật toỏn hiệu quả là dựng quy hoạch động cú độ phức tạp O(M2) (mục 3.4). Trong thực tế khi tỡm kiếm số M thường khụng lớn nờn hoàn toàn chấp nhận được.

Hàm tỡm kiếm được xõy dựng là: F(x) = a*G(x) + b*H(x) (3.1.1) Trong đú:

x là vị trớ trong văn bản (x  [1..N]).

G(x) là tần suất xuất hiện Sm trong đoạn S[x..x+M] của S (kể từ vị trớ x cho đến vị trớ x+M trong văn bản S). G(x) được tớnh bằng hàm Quy hoạch động tỡm độ dài xõu con chung lớn nhất. H(x) là độ đo thứ tự, phản ỏnh thứ tự xuất hiện cỏc ký tự trong S[x..x+m] trựng với Sm. Ta cú thể viết là G(Sx, Sm) thay cho G(x).

H(x) được tớnh bằng cỏch so khớp lần lượt từng ký tự, giỏ trị trả về chớnh là số ký tự trựng khớp (cả về giỏ trị và vị trớ) của hai văn bản Sm và S[x..x+M]. Ta cú thể viết là H(Sx, Sm) thay cho H(x).

a và b là cỏc tham số đúng vai trũ trọng số của G(x) và H(x), để thuận cho việc đỏnh giỏ hàm F ta cú thể quy định ràng buộc cho a và b là: a = 1 – b.

Như vậy dể thấy G(x) và H(x) cú giỏ trị trong khoảng [0..M], và do đú hàm F cũng cú miền giỏ trị trong khoảng [0, M] , tức là Fmax(x)=M. Tuỳ thuộc vào mục tiờu của bài toỏn và căn cứ vào giỏ trị của hàm tỡm kiếm F, ta cú thể giải quyết được mọi yờu cầu đặt ra cho bài toỏn tỡm văn bản.

3.3. Phỏt biểu bài toỏn tỡm kiếm văn bản theo hƣớng tiếp cận di truyền

Dựa vào hàm tỡm kiếm (3.1.1) ta phỏt biểu bài toỏn tỡm kiếm văn bản dưới dạng bài toỏn tối ưu hàm một biến như sau:

Xột bài toỏn:

“Cho trước một văn bản S cú độ dài N và một văn bản mẫu Sm cú độ dài M (M ≤ N). Tỡm cỏc giỏ trị của x [1..N] sao cho F(x) = a*G(x) + b*H(x) k”.

Trong đú k là giỏ trị ngưỡng cho trước (0  k  FMax(x)), k đúng vai trũ tham số xỏc định độ chớnh xỏc của hàm mục tiờu.

Bài toỏn đặt ra là tỡm cỏc giỏ trị x sao cho F(x) đạt giỏ lớn hơn hoặc bằng ngưỡng k. Nếu tỡm được cỏc giỏ trị xmax để F(xmax) = M thỡ xmax chớnh là vị trớ xuất hiện chuỗi Sm cần tỡm trong văn bản S. Trường hợp bài toỏn chỉ cho kết quả tương đối tốt thỡ x là cỏc vị trớ mà trong đoạn [x, x+M] cú xuất hiện một phần trong xõu mẫu (gần giống với sõu mẫu). Trong trường hợp này ta cú giữ lại kết quả hay khụng phụ thuộc vào ngưỡng k.

Để đạt được mục tiờu tỡm kiếm ta đưa ra một ngưỡng tỡm kiếm k và xem xột bài toỏn tỡm đoạn văn bản trong S gần đỳng với mẫu Sm, hoặc cú độ dài đoạn trựng khớp lớn hơn một ngưỡng k cho trước. Thực chất trong trường hợp tỡm giỏ trị Max thỡ chỉ cần hàm G(x) hoặc H(x) là đó đủ để đỏnh giỏ hàm F(x) nhận cực đại. Nhưng khi đi tỡm giỏ trị hàm F đạt một ngưỡng k cho trước, nếu đoạn mẫu văn bản là ngắn thỡ việc dựng hàm H(x) lại ớt cú ý nghĩa, trường hợp đoạn mẫu văn bản dài thỡ H(x) lại đúng vai trũ quan trọng vỡ lẽ nếu chỉ căn cứ vào G(x) để đỏnh giỏ thỡ giả sử trong S cú đoạn văn bản M ký tự mà một nửa số ký tự đầu tiờn xuất hiện trong một nửa sau của chuỗi S thỡ sự giống nhau là khụng đỏng kể so với tại vị trớ mà hai nửa đầu của đoạn văn bản trong S và đoạn văn bản mẫu trựng khớp với nhau.

Vớ dụ: Cho xõu mẫu Sm =‟enables you to quickly search files for text‟ (44 ký tự)

Giả sử tại vị trớ x trong văn bản S cú đoạn văn bản 44 ký tự tớnh từ vị trớ x là Sx = „search anything from a single file to an ent‟ (vị trớ x là ký tự s đầu tiờn trong chuỗi). Khi đú giỏ trị hàm quy hoạch động G(Sx, Sm) = 20 lớn hơn nhiều so với sự xuất hiện trựng khớp mà ta cú thể quan sỏt thấy (chỉ cú từ

search là xuất hiện tốt nhất so với mục tiờu tỡm kiếm). Khi đú hàm H(Sx, Sm) sẽ khống chế vị trớ trựng khớp giữa hai chuỗi, sự kết hợp của H(x) và G(x) khi

đú hàm F(x) sẽ cho ta kết quả sỏt với mục tiờu tỡm kiếm. Tuỳ thuộc vào độ mẫu tỡm kiếm mà ta cú thể điều chỉnh tham số a và b sao cho kết quả tỡm kiếm là tốt nhất. Ta nờn để hệ số a lớn hơn b, tức là ưu tiờn dựng hàm quy hoạch động để đỏnh giỏ giỏ trị hàm F. Lý do vỡ trong trường hợp mẫu Sm khụng lớn thỡ hiển nhiờn theo định nghĩa hàm quy hoạch động thỡ G(x) đó xỏc định luụn cả khả năng trựng khớp của 2 đoạn văn bản, độ lớn trựng khớp này tỷ lệ thuận với hàm quy hoạch động (độ dài xõu con chung càng lớn thớ xỏc suất cỏc ký tự trựng khớp càng nhiều). Trường hợp tỡm Max thỡ nờn để a = 1 và b = 0 vỡ như đó núi ở trờn, lỳc này hàm G(x) cú giỏ trị bằng M thỡ đương nhiờn cỏc ký tự sẽ trựng khớp cả về giỏ trị và vị trớ, ta sẽ khụng phải mất thời gian để tớnh toỏn hàm H(x).

Bài toỏn tỡm kiếm văn bản phỏt biểu ở trờn rất phự hợp với phương phỏp giải quyết bằng giải thuật di truyền vỡ đõy là bài toỏn tối ưu hàm một biến và hàm mục tiờu là hàm F. Ta sẽ sử dụng ưu thế của giải thuật di truyền để giải bài toỏn này, chi tiết trong phần 3.5.

Phương phỏp tiếp cận di truyền cú thể khụng tỡm được hết tất cả cỏc vị trớ xuất hiện mẫu trong văn bản, nhưng nú sẽ rất hữu hiệu trong việc giải quyết bài toỏn tỡm kiếm với yờu cầu đặt ra là cú xuất hiện (chớnh xỏc) hay khụng hoặc tỡm xuất hiện gần đỳng nhất. Đặc biệt khi ta phải tỡm trong toàn ổ đĩa mỏy tớnh cỏc file văn bản cú chứa một nội dung nào đú, thỡ mục tiờu trở thành tỡm thấy file cú chứa nội dung gần giống với văn bản đú. Khi đú ta chỉ cần sự xuất hiện gần đỳng nhất của nội dung tỡm kiếm trong file và đưa ra vị trớ xuất hiện đú (chứ khụng nhất thiết phải đưa ra tất cả cỏc vị trớ xuất hiện trong file).

3.4. Tỡm độ dài xõu con chung lớn nhất bằng quy hoạch động

- Định nghĩa xõu con: Xõu s1 được gọi là con của xõu s2 nếu mọi s1[i] thuộc s1 đều xuất hiện trong s2 theo thứ tự.

- Bài toỏn tỡm độ dài xõu con chung lớn nhất: Cho 2 xõu X,Y. Hóy tỡm xõu con của X và của Y cú độ dài lớn nhất.

* Cụng thức QHĐ:

Gọi L(i,j) là độ dài xõu con chung dài nhất của xõu X(i) gồm i kớ tự phần đầu của X (X(i) = X[1..i]) và xõu Y(j) gồm j kớ tự phần đầu của Y (Y(j) =Y[1..j]).

Ta cú cụng thức quy hoạch động như sau: L(0,j)=L(i,0)=0.

L(i,j) = L(i - 1,j - 1)+1 nếu X[i] = Y[j].

L(i,j) = max(L(i - 1,j), L(i,j - 1)) nếu X[i] ≠ Y[j].

* Cài đặt:

Bảng phương ỏn là một mảng 2 chiều L[0..m, 0..n] để lưu cỏc giỏ trị của hàm QHĐ L(i,j). Đoạn chương trỡnh cài đặt cụng thức QHĐ trờn như sau: for i:=0 to m do L[i,0]:=0;

for j:=0 to n do L[0,j]:=0; for i:=1 to m do

for j:=1 to n do

if X[i]=Y[j] then L[i,j]:=L[i - 1,j - 1]+1 else L[i,j]:=max(L[i - 1,j],L[i,j - 1]]);

Như vậy chi phớ khụng gian của bài toỏn là O(n2), chi phớ thời gian là O(n2). Cú một phương phỏp cài đặt tốt hơn, chỉ với chi phớ khụng gian O(n) dựa trờn nhận xột sau: để tớnh ụ L[i,j] của bảng phương ỏn, ta chỉ cần 3 ụ L[i - 1,j-1],L[i-1,j] và L[i,j-1]. Tức là để tớnh dũng L[i] thỡ chỉ cần dũng L[i -1]. Do đú ta chỉ cần 2 mảng 1 chiều để lưu dũng vừa tớnh (P) và dũng

đang tớnh (L) mà thụi. Cỏch cài đặt mới như sau: for j:=0 to n do P[j]:=0; for i:=1 to m do begin L[0] := 0; for j:=1 to n do if X[i]=Y[j] then L[j]:=P[j - 1]+1 else L[i,j]:=max(P[j], L[j -1]); P := L; end;

Kết quả trả về độ dài xõu con chung dài nhất là P[n].

Cần lưu ý rằng với bài toỏn tỡm kiếm văn bản là ta đi tỡm xõu con chung dài nhất của hai chuỗi văn bản cú cựng độ dài M (cựng độ dài với chuỗi văn bản mẫu). Khi đú nếu xõu con dài nhất cú độ dài bằng M cú nghĩa là hai xõu giống nhau. Độ dài của xõu con chung càng tịnh tiến đến M cú nghĩa là hai xõu so sỏnh càng giống nhau. Trờn cơ sở đú ta cú thể đưa ra một vị trớ xuất hiện đoạn văn bản gần giống với văn bản mẫu theo yờu cầu đặt ra cho bài toỏn tỡm kiếm văn bản ở trờn.

3.5. Áp dụng giải thuật di truyền

Với bài toỏn tỡm kiếm văn bản được phỏt biểu trong mục 3.3 là: Tỡm x [1, n] | F(x) = a*G(x) + b*H(x)  k;

Cú nghĩa là tỡm x trong khoảng [1, n] để hàm F(x) đạt giỏ trị vượt ngưỡng k cho trước, x là cỏc giỏ trị nguyờn tương ứng với cỏc vị trớ trong văn bản tỡm kiếm cú độ dài n ký tự. Hai tham số a và b là cỏc tham số xỏc định độ ưu tiờn đỏnh giỏ theo G(x) và H(x), giả sử ta để a + b = 1.

Hàm F cú thể đạt giỏ trị vượt ngưỡng k tại nhiều vị trớ, giỏ trị lớn nhất của hàm F là M. Để thuận lợi cho việc đỏnh giỏ ta định lại giỏ trị F := F/M. Khi đú hàm F sẽ đạt giỏ trị lớn nhất = 1 và F cú miền giỏ trị  [0, 1].

Dựng giải thuật di truyền giải bài toỏn trờn ta cú hàm F là hàm mục tiờu (hàm lượng giỏ), x chớnh là cỏc nhiễm sắc thể; cỏc thành phần chớnh của giải thuật như sau:

3.5.1. Biểu diễn nhiễm sắc thể

Ta sử dụng một vectơ nhị phõn v làm nhiễm sắc thể để biểu diễn cỏc giỏ trị nguyờn của biến x. Chiều dài của vectơ chớnh là số bớt trong dóy bớt nhị phõn biểu diễn được số nguyờn lớn nhất trong miền giỏ trị của x, tức là chiều dài vectơ nhị phõn l = log2n. Như vậy vectơ nhị phõn cú chiều dài l sẽ biểu diễn được số nguyờn bằng là 2l . Vớ dụ văn bản cú chiều dài tối đa (số ký tự) là n = 4000 thỡ cần cú 12 bit cho vộc tơ nhị phõn (nhiễm sắc thể):

2048 = 211 < 4000  212

= 4096

Ánh xạ biến chuỗi nhị phõn (b12b11…b0) thành số nguyờn x trong khoảng [1..4000] được thực hiện như sau:

(b12 b11…..b0)2 = b x i i i          10 11 0 2

Vớ dụ, nhiễm sắc thể v1 = (110001100010) biểu diễn số 3170 và cũng là vị trớ ký tự thứ x = 3170 trong văn bản. Nhiễm sắc thể v2 = (000000001100) biểu diễn tại x = 12.

3.5.2. Khởi tạo quần thể

Khởi tạo quần thể đơn giản như sau: Ta tạo một quần thể cỏc nhiễm sắc thể, trong đú mỗi nhiễm sắc thể là một vectơ nhị phõn 12 bit, tất cả 12 bit của mỗi nhiễm sắc thể đều được khởi tạo ngẫu nhiờn.

3.5.3. Hàm mục tiờu

Hàm mục tiờu eval của cỏc vectơ nhị phõn v chớnh là hàm F:

eval(v) = F(x)

trong đú, nhiễm sắc thể v biểu diễn giỏ trị nguyờn x như đó núi ở trờn, hàm mục tiờu đúng vai trũ mụi trường, đỏnh giỏ từng lời giải theo độ thớch nghi của chỳng. F(x) được đỏnh giỏ qua hai hàm G(x) và H(x) đó trỡnh bày trong mục 3.2 và 3.3. Vớ dụ, 5 nhiễm sắc thể: v1 = „110100101011‟ v2 = „011110010011‟ v3 = „011000000011‟ v4 = „111100101111‟ v5 = „000000111111‟

tương ứng với cỏc giỏ trị x1 = 3371, x2 = 1939, x3 = 1539, x4 = 3887, x5 = 3371. Và cú độ thớch nghi tương ứng: eval(v1) = F(x1) = 0.1364 eval(v2) = F(x2) = 0.0909 eval(v3) = F(x3) = 0.4091 eval(v4) = F(x4) = 0.1364 eval(v5) = F(x5) = 0.0909

Dễ thấy, nhiễm sắc thể v3 là tốt nhất trong 5 nhiễm sắc thể này, vỡ hàm mục tiờu của nú trả về giỏ trị cao nhất.

3.5.4. Cỏc toỏn tử di truyền

Trong nghiờn cứu này ta sử dụng 3 phộp toỏn di truyền cơ bản là chọn lọc, đột biến và lai; cụ thể:

* Toỏn tử chọn lọc: Sử dụng toỏn tử chọn lọc tỷ lệ, ta thực hiện tiến trỡnh chọn lọc bằng cỏch quay bỏnh xe ru lột pop-size lần; mỗi lần chọn một nhiễm sắc thể từ quần thể hiện hành vào quần thể mới như đó trỡnh bày ở mục 2.2.2.1.

* Toỏn tử lai ghộp: Sử dụng toỏn tử lai ghộp một điểm (One-point Crossover),

Với cặp cha mẹ X, Y là cỏc vectơ m chiều như ký hiệu trờn, toỏn tử lai ghộp 1 điểm chọn ngẫu nhiờn một vị trớ k (1  k  m) rồi sinh ra 2 cỏ thể con theo cụng thức

X‟ = (x1,..., xk, yk+1,..., ym ) Y‟ = (y1,..., yk, xk+1,..., xm )

Nếu cỏ thể con X‟ thớch nghi tốt hơn cỏ thể cha mẹ X thỡ ta thay thế cỏ thể mẹ X bởi cỏ thể con X‟, tương tự Y‟ cũng được thay thế Y nếu Y‟ thớch nghi tốt hơn.

* Toỏn tử đột biến: Sử dụng toỏn tử đột biến như sau : - Chọn ngẫu nhiờn một NST trong quần thể.

- Tạo một số ngẫu nhiờn k trong khoảng từ 1 tới m, 1 ≤ k ≤ m.

- Thay đổi bớt thứ k. Nếu nhiễm sắc thể này khụng xấu hơn nhiễm sắc thể ban đầu thỡ đưa nhiễm sắc thể này vào quần thể để tham gia quỏ trỡnh tiến húa ở thế hệ tiếp theo.

3.5.5. Cỏc tham số

Đối với bài toỏn này, ta sử dụng cỏc tham số sau đõy: kớch thước quần thề pop-size = 20, xỏc suất lai tạo pc = 0.25, xỏc suất đột biến pm = 0.01 (nhỏ hơn nhiều so với xỏc suất lai). Xỏc suất lai pc = 0.25 nghĩa là cỏ thể v trong quần thể cú 25% cơ hội được chọn để thực hiện phộp lai; cũn xỏc suất đột biến pm = 0.01 lại là 1% 1 bớt bất kỳ của 1 cỏ thể bất kỳ trong quần thể bị đột biến.

3.5.6. Chi phớ thời gian

Thời gian tớnh toỏn (độ phức tạp) của thuật giải di truyền tỡm kiếm văn bản trỡnh bày ở trờn là O(i*Size*Sobit*M2). Trong đú i là số thế hệ tiến hoỏ, độ lớn của i tuỳ thuộc vào từng bài toỏn cụ thể, thường là i cú thể lớn đến hàng nghỡn; Size là kớch thước quần thể - số cỏ thể trong quần thể (thụng thường chỉ đến vài chục cỏ thể); M là chiều dài văn bản mẫu, M2 là thời gian thực hiện hàm quy hoạch động; Sobit là chiều dài nhiễm sắc thể (số bit của vộc tơ lời giải) được tớnh bằng log2N (N là độ dài văn bản), con số này cũng chỉ lờn đến vài chục bit. Sobit và Size thường rất nhỏ (coi như hằng số), do đú độ phức tạp của thuật giải chỉ là O(i*M2) cho một lần tỡm kiếm, chỉ tương đương hoặc nhỏ hơn độ phức tạp O(N*M) của cỏc thuật toỏn tỡm kiếm tuyến tớnh trờn cỏc văn bản dài - số N là rất lớn. Trong nghiờn cứu này ta dựng giải thuật di truyền để giải bài toỏn tỡm kiếm văn bản sẽ đỏp ứng được tốt yờu cầu về thời gian.

CHƢƠNG 4

KẾT QUẢ THỬ NGHIỆM VÀ PHÁT TRIỂN PHẦN MỀM ỨNG DỤNG

4.1. Cỏc kết quả thử nghiệm

Cỏc kết quả thử nghiệm thu được từ lập trỡnh cài đặt trờn pascal với file văn bản để tỡm kiếm „Readme.txt’ cú chiểu dài hơn 4000 ký tự (khoảng 212), văn bản mẫu là “text search”. Kết quả thu được đối với từng nội dung nghiờn cứu như sau:

4.1.1. Kết quả thử nghiệm tỡm kiếm tuyến tớnh

Dưới đõy là kết quả thử nghiệm phương phỏp tỡm kiếm tuyến tớnh: phương phỏp so khớp chuỗi (theo thuật toỏn Brute Force) và phương phỏp dựng hàm quy hoạch động (thử nghiệm trờn hàm ta nghiờn cứu sử dụng cho giải thuật di truyền). Cài đặt thử nghiệm cho hai phương phỏp tỡm kiếm tuyến tớnh này là tỡm kiếm chớnh xỏc (ngưỡng = 1), kết quả:

4.1.1.1. Tỡm kiếm tuyến tớnh bằng so khớp chuỗi

░│║KET QUA TKTT SO KHOP: ░│║--- ▒

░│║FILE TIM KIEM: c:\tp7\bin\caidat\readme.txt ░│║CHUOI VAN BAN TIM KIEM: ░│║$text search$ ▒

░│║SO KY TU CUA FILE TIM KIEM: 4259

░│║CAC VI TRI XUAT HIEN: 6 76 1117 1537 2734 3062 ░│║SO LAN XUAT HIEN: 6 ▒

░│║THOI GIAN THUC HIEN (%second): 187 ░│║---

Một phần của tài liệu Bài toán tìm kiếm văn bản sử dụng giải thuật di truyền (Trang 44)