Archive for Språkteknologi

Shift & reduce

Min shift & reduce-parserIgår blev jag färdig med den sista uppgiften för terminen. Det var en programmeringslabb som gick ut på att skriva en parser (vilket inom språkteknologi är ett program som gör en syntaktisk analys av meningar) som nyttjar en så kallad shift & reduce-algoritm. Den innebär att man börjar med två listor av ord där den ena från början innehåller orden i den givna meningen (lista 1) och den andra är tom (lista 2). Detta kan vi kalla för starttillståndet. Därifrån är det programmets uppgift att räkna ut alla möjliga sluttillstånd, vilket innebär ett tillstånd där meningen har fått en analys som är korrekt enligt en mängd regler.

För att ta sig dit kan algoritmen använda sig av en kombination av de två alternativen som kallas shift respektive reduce. Shift innebär att ett ord tas från lista 1 och läggs i lista 2. Inga konstigheter. Reduce innebär att man tittar på de senast tillagda orden (eller egentligen kanske man borde säga enheterna) i lista 2 och kontrollerar om det finns någon regel som kan binda ihop dessa till en ny enhet. T ex kanske de två senaste tillagda orden är ”en hund”, och i så fall skulle dessa kunna bytas ut mot en nominalfras (NP) om det finns en regel som tillåter det.

Om vi antar att programmet ska parsa meningen ”en hund springer” så skulle alltså den mest uppenbara analysen göras genom att först shifta två gånger, sedan reduce:a ”en hund” till ”NP”, sedan shifta en gång till, reduce:a ”springer” till ”VP” (verbfras) och till slut reduce:a ”NP VP” till ”S” (för sats, eller sentence). För varje steg samlas också information om alla dittils byggda delträd i en tredje lista, så att man kan komma åt den informationen senare, ifall parsningen når ett accepterat sluttillstånd.

Sådana här analyser används i de allra flesta språkteknologiska områden, där den allra mest uppenbara är grammatikhjälpen i ordbehandlingsprogram som Microsoft Word.

Men nu är jag färdig med det. Rapporten är färdig och inskickad och jag fick VG på den kursen vilket känns otroligt bra. Nu har jag sommarlov, åtminstone från skolan. Det enda jag behöver göra nu är att njuta av en stunds ledighet och vänta på att de ringer från jobbet och vill boka in mina första pass. Det ska bli ganska skönt med ett fysiskt arbete. Sådana har det inte direkt kryllat av i mitt liv.

Har danmark fler kvinnliga än manliga skådespelare?

De flesta som använder Google translate lite då och då har förmodligen vant sig vid att man oftast inte får perfekta resultat. Anledningen är att naturliga språk inte är regelbundna och därför inte heller går att tolka felfritt med datorer som behöver följa just regler. Men det är en annan historia.

Oftast när jag ser att Google translate översätter fel så tänker jag inte så mycket på det, men ända sedan i höstas när jag läste en kurs i maskinöversättning har jag då och då börjat fundera på vad det egentligen är som går snett. Idag upptäckte jag det här exemplet:

Han er en dansk skuespiller

Google translate, precis som nästan alla maskinöversättningssystem idag, bygger på statistiska metoder. Det innebär i korthet att man har jättestora parallellkorpusar (samlingar av manuellt översatta texter) utifrån vilka man kan ta fram den mest sannolika översättningen av en specifik mening som inte finns i korpusen, men vars enskilda ord kanske gör det.

I det här fallet, ”Han er en dansk skuespiller”, tycker alltså Google att det är mest sannolikt att skuespiller betyder actress. Det är ju inte fel i sig, men om man ser till kontexten i just den här meningen är det tydligt att det handlar om en manlig skådespelare. Jag testade att byta ut dansk mot norsk och svensk, men det blev samma sak ändå. När jag däremot provade med ”han er en god skuespiller” blev det rätt.

Jag tänker inte göra någon djuplodande analys, men det är ju lite lustigt att algoritmen tror att det handlar om en kvinnlig skådespelare ända tills vi påpekar att hen är en bra skådespelare ;)