Xây dựng cơ chế suy diễn để khai thác, tìm câu trả lời

Một phần của tài liệu (LUẬN văn THẠC sĩ) các thuật toán phân lớp dữ liệu và ứng dụng xây dựng hệ thống hỏi đáp tự động về một số bệnh thường gặp​ (Trang 65 - 68)

5. Ý NGHĨA KHOA HỌC CỦA ĐỀ TÀI

3.3. Xây dựng cơ chế suy diễn để khai thác, tìm câu trả lời

Trong đề tài này ta chọn phương pháp suy diễn lùi, để đưa ra kết luận B ta thử tìm tất cả các luật có dạng Horn: A1^... ^ An → B

Để có B, ta cần chứng minh A1,..., An (các kết luận mới được thêm vào tập kết luận). Quá trình xác định Ai cũng diễn ra tương tự như đối với B. Nếu đến một lúc nào đó tìm thấy một Aio nào đó không thể dẫn xuất được từ các giả thiết thì ta quay lui sang luật khác sinh ra B và lại tiếp tục quá trình trên.

Màu tóc Đen (1,2,4,8) (Dùng thuốc) Bạc (5) (rám) Râm(3,6,7) (Không rám) Có (2,8) Không rám) không (1,4) (rám)

Nếu không tìm được Aio như vậy (nghĩa là mọi Ai đều được dẫn xuất từ giả thiết) thì quá trình dẫn xuất ra B thành công.

Để thực hiện quá trình quay lui, ta sử dụng hai tập có cấu trúc ngăn xếp GOAL và VET: GOAL là tập lưu các mệnh đề cần phải chứng minh đến thời điểm đang xét và VET là tập lưu các luật đã sử dụng để chứng minh các đích (kể cả đích trung gian).

Đầu vào:

Tập các mệnh đề giả thiết đã cho GT = {g1, g2, g3, …, gn} Tập các luật RULE = {r1, r2, r3, …, rm}

Tập các mệnh đề kết luật KL = {q1, q2, q3, …, qk}

Đầu ra: Kết luận thành công hay không thành công

Giải thuật:

Sử dụng 2 cấu trúc Goal và Vet dạng Stack

GOAL: Là tập lưu các mệnh đề cần phải chứng minh đến thời điểm đang xét. VET: Là tập chứa các luật đã được sử dụng để chứng minh các đích (kể cả đích trung gian) If (KL  GT) Then { Exit (“Thành công”); } Else { (1)

GOAL = ; VET = ; CMđược = True; For q  KL Do GOAL= GOAL  (q,0); Repeat

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn

{ (2)

(f, i)  Get (GOAL); //Lấy một cặp (f, i) từ GOAL If (f  GT) Then

{ (3)

Tìm_luật (f, i, RULE, j); // Tìm luật rj: leftj f If (j  m) Then

{

VET = VET  (f, j);

For t  leftj \ GT Do GOAL = GOAL  (t, 0); }

Else

{ (4)

back = True; // Biến này dùng để quay lui

While (f  KL and back) do

{ (5)

Repeat {

(g, k)  Get (VET);

// Lấy luật rk: leftk g từ VET để quay lui đến luật khác mà cũng  g GOAL = GOAL \ leftk;

} Until (f  leftk);

Tìm_luật (g, k, RULE, s); // Tìm luật rs: lefts g If (s  m) Then

{

For each tlefts\GT Do GOAL = GOAL  (t, 0); VET = VET  (g, s); back = False; } Else f = g; } (5)

If (f  KL and back) then CMđược = False;

} (4)

} (3)

} (2)

Until (GOAL =  or not (CMđược);

If (CMđược) Then Exit (“thành công”) Else Exit (“Không thành công”);

} (1)

Trong giải thuật trên ta sử dụng thủ tục: Tim_luat (f,I,RULE,k) để tìm xem có luật rk nào kể từ luật thứ i+1 trở đi mà suy ra được f (rk: leftk  f). Nếu không có luật nào như thế thi qui ước lấy k = m+1.

Một phần của tài liệu (LUẬN văn THẠC sĩ) các thuật toán phân lớp dữ liệu và ứng dụng xây dựng hệ thống hỏi đáp tự động về một số bệnh thường gặp​ (Trang 65 - 68)