Hệ chuyên gia ra đời trên ý tường của các nhà khoa học muốn xây dựng một hệ thống giải quyết vấn đề dựa vào tri thức (knowledge - based system). Tri thức ở đây là tri thức của các chuyên gia, đó là tri thức chuyên môn và kinh nghiệm thực hành về một lĩnh vực nào đó (trong hệ chuyên gia được gọi là miền tri thức - knowledge domain). Một chuyên gia sỗ lưu trữ tri thức chuyên gia trong bộ nhớ dài hạn (Long Term Memory - LTM).
Cách thức giải quyết vấn đề của hệ chuyên gia được mô hình hóa từ cách thức giải quyết vấn đề của chuyên gia con người. Đẻ đưa ra một lời khuyên về một vấn đề cho ai đó, đầu tiên chuyên gia sẽ thu lượm các sự kiện về vấn đề đó và lưu
trừ chúng trong bộ nhớ ngắn hạn (Short Term Memorv - STM) của anh ta. Sau đó, anh ta suy diễn để tìm ra kết luận bàng cách kết hợp các sự kiện trong STM và tri thức trong LTM của mình. Thực hiện quá trình trên, chuyên gia tìm ra kểt luận cho vấn đề cần giải quyết
Hệ chuyên gia là mộ! chương trình máy tính được thiết kế để mô hình hỏa khù năng giải quyết vẩn đề của một chuyên gia con người.
Hệ chuyên gia sồm các đặc tính sau đây:
+ Bao gồm hai phần: mô tơ suy diễn và cơ sở tri thức. Cơ sở tri thức chứa các luật (sự kiện, luật, khái niệm, mối quan hệ) mô tà tổng quát về các tri thức thuộc miền bài toán. Mô tơ suy diễn dùng để suy diễn tri thức mới từ cơ sở tri thức. Mô tơ suy diễn là độc lập ứng dụng với cơ sở tri thức theo nghĩa nó có thể dễ dàng thích nghi với một cơ sở tri thức mới mà không cần phải thay đổi nhiều.
+ Chấp nhận những yếu tố chưa xác định, xác suất, mâu thuần (có thể chứa nhừng luật không chắc chắn).
+ Hệ thống thường chạy trên các trạm làm việc hiện đại, cỏ giao diện tương tác và hội thoại với người dùng.
+ Hệ thống không chi có khả năng suy diễn tri thức mới mà còn có thể giải thích (bằng cách nào / tại sao) về các kết luận suy diễn được.
+ Có thể có chức năng học. Khi suy diễn được tri thức mới, ES có thể cập nhật, lưu chúng vào cơ sở tri thức.
Tiếp cận theo quan điểm cùa Kowalski cho ràng “thuật (oán - logic + điểu khiến” {Algorithm - Logic + Control) chúng ta có:
ES = cơ sở tri thức (knowledge - base) + điều khiển (control) + giao diện người dùng (user interface)
Cơ sở tri thức của ES là tập hữu hạn các luật tồng quát (các câu tổng quát). Mô tơ suy diễn gồm: chiến lược suy diễn (suy diễn tiến , suy diễn lùi hay kết hợp cả hai), bộ phận điều khiển (giải quyết xung đột, điểm dừng, ...), chiến lược tìm kiếm (sâu hay rộng).
Suy diễn tiến (forward chaining) là bắt đầu từ những cái đã biết và suy diễn ra tri thức mới bằng cách sử dụng các luật mà phần giả thiết của nó phù hợp với các sự kiện đã biết. Quá trình tiếp tục cho đến khi đạt được đích cần suy diễn hoặc
không còn luật nào mà già thiết cùa nó phù hợp với các sự kiện đã biết hoặc sự kiện đà suy diễn được trước đó.
Suv diễn lùi (backward chaining) là bắt đầu từ kết luận (đích) cần chứng minh, và suy diễn tiếp cho đến khi đạt được kết luận mới phụ thuộc vào những cái đã biết.
Có thể thấv trong lập trình logic, thuật eiải SLD là một thủ tục chứng minh áp dụng chiến lược suv diễn lùi. Hầu hết các hệ lập trình logic hiện nay là các hệ chứng minh định lý theo thuật giải. Tuy nhiên, một hệ lập trình logic không nhất thiết phải dựa trên các thuật giải, nó có thể là mộl hệ không có mệnh đề (câu)
ES và hệ lập trình logic có các điểm tương đồng sau đây:
+ Kiến trúc tổng thể cùa một hệ lập trình logic và ES là tương đương nhau đều bao gồm các thành phần: cơ sở tri thức + thù tục suy diễn độc lập ứng dụng + bộ phận giao diện với người dùng.
+ Sự tách biệt phần logic (what) và phần điều khiển (how) trong thuật toán. Đó là các cơ sở tri thức và thủ tục suy diễn độc lập ứng dụng.
+ Cơ sở tri thức của ES cũng là tập hữu hạn các luật.
+ Mô tơ suy diễn trong ES sử dụng chiến lược suy diễn lùi và thuật giải SLD tronu lập trình logic cũng áp dụng chiến lược suy diễn này trong thủ tục chứng minh của mình.
Các điểm tương đồng trên đây thể hiện mối quan hệ mật thiết giữa ES và hệ lập trình logic. Tuy nhiên, giữa chúng cũng có những khác biệt cơ bản. Đó là:
+ Các luật trong cơ sở tri thức của ES thường là tri thức chuyên gia trên một miền lĩnh vực áp dụng hẹp.
+ Cơ sở tri thức của ES thường là không đầy đù. Nghĩa là nó chỉ chứa các luật "tổng quát” liên quan tới các lồi và các triệu chứng mà không chứa các thông tin về một triệu chứng đặc biệt của bất kỳ trường hợp riêng nào. Các thông tin riêng sỗ được thêm vào khi hội thoại với người dùng để hoàn thiện cơ sờ tri thức và suy diễn. Các sự kiện trong ES có thể nhận một hoặc nhiều giá trị với mức độ tin cậy CF (certainty factor)1, có thể có các sự kiện mờ (fuzzy factor).
1 C F thường íà một số trong phạm vi [-1, 1] với C F = -1 thé hiện sự kiện là chẳc chắn sai, C F = I thề hiện sự kiện là chác chắn đúng. C F = giá trị giữa -I và 1 thế hiện mức độ tin cậy cũa sự kiện.
+ ES có khả năng giải thích các kết luận mình đưa ra, trong lập trình logic kỹ thuật này thông thường không được trang bị.
Lập trinh logic và ES đều có nguồn sốc từ các nghiên cứu thuộc lĩnh vực trí tuệ nhân tạo, và ngày nay đã khẳns định được vị trí độc lập của mình. Cả hai đã được ứng dụng rộng rãi trong nhiều lĩnh vực của đời sống và khoa học. Tuy nhiên, không phải mọi bài toán có khả năng tin học hóa đều có thể giải quyết được trong lập trình logic và ES.
ES đã được ứng dụng rộng trong các lĩnh vực: thương mại, sản xuất, y học, quốc phòng, kỹ nghệ, máy tính, vũ trụ, giao thông, nông nghiệp, giáo dục, môi trường, điện tử1, ...Có nhiều bài toán mà ES có thể áp dụng tốt như các bài toán về: chẩn đoán, thiết kế, mô phỏng, chi dẫn, điều khiển, dự báo, lựa chọn, ra quyết định...Hàng năm, trên thế giới số lượne các ES không ngừng gia tăng2. Tuy nhiên, ES sẽ không thích hợp với những bài toán mới lạ chưa được giải quyết bằng tri thức chuyên gia con người.
2.5.2. Cơ sở dữ liệu (CSDL) suy diễn (deductive database)
Song song vớỉ sự phát triển của các hệ quản trị CSDL là sự phát triển của các ES để hỗ trợ cho quá trình ra quyết định trong phạm vi (bài toán) hẹp và ngữ cảnh xác định. Tính năng chính cùa ES là khả năng suy diễn hỗ trợ quá trình ra quyết định nhưng ES thường là không quản lý được một khối lượng dữ liệu lớn. CSDL suy diễn ra đời là một cố gắng để vượt qua aiới hạn của các CSDL truyền thống nhờ các tính năng khác biệt có nguồn gốc từ ES. CSDL suy diễn có thế được xem là sự tích hợp cùa dữ liệu (trong hệ quàn trị CSDL truyền thonẹ) & tri thức (trong ES).
Một câu CSDL là một công thức cấp một có dạng:
A 4— Lị aL, a... Ln (n Ĩĩ 0)
Trong đó A là một nguyên tố; Lj là các literal. Mọi biến trong A và trong L| A L2 a ... Lnđều được giả định là có lượng từ phổ dụng. A được gọi là phần đầu (head); w là phần thân (body).
1 Các khảo sát năm 1986 cho thấy số lượng các ES áp dụng trong thương mại là hơn 300, sản xuất ià 350, y học !à 300, kỹ nghệ là 150, giao thông là 110,... [2]
Cơ sở dữ liệu (CSDL) suy diễn là tập hữu hạn các câu CSDL. Một truy vấn (query) là m ột công thức cấp mội có dạng: <— w.
Tập các câu cùa CSDL suy diễn gồm 3 phần đó là: tập các sự kiện (facts), tập các ỉuật suy diễn (deductive rules), tập các ràng buộc toàn vẹn (integrity constraints). Sự kiện là thông tin đúng trone CSDL; luật cho phép suy diễn các sự kiện mới từ các sự kiện lưu trone CSDL; ràng buộc toàn vẹn là các điều kiện mà CSDL phải thỏa mãn.
Sự kiện được biểu diễn bằng một câu với phần thân là rỗng. CSDL suy diễn chi chứa các sự kiện nền (ground facts).
Ràng buộc toàn vẹn được biểu diễn bởi câu với phần đầu là rồng. Vì các câu trong CSDL không thể khuyết thiếu phần đầu nên các câu ràng buộc toàn vẹn có phần đầu là vị từ ICn, vị từ ICn chỉ là tên của ràng buộc, (ví dụ: ICi(x) <— father(x, x ) - ngữ nghĩa ràng buộc: với mọi X, X khône thể là cha cùa chính mình).
Trong CSDL suy diễn, có 2 cách tiếp cận đề tìm ra các câu trả lời cho một truy vấn Q: suy diễn tiến (forward chaining) và suy diễn lùi (backward chaining).
Suy diễn tiến là từ tập các câu của CSDL đã cho, suy diễn được bắt đầu với các sự kiện nền, áp dụng các luật để sinh ra các sự kiện cho đến khi không thể sinh ra được sự kiện nào nữa thì dừng. Và nếu cỏ các câu trả lời cho truy vấn thì đó là các sự kiện nền trong tập các câu hoặc là các sự kiện dược suy diễn ra.
Suy diễn lùi là suy diễn bất đầu từ truy vấn Q, áp dụng các luật để sinh ra các câu mới. Quá trình suv diễn dừng khi câu sinh ra là các sự kiện nền hoặc ià không còn luật để áp dụng. Trường hợp dừng thứ nhất, Q có câu trả lời; ở trường hợp thứ hai, Ọ không có câu trả iời.
Lập trình logic và CSDL suy diễn có quan hệ gần gũi thông qua ES, giữa chúng có các điểm giống nhau cơ bản sau:
+ Chươna trình logic và CSDL suy diễn đều là tập hữu hạn các luật (các câu). Câu chương trình và câu CSDL có dạng giống nhau.
+ Một câu đích G cần được chứng minh trong một chương trình logic p tương đương với một truy vấn Q đối với một CSDL suy diễn.
+ Thuật giải SLD trong lập trình logic tương đương với chiến lược suy diễn lùi trona CSDL suy diễn.
Tuy vậy, lập trình loeic và CSDL suy diễn cũng có nhừng đặc điểm khác biệt. Với một CSDL mục đích chính là cuna cấp các mô hình để lưu trừ và xử lý đữ liệu hiệu quả với khối lượng dừ liệu đủ lớn. CSDL suy diễn trước hết là một CSDL nên không có mục đích ngoài phạm vi đó. còn một chương trình logic là để giải quyết bài toán đặt ra.
Chương 3. Ngôn ngữ Prolog
Prolog là viết tất cùa PROgramming in LOGic. Đây ià một ngôn ngừ bậc cao, ra đời từ các nghiên cứu về chứng minh định lý tự động và hệ chuyên gia trong những năm 60 - 70 của thế kỷ 20.
Prolog ra đời đầu tiên nhằm phục vụ cho việc xử lý ngôn ngữ tự nhiên. Đen nay, Prolog đã được phát triển và ứng dụng trona các lĩnh vực khác như trí tuệ nhân tạo, hệ chuyên gia, lập trình logic.
Prolog là ngôn nsữ hỗ trợ tốt cho lập trinh loaic và lập trình khai báo. Một chương trình Prolog chính là một chương trình logic được biểu diễn bởi tập íừ vựng của Prolog. Các câu trả lời Prolog đưa ra cho một câu hòi không chỉ đơn thuần ở dạng “yes/no" mà có thể có các câu trả lời tính toán.
Thủ tục suy diễn cài đặt trong Prolog chính là thuật giải SLD. Đẻ tìm câu trả lời cho câu hỏi dựa trên các luật và sự kiện trong chương trình p, Prolog thực hiện xây dựng cây tìm kiểm và duyệt cây đó theo chiều sâu. Các yếu tố cùa lời giải được Prolog đưa ra bàng cách lần ngược trong cây tim kiếm từ lá về gốc. Prolog sẽ tìm kiếm tất cả các lời giải có thể của câu hỏi.
Thứ tự của các câu trong chương trình p rất quan trọng, nó quyết định cấu trúc của cây tìm kiếm và do đó quyết định hiệu năng và tính dừng cùa việc tìm tiếm lời giải. Có những trường hợp mà về mặt lý thuyết là có lời giải cho câu hỏi nhưng chương Irỉnh Prolog không Ihể tìm được (theo nghĩa lặp vô hạn) bởi thứ tự các câu trong chương trình đẫn đến cây tìm kiểm có nhánh vô hạn ở vị trí bên trái nhất.
Phần này sẽ trình bày cơ bàn về ngôn ngữ Prolog trong mối quan hệ với lập trình logic. Một số toán tử và chương trình Prolog minh họa được trình bày trong phần phụ lục.
3.1. Các khái niệm c ơ bản 3.1.1. Hạng thứ c (Term)
Prolog nhận biết loại của hạng thức thône qua cú pháp (đã được quy ước) của nó. Sơ đồ sau đây SC minh họa các loại hạna thức và mối quan hệ giữa chúng:
Data objects
Simple objects Structures
Constants Variables
Atoms Numbers
Như vậy, hạng thức trong Prolog bao gồm các loại: hằng nguyên tố, hằng số, biến và các cấu trúc.
• Hăng nguyên to (atom)
Hằng nguyên tố là một xâu ký tự thỏa mãn các quy ước:
+ Bao gồm các ký tự số, chữ cái, ký tự gạch nổi dưới (_) và được bắt đầu bởi một ký tự viết thường.
+ Một hằng nguyên tố được bao hàm trong cặp dấu nháy đơn (*’) hoặc nháy kép (“’■). Khi được bao hàm trong các cặp đấu trên hàng nguyên tố có thể bắt đầu một ký tự viết hoa, có thể chứa các khoảng trắng (space). Khi thông dịch, Prolog đối xử với cặp dấu nháy đơn cũng như cặp dấu nháy kép. Tuy nhiên, vẫn có sự khác biệt giữa chúng, các dấu nháy đơn được loại bò khỏi nguyên tổ, còn các đấu nháy kép thì không.
+ Có thể chứa các ký hiệu đặc biệt: # $ % & * + - . / : < = > @ \ A' ~ Ví dụ:
+ a, b, c là các hằng ký tự
+ “A ỉ 23 ”, 'Ha noi là các hằng xâu kv tự
Trong trình dịch Prolog, bạn viết: ?’a ’ - a. thì bạn sẽ nhận được câu trả lời là uyes”; còn nếu viết ? "a " - a. thì bạn sẽ nhận được câu trả lời là ‘W \
• Hằng số (number)
• Biến (variable)
Biến là dăv các ký tự thỏa mãn các quy ước:
+ Bao gồm các ký tự chữ cái. chừ số và dấu gạch nối dưới (_) + Bắt đầu bời một ký tự chừ cái viết hoa.
+ Không chứa khoáng trắng.
+ Một biển có thể chỉ chứa một ký hiệu gạch nổi dưới (_) và được gọi là biến vô danh.
Ví du:
+ Abc, ABC, A: là các biến + là biến vô danh.
• Cấu trúc (structure)
Cấu trúc (hay còn gọi là tân từ) gồm tên và các đối.
V» dụ: p(Xh X2) là một tân từ với hai đối là hai biến X| và x 2. Tân từ p có k đối, chúng ta viết: p/k.
Các đối của tân từ cũng có thể là một tân từ khác Ví dụ: p(q(X, Y), Z).
Trong Prolog, ngữ nghĩa thông thường của một tân từ được hiểu là: nếu viết
p(x, y) thi ngữ nghĩa là X p y.
Ví dụ: me (mai, nga): mai là mẹ của nga
3.1.2. Câu Horn
Câu Hom được biểu diễn trong Prolog là câu có dạng:
F : ~ F h
Trong đó:
+ F là một nguyên tố, được gọi ỉà phần đầu câu
+ Fj (i = 1,2, ...n) là các literal, được gọi ỉà phần thân câu
Một sự kiện là một câu có phần thân rỗng, khi đó có thề bỏ ký hiệu Một luật là một câu có phần thân khác rỗng.
Ví dụ:
+ Sự kiện: father(tuan, mai). Ý nghĩa của sự kiện là "tuan là cha cùa mai” + Luật: parent(X, Y) father(X, Y). Ỷ nghĩa của luật “nếu X là cha của Y thì X là cha mẹ của Y”
+ Đích: lparent(tuan, mai). Ỷ nghĩa của câu đích này là “cỏ phải tuan ỉà cha mẹ của mai không?”
3.1.3. Phép toán
Một toán tử là một nguyên tổ kết hợp với một hoặc một số toán hạng. Một toán tử có thể là kết hợp trái, phải hoặc không kết hợp.
Prolog cho phép khai báo các toán tử theo cú pháp:
op(sổ ưu tiên, đặc tà, tên)
Trong đó:
+ tên: là tên do người lập trình đặt cho toán tử.
+ số ưu tiên: giá trị ưu tiên của toán tử, là một số nguyên € [ l , 1200]. s ố ưu tiên càng nhỏ thì độ ưu tiên của toán từ càng cao.
+ đặc tả: là một trong các ký hiệu sau đây đề chi kiểu kết hợp cùa toán tử:
Một đích Prolog là một câu Horn khỏrm có phần đầu và được viết sau dấu