Khung (trí tuệ nhân tạo)

Trong trí tuệ nhân tạo, khung là một dạng cấu trúc dữ liệu, tức là cách mà thông tin được tổ chức, lưu trữ và truy cập. Ý tưởng của khung là chia nhỏ tri thức (tức là thông tin hoặc hiểu biết) thành các mảnh nhỏ hơn, gọi là các "tình huống điển hình", nghĩa là các mẫu tình huống thường gặp trong đời sống. Khái niệm này được đề xuất bởi nhà khoa học Marvin Minsky vào năm 1974 trong bài viết "A Framework for Representing Knowledge". Khung đóng vai trò quan trọng trong các hệ thống AI, vì nó là một cách để lưu trữ thông tin, thường dưới dạng bản thể học (danh sách các khái niệm và quan hệ giữa chúng) của các nhóm đối tượng liên quan.

Khung không chỉ là cách lưu trữ dữ liệu, mà nó còn giúp mở rộng các hệ thống biểu diễn tri thức (cách AI hiểu và sử dụng tri thức). Ý tưởng này phát triển từ mạng ngữ nghĩa (cách biểu diễn mối quan hệ giữa các từ ngữ và khái niệm) và trở thành một phần quan trọng trong việc biểu diễn tri thức dựa trên cấu trúc. Theo quan điểm của các nhà nghiên cứu nổi tiếng như Russell và Norvig, khung giúp tập hợp các thông tin về các sự kiện cụ thể và phân loại chúng vào hệ thống phân loại lớn. Cách sắp xếp này giống với cách con người phân loại các loài sinh vật trong phân loại sinh học – tức là cách tổ chức các nhóm đối tượng theo sự liên quan.

== Cấu trúc khung ==
Khung giống như một cái khung ảnh, trong đó có những thông tin về cách chúng ta dùng khung, chúng ta mong đợi điều gì, và phải làm gì nếu điều đó không xảy ra. Một vài thông tin trong khung luôn giống nhau, nhưng một số thông tin khác, được gọi là "các terminal", có thể thay đổi. Các terminal giống như các biến số. Khung cấp cao chứa những thông tin luôn đúng, nhưng các terminal không phải lúc nào cũng đúng vì chúng có thể thay đổi khi có thông tin mới. Nhiều khung khác nhau có thể dùng chung các terminal.

Mỗi thông tin trong một khung được đặt trong một slot. Thông tin trong slot có thể là:

- Sự kiện hoặc Dữ liệu
- Giá trị (gọi là các khía cạnh)
- Các thủ tục (còn gọi là phần đính kèm thủ tục)
- IF-NEEDED: chỉ thực hiện khi cần
- IF-ADDED: cập nhật thông tin liên quan
- Giá trị mặc định
- Cho Dữ liệu
- Cho Thủ tục
- Khung khác hoặc các khung con

== Tính năng và lợi ích ==
Terminal của khung đã có sẵn các giá trị mặc định, điều này dựa trên cách bộ não con người hoạt động. Ví dụ, khi bạn nghe "một cậu bé đá một quả bóng", hầu hết mọi người sẽ nghĩ ngay đến một quả bóng cụ thể (như một quả bóng đá) thay vì một quả bóng chung chung không rõ hình dạng.

Một điểm mạnh của khung là chúng có thể xử lý các ngoại lệ trong các trường hợp cụ thể, khác với mạng ngữ nghĩa. Điều này làm cho khung linh hoạt hơn, cho phép biểu diễn chính xác hơn các tình huống thực tế.

Giống như mạng ngữ nghĩa, khung có thể được truy vấn bằng cách kích hoạt lan truyền. Theo các quy tắc kế thừa, bất kỳ giá trị nào được thêm vào một slot và được kế thừa bởi các khung con sẽ được cập nhật (IF-ADDED) vào các slot tương tự trong khung con. Khi một khung mới được tạo ra, nó sẽ thừa hưởng giá trị mới làm mặc định.

