Bài thu hoạch này trình bày về phương pháp biểu diễn tri thức dùng mô hình hệ luật dẫn và trình bày áp dụng mô hình để xây dựng chương trình giải bài toán tam giác kinh điển.. Các nhà ng
Trang 1i
Đại Học Quốc Gia TP.HCM
Trường Đại Học Công Nghệ Thông Tin
BÁO CÁO CHUYÊN ĐỀ
BIỂU DIỄN TRI THỨC VÀ ỨNG DỤNG
Trang 2LỜI MỞ ĐẦU
Việc xây dựng mô hình biểu diễn tri thức để đưa tri thức lên máy tính, tổ chức lưu trữ và xử lý tri thức, đặc biệt là suy luận giải các vấn đề, các bài toán Biểu diễn tri thức đóng vai trò hết sức quan trọng trong thiết kế và xây dựng một hệ giải bài toán thông minh và các hệ chuyên gia Các phương pháp biểu diễn tri thức thích hợp sẽ tạo nên một hệ thống chặt chẽ và hiệu quảkhi vận hành
Hiện nay, mô hình biểu diễn tri thức thường dựa trên:
- Các cấu trúc dữ liệu cơ bản và trừu tượng đã biết
- Các mô hình và cấu trúc toán học
- Các mô hình biểu diễn tri thức cơ bản: logic vị từ, mạng ngữ nghĩa, hệ luật dẫn, frame
- Các ngôn ngữ đặc tả: mô hình mạng tính toán, mô hình COKB và các Ontology
Bài thu hoạch này trình bày về phương pháp biểu diễn tri thức dùng mô hình hệ luật dẫn và trình bày áp dụng mô hình để xây dựng chương trình giải bài toán tam giác kinh điển
Em xin chân thành cám ơn PGS TS Đỗ Văn Nhơn về những tri thức và những kinh nghiệm quý báu mà thầy đã truyền đạt lại cho lớp trong phạm vi môn học Biểu diễn tri thức và ứng dụng thuộc chương trình đào tạo cao học ngành Khoa học máy tính tại trường
Trang 3Mục lục
Mục lục ii
1 Biểu diễn tri thức 3
1.1 Tri thức 3
1.2 Biễu diễn tri thức và xử lý tri thức 4
2 Biểu diễn tri thức bằng luật dẫn (luật sinh) 4
2.1 Khái niệm 4
2.2 Cơ chế suy luận trên các luật sinh 5
2.3 Vấn đề tối ưu luật 5
3 Bài toán tam giác 7
3.1 Phát biểu bài toán và giới hạn phạm vi 7
3.2 Biểu diễn tri thức và tổ chức lưu trữ 9
3.3 Biểu diễn thuật giải 11
3.3.1 Thuật giải Suy diễn tiến 11
3.3.2 Thuật giải Suy diễn lùi 13
3.4 Tính toán và trình bày kết quả 17
3.4.1 Tính toán 17
3.4.2 Trình bày kết quả 18
3.5 Kết quả chương trình demo 18
KẾT LUẬN 20
3.6 Tóm tắt kết quả đạt được 20
3.7 Hướng phát triển 20
3.8 Tài liệu tham khảo 21
Trang 41 Biểu diễn tri thức
1.1 Tri thức
Tri thức (knowledge): là sự hiểu biết của người trong một phạm vi, lĩnh vực nào đó; được xem xét theo các mục tiêu hay các vấn đề nhất định
Ví dụ:
- Kiến thức về một lĩnh vực y học và khả năng chẩn đoán bệnh là tri thức
- Biết một tam giác có các yếu tố nào cùng với các công thức liên hệ giữa các yếu
- Tri thức cấu trúc: mô tả tri thức theo cấu trúc Loại tri thức này mô tả mô hình tổng quan hệ thống theo quan điểm của chuyên gia, bao gồm khái niệm, khái niệm con
và các đối tượng; diễn tả chức năng và mối liên hệ giữa các tri thức dựa theo cấu trúc xác định
- Tri thức thủ tục: mô tả cách thức giải quyết một vấn đề Loại tri thức này đưa ra giải pháp để thực hiện một công việc nào đó Các dạng tri thức thủ tục tiêu biểu là các luật, chiến lược, lịch trình và thủ tục
- Tri thức meta: mô tả tri thức về tri thức Loại tri thức này giúp lựa chọn tri thức thích hợp nhất trong số các tri thức khi giải quyết một vấn đề Các chuyên gia sử dụng
Trang 5tri thức này để điều chỉnh hiệu quả giải quyết vấn đề bằng cách hướng các lập luận về miền tri thức có khả năng cao hơn
1.2 Biễu diễn tri thức và xử lý tri thức
Biểu diễn tri thức (Kowledge Representation) là phương pháp cho phép mã hóa tri thức trong cơ sở tri thức của hệ thống
Biểu diễn tri thức là một vấn đề được quan tâm trong cả khoa học nhận thức lẫn trí tuệ nhân tạo Trong khoa học nhận thức, người ta quan tâm đến cách thức lưu trữ và
xử lý thông tin Còn trong trí tuệ nhân tạo, mục tiêu chính là lưu trữ tri thức sao cho các chương trình có thể xử lý chúng và đạt được sự thông minh như con người Các nhà nghiên cứu trí tuệ nhân tạo đã mượn các lý thuyết về biểu diễn thông tin từ khoa học nhận thức
2.1 Khái niệm
Phương pháp biểu diễn tri thức bằng luật sinh được phát minh bởi Newell và Simon trong lúc hai ông đang cố gắng xây dựng một hệ giải bài toán tổng quát Đây là một kiểu biểu diễn tri thức có cấu trúc Ý tưởng cơ bản là tri thức có thể được cấu trúc bằng một cặp điều kiện và hành động: "NẾU điều kiện xảy ra THÌ hành động sẽ được thi hành" Chẳng hạn, NẾU đèn giao thông là đỏ THÌ bạn không được đi thẳng, NẾU máy tính đã mở mà không khởi động được THÌ kiểm tra nguồn điện, …
Ngày nay, các luật sinh đã trở nên phổ biến và được áp dụng rộng rãi trong nhiều
hệ thống trí tuệ nhân tạo khác nhau Luật sinh có thể là một công cụ mô tả để giải quyếtcác vấn đề thực tế thay cho các kiểu phân tích vấn đề truyền thống Trong trường hợp này, các luật được dùng như là những chỉ dẫn (tuy có thể không hoàn chỉnh) nhưng rất hữu ích để trợ giúp cho các quyết định trong quá trình tìm kiếm, từ đó làm giảm không gian tìm kiếm Một ví dụ khác là luật sinh có thể được dùng để bắt chước hành vi của những chuyên gia Theo cách này, luật sinh không chỉ đơn thuần là một kiểu biểu diễn tri thức trong máy tính mà là một kiểu biễu diễn các hành vi của con người
Một cách tổng quát luật sinh có dạng như sau:
P1 P2 Pn Q
Tùy vào các vấn đề đang quan tâm mà luật sinh có những ngữ nghĩa hay cấu tạo khác nhau:
Trang 60 Trong logic vị từ: P1, P2, , Pn, Q là những biểu thức logic.
1 Trong ngôn ngữ lập trình, mỗi một luật sinh là một câu lệnh
IF (P1 AND P2 AND AND Pn) THEN Q
2 Trong lý thuyết hiểu ngôn ngữ tự nhiên, mỗi luật sinh là một phép dịch: ONE một
2.2 Cơ chế suy luận trên các luật sinh
5 Suy diễn tiến: là quá trình suy luận xuất phát từ một số sự kiện ban đầu, xác định các sự kiện có thể được "sinh" ra từ sự kiện này
Sự kiện ban đầu: H, K
R3: H A {A, H K }R1: A E { A, E, H, K }
R5: E K B { A, B, E, H, K }
R2: B D { A, B, D, E, H, K }R6: D E K C { A, B, C, D, E, H, K }
6 Suy diễn lùi: là quá trình suy luận ngược xuất phát từ một số sự kiện ban
đầu, ta tìm kiếm các sự kiện đã "sinh" ra sự kiện này Một ví dụ thường gặp trong thực tế là xuất phát từ các tình trạng của máy tính, chẩn đoán xem máy tính đã bị hỏng hóc ở đâu.
2.3 Vấn đề tối ưu luật
Tập các luật trong một cơ sở tri thức rất có khả năng thừa, trùng lắp hoặc mâu
thuẫn Dĩ nhiên là hệ thống có thể đổ lỗi cho người dùng về việc đưa vào hệ thống
những tri thức như vậy Tuy việc tối ưu một cơ sở tri thức về mặt tổng quát là một thaotác khó (vì giữa các tri thức thường có quan hệ không tường minh), nhưng trong giới hạn cơ sở tri thức dưới dạng luật, ta vẫn có một số thuật toán đơn giản để loại bỏ các vấn đề này
Trang 77 Rút gọn bên phải:
luật sau hiển nhiên đúng : A B A (1)
do đó luật: A B A C
là hoàn toàn tương đương với: A B C
Quy tắc rút gọn : Có thể loại bỏ những sự kiện bên vế phải nếu những sự kiện
đó đã xuất hiện bên vế trái Nếu sau khi rút gọn mà vế phải trở thành rỗng thì luật đó làluật hiển nhiên Ta có thể loại bỏ các luật hiển nhiên ra khỏi tri thức
Tương đương với hai luật: A C và B C
Với quy tắc này, ta có thể loại bỏ hoàn toàn các luật có phép nối HOẶC Các luật
có phép nối này thường làm cho thao tác xử lý trở nên phức tạp
11 Thuật toán tối ưu tập luật dẫn:
Thuật toán này sẽ tối ưu hóa tập luật đã cho bằng cách loại đi các luật có phép nốiHOẶC, các luật hiển nhiên hoặc các luật thừa
Thuật toán bao gồm các bước chính:
B1: Rút gọn vế phải
Với mỗi luật r trong R
Với mỗi sự kiện A VếPhải(r)
Nếu A VếTrái(r) thì Loại A ra khỏi vế phải của R
Nếu VếPhải(r) rỗng thì loại bỏ r ra khỏi hệ luật dẫn : R = R \{r}
Trang 8B2: Phân rã các luật
Với mỗi luật r : X1 X2 … Xn Y trong R
Với mỗi i từ 1 đến n R := R + { Xi Y }
R := R \ {r}
B3: Loại bỏ luật thừa
Với mỗi luật r thuộc R
Nếu VếPhải(r) BaoĐóng(VếTrái(r), R-{r}) thì R := R \ {r}
B4: Rút gọn vế trái
Với mỗi luật dẫn r : X : A1 A2, …, An Y thuộc R
Với mỗi sự kiện Ai r
Gọi luật r1 : X - Ai Y
S = (R - {r}) {r1}
Nếu BaoĐóng (X - Ai , S) BaoĐóng (X, R) thì loại sự kiện A ra khỏi X
3.1 Phát biểu bài toán và giới hạn phạm vi
Bài thu hoạch này sẽ trình bày cách giải bài toán tam giác dùng hệ luật dẫn gồm cả suy diễn tiến và suy diễn lùi Bài toán tam giác này sẽ giới thiệu cách làm với các công thức tam giác thông dụng.
Bài toán:
- Giả thiết: Một số thông số (đối tượng, sự kiện) của tam giác cho trước
- Mục tiêu: Xác định một thông số (đối tượng) của tam giác
Ví dụ: Xét tam giác ABC có góc A = 30 độ, cạnh b = 6, cạnh c = 5 đơn vị độ dài Hãy xác định độ dài đường cao ha
Phạm vi:
Trang 9Ta có các đối tượng trong tam giác cần xét:
- A: Số đo góc đối diện cạnh a
- B: Số đo góc đối diện cạnh b
- C: Số đo góc đối diện cạnh c
- a: độ dài cạnh a
- b: độ dài cạnh b
- c: độ dài cạnh c
- ha: độ dài đường cao tương ứng với cạnh a
- hb: độ dài đường cao tương ứng với cạnh b
- hc: độ dài đường cao tương ứng với cạnh c
- S: diện tích của tam giác
- p: nửa chu vi
Các công thức trong tam giác (luật)
A + B + C = 180 (độ)
Trang 103.2 Biểu diễn tri thức và tổ chức lưu trữ
Tri thức gồm hai thành phần (F, R), tức là các khái niệm (phát biểu) và các luật dẫn.Trong bài toán tam giác trên, phần tri thức theo luật dẫn (Facts, Rules) gồm:
Facts = {A, B, C, a, b, c, ha, hb, hc, p, S}
Tổ chức tri thức lưu trên bộ nhớ phụ với 2 file : Facts.txt và Rules.txt
Cấu trúc file Facts txt :
Begin
<tên đối tượng 1> : <mô tả của đối tượng 1>
<tên đối tượng 2> : <mô tả của đối tượng 2>
Trang 11End
File Facts txt của chương trình :
Begin
A : so do goc doi dien canh a
B : so do goc doi dien canh b
C : so do goc doi dien canh c
a : do dai canh a
b : do dai canh b
c : do dai canh c
ha : do dai duong cao tuong ung voi canh a
hb : do dai duong cao tuong ung voi canh b
hc : do dai duong cao tuong ung voi canh c
S : dien tich tam giac
a,c,B=>S.( a * c * sin B ) / 2
b,c,A=>S.( b * c * sin A ) / 2
a,ha->S.a * ha / 2
b,hb->S.b * hb / 2
Trang 12Mỗi luật được đưa vào sẽ được phân tích như sau:
Mỗi sự kiện trong mệnh đề IF sẽ được đánh dấu là 0, trong mệnh đề THEN là 1
3.3 Biểu diễn thuật giải
3.3.1 Thuật giải Suy diễn tiến
Tư tưởng của thuật giải Suy diễn tiến là từ những giả thiết đã biết (know) ta áp dụng các tập luật để sinh ra thêm giả thiết mới và bổ sung vào know Quá trình này cứ tiếp tục cho đến khi kết luận cần tìm đã nằm trong know hoặc không thể áp dụng được luật nào để sinh thêm giả thiết mới nữa và chương trình kết thúc
Mô phỏng thuật giải :
Bước 1: Khởi tạo một mảng đánh dấu các luật, để đánh dấu những luật nào đã được sử dụng để tránh trùng lặp các bước
Bước 2: Kiểm tra xem mục tiêu đã nằm trong tập giả thiết (know) chưa?
Nếu đúng, goto Bước 6
Trang 13Nếu sai, chuyển tới bước 3.
Bước 3: Cho kiểm tra các luật, nếu luật nào chưa dùng (chưa được đánh dấu):
Kiểm tra xem các luật trong đó có đủ điểu kiện để áp dụng sinh ra giả thiết mới hay không?
Nếu đủ điều kiện:
+ Đánh dấu luật này lại
+ Bổ sung kết luận của luật vào trong know
+ Chuyển tới Bước 2
Nếu không đủ điều kiện: tiếp tục với luật tiếp theo
Bước 4: Nếu không còn luật nào có thể áp dụng được nữa, chuyển tới bước 6
Bước 5: Quay lại bước 2
Bước 6: Kết luận:
+ Nếu Bước 4 đúng: bài toán không thể giải được
+ Nếu Bước 2 đúng: dùng suy diễn lùi để loại bỏ các luật thừa, đưa ra kết luận
Ví dụ minh họa cho thuật giải Suy diễn tiến:
Giả thiết: góc A, góc B, cạnh c
Kết luận: Tính hc
Bài giải (các luật):
Chương trình sẽ lần lượt thử chạy các luật theo tuyến tính cho đến khi kết luận hc nằm trong Know
Trang 14Vì hc đã nằm trong Known nên dừng Suy diễn.
Đó là các luật mà máy sẽ chạy để tính được hc, nhưng trong quá trình chạy suy diễn tiến, sẽ phát sinh ra các luật thừa, lúc này ta sẽ dùng suy diễn lùi để loại bỏ các luật thừa đó, tức là nếu kết luận của luật liền trước không có trong giả thiết của một luật thì loại luật đó ra
Kết quả ta được:
B1: Tính góc C: A,B->C
B2: Tính cạnh a: c,C,A->a
B3: Tính hc: a,B->hc
3.3.2 Thuật giải Suy diễn lùi
Trong thuật giải Suy diễn lùi, ta dùng kỹ thuật đệ quy để thực hiện suy diễn lùi Để suy
ra được kết luận, ta thực hiện tìm luật để suy ra được đích là kết luận, ta phải lùi về để tìm những thành phần còn thiếu trong luật, tiếp tục ta lại đệ quy với đích mới là thành phần còn thiếu đó Quá trình đệ quy cứ tiếp tục cho đến khi các hàm đệ quy được khử hay nói cách khác là ta tìm đủ điều kiện để suy ra được đích Nếu ta cho hàm đệ quy thực hiện Suy diễn lùi vô hạn thì trong một số trường hợp bài toán không thể giải được trong khi ta vẫn có thể giải được bài bằng Suy diễn tiến, do vậy ta phải đặt số lần quay lui của hàm đệ quy Trong bài này tôi đặt số lần quay lui của hàm đệ quy là 3 Sau 3 lần suy diễn lùi, nếu vẫn không thể đủ giả thiết để thực thi các luật, ta sẽ sử dụng suy diễn tiến để sinh ra thêm giả thiết để giải bài toán
Mô phỏng thuật giải:
int BackTracking(int _dest, int _levelBack, List<int> _statusOfAgr)
Trang 15/*Sắp xếp các luật có chứa kết luận theo số lượng biến nằm trong know của mỗi luật*/
SortListByNumberOfArgInKnow(_listRulesContainDest);
//Duyệt từng luật chứa kết luận
for i = 1 to numberOfRulesCotainDest:
{
bool _isLoop = false;
bool _isReady = true;
/*duyệt từng biến trong giả thiết của mỗi luật*/
foreach int j in _listHypothesisArg(_listRulesContainDest[i]){
/*Nếu biến đó đang được tìm kiếm trong các vòng đệ quy trước thìđánh dấu lại)*/
if(_listStatusOfArg[j] == 0)_isLoop = true;
/*Nếu có biến đó không nằm trong know thì luật này chưa sẵn sàng để dùng*/
if(Known.Contain(j) == 0)_isReady = false;
Trang 16/*Nếu đây là bước lùi thứ ba và đã thử hết toàn bộ luật có thể sinh kết luận cần tìm*/
if(_levelBack == 3 && i == numberOfRulesContainDest){
//tiến hành sinh thêm giả thiếtint result = generateAHypothesis();
/*Nếu không thể sinh thêm được bất kỳ giả thiết nào nữa thì trả về kết quả là không thành công*/
if (result == -1)return 0;
/* Nếu giả thiết được sinh ra đang được tìm kiếm ở những vòng đệ quy ngoài thì báo kết quả ra */
/*đánh dấu xem liệu có thể đệ quy để tìm đủ giả thiết để sinh luật hay không*/
bool _isAble = true;
Trang 17/*Duyệt từng biến trong phần giả thiết của luật */
foreach int j in _listHypothesisArg(_listRulesContainDest[i])
/*đánh dấu danh sách trạng thái trước khi quay lui*/_listStatus[j] = 0;
_resultBackTracking = BackTracking(j, _levelBack+1, _listStatus);
/*Nếu quay lui thất bại*/
if(_resultBackTracking == 0){
_isAble = false ;break ;
}else/*Nếu quay lui thành công*/
if (_resultBackTracking == 1)
continue ;else
/*Nếu quay lui tình cờ tìm thấy một giả thiết ở vòng
đệ quy ngoài ta kiểm tra xem nó có phải điều ta đang tìm kiếm hay không, nếu đúng, báo thành công, nếu sai, báo ra các vòng đệ quy ngoài*/
if (Known.Contain(_dest))
return 1 ;else
return 2 ;}
Trang 18//Nếu có khả năng sinh được luật
if (_isAble){
/*Cập nhật danh sách trạng thái và báo thành công */
_listStatus[_dest] = -1 ;return 1 ;
}}
}}
return 0 ;
}
3.4 Tính toán và trình bày kết quả
Sau khi xây dựng thuật giải và tìm được các luật áp dụng, tìm được các công thức cần
áp dụng để đi đến được kết quả Vậy là bài toán đã coi như gần hoàn tất, bây giờ công việc cuối cùng để hoàn thành bài toán là tính toán và trình bài kết quả
Thuật toán để chuyển một biểu thức Infix sang dạn Posfix:
Đọc từng token trong biểu thức infix từ trái qua phải, với mỗi token ta thực hiện các bước sau:
- Nếu là toán hạng: cho ra output
- Nếu là dấu mở ngoặc “(“: cho vào stack