# Frame (intelligenza artificiale)

I frame sono strutture dati utilizzate nell'intelligenza artificiale nel contesto della rappresentazione della conoscenza. Il concetto è stato introdotto da Marvin Minsky nel 1974 nell'articolo A Framework for Representing Knowledge. I frame consentono di suddividere la conoscenza in sotto-strutture che rappresentano "situazioni stereotipate".
I frame costituiscono la struttura dati primaria dei linguaggi a frame impiegati nell'intelligenza artificiale.

## Struttura del frame

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 sono generalmente invariate mentre altre informazioni, memorizzate in "terminali", di solito cambiano. I terminali possono essere considerati variabili. I frame di primo livello trasportano informazioni, il che è sempre vero per il problema in questione, tuttavia, i terminali non devono essere veri. Il loro valore potrebbe cambiare con le nuove informazioni incontrate. Frame diversi possono condividere gli stessi terminali.
Ogni informazione su un particolare fotogramma è contenuta in uno slot. Le informazioni possono contenere:
* Fatti o dati
** Valori (chiamati sfaccettature)
* Procedure (chiamate anche allegati procedurali)
** SE NECESSARIO: valutazione differita
** SE AGGIUNTO: aggiorna le informazioni collegate
* Valori standard
** Per i dati
** Per le procedure
* Altri frame o sotto-frame

## Caratteristiche e vantaggi

I terminali di un frame sono già riempiti con valori predefiniti, che si basano su come funziona la mente umana. Ad esempio, quando a una persona viene detto "un ragazzo calcia un pallone", la maggior parte delle persone visualizzerà un pallone particolare (come un pallone da calcio familiare) piuttosto che immaginare un pallone astratto senza attributi.
Un particolare punto di forza delle rappresentazioni della conoscenza basate su frame è che, a differenza delle reti semantiche, consentono eccezioni in casi particolari. Ciò fornisce ai frame una flessibilità che consente alle rappresentazioni dei fenomeni del mondo reale di essere riflesse in modo più accurato.
Come le reti semantiche, i frame possono essere interrogati utilizzando l'attivazione dello spreading. Seguendo le regole di ereditarietà, qualsiasi valore dato a uno slot ereditato dai sotto-frame verrà aggiornato (SE-AGGIUNTO) agli slot corrispondenti nei sotto-frame e ogni nuova istanza di un particolare fotogramma presenterà quel nuovo valore come predefinito.
Poiché i frame sono basati su strutture, è possibile generare una rete semantica dato un insieme di frame anche se manca di archi espliciti. Il riferimento a Noam Chomsky e alla sua grammatica generativa del 1950 è generalmente assente nelle pubblicazioni di Minsky. Tuttavia, la forza semantica è originata da quel concetto.
Le strutture semplificate dei frame consentono un facile ragionamento analogico, una caratteristica molto apprezzata in qualsiasi agente intelligente. Gli allegati procedurali forniti dai frame consentono anche un grado di flessibilità che rende la rappresentazione più realistica e offre un vantaggio naturale per le applicazioni di programmazione.

## Esempio

Vale la pena notare qui il semplice ragionamento analogico (confronto) che può essere fatto tra un ragazzo e una scimmia semplicemente avendo slot con nomi simili.
Notare anche che Alex, un'istanza di un ragazzo, eredita i valori predefiniti come "Sesso" 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.
| Slot | Valore | Genere |
| ALEX | _ | (questo frame) |
| NOME | Alex | (valore chiave) |
| È UN | Ragazzo | (frame principale) |
| SESSO | Maschio | (valore ereditario) |
| ETÀ | SE NECESSARIO: Sottrai (corrente, DATA DI NASCITA) | (allegato procedurale) |
| CASA | Via Rossi N°100 | (valore istanza) |
| DATA DI NASCITA | 8/4/2000 | (valore istanza) |
| CIBO PREFERITO | Spaghetti | (valore istanza) |
| SCALATE | Alberi | (valore istanza) |
| TIPO DI CORPO | Asciutto | (valore istanza) |
| NUM_GAMBE | 1 | (eccezione) |
| Slot | Valore | Genere |
| RAGAZZO | _ | (Questo frame) |
| È UN | Persona | (frame principale) |
| SESSO | Maschio | (valore istanza) |
| ETÀ | Sotto i 12 anni. | (allegato procedurale - imposta vincolo) |
| CASA | Un posto | (frame) |
| NUM_GAMBE | Valore predefinito = 2 | (predefinito, ereditato dal frame Persona) |
| Slot | Valore | Genere |
| SCIMMIA | _ | (Questo frame) |
| È UN | Primate | (frame principale) |
| SESSO | OneOf (maschio, femmina) | (allegato procedurale) |
| ETÀ | un numero intero | (allegato procedurale - imposta vincolo) |
| HABITAT | Impostazione predefinita = giungla | (predefinito) |
| CIBO PREFERITO | Impostazione predefinita = banane | (predefinito) |
| SALITE | Alberi | _ |
| TIPO DI CORPO | Impostazione predefinita = Wiry | (predefinito) |
| NUM_GAMBE | Valore predefinito = 2 | (predefinito) |