Vì khung dựa trên các cấu trúc, chúng ta có thể tạo ra một mạng ngữ nghĩa từ một nhóm các khung, mặc dù không có các đường liên kết rõ ràng. Các tham chiếu đến Noam Chomsky và lý thuyết ngữ pháp của ông trong thập niên 1950 thường không được nhắc đến trong công trình của Minsky.

Khung có cấu trúc đơn giản giúp dễ dàng suy luận tương tự, một tính năng quan trọng cho các hệ thống thông minh. Phần đính kèm thủ tục của khung cũng cung cấp sự linh hoạt giúp cho việc biểu diễn các thông tin thực tế hơn và có thể ứng dụng dễ dàng trong lập trình.

== Ví dụ ==
Khả năng suy luận tương tự (so sánh) rất dễ thấy, ví dụ có thể so sánh một cậu bé và một con khỉ chỉ bằng cách có các slot được đặt tên giống nhau.

Ngoài ra, Alex, một đại diện của cậu bé, thừa hưởng các giá trị mặc định như "Giới tính" từ khung cha là Cậu bé. Nhưng Alex cũng có thể có các giá trị đặc biệt khác như số lượng chân.

== Ngôn ngữ khung ==
Ngôn ngữ khung là một công nghệ để biểu diễn tri thức trong trí tuệ nhân tạo. Ngôn ngữ khung giống hệ thống phân cấp lớp trong ngôn ngữ lập trình hướng đối tượng, nhưng mục đích của chúng khác nhau. Khung tập trung vào việc biểu diễn kiến thức rõ ràng và dễ hiểu, trong khi lập trình đối tượng tập trung vào đóng gói và che giấu thông tin. Khung bắt nguồn từ nghiên cứu AI, còn lập trình đối tượng chủ yếu được dùng trong kỹ thuật phần mềm. Tuy nhiên, trong thực tế, hai kỹ thuật này có nhiều điểm giống nhau.

===Ví dụ===
Một ví dụ đơn giản để hiểu các khái niệm trong một ngôn ngữ khung là bản thể học Friend of A Friend (FOAF). Đây là một phần của mạng ngữ nghĩa giúp tạo nền tảng cho các hệ thống mạng xã hội và lịch. Khung chính trong ví dụ này là "Người". Các slot (khe) có thể là "email", "trang chủ", hoặc "số điện thoại" của người đó. Sở thích của mỗi người có thể được mô tả qua các khung bổ sung về các lĩnh vực như kinh doanh và giải trí. Slot "biết" liên kết một người với những cá nhân khác. Các sở thích có thể được suy ra từ mạng lưới bạn bè của họ.

===Các triển khai===
Ban đầu, các ngôn ngữ khung được phát triển chỉ cho các dự án nghiên cứu cụ thể và không được làm thành công cụ để người khác tái sử dụng. Tương tự như hệ thống chuyên gia với khả năng suy luận, các nhà nghiên cứu đã nhận ra lợi ích của việc phát triển ngôn ngữ khung có thể dùng chung, không chỉ cho các ứng dụng đặc thù. Một trong những ngôn ngữ khung đầu tiên là KRL. Một ngôn ngữ khung có ảnh hưởng lớn là KL-ONE. Từ KL-ONE, nhiều ngôn ngữ khung kế thừa đã xuất hiện, như ngôn ngữ Loom, do Robert MacGregor phát triển tại Viện Khoa học Thông tin.

Vào những năm 1980, Trí tuệ Nhân tạo (AI) trở nên phổ biến trong lĩnh vực kinh doanh, nhờ vào các hệ chuyên gia. Điều này thúc đẩy sự phát triển nhiều sản phẩm thương mại để xây dựng các hệ thống dựa trên tri thức. Các sản phẩm này thường được lập trình bằng Lisp và sử dụng các cấu trúc như quy tắc IF-THEN để lập luận logic, kết hợp với các hệ phân cấp khung để biểu diễn dữ liệu. Một trong những công cụ phổ biến nhất là Môi trường Kỹ thuật Tri thức (KEE) của Intellicorp. KEE có đầy đủ các tính năng như kế thừa bội, các slot, trình kích hoạt, giá trị mặc định, và động cơ quy tắc hỗ trợ cả suy luận thuận và nghịch. Ban đầu, KEE được triển khai trên máy Lisp nhưng sau đó chuyển sang PC và các trạm làm việc Unix.

