You are on page 1of 56

ĐẠI HỌC QUỐC GIA TPHCM

TRƯỜNG ĐẠI HỌC


CÔNG NGHỆ THÔNG TIN

XỬ LÝ NGÔN NGỮ TỰ NHIÊN


CHƯƠNG VI

CƠ CHẾ XỬ LÝ DCG TRONG


PROLOG

Nguyễn Trọng Chỉnh


1
chinhnt@uit.edu.vn
CƠ CHẾ XỬ LÝ DCG TRONG PROLOG

❖PHÂN TÍCH CÚ PHÁP VỚI CÁC VỊ TỪ


❖DANH SÁCH HIỆU
❖CHUYỂN DCG SANG VỊ TỪ PROLOG
❖CƠ CHẾ XỬ LÝ VĂN PHẠM TRONG
PROLOG

2
I. PHÂN TÍCH CÚ PHÁP VỚI
CÁC VỊ TỪ

❖Nguyên tắc
- Quá trình phân tích tương ứng với quá trình chứng
minh
- Các luật sản sinh là định nghĩa của các vị từ
Ví dụ:
S → NP VP : là S nếu có NP và VP
NN → sách : là NN nếu có "sách"

3
I. PHÂN TÍCH CÚ PHÁP VỚI
CÁC VỊ TỪ

❖Đoán nhận câu


- Mỗi vị từ có một đầu vào là danh sách các từ mà
nó có thể nhận.
- Một vị từ được chứng minh nếu đầu vào của nó
bằng đúng với đầu vào của tất cả các vị từ vế phải
- Câu được đoán nhận nếu vị từ s được chứng minh
với đầu vào là một danh sách các từ của một câu
Ví dụ: đoán nhận câu "Nam là học sinh"
s(S) :- np(A), append(A,B,S), vp(B).
ý nghĩa: s([nam,là,học,sinh]) → np([nam]),
vp([là,học,sinh]). 4
I. PHÂN TÍCH CÚ PHÁP VỚI
CÁC VỊ TỪ

❖Đoán nhận câu


Ví dụ: Xây các vị từ Prolog để đoán nhận các câu
được sản sinh từ tập luật sau:
S → NP VP S
NP → PRP
NP → DET NN VP
VP → VB NP
NP NP
PRP → i
DET → a PRP VB DET NN
NN → book
VB → have i have a book
5
I. PHÂN TÍCH CÚ PHÁP VỚI
CÁC VỊ TỪ

❖Đoán nhận câu


s(S):-np(NP), append(NP, VP, S), vp(VP).
np(NP):- prp(NP).
np(NP):- det(DET), append(DET, NN, NP), nn(NN).
vp(VP):- vb(VB), append(VB, NP, VP), np(NP).
prp([i]).
det([a]).
nn([book]).
vb([have]).

6
I. PHÂN TÍCH CÚ PHÁP VỚI
CÁC VỊ TỪ

❖Phân tích câu


- Tương tự đoán nhận câu
- Trả về kết quả tại mỗi bước chứng minh vị từ.
- Sử dụng thêm tham số cho đầu ra.
Ví dụ: quá trình phân tích câu "I have a book"

7
I. PHÂN TÍCH CÚ PHÁP VỚI
CÁC VỊ TỪ

❖Phân tích câu


S :s(…, …)

VP :vp(…, …)

NP :np(…) NP :np(…, …)

PRP :prp(i) VB :vb(have) DET :det(a) NN :nn(book)

i have a book

8
I. PHÂN TÍCH CÚ PHÁP VỚI
CÁC VỊ TỪ

❖Phân tích câu


Bài tập: cho các câu sau
1) bạn Hoa và bạn Nam học bài
2) Hoa không đi chơi
a) Vẽ cây cú pháp, xác định tập luật và phân tích cú
pháp các câu trên với vị từ Prolog.
b) Xử lý đệ quy trái nếu có.

9
II. DANH SÁCH HIỆU

❖Vấn đề nối danh sách


