I frame sono strutture dati gerarchiche utilizzate nell'intelligenza artificiale nel contesto della rappresentazione della conoscenza progettata per modellare concettio, oggettio o "situazioni stereotipate". Sono state introdotto da Marvin Minsky nel 1974 nell'articolo A Framework for Representing Knowledge.

I frame costituiscono la struttura dati primaria dei linguaggi a frame impiegati in intelligenza artificiale. Nonostante i sistemi a frame siano stati concepiti come alternativa alla logica, è stato dimostrato che la parte monotona e dichiarativa di questo formalismo può essere rappresentata utilizzando la logica del primo ordine . In generale, non è stata fornita una semantica precisa per gli aspetti non dichiarativi, non logici o non monotoni di tali sistemi, per cui né la loro potenza espressiva né la qualità dei corrispondenti algoritmi e servizi di ragionamento possono essere confrontate con quelle di altri formalismi .

Struttura del frame Un frame è composto da quattro elementi fondamentali strutturati in modo gerarchico:

Nome del Frame (Frame Name): Identificatore unico del concetto (es. Veicolo, Automobile, Cane). Slot (Slot): Gli attributi o proprietà che caratterizzano l'entità rappresentata. Possono contenere valori semplici o riferimenti ad altri frame (es. per Automobile: proprietario, numero_ruote, motore). Faccette (Facet): Metadati associati a uno specifico slot che ne specificano il comportamento o i vincoli: Value: Il valore effettivo assegnato allo slot. Default: Il valore assegnato automaticamente in mancanza di informazioni esplicite (es. numero_ruote = 4). Vincoli (Constraint): Regole o tipi ammessi per lo slot (es. deve essere un intero positivo). Demoni (Procedural Attachment): Codice eseguibile attivato da eventi sugli slot: if-needed: Eseguito per calcolare il valore quando viene richiesto e non è presente; if-added: Attivato quando viene inserito o modificato un valore; if-removed: Attivato quando un valore viene eliminato. Relazioni di ereditarietà: Collegamenti strutturali tra frame che creano una gerarchia di classi e istanze: IS-A: Relazione di sotto-classe (es. Automobile IS-A Veicolo). INSTANCE-OF: Relazione di appartenenza di un individuo a una classe (es. MiaAuto INSTANCE-OF Automobile).

Il frame contiene informazioni su come utilizzare il frame, cosa aspettarsi dopo e cosa fare quando queste aspettative non vengono soddisfatte. Alcune informazioni nel frame restano generalmente invariate mentre altre informazioni, memorizzate in "terminali" della struttura gerarchica, di solito cambiano nel tempo. I terminali possono essere considerati come variabili. I frame di primo livello veicolano informazioni, che possono essere considerate sempre vere per il dominio in questione, invece i terminali non devono essere necessariamente veri. Il loro valore potrebbe cambiare con l'acquisizione di nuove informazioni. Frame diversi possono condividere gli stessi terminali.

Esempio +ElementoComponenteDettaglioFrameAutomobileClasse di oggettiSlotIS-AVeicoloSlotNumero_PorteFacet Default: 5 | Facet Constraint: [2, 3, 4, 5]SlotProprietarioFacet Type: PersonaSlotTassa_CircolazioneFacet IF-NEEDED: calcola_tassa()

Caratteristiche e vantaggi I terminali di un frame sono già riempiti con valori predefiniti, sulla falsariga del funzionamento della mente umana. Ad esempio, quando si dice a qualcuno "un ragazzo calcia un pallone", la maggior parte delle persone visualizzerà un pallone particolare (come ad esempio un pallone da calcio familiare) piuttosto che immaginare un pallone astratto senza attributi.

Un particolare punto di forza delle rappresentazioni basate su frame, a differenza delle reti semantiche, è che le prime ammettono eccezioni in casi particolari. Ciò conferisce ai frame una flessibilità che consente una più accurata rappresentazione di fenomeni del mondo reale.