Chương trình nghiên cứu của mạng ngữ nghĩa đã khơi dậy sự quan tâm mới đối với phân loại tự động và các ngôn ngữ khung. Một ví dụ là tiêu chuẩn Ngôn ngữ Bản thể Web (Web Ontology Language - OWL), được dùng để mô tả thông tin trên Internet. OWL giúp tổ chức web theo các khái niệm, thay vì từ khóa như Google hiện nay. Ví dụ, nếu tìm từ "OWL", hiện nay kết quả sẽ liên quan đến loài chim Cú nhiều hơn là tiêu chuẩn OWL. Nhưng với mạng ngữ nghĩa, người dùng có thể chọn nghĩa "Web Ontology Language" mà không lo lắng về các từ đồng âm hay viết tắt không mong muốn.

Ngoài OWL, các tiêu chuẩn khác liên quan đến mạng ngữ nghĩa như OIL và DAML cũng bị ảnh hưởng bởi ngôn ngữ khung. Công cụ Protege từ Đại học Stanford giúp chỉnh sửa bản thể học dựa trên OWL, và dù đã dừng hỗ trợ cho các khung từ phiên bản 3.5, phiên bản mới nhất là 5 (năm 2017) vẫn được sử dụng phổ biến. Sự chuyển từ khung sang OWL DL là do OWL DL có khả năng biểu đạt cao hơn và là "tiêu chuẩn công nghiệp".

===So sánh giữa khung và đối tượng===
Ngôn ngữ khung có nhiều điểm chung với ngôn ngữ lập trình hướng đối tượng. Thuật ngữ và mục tiêu của hai cách tiếp cận này khác nhau, nhưng khi ứng dụng vào thực tế, các nhà phát triển thường không quan tâm nhiều đến lý thuyết mà chỉ tập trung vào tính năng cụ thể. Cả hai đều nhằm mục tiêu thu hẹp khoảng cách giữa các khái niệm trong đời sống và cách triển khai chúng trong phần mềm. Do đó, cả hai phương pháp đều đi đến ý tưởng biểu diễn các đối tượng phần mềm dưới dạng các phân loại học, từ các loại chung đến các loại cụ thể hơn.

Bảng dưới đây minh họa mối liên hệ giữa các thuật ngữ trong lập trình hướng đối tượng và ngôn ngữ khung:

Sự khác biệt chính giữa hai mô hình là mức độ mà đóng gói được coi là yếu tố quan trọng. Trong lập trình hướng đối tượng, đóng gói rất quan trọng vì nó giúp quản lý các hệ thống phức tạp. Mục tiêu là giảm thiểu sự tương tác giữa các phần của chương trình. Trong khi đó, ngôn ngữ khung ít quan tâm đến việc đóng gói hơn, mà chú trọng vào việc cung cấp nhiều công cụ để biểu diễn các quy tắc và logic lập trình.

Trong lập trình hướng đối tượng, tất cả mọi thứ được điều khiển bởi các phương thức, và các phương thức này kiểm soát cách dữ liệu được truy cập hoặc thay đổi. Ví dụ, để truy cập giá trị của một thuộc tính, ta phải sử dụng một phương thức Accessor. Phương thức này sẽ kiểm tra kiểu dữ liệu và các giới hạn của giá trị. Trong ngôn ngữ khung, các quy tắc và ràng buộc có thể được xử lý bằng các cách khác nhau, chẳng hạn như định nghĩa các kích hoạt (trigger) trước hoặc sau khi giá trị được thay đổi. Ngoài ra, các slot cũng có thể được bổ sung thông tin ràng buộc (còn được gọi là "facets" trong một số ngôn ngữ).