Cho hai danh sách
A = [a1, a2, …, am]

B = [b1, b2, …, bn].
→ Xác định vị từ app Nối A và B thành C = [a1, a2, …,
am, b1, b2, …, bn]?
app(A,B,C).

10
II. DANH SÁCH HIỆU

❖Vấn đề nối danh sách


→ Ban đầu, C = B.
Tách từng phần tử đầu H của dãy A
Dãy C có được bằng cách chèn H vào đầu C

app([],B,B).
app([H|T], B, [H|R]):- app(T,B,R).
Ví dụ: A = [1,2], B=[3,4,5].

11
II. DANH SÁCH HIỆU

❖Vấn đề nối danh sách


app([1,2],[3,4,5],C).

app([1|2],[3,4,5],[1|R])

app([2|],[3,4,5],[2|R])

app([],[3,4,5],[3,4,5])

12
II. DANH SÁCH HIỆU

❖Danh sách hiệu


Sử dụng phép nối danh sách không hiệu quả, ví dụ:
s(S):-np(NP), app(NP, VP, S), vp(VP).

- Quá trình chọn NP và VP từ S sao cho NP + VP = S


- Chi phí cho việc nối danh sách O(n) với n là số lượng
phần từ của NP.

13
II. DANH SÁCH HIỆU

❖Danh sách hiệu


Dùng danh sách hiệu (difference list) để nối hai danh
sách hiệu quả hơn:
Giả sử:
A = [a, b, c],
Biểu diễn của A theo danh sách hiệu là:
A = [a,b,c|X] – X.
Khi đó, việc nối hai danh sách A = [a,b,c] và B=[x,y]
thành S sẽ được thực hiện qua phép hợp nhất
[a,b,c|X]-X và [x,y|T]-T
14
II. DANH SÁCH HIỆU

❖Danh sách hiệu


Quá trình thực hiện:
- đặt S = [a,b,c|X]
- Hợp nhất X với [x,y|T]
- Kết quả: [a,b,c,x,y|T] – [x,y|T].
- Hợp nhất T với [].

→ thời gian thực hiện O(1)

15
II. DANH SÁCH HIỆU

❖Danh sách hiệu


Khi đó, vị từ nối hai danh sách theo danh sách hiệu
được định nghĩa như sau:
app(A-B,B-C,A-C).
Để nối hai danh sách [1,2,3,4] và [a,b,c,d]:
app([1,2,3,4|X]-X,[a,b,c,d|Y]-Y,S- []).

app( A -B, B -C,A-C).

16
II. DANH SÁCH HIỆU

❖Danh sách hiệu


Định nghĩa vị từ nối hai danh sách theo dạng tham số:
app(A,B,B,C,A,C).

Ví dụ:
Cho danh sách từ S=[bàn, là, sự, thực, hiện] và các từ
như sau:
bàn, là, bàn_là, sự_thực, sự, thực_hiện.
Tìm tất cả các cách phân tích danh sách từ thành các
từ ghép.
17
II. DANH SÁCH HIỆU

• Dùng vị từ app
phantich(S,R):- tuvung(S,R).
phantich(S,R):- tuvung(W,RW), app(W,P,S),phantich(P,RP),
app(RW,RP,R).
tuvung([bàn],[bàn]).
tuvung([là],[là]).
tuvung([bàn,là],[bàn_là]).
tuvung([sự],[sự]).
tuvung([sự, thực],[sự_thực]).
tuvung([thực, hiện],[thực_hiện]).
tuvung([hiện],[hiện]).
tim(S,L):- findall(R,phantich(S,R),L). 18
II. DANH SÁCH HIỆU

• Dùng danh sách hiệu


