



Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
appunti prima parte corso di linguistica computazionale di informatica umanistica
Tipologia: Appunti
1 / 6
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




da terminale: python file.py file1.txt file2.txt > output.txt crea file con i risultati del programma python file.py file1.txt file2.txt >> output.txt crea file con i risultati programma e li appende ogni volta che viene eseguito gli argomenti: ogni indice indica la collocazione dei file dal comando del terminale. [0]- programma python [^0]- file di testo in base alla sua collocazione da comando es: main(sys.argv[1], sys.argv[2]) 21/11/ “questa non è l’intelligenza artificiale convenzionale. Non simula il comporto umano. È un comportamento che aiuta a migliorare le prestazioni dei nostri sistemi.”- F. Dell’Orletta Sys: standard input e standard output argv: lista a cui posso accedere con un indice che indica gli elementi che gli passo dalla riga di comando. Una tupla è simile a una lista, ma non è mutabile. Sono variabili che non si possono modificare. Treebanks: database sintattici, ad ogni frase è associata alla sua analisi sintattica. A livello di struttura ci sono differenze non soltanto per i tipi di tag, ma anche sulla forma della struttura. La struttura ha varie tipologie di informazioni, anche molto complesse (a costituenti: sintagmi e loro incassamento). La struttura è predicativa se è vicina al valore semantico. Per semplificare sono usati due schemi di annotazione per creare i corpora dedicati: 1- labelled bracketing: struttura ad albero che permette di descrivere la struttura a costituenti in forma gerarchica. Es: [S[NP Gianni][Aux ha[Vp dato][NP libro][PP a Maria]]] 2- dipendency structure: parole e loro legami tra essi, codifica direttamente la struttura come anch’esso un albero, ma di dipendenze che hanno una testa e un dipendente. Tra l’uno e l’altro ci sono algoritmi di facile applicazione per la conversione. Rappresentano le stesse informazioni ma in modo diverso. Si preferisce usare il dipendency per avere informazione immediata, anche sulla semantica e perché più flessibile, nel tentativo di avere uno schema di annotazione universale. Il primo corpus annotato fu in Pennsylvania, il Penn treebank che usava uno schema a costituenti in cui le strutture sintattiche erano descritte in maniera parziale (skeleton parsing) e le relazioni grammaticali non erano superficiali, fornisce informazioni sulle dipendenze e fa un analisi dei costituenti (full parsing). Applicare questo sistema è complesso. 1 1
Molto più semplice è adottare uno schema a dipendenze come il treebank a dipendenze (ISST- CoNLL il primo in italiano). Esso può essere espresso in formato grafico e tabellare in cui le relazioni di dipendenza sono rappresentate chiaramente e identificano l’id delle teste e degli elementi dipendenti. l’annotazione morfo-sintattica è esclusivamente categoriale e quindi decidere lo schema è decidere il repertorio delle categorie. Ma dobbiamo anche specificare le relazioni grammaticali per avere uno schema e un repertorio completi. A tal punto abbiamo avuto bisogno di uno standard delle dipendenze concretizzato dal progetto universal dependencies(UD), finalizzato alla creazione di treebanks con strutture sintattiche per molte lingue baste su un nucleo universale di relazioni e più estensioni specifiche per ciascuna lingua. Tale progetto ha permesso traduzioni e motori di ricerca online più efficienti. l’annotazione semantica assegna alle parole o alle intere frase, tag o codici che rendono esplicito il loro contenuto semantico, quello trovato nel dizionario di riferimento. Questo tipo di annotazione disambigua il senso della parola. Si può prendere qualsiasi dizionario. In LC si prendono quelli anch’essi annottati. Uno dei più usati è wordnet ed è usato come lessico di riferimento recuperato dallo stesso brown corpus. Da wordnet si possono trovare i significati anche di altre lingue, ma è un processo che può portare l’incoerenza dei significati. Non solo, qualsiasi dizionario si applica su quel specifico contesto. Named entity recognition: assegnazioni ai nomi propri di entità della categoria semantica in contesto. Ci sono alcune categorie che sono standard e più comuni, come i nomi propri e le unità temporali. Prendo un testo e voglio annotare il ruolo semantico delle parole (person, location, organization, time, money ecc.). l’annotazione BIO2 è usata per le espressioni polirematiche, come i nomi composti, dove B indica l’inizio, I la parte interna e O la parte esterna della parola formata rispettivamente da tre token. Al di là del livello linguistico, ci sono almeno due tipologie di annotazione: categoriale e relazionale. È possibile marcare sul testo le dipendenze, ma di tipo semantico secondo lo schema causa ed effetto che in alcuni sistemi ha valore booleano. Anche i ruoli semantici possono avere informazione di tipo relazionale. Ci sono corpora che li annotano all’interno delle loro frasi e hanno una struttura simile a quella delle dipendenze sintattiche. Il frame semantico identifica il ruolo semantico di una frase in base a degli elementi di riferimento attraverso degli algoritmi dedicati. 28/11/ trigrams(listaParole) : per creare trigrammi da lista freqDist(lista) : per calcolare la distribuzione di frequenza degli elementi di una lista Markov viene usato per stabilire se certi termini sono usati di più su un testo o su un altro. l’uso di questi sistemi è vastissimo e non esiste uno standard di applicazione. Le catene di Markov su stringhe di caratteri sono usate soprattutto per riconoscere la lingua di un testo. Riusciamo a utilizzare questi sistemi anche per altro, come la traduzione. most_common(N): funzione che ordina la lista per ordine di frequenza e n elementi in NLTK il pos tagging viene fatta attraverso la funzione nltk.pos_tag() che prende in input una lista di token e restituisce una lista di tuple. 2 2
linguistica. I pattern esprimono vincoli sintagmatici su sequenze di tag e li posso esprimere come automi. Tale disambiguazione avviene con la pattern-action rules.^3 l’approccio è riduzionistico se la disambiguazione è incrementale. Pattern-Action rules:
da sequenze di parole. In questa struttura esistono le strutture a costituenti, ma si privilegia un meccanismo di analisi che mette in primo piano l’aspetto delle dipendenze. A costituenti si costruisce un albero sintagmatico dove i nodi non sono parole, ma categorie grammaticali e sintagmi e le foglie i termini lessicali. La radice dell’albero è un simbolo metalinguistico che identifica il contesto, in questo caso la frase (S: sentence). Esso ha rappresentato la prima forma di parsing ed è stata la forma più tipica. La ragione storica è l’assunzione della struttura sintagmatica come base della grammatica generativa. Gli alberi a costituenti sono difficili da costruire, soprattutto in lingue dove l’ordine delle parole è libero e si possono trovare in posizioni diverse. In questi casi la struttura a costituenti è stata sostituita a quella a dipendenze. Oggigiorno il parsing a dipendenze è diventato uno standard e di più uso. La struttura sintattica dei costituenti è ricorsiva. Nelle strutture sintattiche è infatti possibile avere strutture che contengono se stesse negli elementi e determinano che molte relazioni sintattiche sono di tipo non locale: non è possibile fissare a priori un numero lineare di elementi perchè la loro distanza può essere potenzialmente infinita. Posso allungarne la distanza quanto mi pare perché il linguaggio è infinito. Un’altra cosa fondamentale sono i limiti della struttura della memoria. Anche nei parser più sofisticati si riesce a gestire tali strutture con estrema difficoltà, perché analizzarle significa rendersi conto che le relazioni sono governate dalla struttura dei costituenti, non dall’ordine degli elementi. La struttura ricorsiva sintattica ci può far rendere conto di strutture molto complesse indipendentemente dall’ordine degli elementi. Essa implica veicolare informazioni anche molto complesse. Gli ASF nella loro versione autentica non sono in grado di gestire strutture ricorsive perché per realizzare una struttura di questo tipo dovrei avere un automa che sappia gestire un numero infinito di stati. Gli manca la memoria. Si possono creare versioni più sofisticate degli ASF, ma sono comunque versioni potenziate. O si va oltre agli ASF o si semplificano le strutture sintattiche che si vogliono riconoscere come nello shallow parser: invece di rappresentare l’intera struttura, si assegna alla frase una struttura di elementi piatti che scompongono la frase in una sorta di segmentazione: fare chunking della frase in una serie di elementi chunk sullo stesso livello. Mancano le informazioni dei legami tra questi chunk. Questo tipo di rappresentazione rinuncia a rappresentare le strutture più complesse della frase, soprattutto i legami fra le parole. Non c’è nessun incassamento gerarchico. Il chunk forma un unità quasi sintattica perché non rappresenta l’unità sintattica perfetta. Il chunk si vasa su delle semplici regole del POS, quindi è possibile con poche risorse. È facile, rapido e oggetto di pochi errori. Invece di avere una struttura sintattica complessa piena di rumore e errori, si preferisce una rappresentazione semplice, più superficiale, meno costosa e meno rumorosa. Si usa per estrarre informazioni e per molti task. Fare il parsing è costoso sia in tempistiche sia in memoria. I parser migliori hanno una precisione intorno all’87-88%. Il tasso di errori è molto elevato. Senza considerare che molte frasi da processare sono agrammaticali perché molte si basano sul parlato. È più probabile che un albero non ci sia perché i discorsi sono pseudo-grammaticali nel parlato-scritto, come nel linguaggio dei social media. Tanto vale usare i chunking che si accontentano di usufruire di pezzi di strutture. I chunking li posso costruire con gli ASF dal momento che non riguardano più strutture ricorsive, ma lineari. Esistono anche chunking basati su algoritmi di machine learning. Il full parser è difficile da analizzare correttamente e ricostruisce l’analisi sintagmatica completa della frase e le relazioni di dipendenza funzionale tra i costituenti. Il parsing context free è a costituenti e usa una grammatica contestuale. Le grammatiche formali context-free sono un altro modello computazionale delle analisi di stringhe ed è formata da una quadrupla: N: insieme simboli terminali, Σ: insieme simboli non terminali, s: simbolo iniziale e p: insieme produzioni. Produzioni che sono regole di scrittura di simboli. Il simbolo a sx viene riscritto dai simboli alla destra. I simboli terminali sono i termini lessicali del linguaggio. N contiene i simboli che la grammatica usa per descrivere i costituenti.