Statistisk Maskinöversättning eller:

Relevanta dokument
Dependensregler - Lathund

Johan Karlsson Johka490. Statistical machine translation JOHAN KARLSSON

Taltaggning. Rapport av Daniel Hasselrot , 13 oktober 2003

Cristina Eriksson oktober 2001

Mekaniskt lexikon, patenterat av George Artsrouni på tidigt 1930 tal Perforerade pappersband och avläsningsnockar 1 ord per 3 sekunder

Linköpings universitet Artificiell Intelligens II 729G11 HT Maskinöversättning. med hjälp av statistik. Erik Karlsson

- ett statistiskt fråga-svarsystem

Fuzzy Logic. När oskarpa definitioner blir kristallklara. Åsa Svensson. Linköpings Universitet. Linköping

Maskinöversättning 2008

Gränssnitt för FakeGranska. Lars Mattsson

Tentamen Marco Kuhlmann

Kursplaneöversättaren. Lina Stadell

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Grundläggande textanalys. Joakim Nivre

MÖSG ht 2005 Maskinöversättningssystemet MATS

Projekt i språkteknologi Projektförslag Johanna Karlsson joka1954

MMA132: Laboration 2 Matriser i MATLAB

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

LINKÖPINGS UNIVERSITET 729G11, Artificiell Intelligens II, HT10 SMT. En fördjupning i statistiska maskinöversättningssystem

b) NY KURS (Ange kursnamn, årskurs, önskad läsperiod, schemablocksplacering. Bifoga utkast till kursplan.)

Maskininlärning med boostrapping. Maskininlärningslabb i Språkteknologi

Convertus - kursplaneöversättning

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

729G04 Programmering och diskret matematik

Applikationsexempel Timer med tryckknapp

Kommentarer till bedömningsmatris för Tala Kurs D

Kungl. Tekniska högskolan NADA Grundformer med Stava

SPRÅKKONTAKT OCH F2: SPRÅKKONTAKTBASERAD FLERSPRÅKIGHET/ SPRÅKFÖRÄNDRING VT2014 SPRÅKFÖRÄNDRING - MEKANISMER

Kommentarer till bedömningsmatris för Tala Kurs D

729G43 Artificiell intelligens / Maskininlärning 3. Marco Kuhlmann

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Här är två korta exempel på situationer då vi tillämpar den distributiva lagen:

JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund Marcus Widblom Senast ändrad: 13 / 05 / 08

Perceptron som ordklasstaggare: ett fördjupningsarbete i 729G43 -Artificiell Intelligens

Word- sense disambiguation

Lektion 2: Sökagenter. Robin Keskisärkkä

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Kompilatorer och interpretatorer

Lingvistik I Delmoment: Datorlingvistik

Forskning och utveckling inom språkteknologi Uppgift 3: Projektförslag Parallelliserad dependensparsning i CUDA

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Kryptering & Chiffer Del 2

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Statistisk maskinöversättning

Business research methods, Bryman & Bell 2007

Föreläsning 18 Filer och avbildningar

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Datastrukturer och algoritmer

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Undervisningen ska erbjuda möjlighet till anpassning av stoff efter elevernas intresse och utbildning.

Det finns mycket kritik som förs fram om skolan i allmänhet samtidigt

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Beräkning med ord. -hur en dator hanterar perception. Linköpings universitet Artificiell intelligens Erik Claesson

Laboration: Whitebox- och blackboxtesting

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Hur man programmerar. Exempel på problemlösning i Python

729G04 Programmering och diskret matematik

Föreläsning 5: Modellering av frasstruktur. 729G09 Språkvetenskaplig databehandling Lars Ahrenberg

ÖU2100, Översättarutbildning 1. Magisterutbildning, 60 högskolepoäng

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Anna Sågvall Hein, Institutionen för lingvistik, Uppsala universitet Rosenbad/ Automatisk översättning och översättningshjälpmedel

Tvåspråkighetssatsning Manillaskolan ~^

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