phantich(S,St,R):- tuvung(S,St,R).
phantich(S,St,R):- tuvung(S,Wt,RW), phantich(Wt,St,RP),
app(RW,RP,R).
tuvung([bàn|X],X,[bàn]).
tuvung([là|X],X,[là]).
tuvung([bàn,là|X],X,[bàn_là]).
tuvung([sự|X],X,[sự]).
tuvung([sự, thực|X],X,[sự_thực]).
tuvung([thực, hiện|X],X,[thực_hiện]).
tuvung([hiện|X],X,[hiện]).
tim(S,L):- findall(R,phantich(S,[],R),L). 19
II. DANH SÁCH HIỆU

❖Ưu điểm của danh sách hiệu


- Thuận tiện trong việc chia tách danh sách.
- Hiệu quả trong việc ghép nối các danh sách

20
II. DANH SÁCH HIỆU

❖Phân tích cú pháp với danh sách hiệu


Các ký hiệu phi kết thúc sẽ có 2 tham số:
- Danh sách các từ của nó
- Danh sách các từ trong danh sách hiệu.
Đặc biệt, ký hiệu S có danh sách các từ là toàn bộ câu
hỏi và danh sách hiệu rỗng.

21
II. DANH SÁCH HIỆU

❖Phân tích cú pháp với danh sách hiệu


Ví dụ: Biểu diễn văn phạm sau với danh sách hiệu
s(S):-np(NP), append(NP, VP, S), vp(VP).
np(NP):- prp(NP).
np(NP):- det(DET), append(DET, NN, NP), nn(NN).
vp(VP):- vb(VB), append(VB, NP, VP), np(NP).
prp([i]).
det([a]).
nn([book]).
vb([have]).

22
II. DANH SÁCH HIỆU

❖Phân tích cú pháp với danh sách hiệu


s(S,R):- np(S,V), vp(V,R).
np(P,R):- prp(P,R).
np(P,R):- det(P,NN), nn(NN,R).
vp(P,R):- vb(P,N), np(N, R).
prp([i|X],X).
det([a|X],X).
nn([book|X],X).
vb([have|X],X).

23
II. DANH SÁCH HIỆU

❖Phân tích cú pháp với danh sách hiệu


Trả về cây cú pháp
s(s(NP,VP),S,R):- np(NP,S,V), vp(VP,V,R).
np(np(PRP), P,R):- prp(PRP,P,R).
np(np(DET,NN), P,R):- det(DET,P,N), nn(NN, N,R).
vp(vp(VB, NP),P,R):- vb(VB,P,N), np(NP,N, R).
prp(prp(i), [i|X],X).
det(det(a), [a|X],X).
nn(nn(book), [book|X],X).
vb(vb(have), [have|X],X).

24
II. DANH SÁCH HIỆU

❖Bài tập
Dùng danh sách hiệu, phân tích cú pháp và trả về cây cú pháp
cho các câu sau:
1) một người đàn ông già đang đẩy chiếc xe Honda trên đường
2) Hoa có vật gì thì bạn Hoa cũng có vật đó.

25
III. CHUYỂN DCG SANG VỊ TỪ
PROLOG

❖DCG và vị từ Prolog
- DCG nhằm đơn giản hóa việc dùng vị từ prolog để
biển diễn các luật sản sinh.
- DCG thực hiện trên danh sách hiệu.
- Khi thực thi chương trình Prolog, DCG sẽ được
dịch thành các mệnh đề Prolog, quá trình phân tích
là quá trình chứng minh các mệnh đề.

26
III. CHUYỂN DCG SANG VỊ TỪ
PROLOG

❖Quy tắc chuyển


- Tên các ký hiệu phi kết thúc là các vị từ
- Hai tham số cuối cùng của vị từ là danh sách các
từ vựng cấu tạo nên ngữ đoạn tương ứng và danh
sách hiệu của nó
- Dấu --> được viết thành :-
- Với ngữ đoạn, danh sách từ của vị từ vế trái bằng
với tất cả danh sách từ của các vị từ vế pháp nối
với nhau. Danh sách hiệu của vị từ vế trái bằng với
danh sách hiệu của vị từ cuối cùng trong vế phải
- Với từ vựng, vị từ khẳng định các thuộc tính của từ
27
III. CHUYỂN DCG SANG VỊ TỪ
PROLOG