## Linguaggio frame

Un linguaggio frame è una tecnologia utilizzata per la rappresentazione della conoscenza nell'intelligenza artificiale. Sono simili alle gerarchie di classi nei linguaggi orientati agli oggetti sebbene i loro obiettivi di progettazione fondamentali siano diversi. Frames si concentrano sulla rappresentazione esplicita e intuitivo di conoscenza mentre gli oggetti si concentrano solo sugli incapsulamento e information hiding. I frame hanno avuto origine nella ricerca sull'intelligenza artificiale e gli oggetti principalmente nell'ingegneria del software. Tuttavia, in pratica, le tecniche e le capacità dei linguaggi frame e orientati agli oggetti si sovrappongono in modo significativo.

### Esempio

Un semplice esempio di concetti modellati in un linguaggio frame è l'ontologia Friend of A Friend (FOAF) definita come parte del Web semantico come base per i social network e i sistemi di calendario. Il frame principale in questo semplice esempio è una persona. Gli slot di esempio sono l'email della persona, la home page, il telefono, ecc. Gli interessi di ogni persona possono essere rappresentati da frame aggiuntivi che descrivono lo spazio dei domini aziendali e dell'intrattenimento. Lo slot sa che collega ogni 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 per frame generici non accoppiati ad applicazioni specifiche. Uno dei primi linguaggi di frame di uso generale era KRL. Uno dei primi linguaggi Frame più influenti era KL-ONE che ha generato diversi linguaggi Frame successivi. Uno dei successori più utilizzati di KL-ONE è stato il linguaggio Loom sviluppato da Robert MacGregor presso l'Information Sciences Institute.
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 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 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 dei 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 Protege Open Source 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

I linguaggi frame hanno una significativa sovrapposizione con i linguaggi orientati agli oggetti. Le terminologie e gli obiettivi delle due comunità erano diversi, ma mentre si spostavano dal mondo accademico e dai laboratori al mondo commerciale, gli sviluppatori tendevano a non preoccuparsi delle questioni filosofiche e si concentravano principalmente su capacità specifiche, prendendo il meglio da entrambi i campi indipendentemente da dove fosse l'idea iniziò. Ciò che entrambi i paradigmi hanno in comune è il desiderio di ridurre la distanza tra i concetti nel mondo reale e la loro implementazione nel software. In quanto tali, entrambi i paradigmi sono giunti all'idea di rappresentare gli oggetti software primari in tassonomie partendo da tipi molto generali e procedendo a tipi più specifici.
La tabella seguente illustra la correlazione tra la terminologia standard delle comunità orientate agli oggetti e del linguaggio frame:
| Terminologia dei frame | Terminologia OO |
| Frame | Classe di oggetti |
| Slot | Proprietà o attributo dell'oggetto |
| Trigger | Metodi di accesso e mutatore |
| Metodo (ad es. Loom, KEE) | Metodo |
La differenza principale tra i due paradigmi era nel grado in cui l'incapsulamento era considerato un requisito importante. Per il paradigma orientato agli oggetti l'incapsulamento era uno dei requisiti critici, se non il più importante. Il desiderio di ridurre le potenziali interazioni tra i componenti software e quindi gestire grandi sistemi complessi è stato un fattore chiave della tecnologia orientata agli oggetti. Per il campo del linguaggio frame questo requisito era meno critico del desiderio di fornire una vasta gamma di possibili strumenti per rappresentare regole, vincoli e logica di programmazione. Nel mondo orientato agli oggetti tutto è controllato dai metodi e dalla visibilità dei metodi. Quindi, ad esempio, l'accesso al valore dei dati di una proprietà di un oggetto deve essere eseguito tramite un metodo di accesso. Questo metodo controlla cose come la convalida del tipo di dati e vincoli sul valore che viene recuperato o impostato sulla proprietà. Nei linguaggi Frame questi stessi tipi di vincoli possono essere gestiti in più modi. È possibile definire trigger per l'attivazione prima o dopo che un valore è stato impostato o recuperato. Si potrebbero definire regole che gestissero gli stessi tipi di vincoli. Gli slot stessi potrebbero essere aumentati con informazioni aggiuntive (chiamate "sfaccettature" in alcune lingue) di nuovo con lo stesso tipo di informazioni sui vincoli.
L'altro principale elemento di differenziazione tra i linguaggi frame e OO era l'ereditarietà multipla (che consente a un frame o una classe di avere due o più superclassi). Per i linguaggi frame l'ereditarietà multipla era un requisito. Ciò deriva dal desiderio di modellare il mondo come fanno gli umani, le concettualizzazioni umane del mondo raramente cadono in tassonomie non sovrapposte rigidamente definite. Per molte lingue OO, specialmente negli ultimi anni dell'OO, l'ereditarietà singola era fortemente voluta o richiesta. L'ereditarietà multipla è stata vista come un possibile passaggio nella fase di analisi per modellare un dominio, ma qualcosa che dovrebbe essere eliminato nelle fasi di progettazione e implementazione in nome del mantenimento dell'incapsulamento e della modularità.
Sebbene i primi linguaggi dei frame come KRL non includessero il passaggio di messaggi, guidato dalle richieste degli sviluppatori, la maggior parte dei linguaggi dei frame successivi (ad esempio Loom, KEE) includevano la capacità di definire i messaggi sui frame.
Sul lato orientato agli oggetti, sono emersi anche standard che forniscono essenzialmente la funzionalità equivalente fornita dai linguaggi di frame, sebbene in un formato diverso e tutti standardizzati su librerie di oggetti. Ad esempio, il gruppo di gestione degli oggetti ha specifiche standardizzate per funzionalità come l'associazione di dati di test e vincoli con oggetti (analoghi agli usi comuni per facet nei frame e ai vincoli nei linguaggi Frame come Loom) e per l'integrazione di motori di regole.

