Giải thuật A* áp dụng cho phân tích cú pháp

Một phần của tài liệu Phân tích cú pháp trong tổng hợp tiếng nói tiếng việt (Trang 37)

3.1.4.Nhận xét về thuật toán beam search

3.2.2.1. Giải thuật A* áp dụng cho phân tích cú pháp

Như đã phân tích ở trên, đối với một bài toán tìm kiếm, chỉ cần có lời giải, A* chắc chắn có thể đưa ra được lời giải tối ưu. Tham chiếu sang trường hợp của phân tích cú pháp, A* có thể đảm bảo đưa ra được cây phân tích cú pháp tốt nhất. Tạm thời trong phạm vi của đồ án, đồ án chỉ có thể đáp ứng cái “tốt nhất” của một cây phân tích cú pháp ở mức là cây sẽ có xác suất cao nhất.

A* trong phân tích cú pháp ngược lại với A* tự nhiên. Thay vì tìm theo ưu tiên nhỏ nhất, chúng ta lại tìm đường theo ưu tiên lớn nhất vì cái chúng ta cần là cây phân tích cú pháp có xác suất cao nhất. A* được thực hiện trên các phần tử cơ bản được gọi là element gồm 3 thông số như của CYK: {nhãn, start, end}. Về mặt giải thuật, A* có hai tập hợp, được gọi là AGENDA và CHART [5].. Trong đó

AGENDA là tập các element đang chờ được xem xét, còn CHART là tập các element đã được xét. Thuật toán A* gồm các bước như sau:

o Bước 1: Đầu tiên, các từ trong câu sẽ được gán nhãn rồi tất cả sẽ được đẩy hết vào trong AGENDA. Ví dụ, từ thứ i trong câu với nhãn ci sẽ biến thành phần tử ci[i,i+1] rồi được thêm vào AGENDA .

o Bước 2: Sau đó lặp đi lặp lại các công việc sau:

 Lấy một phần tử có ước lượng ưu tiên cao nhất ra khỏi AGENDA để xét.

 Nếu ứng cử viên lấy ra khỏi AGENDA vẫn chưa có trong CHART thì kết hợp nó với từng phần tử trong CHART dựa vào tập luật cú pháp. Tất cả các phần tử mới được tạo ra sẽ được thêm vào trong AGENDA. Ví dụ : NP[0,2] là phần tử được lấy ra khỏi AGENDA, trong CHART có tồn tại phần VP[2,8] và trong bộ luật cú pháp có luật S → NP VP thì NP[0,2] và VP[2,8] sẽ kết hợp với nhau để tạo thành S[0,8]. S[0,8] sẽ được thêm vào AGENDA, còn NP[0,2] thì được thêm vào CHART.

o Bước 3: bước 2 được lặp lại cho đến trong AGENDA không còn phần tử nào để xét hoặc trong CHART xuất hiện element S[1,n].

Còn đây là code giả mô phỏng thuật toán A*:

Procedure A* Parsing For wi in sentence

wi~<Xi ,i ,i+1>.

AGENDA.add(<<Xi ,i ,i+1>,0>); //inside lúc đầu = 0; Endfor;

CHART empty;

while ((!AGENDA.isempty) and ( !CHART.contain(<S, 1, n + 1>))) Choose <<Y, i, j>,w> from AGENDA with max(w+h(Y)); if (!CHART.contains(<Y, i, j>)) then

CHART. add (<<Y, i, j>,w>);

For <<Z, j, k>,w’> in CHART and (X → Y Z,w’’) AGENDA. add(<<X, i, k>,w + w’+ w’’ >); Endfor;

For <<Z, k, i>,w’> in CHART and (X → Z Y,w’’) AGENDA. add(<<X, k, j>,w + w’+ w’’ >); Endfor;

Endif; Endwhile;

If S.contain(<S, 1, n + 1>) then successParse else failureParse;

EndProcedure;

Chú thích :

- w, w’ tượng trưng cho inside của nút đi kèm. - w’’ tượng trưng cho xác suất của luật đi kèm.

Một phần của tài liệu Phân tích cú pháp trong tổng hợp tiếng nói tiếng việt (Trang 37)

Tải bản đầy đủ (DOCX)

(89 trang)
w