❖Quy tắc chuyển


Ví dụ: 1) s --> np, vp.
→ s(S,R) :- np(S,N), vp(N,R).
2) s --> np, vp, pp.
→ s(S,R) --> np(S,N), vp(N,PP), pp(PP,R).

3) s(s(NP,VP,PP),S,R) --> np(NP,S,V),


vp(VP,V,PP),
pp(PP, PP,R).
4) nn(nn(book)) -->[book].
→ nn(nn(book),[book|X],X). 28
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Cây AND-OR (AND-OR tree) là cấu trúc biểu diễn lời
giải bài toán bài toán gốc về dạng lời giải đồng thời
các bài toán con (AND) hoặc dạng lời giải riêng lẻ của
một trong các bài toán con (OR)
Ví dụ: Tam giác ABC vuông
OR
 + Ĉ = 90 a 2 + b 2 = c2

AND
 = 45 Ĉ = 45 29
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
- Tìm kiếm trên cây AND-OR là quá trình chứng minh
(giải) bài toán gốc.
- Cây AND-OR được sinh dần trong quá trình tìm kiếm
- Quá trình tìm gồm: sinh trạng thái mới, kiểm tra trạng
thái, và quay lui (backtracking).
- Một node được kiểm tra thành công nếu là node
AND và các con của nó được kiểm tra thành công
hoặc nếu nó là node OR và một trong các con của nó
được kiểm tra thành công.
- Có thể duyệt theo chiều rộng, chiều sâu hay kết hợp.
30
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Ví dụ: cho tam giác có ABC có cạnh a = 3, b = 4, c = 5,
chứng minh ABC vuông.

Tam giác ABC vuông

31
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Ví dụ: cho tam giác có ABC có cạnh a = 3, b = 4, c = 5,
chứng minh ABC vuông.

Tam giác ABC vuông


chọn OR
 + Ĉ = 90 a 2 + b 2 = c2

32
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Ví dụ: cho tam giác có ABC có cạnh a = 3, b = 4, c = 5,
chứng minh ABC vuông.

Tam giác ABC vuông


chọn OR
 + Ĉ = 90 a 2 + b 2 = c2

AND
 = 45 Ĉ = 45

33
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Ví dụ: cho tam giác có ABC có cạnh a = 3, b = 4, c = 5,
chứng minh ABC vuông.

Tam giác ABC vuông


chọn OR
 + Ĉ = 90 a 2 + b 2 = c2
chọn
AND
 = 45 Ĉ = 45

34
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Ví dụ: cho tam giác có ABC có cạnh a = 3, b = 4, c = 5,
chứng minh ABC vuông.

Tam giác ABC vuông


chọn OR
 + Ĉ = 90 a 2 + b 2 = c2
chọn
AND
 = 45 Ĉ = 45
Không thành công
35
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Ví dụ: cho tam giác có ABC có cạnh a = 3, b = 4, c = 5,
chứng minh ABC vuông.

Tam giác ABC vuông


chọn OR
 + Ĉ = 90 a 2 + b 2 = c2
chọn
AND
 = 45 Ĉ = 45
Không thành công
36
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Ví dụ: cho tam giác có ABC có cạnh a = 3, b = 4, c = 5,
chứng minh ABC vuông.

Tam giác ABC vuông


chọn OR
 + Ĉ = 90 a 2 + b 2 = c2
chọn
AND
 = 45 Ĉ = 45

37
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Ví dụ: cho tam giác có ABC có cạnh a = 3, b = 4, c = 5,
chứng minh ABC vuông.

Tam giác ABC vuông


chọn OR chọn
 + Ĉ = 90 a 2 + b 2 = c2
chọn
AND
 = 45 Ĉ = 45
Không thành công
38
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Cây AND-OR
Ví dụ: cho tam giác có ABC có cạnh a = 3, b = 4, c = 5,
chứng minh ABC vuông.

Tam giác ABC vuông