## Storia

I primi lavori su Frames sono stati ispirati dalla ricerca psicologica risalente agli anni '30 che indicava che le persone usano la conoscenza stereotipata immagazzinata per interpretare e agire in nuove situazioni cognitive. Il termine Frame è stato usato per la prima volta da Marvin Minsky come paradigma per comprendere il ragionamento visivo e l'elaborazione del linguaggio naturale. In questi e in molti altri tipi di problemi lo spazio per la soluzione potenziale anche per il problema più piccolo è enorme. Ad esempio, estraendo i fonemi da un flusso audio grezzo o rilevando i bordidi un oggetto. Le cose che sembrano banali agli umani sono in realtà piuttosto complesse. In effetti, quanto fossero davvero difficili probabilmente non è stato completamente compreso fino a quando i ricercatori di intelligenza artificiale non hanno iniziato a indagare sulla complessità di convincere i computer a risolverli.
La nozione iniziale di Frames o Script, come sono stati anche chiamati, è che stabiliscono il contesto per un problema e così facendo riducono automaticamente in modo significativo lo spazio di ricerca possibile. L'idea è stata adottata anche da Schank e Abelson che l'hanno utilizzata per illustrare come un sistema di intelligenza artificiale potrebbe elaborare le interazioni umane comuni come ordinare un pasto in un ristorante. Queste interazioni sono state standardizzate come frame con slot che memorizzavano informazioni rilevanti su ogni frame. Gli slot sono analoghi alle proprietà degli oggetti nella modellazione orientata agli oggetti e alle relazioni nei modelli entità-relazione. Gli slot spesso avevano valori predefiniti, ma richiedevano anche un ulteriore perfezionamento come parte dell'esecuzione di ogni istanza dello scenario. Ad esempio, l'esecuzione di un'attività come l'ordinazione in un ristorante veniva controllata iniziando con un'istanza di base del Frame e quindi creando istanze e perfezionando vari valori in base alle esigenze. Essenzialmente il Frame astratto rappresentava una classe di oggetti e le istanze di frame un'istanza di oggetto. In questo primo lavoro, l'enfasi era principalmente sulle descrizioni dei dati statici del Frame. Sono stati sviluppati vari meccanismi per definire l'intervallo di uno slot, i valori predefiniti, ecc. anche in questi primi sistemi c'erano capacità procedurali. Una tecnica comune era quella di utilizzare "trigger" (simile al concetto di database ditrigger) attaccati agli slot. Un trigger è semplicemente un codice procedurale collegato a uno slot. Il trigger potrebbe attivarsi prima e/o dopo l'accesso o la modifica di un valore di slot.
Come per le classi di oggetti, i frame erano organizzati in gerarchie di sussunzione. Ad esempio, un frame di base potrebbe essere l'ordinazione in un ristorante. Un esempio potrebbe essere Joe che va da McDonald's. Una specializzazione (essenzialmente una sottoclasse) del frame del ristorante sarebbe un frame per l'ordinazione in un ristorante elegante. Il frame del ristorante di fantasia erediterebbe tutti i valori predefiniti del frame del ristorante ma aggiungerebbe anche più slot o cambierebbe uno o più valori predefiniti (ad esempio, fascia di prezzo prevista) per il frame specializzato.