Một khác biệt lớn khác là khả năng thừa kế nhiều. Trong ngôn ngữ khung, thừa kế nhiều (tức là một khung có thể có nhiều lớp cha) là cần thiết vì nó phản ánh cách con người nhận thức thế giới, vốn không rơi vào các phân loại cứng nhắc. Tuy nhiên, trong lập trình hướng đối tượng, thừa kế đơn được ưa chuộng hơn để duy trì sự đóng gói và tính mô-đun.

Mặc dù các ngôn ngữ khung ban đầu như KRL không bao gồm truyền thông điệp, nhưng do nhu cầu của các nhà phát triển, hầu hết các ngôn ngữ khung sau này (ví dụ: Loom, KEE) đã thêm tính năng này.

Trong lập trình hướng đối tượng, các tiêu chuẩn đã được phát triển để cung cấp các chức năng tương tự như ngôn ngữ khung, nhưng theo cách khác. Tất cả các tiêu chuẩn này đều tập trung vào các thư viện đối tượng. Ví dụ, Object Management Group đã chuẩn hóa các đặc tả cho các chức năng như liên kết dữ liệu và tích hợp các quy tắc, tương tự như "facets" và ràng buộc trong ngôn ngữ khung như Loom.

== Lịch sử ==
Công trình ban đầu về Khung được lấy cảm hứng từ các nghiên cứu tâm lý học từ những năm 1930. Những nghiên cứu này cho thấy con người sử dụng tri thức đã lưu trữ để diễn giải và hành động trong các tình huống mới. Thuật ngữ "Khung" lần đầu tiên được Marvin Minsky sử dụng để mô tả cách con người suy nghĩ và hiểu về hình ảnh và ngôn ngữ. Trong các bài toán như nhận dạng âm thanh hoặc phát hiện các cạnh của vật thể, mặc dù những việc này dễ dàng đối với con người, nhưng lại rất phức tạp đối với máy tính. Sự phức tạp này chỉ thực sự được hiểu khi các nhà nghiên cứu AI bắt đầu cố gắng để máy tính giải quyết chúng.

Khái niệm ban đầu của Khung, hay còn gọi là Kịch bản (Scripts), giúp thiết lập bối cảnh cho một vấn đề và làm giảm bớt những khả năng phải tìm kiếm. Schank và Abelson cũng đồng ý với ý tưởng này, họ dùng nó để minh họa cách hệ thống AI có thể xử lý những tương tác phổ biến của con người, ví dụ như khi gọi món ở nhà hàng. Những tương tác này được tổ chức thành các Khung với các "slot" (ô chứa) để lưu thông tin liên quan. Slot giống như các thuộc tính trong lập trình hướng đối tượng. Mỗi slot có thể có giá trị mặc định nhưng cũng có thể thay đổi khi có trường hợp cụ thể xảy ra. Ví dụ, khi bạn gọi món ở nhà hàng, hệ thống bắt đầu với một Khung cơ bản rồi điều chỉnh thông tin theo từng trường hợp cụ thể. Khung giống như một "mẫu" chung, và mỗi trường hợp cụ thể là một đối tượng riêng. Ban đầu, nghiên cứu về Khung tập trung vào việc miêu tả dữ liệu tĩnh, nhưng sau này có thêm cơ chế xử lý thông tin tự động, ví dụ như "trigger", là mã lệnh tự động kích hoạt khi dữ liệu trong slot thay đổi.

Giống như các lớp đối tượng, Khung cũng có thể được tổ chức theo dạng thừa kế. Ví dụ, một khung cơ bản có thể là gọi món ở nhà hàng, và một trường hợp cụ thể là Joe đến Dairy Queen. Một khung phức tạp hơn có thể là gọi món tại nhà hàng sang trọng, nơi mà Khung này sẽ thừa hưởng các giá trị mặc định từ khung cơ bản nhưng thêm hoặc thay đổi một số giá trị, chẳng hạn như giá cả.

===Ngôn ngữ===
Các nghiên cứu ban đầu về ngôn ngữ Khung, như của Schank và Abelson, dựa trên các nghiên cứu tâm lý học và nhằm thiết kế những công cụ giúp biểu diễn tri thức theo cách con người sử dụng hàng ngày. Các nhà nghiên cứu này không quan tâm nhiều đến toán học vì họ nghĩ rằng nó không phải là cách con người thường suy nghĩ. Ví dụ, cách con người dùng ngôn ngữ không phải lúc nào cũng theo lôgic chặt chẽ.