Come le reti semantiche, i frame possono essere interrogati con tecniche di attivazione a diffusione. Seguendo le regole di ereditarietà, ogni valore dato a uno slot ereditato dai sotto-frame verrà aggiornato (IF-ADDED) agli slot corrispondenti nei sotto-frame e ogni nuova istanza di un particolare frame presenterà quel nuovo valore come predefinito.

Poiché i frame sono basati su strutture, è possibile generare una rete semantica dato un insieme di frame pur mancando di archi espliciti. In generale nelle pubblicazioni di Minsky non si fa riferimento alle grammatiche generative di Noam Chomsky (1950). Tuttavia, la loro forza semantica appare originata da tale nozione.

Le strutture semplificate dei frame facilitano forme di ragionamento analogico, una caratteristica molto apprezzata in qualsiasi agente intelligente. Gli attributi procedurali forniti dai frame consentono inoltre un certo grado di flessibilità che rende la rappresentazione più realistica e offre una naturale facilità d'uso nella programmazione delle applicazioni.

Esempi Si presenterà un semplice ragionamento analogico (confronto) che coinvolge un ragazzo e una scimmia usando semplicemente slot con nomi simili.

Notare anche che Alex, un'istanza di un ragazzo, eredita i valori predefiniti come "Genere" dall'oggetto genitore più generale Ragazzo, ma il ragazzo può anche avere valori di istanza diversi sotto forma di eccezioni come il numero di gambe. SlotValoreGenereALEX_(questo frame)NOMEAlex(valore chiave)È UNRagazzo(frame principale)SESSOMaschio(valore ereditario)ETÀIF-NEEDED: Sottrai (corrente, DATA DI NASCITA)(allegato procedurale)CASAVia Rossi N°100(valore istanza)DATA DI NASCITA8/4/2015(valore istanza)CIBO PREFERITOSpaghetti(valore istanza)SI_ARRAMPICA_SUAlberi(valore istanza)TIPO DI CORPOAsciutto(valore istanza)NUM_GAMBE1(eccezione) SlotValoreGenereRAGAZZO_(Questo frame)È UNPersona(frame principale)SESSOMaschio(valore istanza)ETÀSotto i 12 anni(allegato procedurale - imposta vincolo)CASAUn luogo(frame)NUM_GAMBEValore predefinito = 2(predefinito, ereditato dal frame Persona) SlotValoreGenereSCIMMIA_(Questo frame)È UNPrimate(frame principale)SESSOOneOf (maschio, femmina)(allegato procedurale)ETÀun numero intero(allegato procedurale - imposta vincolo)HABITATImpostazione predefinita = giungla(predefinito)CIBO PREFERITOImpostazione predefinita = banane(predefinito)SI_ARRAMPICA_SUAlberi_TIPO DI CORPOImpostazione predefinita = Asciutto(predefinito)NUM_GAMBEValore predefinito = 2(predefinito)

Linguaggio a frame Un linguaggio a frame è una tecnologia utilizzata per la rappresentazione della conoscenza nell'intelligenza artificiale. Sono linguaggi simili ai linguaggi orientati agli oggetti basati su gerarchie di classi sebbene gli obiettivi fondamentali siano diversi a livello di progettazione. Mentre i frame si focalizzano sulla rappresentazione esplicita e intuitiva della conoscenza, gli oggetti si concentrano solo su incapsulamento e information hiding. I frame hanno avuto origine nel contesto della ricerca sull'intelligenza artificiale mentre gli oggetti principalmente in quella sull'ingegneria del software. Tuttavia, in pratica, le tecniche e le capacità dei linguaggi a frame e orientati agli oggetti si sovrappongono in modo significativo.