### Linguaggi

Gran parte delle prime ricerche sul linguaggio Frame (ad esempio Schank e Abelson) erano state guidate dai risultati della psicologia sperimentale e dai tentativi di progettare strumenti di rappresentazione della conoscenza che corrispondessero ai modelli che si pensava che gli esseri umani usassero per funzionare nelle attività quotidiane. Questi ricercatori erano meno interessati alla formalità matematica poiché credevano che tali formalismi non fossero necessariamente buoni modelli per il modo in cui l'umano medio concettualizza il mondo. Il modo in cui gli esseri umani usano il linguaggio, ad esempio, è spesso tutt'altro che logico.
Allo stesso modo, in linguistica, Charles J. Fillmore a metà degli anni '70 iniziò a lavorare sulla sua teoria della semantica dei frame, che in seguito avrebbe portato a risorse computazionali come FrameNet. La semantica dei frame è stata motivata da riflessioni sul linguaggio umano e sulla cognizione umana.
Ricercatori come Ron Brachman volevano fornire ai ricercatori di intelligenza artificiale il formalismo matematico e la potenza di calcolo associati alla logica. Il loro scopo era mappare le classi Frame, gli slot, i vincoli e le regole in un linguaggio Frame per impostare teoria e logica. Uno dei vantaggi di questo approccio è che la convalida e persino la creazione dei modelli potrebbero essere automatizzate utilizzando dimostratori di teoremi e altre capacità di ragionamento automatizzato. Lo svantaggio era che poteva essere più difficile specificare inizialmente il modello in un linguaggio con una semantica formale.
Questa evoluzione illustra anche un classico divario nella ricerca sull'intelligenza artificiale noto come " ordinati contro scruffies ". I "neat" erano i ricercatori che attribuivano il massimo valore alla precisione matematica e al formalismo che potevano essere raggiunti tramite la logica del primo ordine e la teoria degli insiemi. Gli "scruffies" erano più interessati a modellare la conoscenza in rappresentazioni che erano intuitive e psicologicamente significative per gli esseri umani.
Il più notevole degli approcci più formali era il linguaggio KL-ONE. Esso in seguito ha generato diversi linguaggi Frame successivi. La semantica formale di linguaggi come KL-ONE ha dato a questi linguaggi frame un nuovo tipo di capacità di ragionamento automatizzato noto come classificatore. Il classificatore è un motore che analizza le varie dichiarazioni nel linguaggio dei frame: la definizione di insiemi, sottoinsiemi, relazioni, ecc. Il classificatore può quindi dedurre automaticamente varie relazioni aggiuntive e può rilevare quando alcune parti di un modello sono incoerenti tra loro. In questo modo molte delle attività che normalmente sarebbero eseguite dal concatenamento in avanti o all'indietro in un motore di inferenza possono invece essere eseguite dal classificatore.
Questa tecnologia è particolarmente preziosa quando si tratta di Internet. È un risultato interessante che il formalismo di linguaggi come KL-ONE possa essere molto utile per trattare i dati altamente informali e non strutturati che si trovano su Internet. Su Internet semplicemente non è possibile richiedere che tutti i sistemi si standardizzino su un modello di dati. È inevitabile che la terminologia venga utilizzata in più forme incoerenti. La capacità di classificazione automatica del motore di classificazione fornisce agli sviluppatori di intelligenza artificiale un potente toolbox per aiutare a portare ordine e coerenza a una raccolta di dati molto incoerente (ad esempio, Internet). La visione per un Internet migliorato, in cui le pagine sono ordinate non solo per parole chiave di testo ma per classificazione di concetti è nota come Web semantico. La tecnologia di classificazione originariamente sviluppata per i linguaggi Frame è un abilitatore chiave del Web semantico. Il divario "neats vs. scruffies" è emerso anche nella ricerca sul Web semantico, culminato nella creazione della comunità Linking Open Data: il loro focus era sull'esporre i dati sul Web piuttosto che sulla modellazione.