[Representation] Rule – Biểu diễn tri thức dạng luật
Chào các bạn, sau bài viết về “From Data Structure to Knowledge Representation” hôm nay chúng ta sẽ đi sâu vào một trong những phương pháp biểu diễn tri thức đã được giới thiệu ở bài trước – Rule : Biểu diễn tri thức dạng luật.
Hàng ngày chúng ta thường xuyên nói với nhau những điều tựa như
– “Nếu trời không mưa, thì tối nay chúng ta đi xem phim”
– “Nếu con học giỏi, thì bố mẹ sẽ thưởng cho con”
– “Nếu nhân viên trong công ty làm việc chăm chỉ, thì công ty sẽ phát triển nhanh chóng và phát đạt”
…
hay trong tiếng Anh, chúng ta có hẳn một loại câu điều kiện “If”. Có thể thấy rằng cách nói này vô cùng phổ biến, với nội dung bao gồm:
– Phần điều kiện: Chẳng hạn “trời không mưa”.
– Phần kết luận: Chẳng hạn “tối nay chúng ta đi xem phim”.
hay viết tổng quát lại:
Nếu “điều kiện” thì “kết luận” tương ứng như tiếng Anh: If “condition” then “result“.
hay một cách hiểu khác: nếu cứ có điều kiện thì chúng ta sẽ có kết quả như kết luận. Nếu để ý một chút chúng ta sẽ thấy cách nói này mang ý nghĩa tương tự với A -> B – nòng cốt của một tư duy logic. Vậy nên nếu như tri thức hay thông tin chúng ta cần sử dụng để suy luận có thể biểu diễn theo cách này.
Phương pháp biểu diễn tri thức dạng luật – Rule Representation, được phát minh bởi Herbert A. Simon, J.C. Shaw, and Allen Newell trong lúc những nhà khoa học này đang cố gắng xây dựng một hệ thống có thể giải được bài toán tổng quát (General Problem Solver). Đây là một phương pháp biểu diễn tri thức có cấu trúc với ý tưởng là tri thức có thể được cấu trúc bằng một cặp các điều kiện và kết quả tương tự như cách nói mà ta vừa đề cập ở trên.
1 – Biểu diễn trên CSDL:
Như đã mô tả ở trên, tri thức hay thông tin sẽ được đưa vào dưới dạng A -> B (IF A Then B). Điều này có nghĩa là ta sẽ chỉ cần quan tâm vào A và B. Hệ thống đơn giản nhất ta có thể tạo ra như sau: (Những ví dụ về các hệ thống được xây dựng trong loạt bài sẽ lấy bối cảnh cho hệ thống của game nhằm giúp bạn đọc có thể dễ dàng ánh xạ với những hành động trong trò chơi điện tử thường ngày)
Bảng “Condition”: chứa toàn bộ các thông tin tương tự như A, dùng để so sánh với input. Chẳng hạn:
A1: Trời mưa
A2: Súng hết đạn
A3: Lượng HP của nhân vật giảm xuống xấp xỉ 0
A4: Người chơi di chuyển sang hướng Đông
Bảng “Action”: chứa toàn bộ các hành động tương tự như B, dùng để đưa ra output là lời cảnh báo, hay nhằm mục đích báo cho hệ thống biết nên điều khiển các NPC (Non-player Character) như thế nào.
Chẳng hạn:
B1: Tầm nhìn bị hạn chế (Thông báo cho người chơi tầm nhìn sẽ bị hạn chế khi trời mưa).
B2: Tự động nạp đạn (Tự động nạp đạn cho người chơi khi súng hết đạn).
B3: Chạy hoặc sử dụng thiết bị hỗ trợ (Thông báo cho người chơi về tình trạng nguy kịch của nhân vật kèm lời khuyên chạy đi hay sử dụng thiết bị hỗ trợ để sống sót).
B4: Điều khiển toàn bộ NPC di chuyển sang hướng Đông (Điều khiển NPC di chuyển tương ứng theo hướng di chuyển của nhân vật).
Bảng “Link”: chứa toàn bộ các luật của hệ thống, dùng để thiết lập những kết nối giữa A và B.
Chẳng hạn:
Condition = A1, Action = B1
Condition = A2, Action = B2
Condition = A3, Action = B3
Condition = A4, Action = B4
Khi có input, ta sẽ thực hiện duyệt bảng Condition, nếu input match với Ai thì tìm trong bảng Link những bản ghi có Condition = Ai, từ đó lấy ra Bi tương ứng, trả về cho hệ thống xử lý, đưa ra cảnh báo hay tự động điều khiển game. Đến đây ta sẽ thấy nó khá giống với việc sử dụng If – else trong các ngôn ngữ lập trình, có điều chúng tập trung hơn.
2 – Mở rộng:
Khi phần Action hay Result Bi trở thành Condition của một luật khác, khi đó ngoài việc lấy được kết quả của luật tương ứng với input, ta còn có thể tiếp tục tìm kiếm kết quả được suy ra từ kết quả trước. Quá trình này có thể xảy ra một cơ số lần, và làm cho hệ thống trở thành có thể suy diễn. Chẳng hạn
Condition: A1, A2, A3, A4, B1
Action: B1,B2,B3,B4,B5
Trong đó A1 -> B1 (như ví dụ Trời mưa -> Tầm nhìn bị hạn chế) và B1 -> B5 (Tầm nhìn hạn chế -> Cảnh báo sử dụng súng sẽ gặp khó khăn). Vậy nên trong trường hợp này ta có thể đưa ra cảnh báo chính xác hơn cho người chơi.
Cách thức implement để hệ thống có thể suy diễn không gặp giới hạn về số lần tìm kết luận của mỗi luật hay xử lý khi gặp lỗi sẽ được đề cập sau loạt bài về những cách thức biểu diễn này. (Suy diễn tiến & lùi). Ta tiếp tục đi sâu hơn vào cách cấu trúc dữ liệu, sau cho biểu diễn tri thức flexible nhất có thể.
3 – Phần điều kiện của luật có thể chứa nhiều điều kiện:
Nghĩa là:
- A1 AND A2 AND A3 AND … AND An -> B
Hoặc: - A1 OR A2 OR A3 OR … OR An -> B
Với trường hợp thứ 2 ta có thể dễ dàng tách ra thành nhiều luật:
A1 -> B
A2 -> B
…
An -> B
Với trường hợp 1 ta nhóm các điều kiện A1, A2, …, An thành một điều kiện A. Khi đó mỗi điều kiện có thể chứa một điều kiện hay nhiều tương tự như cấu trúc file trong thư mục, Folder là 1 file đặc biệt có khả chứa nhiều file khác (Tương tự như Composite Pattern).
Với trường hợp nhóm các điều kiện trong luật có thể bao gồm cả AND & OR, ta sẽ thực hiện tách các luật thành các luật chỉ gồm AND như trường hợp 2, sau đó xử lý các nhóm điều kiện AND thuần thuý như trường hợp 1.
4 – Phần kết luận của luật có thể chứa nhiều kết luận:
Tương tự như phần 3, ta cũng có 2 trường hợp:
– TH1: A -> B1 AND B2 AND B3 AND … AND Bn
– TH2: A-> B1 OR B2 OR B3 OR … OR Bn
Với TH1 ta có thể tách luật trênt thành nhiều luật mà vẫn giữ nguyên giá trị của tri thức. Tương đương với:
A -> B1
A -> B2
…
A -> Bn
Trong TH2, nội dung của luật không chỉ ra được một kết quả cụ thể, chỉ khoanh vùng kết quả trong số các kết quả B1, B2, …, Bn. Ta cũng có thể nhóm các kết quả này thành 1 kết quả bao hàm tất cả như trong trường hợp 1 phần 3. Tuy nhiên những kết quả như thế này chủ yếu nhằm mục đích chứng minh với input cho trước một kết quả nào đó sẽ không xảy ra. (Kết quả cần kiểm tra không nằm trong tập kết quả B1, B2, …, Bn).
5 – Ưu điểm:
- Bản thân tri thức được biểu diễn dưới dạng luật dựa trên câu điều kiện trong ngôn ngữ tự nhiên, chính vì vậy nó rất dễ hiểu đối với người dùng.
- Cách cấu trúc dữ liệu khá đơn giản, chỉ gồm điều kiện và kết quả. Chính vì vậy cách biểu diễn này giúp cho việc cài đặt cơ chế suy luận và giải thích cho người dùng kết quả cũng dễ dàng hơn.
- Vì dễ hiểu nên việc bảo trì, cải tiến hệ thống cũng không phức tạp.
- Các luật bản thân chúng hoạt động độc lập, không cần tạo ràng buộc giữa các luật.
6 – Nhược điểm:
- Vì đơn giản nên để biểu diễn tri thức phức tạp, số lượng luật sinh ra lại rất lớn. (Có những tri thức có thể đòi hỏi hàng ngàn luật sinh).
- Bên cạnh đó tính đơn giản của dạng luật cũng khiến người sử dụng thích ứng dụng nó hơn cho dù tồn tại những phương pháp khác thích hợp hơn.
- Đồng thời việc sinh ra số lượng luật lớn khi biểu diễn tri thức phức tạp cũng sẽ khiến cho bộ máy suy diễn phải chịu tải cao trong quá trình tìm kiếm nội dung cần suy luận.
Nếu bạn là người bắt đầu với trí tuệ nhân tạo, biểu diễn dạng luật thực sự đem lại cảm nhận đầu tiên về hệ thống có khả năng suy diễn. Với sức mạnh phần cứng hiện thời, không khó để có được một hệ thống suy diễn với biểu diễn dạng luật hoạt động hiệu quả. Trong bài viết sau chúng ta sẽ đi sâu hơn vào cách biểu diễn Semantic Net – Mạng ngữ nghĩa. Cảm ơn các bạn đã dành thời gian đọc bài viết này.