Esempio Un semplice esempio di concetti modellati in un linguaggio a frame è l'ontologia Friend of A Friend (FOAF) definita nell'ambito del Web semantico come base per rappresentare i social network (e i servizi di agenda). Il frame principale in questo semplice caso è quello relativo a una Persona. Gli slot sono relativi alla sua email, la sua homepage, il suo telefono (phone), ecc. Gli interessi di ogni persona possono essere rappresentati da frame aggiuntivi che descrivono spazi relativi a domini aziendali e/o all'intrattenimento. Lo slot knows collega una qualsiasi persona con altre persone. I valori predefiniti per gli interessi di una persona possono essere dedotti dalla rete di persone di cui sono amici.

Implementazioni I primi linguaggi basati su frame sono stati sviluppati su misura per progetti di ricerca specifici e non sono stati confezionati come strumenti per essere riutilizzati da altri ricercatori. Proprio come con i motori di inferenza di sistema esperti, i ricercatori si sono presto resi conto dei vantaggi dell'estrazione di parte dell'infrastruttura principale e dello sviluppo di linguaggi a frame generici non accoppiati ad applicazioni specifiche. Uno dei primi linguaggi a frame di uso generale era KRL. Uno dei primi linguaggi a frame più influenti era KL-ONE che ha generato diversi linguaggi a frame successivi. Uno dei successori più utilizzati di KL-ONE è stato il linguaggio Loom sviluppato da Robert MacGregor presso l'Information Sciences Institute dell'USC.

Negli anni '80 l'Intelligenza Artificiale ha generato un grande interesse per il mondo degli affari alimentato da sistemi esperti. Ciò ha portato allo sviluppo di molti prodotti commerciali per lo sviluppo di sistemi basati sulla conoscenza. Questi primi prodotti sono stati solitamente sviluppati in Lisp e costrutti integrati come le regole IF-THEN per il ragionamento logico con gerarchie di frame per la rappresentazione dei dati. Uno dei più noti di questi primi strumenti di knowledge base Lisp era il Knowledge Engineering Environment (KEE) di Intellicorp. KEE ha fornito un linguaggio a frame completo con ereditarietà multipla, slot, trigger, valori predefiniti e un motore di regole che supportava il concatenamento in avanti e indietro. Come con la maggior parte delle prime versioni commerciali del software AI, KEE era originariamente distribuito in Lisp sulle piattaforme della macchina Lisp ma alla fine è stato portato su PC e workstation Unix.

L'agenda di ricerca del Web semantico ha generato un rinnovato interesse per la classificazione automatica e per i linguaggi a frame. Un esempio è lo standard OWL (Web Ontology Language) per la descrizione delle informazioni su Internet. OWL è uno standard per fornire uno strato semantico su Internet. L'obiettivo è che invece di organizzare il web usando parole chiave come fanno oggi la maggior parte delle applicazioni (es. Google), il web può essere organizzato per concetti organizzati in un'ontologia.

Il nome stesso del linguaggio OWL fornisce un buon esempio del valore di un Web semantico. Se si cercasse "OWL" utilizzando Internet oggi, la maggior parte delle pagine recuperate sarebbe sull'uccello Owl piuttosto che sul OWL standard. Con un Web Semantico sarebbe possibile specificare il concetto "Linguaggio Ontologico Web" e l'utente non dovrebbe preoccuparsi dei vari possibili acronimi o sinonimi nell'ambito della ricerca. Allo stesso modo, l'utente non dovrebbe preoccuparsi degli omonimi che affollano i risultati della ricerca con dati irrilevanti come informazioni sui rapaci come in questo semplice esempio.

Oltre a OWL, vari standard e tecnologie rilevanti per il Web semantico e influenzati dai linguaggi Frame includono OIL e DAML. Lo strumento software open source Protégé della Stanford University fornisce una capacità di editing ontologico che si basa su OWL e ha le funzionalità complete di un classificatore. Tuttavia ha cessato di supportare esplicitamente i frame a partire dalla versione 3.5 (che viene mantenuta per coloro che preferiscono l'orientamento dei frame), la versione corrente nel 2017 è 5. La giustificazione per passare dai frame espliciti è che OWL DL è più espressivo e "standard industriale".

Confronto di frame e oggetti