chọn OR chọn
 + Ĉ = 90 a 2 + b 2 = c2
chọn Thành công
AND
 = 45 Ĉ = 45
Không thành công
39
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Quy tắc xây dựng cây AND-OR


- Nút gốc là S.
- Các ký hiệu không kết thúc ở vế phải luật sản sinh
là các cung AND
- Các luật có cùng vế trái là các cung OR.
- Các luật sản sinh ký hiệu kết thúc là điều kiện kiểm
tra.

40
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Quy tắc xây dựng cây AND-OR


Ví dụ: S
S → NP VP
NP → DET NN NP VP
NP → JJ NN
VP → VB
DET NN JJ NN VB
...
............................................

41
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


- Duyệt theo thứ tự LRN (Duyệt theo chiều sâu)
- Tại mỗi bước chỉ sinh trạng thái cần duyệt, không
sinh toàn bộ cây AND-OR.
- Backtracking để duyệt tất cả khả năng phân tích cú
pháp từ luật

42
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


Ví dụ
1) S → NP VP
2) NP → NNP
3) NP → NN
4) VP → VB NP
5) NNP → mai
6) NN → hoa
7) VB → ngắm

43
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])

44
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])

NNP([mai, ngắm, hoa], B2)

45
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])

NNP([mai, ngắm, hoa], B2)

[mai| ngắm, hoa], [ngắm, hoa]

46
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])

NNP([mai, ngắm, hoa], B2)

[mai| ngắm, hoa], [ngắm, hoa]

47
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])

NNP([mai, ngắm, hoa], B2) VB([ngắm,hoa],C2) NP(C2,[])

[mai| ngắm, hoa], [ngắm, hoa] [ngắm| hoa], [hoa]

48
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])

NNP([mai, ngắm, hoa], B2) VB([ngắm,hoa],C2) NP(C2,[])

[mai| ngắm, hoa], [ngắm, hoa] [ngắm| hoa], [hoa]

49
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])

NNP([mai, ngắm, hoa], B2) VB([ngắm,hoa],C2) NP(C2,[])

[mai| ngắm, hoa], [ngắm, hoa] [ngắm| hoa], [hoa] NNP([hoa],[])

50
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])

NNP([mai, ngắm, hoa], B2) VB([ngắm,hoa],C2) NP(C2,[])

[mai| ngắm, hoa], [ngắm, hoa] [ngắm| hoa], [hoa] NNP([hoa],[])

[hoa],[]
51
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])

NNP([mai, ngắm, hoa], B2) VB([ngắm,hoa],C2) NP(C2,[])

[mai| ngắm, hoa], [ngắm, hoa] [ngắm| hoa], [hoa] NNP([hoa],[])

[hoa],[]
52
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])


backtracking
NNP([mai, ngắm, hoa], B2) VB([ngắm,hoa],C2) NP(C2,[])

[mai| ngắm, hoa], [ngắm, hoa] [ngắm| hoa], [hoa] NN([hoa],[])

53
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])


backtracking
NNP([mai, ngắm, hoa], B2) VB([ngắm,hoa],C2) NP(C2,[])

[mai| ngắm, hoa], [ngắm, hoa] [ngắm| hoa], [hoa] NN([hoa],[])

[hoa],[]
54
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Duyệt cây AND-OR


S([mai, ngắm, hoa],[])

NP([mai, ngắm, hoa], C1) VP(C1,[])


backtracking
NNP([mai, ngắm, hoa], B2) VB([ngắm,hoa],C2) NP(C2,[])

[mai| ngắm, hoa], [ngắm, hoa] [ngắm| hoa], [hoa] NN([hoa],[])

[hoa],[]
55
IV. CƠ CHẾ XỬ LÝ VĂN PHẠM
TRONG PROLOG

❖Bài tập
s → NP VP
s → VP
NP → NN
NP → DET NP
VP → VBZ NP
NN → books, flight
VBZ → books
DET → the
Cho biết quá trình phân tích câu "books the flight"
56

You might also like