Språkteknologiska metoder Språkteknologisk forskning och utveckling (HT 2006)
Metoder i språkteknologi Forskningsmetoder: –Metoder för att systematiskt söka ny kunskap och berättiga vetenskapliga teorier Utvecklingsmetoder: –Metoder för att tillämpa ny kunskap och vetenskapliga teorier i utvecklandet av språkteknologiska system Problem (begreppsligt): –Dessa metoder går delvis in i varandra och används tillsammans i språkteknologisk forskning (och utveckling)
Språkteknologiska problem Språkteknologi utvecklar datorsystem som hanterar naturligt språk. Exempel på språkteknologiska problem: –Ordklasstaggning: Annotera meningar eller texter i naturligt språk med ordklasser. –Textgenerering: Producera texter på naturligt språk från en (icke-språklig) kunskapsrepresentation. –Maskinöversättning: Översätta meningar eller texter i ett (naturligt) källspråk till meningar eller texter i ett (naturligt) målspråk.
Modeller och algoritmer Problem (metodologiskt): –Många språkteknologiska problem är alltför vagt definierade för att kunna lösas algoritmiskt. –Vi använder därför matematiska modeller för att lösa abstrakta problem som är approximationer av de verkliga problemen. Exempel: –Syntaktisk analys av text i ett naturligt språk L kan lösas genom att beräkna parsningsproblemet för en kontextfri grammatik G för ett formellt språk L(G) som approximerar L.
Tillämpningsmetoder En tillämpningsmetod för ett problem P kan normalt delas upp i två komponenter: –En matematisk modell M som definierar ett abstrakt problem Q som kan användas som en modell av P –En algoritm A som effektivt beräknar Q Exempel: –P = Syntaktisk analys –M = Kontextfri grammatik –Q = Parsningsproblemet för kontextfria grammatiker –A = Parsningsalgoritm (t.ex. CKY)
Problem, modeller och algoritmer Modell M Algoritm A Abstrakt problem Q Verkligt problem P Instanser I Lösningar S Instans iLösning s
Utveckling och utvärdering En utvecklingsmetod är en metod för att implementera en tillämpningsmetod i ett språkteknologiskt system: –Utveckling/implementation av modeller (inklusive dataresurser) –Utveckling/implementation av algoritmer En utvärderingsmetod är en metod för att utvärdera ett språkteknologiskt system
Systemutveckling Definiera problem: –Verkligt problem med utvärderingskriterier –Approximation i form av abstrakt(a) problem Definiera och implementera tillämpningsmetoder: –Matematiska modeller: Struktur (formalism, representationsspråk, etc.) Innehåll (dataresurser, t.ex. lexikon, grammatik) –Algoritmer Utvärdera system: –Intern utvärdering (modeller och algoritmer) –Extern utvärdering (jfr utvärderingskriterier)
Systemutveckling: Exempel (1) Problem: –Syntaktisk analys av fri text på svenska –Utvärderingskriterier: Robusthet: Minst en analys per mening Disambiguering: Högst en analys per mening Effektivitet: Linjär tids- och minnesåtgång (i förhållande till meningslängd) Korrekthet: Andelen helt korrekt analyserade meningar i ett slumpmässigt stickprov
Systemutveckling: Exempel (2) Abstrakta problem: –Grammatikbaserad parsning: x {y 1, …, y n } –Statistisk disambiguering: {y 1, …, y n } y max Matematiska modeller: –Formell grammatik: Definierar en mängd av härledningar för varje sträng, t.ex. i form av kontextfria parseträd –Statistisk disambigueringsmodell: Definierar en metrik för par av strängar och parseträd, t.ex. i termer av deras förenade sannolikhet P(x, y i ).
Systemutveckling: Exempel (3) Algoritmer: –Parsningsalgoritm –Algoritm för beräkning av metrik (eventuellt integrerat i parsningsalgoritmen) Implementation: –Utveckla grammatik (t.ex. genom manuellt utvecklingsarbete) –Utveckla disambigueringsmodell (t.ex. genom induktiv inlärning från korpusdata) –Implementera datastrukturer och algoritmer för parsning och disambiguering
Systemutveckling: Exempel (4) Utvärdering –Teoretiskt: Bevisa formella egenskaper hos modeller och algoritmer, t.ex. terminering och tidskomplexitet. –Experimentellt: Testa systemet på slumpmässigt stickprov av fri text på svenska och mät: –Robusthet: Andel meningar som ej får någon analys. –Disambiguering: Andel meningar som får mer än en analys. –Effektivitet: Faktisk tids- och minnesförbrukning (i förhållande till indatas storlek). –Korrekthet: Andel meningar som får en helt korrekt analys (i jämförelse med manuell annotering).
Modellering Faktorer att beakta vid val av abstrakt modellproblem (för ett givet verkligt problem): –Indata (ord, meningar, texter, sökfrågor, …) –Utdata (texter, dokument, analyser, …) –Relation mellan indata och utdata (analys av mening, dokument som matchar sökfråga, …) –Bivillkor (effektivitetskrav, tillgång på resurser, …) Ett abstrakt problem kan ofta brytas ned i mindre och enklare delproblem: –Syntaktisk analys: tokenisering, taggning, chunkning, grammatisk funktionsanalys, …
Algoritmutveckling Utveckling av nya algoritmer: –Utveckla algoritmen (eller anpassa en befintlig algoritm). –Beskriv algoritmen på ett exakt sätt. –Bevisa egenskaper hos algoritmen (t.ex. komplexitet). Implementation av algoritmer: –Välj implementationsstrategi (iterativt eller rekursivt, top-down eller bottom-up, …). –Välj lämpliga datastrukturer. –Koda algoritmen i lämpligt programspråk (och programmeringsmiljö). –Testa algoritmen (t.ex. med benchmark-exempel).
Modellutveckling Två aspekter av modeller: –Struktur (t.ex. kontextfri grammatik, Markov-modell) –Substans (specifika regler, sannolikheter, etc.) Utveckling av modeller: –Struktur: Definiera en ny typ av modell. –Substans: Instantiera en befintlig modelltyp (t.ex. utveckla en morfologisk beskrivning för finska). Implementation av modeller: –Struktur: Datastrukturer (jfr algoritm) –Substans: Inläsning och lagring av data i strukturer
Utvärdering Olika typer av utvärdering: –Black box: Extern utvärdering, in- och utdata, oberoende av tillämpningsmetod (modeller och algoritmer) –Glass box: Intern utvärdering, modeller och algoritmer, separat eller tillsammans Utvärderingsdimensioner: –Funktionalitet (inklusive korrekthet) –Effektivitet (resursförbrukning) –Användbarhet, portabilitet m.m.
Iterativ utveckling Utveckling sker ofta iterativt med återkommande inslag av utvärdering: while (not satisfactory) { design; implement; evaluate; }