TDP Regler

Probabilistisk logik 2

Lösningsförslag till tentamen i Språkteknologi 2D1418,

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

729G09 Språkvetenskaplig databehandling

Talsystem Teori. Vad är talsystem? Av Johan Johansson

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Svensk nationell datatjänst, SND BAS Online

Datastrukturer och algoritmer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Föreläsninsanteckningar till föreläsning 3: Entropi

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Vardagssituationer och algebraiska formler

FTEA21:3 Spr akfilosofi F orel asning I Martin J onsson

Uppgift 1 ( Betyg 3 uppgift )

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Att referera till objekt

Skrivstöd. Joakim Nivre. Introduktion till språkteknologi. Skrivstöd. Inledning. Orsaker till stavfel. Detektering av icke-ord

Datastrukturer och algoritmer

Vektorgeometri för gymnasister

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Om ämnet Engelska. Bakgrund och motiv

Transkript:

729G43 Statistisk Maskinöversättning eller: Hur jag slutade ängslas (över fördjupningsuppgiften) och lärde mig hata stoppord. Jonas Hilmersson 2019-04-15

Innehåll 1. Introduktion... 1 2. Datamängden... 1 3. Direkt maskinöversättning... 2 4. Ett tvåspråkigt lexikon... 2 5. Statistisk Maskinöversättning... 5 6. Diskussion... 8 1. Litteraturförteckning... 8

1. Introduktion Maskininlärning och artificiell intelligens är applicerbart i många kontexter och domäner. Med det inte sagt att det alltid är simpelt. Mänskligt (läs naturligt) språk är komplext och varierar väldigt, både inom ett språk och mellan olika språk. Även när språket skalas från en stor del av sina beståndsdelar när det återges i text. Ett lämpligt tillämpningsområde för vad som kan kallas artificiell intelligens; maskininlärning, är därmed översättning från ett språk till ett annat och det är ett fält där det har skett många framsteg bara det senaste decenniet, men där det fortfarande finns många förbättringar att göra. För den här rapporten sammanställdes en rudimentär (och det måste erkännas väldigt bristande) maskinöversättare i form av två python-skript, ett som används för att bearbeta den valda datamängden och ett som används för att översätta en mening baserat på de mått och värden som framkommer under bearbetningen av datamängden. 2. Datamängden Datamängden som användes för den här rapporten hämtades från statmt.org (European Parliament Proceedings Parallel Corpus 1996-2011, 2012). För att den valda modellen ska kunna tillämpas måste två korpusar som uteslutande innehåller motsvarande meningar från bägge språk användas. Som väntat så visade det sig att mängden data har stor betydelse för modellens slutgiltiga funktion och anledningen till att modellen delades upp i två separata skript var hur lång tid det tog att bearbeta datamängden när mer data inkluderades i bearbetningen. Exakt hur mycket mängden data påverkar modellens funktion är svårt att avgöra utan någon form av mått på modellens funktion och en utvärdering hindras dessutom av den långa tiden som krävs varje gång skriptet körs. 1