Tương tự, nhà ngôn ngữ học Charles J. Fillmore đã phát triển lý thuyết về ngữ nghĩa khung, sau này tạo ra tài nguyên tính toán như FrameNet. Lý thuyết này dựa trên cách con người sử dụng ngôn ngữ và nhận thức.

Ngược lại, các nhà nghiên cứu như Ron Brachman lại tập trung vào việc cung cấp cho AI một nền tảng toán học và logic. Mục tiêu của họ là kết nối các lớp Khung, slot và quy tắc vào các lý thuyết toán học như lý thuyết tập hợp và logic. Ưu điểm của cách này là có thể tự động xác minh và tạo ra mô hình bằng các hệ thống suy luận. Nhược điểm là mô hình ban đầu có thể phức tạp và khó hiểu.

Sự khác biệt này tạo ra sự chia rẽ trong nghiên cứu AI thành hai nhóm "neats" và "scruffies". "Neats" là những người thích sự chặt chẽ về toán học như Lôgic Bậc nhất và Lý thuyết tập hợp, trong khi "scruffies" thích mô hình hoá kiến thức theo cách trực quan và gần gũi với suy nghĩ của con người.

Ngôn ngữ nổi bật nhất trong nhóm chính thức là KL-ONE. KL-ONE tạo ra nhiều ngôn ngữ Khung khác, và một trong những tính năng quan trọng là khả năng tự động phân loại thông tin, được gọi là "classifier". Classifier có thể phân tích và suy ra các quan hệ, hoặc tìm ra các lỗi không nhất quán trong mô hình. Thay vì cần một động cơ suy luận phức tạp, classifier giúp thực hiện những nhiệm vụ này một cách tự động.

Công nghệ này rất hữu ích khi xử lý dữ liệu trên Internet, nơi không thể chuẩn hóa tất cả thông tin theo một mô hình duy nhất. Khả năng tự động phân loại của classifier giúp tổ chức lại dữ liệu không nhất quán trên Internet, tạo ra một hệ thống như mạng ngữ nghĩa. Những kỹ thuật phân loại này là nền tảng quan trọng để phát triển mạng ngữ nghĩa. Sự khác biệt giữa "neats" và "scruffies" cũng thể hiện trong nghiên cứu về mạng ngữ nghĩa, dẫn đến sự hình thành cộng đồng Dữ liệu Mở Kết nối, tập trung vào việc hiển thị dữ liệu trên web hơn là tạo ra mô hình.

== Xem thêm ==
- Logic mô tả
- Logic bậc nhất
- Cơ sở tri thức

== Tài liệu tham khảo ==
- Russell, Stuart J.; Norvig, Peter (2010), "Artificial Intelligence: A Modern Approach" (2nd ed.), Upper Saddle River, New Jersey: Prentice Hall, , ch. 1.
- Marvin Minsky, A Framework for Representing Knowledge , MIT-AI Laboratory Memo 306, June, 1974.
- Daniel G. Bobrow, Terry Winograd, An Overview of KRL, A Knowledge Representation Language
- R. Bruce Roberts and Ira P. Goldstein, The FRL Primer, 1977
- R. Bruce Roberts and Ira P. Goldstein, The FRL Manual, 1977
- Peter Clark & Bruce Porter: KM - The Knowledge Machine 2.0: Users Manual, http://www.cs.utexas.edu/users/mfkb/RKF/km.html.
- Peter D. Karp, The Design Space of Frame Knowledge Representation Systems, Technical Note 520. Artificial Intelligence Center, SRI International, 1992

== Liên kết ngoài ==
- "A Framework for Representing Knowledge" của Minsky
- Trang web của Artificial Intelligence: A Modern Approach
- Hệ thống dựa trên khung
- Giao thức khung tổng quát
- Trình soạn thảo Ontology Protégé
- Giới thiệu về Ngôn ngữ Khung