3. Direkt maskinöversättning En grundläggande typ av maskinöversättning är vad som kallas för direktöversättning (eng. Direct Translation). En översättare av den typen översätter ord för ord i en given mening baserat på statiska värden gällande endast det givna ordet. På så sätt liknar den en N-gram modell (Jurafsky & Martin, 2009, s. 117), men istället för att generera nästa ord så genererar den motsvarande ord på det språk som meningen ska översättas till. En sådan modell kan därmed sägas vara begränsad till att endast vara lämplig för att översätta språk med samma grammatiska struktur (till exempel svenska och norska). De fyra beståndsdelarna i en sådan modell kan representeras som i bilden nedan. Bild 1: Modell för direkt maskinöversättning. Den viktigaste delen, indikerat i bilden med hjälp av dess storlek är ett tvåspråkigt lexikon (Jurafsky & Martin, 2009, s. 904). Både den morfologiska analysen och den morfologiska generationen kan anta många olika former beroende på språk, typ av text och formen på den data som skripten appliceras på. Ett begränsat antal av dessa kommer diskuteras i den här rapporten. Den första morfologiska bearbetningen som övervägdes var kombinationen av engelska substantiv i bestämd form från två separata ord till en gemensam fras (från the följt av substantiv till the substantiv. Detta utelämnades i slutändan på grund av en bristande insyn i hur denna ändring i antal ord som ska jämföras påverkar resultatet. En annan morfologisk bearbetning som övervägdes var att ta hänsyn till när två ord är väldigt lika eller har motsvarande egenskaper, som till exempel en stor bokstav eller en parentes och implementera vikter för dessa på något sätt. Detta utelämnades på grund av ovisshet gällande var i processen detta ska implementeras och vilket värde vikterna skulle ha. 4. Ett tvåspråkigt lexikon Det tvåspråkiga lexikonet visade sig som redogjort för ovan vara ytterst väsentlig, inte bara för framgången hos modellen som togs fram för den här rapporten, men också för den

generella genomförbarheten i att ta fram en sådan modell och utformningen av det skript som skapar lexikonet utgjorde en anmärkningsvärt stor del av det hela arbetet. Den modell som implementerades för att skapa ett sådant lexikon kan representeras som en matris med ord från bägge språk i varsin axel och den gemensamma förekomsten av orden i motsvarande meningar, i varje cell. En sådan matris kan representeras grafiskt som i bilden nedan. Bild 2: Matris innehållande värden som motsvarar den gemensamma förekomsten av de bearbetade orden från bägge språken (Hiemstra, 1996, s. 24). För matrisen ovan har bara meningar med två ord använts och det holländska ordet ik har då till exempel förekommit i tre meningar där meningen på engelska har innehållit ordet I. Ett värde på 1 fördelas över alla ord i den motsvarande meningen. Detta kan vid första anblick framstå som bristfälligt, men det innebär att meningarnas grammatiska struktur inte påverkar bearbetningen och detta är också en förutsättning för den översättning som ska genomföras. Denna matris sammanställdes i skriptet som ett dictionary där ord som inte finns representerade i en motsvarande mening utelämnas, delvis för att begränsa storleken på det dictionary som skapas. Detta kan vara ett misstag. Alla ord borde kanske ha representerats med en ett visst av smoothing tillämpat för varje ord för att undvika operationer med noll senare. I modellen som användes löstes detta som sagt istället genom att de ord som hade haft värdet noll helt enkelt inte representeras, men detta leder till andra problem senare i översättningen. Det första skriptet har tre funktioner som följer nedan:

en funktion för att omvandla (en vald mängd) rådata till hanterbar data (i verkligheten omvandla två radseparerade textfiler med motsvarande meningar till varsin nästlad lista där varje bearbetad mening representeras av en egen lista) en funktion för att spara den bearbetade datamängden i separata filen för senare bearbetning en funktion för att skapa lexikonet i form av ett dictionary där varje nyckel är ett är ord tillhörande språk x och varje värde ett eget dictionary med varje ord tillhörande språk y som (enligt modellen) är en potentiell översättning till ordet som representeras i den yttre nyckeln, som nycklar och den uppskattade sannolikheten för att varje ord utgör den bäst lämpade översättningen, som värden (funktionen kördes två gånger, en gång för varje språk) De två första funktionerna är python-relaterade snarare än relaterade till maskinöversättning och är inte väsentliga för modellens implementation. Den tredje funktionen är då den som skapar lexikonet och den funktion som är relevant att ta del av för förståelsen av modellen. Funktionen visas nedan. def create_dictionary(x_list, y_list, x_stop_words, y_stop_words): x_to_y={} for x_sentence, y_sentence in zip(x_list, y_list): for x_word in x_sentence: if x_word.lower() not in x_to_y: x_to_y[x_word.lower()]={'word_count': 0} x_to_y[x_word.lower()]['word_count'] += 1 for y_word in y_sentence: if not ((x_word.lower() in x_stop_words) and (y_word.lower() in y_stop_words)) or ((x_word.lower() not in x_stop_words) and (y_word.lower() not in y_stop_words)): if y_word.lower() not in x_to_y[x_word.lower()]: x_to_y[x_word.lower()][y_word.lower()] = 0 x_to_y[x_word.lower()][y_word.lower()] += 1/len(x_sentence) return x_to_y Funktion 1: Den funktion som skapar det lexikon som används i modellen. Det dictionary som skapas av funktionen skulle kunna se ut som visas nedan. {'bold': {'djärv': 0.5, 'modig': 0.25, 'aldrig': 0.25}, 'when': {'när': 0,5, 'hur': 0.5, 'var': 0.5}}

Observera att detta är ett exempel med godtyckliga värden. Faktiska värden utelämnas i förmån för ett godtyckligt exempel på grund av dimensionerna hos det genererade lexikonet (om datamängden ska vara ens i närheten av tillräcklig och ett ord förekommer i mer än en mening så innehåller varje ords dictionary väldigt snabbt ett stort antal ord som nycklar med långa floattal som värden). Observera också att stoppord bara kan paras ihop med andra stoppord. Utan denna begränsning blir modellen i praktiken värdelös då stoppord kommer vara de mest förekommande för varje ord i datamängden (samma grupp av ett litet antal stoppord dessutom). Detta var den första morfologiska bearbetningen som implementerades och möjligtvis den mest avgörande för att modellen i slutändan skulle uppvisa någonting som ens liknar förmågan att översätta en mening. För att möjliggöra detta inkluderades två listor med stoppord i skriptet, en för varje språk. Dessa används sedan när skriptet körs för att separera de stopp-ord som skriptet stöter på (skildrat i den långa if(not)-satsen i bilden ovan). De två listor på stopp-ord, svenska respektive engelska, som användes hämtades från Ranks NL (Stopwords, 2019). 5. Statistisk Maskinöversättning En mer avancerad och användbar variant av maskinöversättning är vad som kallas för Statistisk Maskinöversättning (Statistical Machine Translation på engelska). Det är en förlängning av den modell som visas ovan som. Vid statistisk maskinöversättning så kapar man modellen vid det moment där översättningen sker i förmån för en rad uträkningar och samband som har som syfte att med hjälp av statistik och algoritmiska regler producera en bättre översättning än en den som genereras vid direkt maskinöversättning. Målet med modellen är att översätta en mening från ett språk till ett annat. Vi använder från svenska till engelska som exempel. Med hjälp av de värden som sammanställdes av det första skriptet ska vi då räkna ut sannolikheten för en engelsk mening givet en svensk mening, eller: P(E S) där E representerar en engelsk mening och S en svensk mening (observera mening och inte ord, till skillnad från vid direktöversättning).

Med hjälp av en tillämpning av Bayes regel (Jurafsky & Martin, 2009, s. 911)så kan vi skriva om vårt uttryck till: P(S E)P(E) Detta är uttrycket som kommer användas för den statistiska uträkningen. Det innebär att vi istället för att räkna ut sannolikheten för en engelsk mening givet en svensk mening (vilket kan anses vara det mest intuitiva) kommer räkna ut sannolikheten för den svenska meningen givet den svenska meningen och multiplicera detta med den absoluta sannolikheten för att den engelska meningen förekommer i datamängden. Vi kommer dessutom göra detta för varje engelsk mening i datamängden. Hur dessa sannolikheter räknas ut visas nedan: P(S E) = P(S E1) P(S E2) P(S El) Representerat här är produkten av sannolikheten för första ordet i den svenska meningen givet det första ordet i den engelska meningen, andra ordet i den svenska meningen givet det andra ordet i den engelska meningen, osv. P(E) = P(EI)P(E2) P(El) Representerat här är produkten av den absoluta sannolikheten för varje ord i den engelska meningen, det vill säga hur ofta varje ord i den engelska meningen förekommer i proportion till det totala antalet ord. När dessa två värden multipliceras med varandra för varje engelsk mening så bör då den mest sannolika meningen kunna urskiljas. Observera här att eventuell påverkan av ordföljden i varje mening i teorin är försumbar tack vare att vi fördelade sannolikheten på alla ord i den motsvarande meningen tidigare. Den första som tillämpas Det skript som används för att genomföra detta innehåller fyra funktioner: den första funktionen används för att läsa de filer som skapades av det första skriptet den andra funktionen räknar ut hur många ord som finns totalt i datamängden

den tredje funktionen räknar ut P(S E) för varje mening med hjälp av det lexikon som sammanställdes av det första skriptet den fjärde funktionen räknar ut P(E) med hjälp av en ordräknare som inkluderades i lexikonet och den summa som returneras av den andra funktionen Nedan visas de senare tre funktionerna: def calculate_total_word_count(word_dict): total = 0 word_count_dict = {} for word in word_dict: if word not in word_count_dict: word_count_dict[word] = 0 word_count_dict[word] = word_dict[word]['word_count'] total += word_dict[word]['word_count'] return (total, word_count_dict) def translate_sentence(x_sentence, y_sentences, y_words, y_words_count, y_words_total): translation = "" max_p = 0 for y_sentence in y_sentences: P_X_Y = 1 for y_word, x_word in zip(y_sentence, x_sentence): if x_word.lower() in y_words[y_word.lower()]: P_X_Y *= y_words[y_word.lower()][x_word.lower()] if P_X_Y!= 0: P_Y = calculate_p_y(y_sentence, y_words_count, y_words_total) P_Y_P_X_Y = P_Y * P_X_Y if (P_Y_P_X_Y > max_p): if P_X_Y > max_p: max_p = P_X_Y translation = ' '.join(y_sentence) return translation def calculate_p_y(sentence, words_count, words_total): P_Y = 1 for word in sentence: if word.lower() in words_count: P_Y *= words_count[word.lower()] return P_Y//words_total Resultatet av den tredje och fjärde funktionen för varje mening multipliceras och den mening som uppskattas ha högst sannolikhet returneras och ska då utgöra en lämplig översättning för den svenska meningen. I teorin.

6. Diskussion Så här långt kom jag inte i mitt arbete. Mitt skript kan inte genomföra uträkningarna som krävs för att räkna ut P(E) på grund av det stora antal decimaler som krävs. Jag tror inte att det är en faktisk begränsning i python, utan att jag bara inte har hittat lösningen. Det går att köra skriptet om dessa uträkningar exkluderas, men även då är modellen långt ifrån funktionell. Jag skulle säga att jag tror att modellen har all potential att fungera, så länge den har tillgång till tillräckligt mycket data. Saken är den att det finns så otroligt många variationer på hur en mening kan se ut och att behandla 10 000 eller ens 100 000 är inte tillräckligt för att göra en sådan gissning som den här modellen gör och om jag ökar datamängden som behandlas så får jag memory errors. Därmed inte sagt att modellen är obrukbar. Det finns många förbättringar som kan göras för att effektivisera skripten och heuristiker och morfologisk bearbetning som har potential att förbättra databearbetningen samt uträknandet av sannolikheten för varje mening och därmed potentiellt förbättra översättningen. 1. LITTERATURFÖRTECKNING European Parliament Proceedings Parallel Corpus 1996-2011. (den 15 May 2012). Hämtat från statmt.org: http://www.statmt.org/europarl/ Hiemstra, D. (1996). Using statistical methods to create a bilingual dictionary. Enschede: University of Twente. Jurafsky, D., & Martin, J. H. (2009). Speech and Language Processing. Upper Saddle River: Pearson Education. Stopwords. (den 14 April 2019). Hämtat från Ranks NL: https://www.ranks.nl/stopwords