Rapport från Praktik på SVOX AG 2008 05 14 till 2008 09 01 Om SVOX AG Jag gjorde min praktik på företaget SVOX AG, ett företag som bygger och sysslar med TTSmotorer. Företaget bildades våren 2000 och har sitt kontor i Zürich i Schweiz, man har idag runt femtiotalet anställda och expanderar kontinuerligt. Företagets mål är att skapa och tillhandahålla lätthanterliga och genomgående talsyntessytem som främst inriktar sig till bilindustrin och andra navigationssystemområden. För närvarande arbetar SVOX med kunder och partners i över 30 länder och täcker in språk för samtliga. Företaget bygger talsynteser helt från grunden och har även en studio där man spelar in tal för de olika språk som behandlas. Då man skall täcka in ungefär 30 olika språk är det människor från hela världen som jobbar på företaget, engelska är därför det primära språket som talas på arbetsplatsen. Tyska är dock ett stort språk som ofta används då vissa avdelningar består helt av tysktalande personer samt att företaget ju ligger i den tysktalande delen av Schweiz. Företaget är indelat i tre avdelningar, HR Human Resources, RD Research and Development samt PS Production and Service, där jag var stationerad i den sistnämnda. Visst gränsöverskridande arbete avdelningarna emellan förekommer dock hela tiden. Min praktik Jag kom till Schweiz och SVOX AG i mitten av maj under 2008. Under min praktik jobbade jag med ett projekt där vi hade en större navigationssystemstillverkare som kund. Min arbetsgrupp bestod av tre personer, min handledare och agerande projektledare samt en annan praktikant från Tyskland som jobbade på liknande uppgifter som jag själv. Projektet gick ut på att få företagets TTS motor att veta vad den skall säga givet den databas vi fått av kunden. Kunden tillhandahöll oss med stora mängder data med vilka uttryck som skall produceras, datan innehöll gatunamn, områdesnamn och så kallade Points of Interests, den informationen kom både som ortografisk post men även i företagets fonetiska transkription. Den enklaste lösningen härifrån hade varit att skriva en form av applikation som lätt extraherade all information om exakt hur alla uttryck skall uttalas. Dock var det inte så lätt då de navigationsredskap som används i bilar är väldigt snåla med utrymme och att processera all data vi fått och skriva regler för varje specifikt uttryck är därför inte möjligt. Därför var vi tvungna komprimera all data med att skapa förkortningar för alla ordinlägg för att på så vis spara utrymme och göra all data mer lätthanterlig. Vi extraherade och skapade sedan regler utifrån den datan vi fått. Reglerna använde vi sedan med textpreprocessingsfiler för att skapa testfall där vi kunde se hur vår motor skötte sig i ett statistiskt urval samt även en överordning över alla inlägg. En stor del av projektet handlade Praktikrapport, SVOX AG 1
därför om att lösa problem som kan uppstå med ambiguösa ordinlägg samt förkortningar. Därför kan man säga att det arbete vi skulle göra gick ut på att skapa regler för talsystemet att veta just vad som skulle sägas. En viktig del i arbetet var dock att det system vi skapade skulle vara heltäckande och kunna levereras till kunden för att själv sedan kunna mata in ny data och låta alla verktyg extrahera regler och köra igenom hela systemet utan att stöta på några problem. Projektets förlopp Steg 1: Informationsextrahering Det första jag fick göra i projektet var att se över olika skript i programmeringsspråket perl som skulle extrahera all data vi fått av kunden och skapade olika filer innehållande alla olika ordförekomster för de olika kategorierna. Vårt skript gick igenom all data vi fått och tittade för varje inlägg på den ortografiska samt den fonetiska information som gick att tillgå, för de flesta inlägg var det sedan möjligt att extrahera den fonetiska transkription som gällde för ett specifikt ord. Dock fanns det i alla språk inlägg som av olika anledning inte var lika enkla att utvinna den fonetiska informationen ur. Det fanns även inlägg där den fonetiska transkriptionen uteblev av någon outgrundlig anledning från kundens sida. Den information vi nu hade var alltså alla uttryck och hur deras fonetiska transkription, i en perfekt värld skulle detta vara allt vi behövde för att börja extrahera regler för hur orden skall uttalas. Nu var dock inte världen perfekt och som tidigare nämnt uppstod det i alla språk diverse fel. Steg 2: Lingvistisk expansion Efter denna extrahering av all data var det alltså dags att göra en lingvistisk koll på data. Denna gjordes manuellt och gick till på så sätt att vi skapade ett dokument innehållande alla ordinlägg, deras fonetiska transkription, dess kontext i det ortografiska uttrycket samt frekvens. Vi valde att minimera dubbletter och uttryck med mer eller mindre exakt likadan kontext då det är svårt att gå igenom 900000 uttryck per språk på den tid vi hade. Det som språkexperterna i respektive språk skulle se över var främst att lokalisera alla ambiguösa ord, numeraler och förkortningar. Dessa tre områden gav extra många fel. Ambiguösa ordinlägg ibland skulle uttalas olika, ofta handlade det om förkortningsinlägg som V. eller liknande som i vissa fall skulle uttalas just v men i andra vall kunde vara väster, eller kanske ett egennamn. Just i detta exempel har vi även numeraler inbakade då det kunde röra sig om den romerska siffran fem eller den femte som det skulle heta i svenska. Just romerska siffror skulle visa sig innebära ett problem i svenska som jag kommer återkomma till senare. Liknande gällde det att för språkexperten kolla att ordinläggen stämde överens med det ortografiska uttrycket och den fonetiska transkriptionen. I fallen där något inte var korrekt, var alltså språkexperten tvungen att expandera uttrycket så att det var korrekt. Därav namnet lingvistisk expansion. Då mitt modersmål är svenska fick jag börja med att se över den svenska data vi hade fått in och lokalisera fel. Den svenska data vi fått var bland de mindre och att just gå igenom den gav mig väldigt mycket bra kunskap om vilka fel som ofta uppstod och vilka potentiella problem vi skulle kunna komma att möta när vi skrev reglerna. Praktikrapport, SVOX AG 2
I ett vidare skede fick jag sedan i uppgift att även dela ut likande expansionsarbeten till andra språkexperter i andra språk. Sammanlagt arbetade vi i en första fas med nio språk. Steg 3: Regelextrahering Nästa steg i processen var att extrahera regler från den data vi nu hade. För detta använde jag halvfärdiga verktyg som jag fick anpassa och färdigställa. I extraheringen skapade vi TPP filer (textpreprocesseringsfiler), dessa filer kunde innan extrahering anpassas så de fungerade som mallar för regelextraheringen. Reglerna byggde främst på relationen mellan ordinläggets position och dess kontext avgjorde hur ordinlägget skulle uttalas. I fall av ambiguösa ordinlägg som vårt tidigare exempel V skapades flertalet exceptionella regler om det fanns förekomster som enbart gällde i specifika situationer. I TPP filerna kunde man förbereda extraheringen genom att i förväg fylla i stora generella regler som annars skulle ta prestanda och tid att extrahera. Bland annat genom att skriva in viss karakteristika för specifika språk, som exempelvis väderstreck samt tecken som & eller som man direkt kunde bestämma för att slippa att flertalet regler för detta skulle skapas men att de fallen ändå fångades in. Exempelvis gick extraheringen av väderstreck till på så vis att om N står för väderstrecket Norra så kollas alla N med en position och kontext och matchas med just Norra. Resultatet av extraheringen var en tpp fil för vardera område (gator, område och Points of interests) med tillhörande regler för varje ordinlägg och även en lista på alla exceptionella regler. Genom att gå igenom och titta över reglerna kunde man ofta direkt lokalisera några småfel eller misstag som gjorts i expansionsarbetet. Steg 4: Testfall För att lättare kunna se över om reglerna som extraherats var korrekta och kunna se hur reglerna skulle te sig med den egentligen databasen, var nästa steg att skapa testfall för språket i fråga. Vad vi då gjorde var att skapa skript som genom att gå igenom reglerna vi skapat matchade dessa med databasen vi fått och sedan använde talsyntesmotorn för att jämföra det av kunden bestämda taloutputen och jämföra med vad reglerna faktiskt sade. Sedan lät vi stapla upp input samt output för alla de fall det något ändrats i expansionen och om något inte stämde överens i motorn kunde vi lätt och snabbt se att det var något som inte stämde. Dessa felaktiga fall om de dök upp var det att skicka ut till språkexperter och sedan låta extrahera regler igen och på så vis jobba iterativt till det att en 100 procentig täckning av alla ordinlägg uppnåtts. Steg 5: Slutföring och dokumentation Då projektet var tänkt som fungerande för kunden där man enkelt skulle kunna införa ny data och köra igenom systemet och skapa nya regler för nya uttryck var vi hela tiden tvungna att dokumentera och sammanställa all information och beskriva hur felsökning skulle gå till och så vidare. En fas som visade sig vara väldigt nyttig då man vid förklaring av hur något fungerar lär sig själv i minsta detalj vad man egentligen gjort när man jobbat. Praktikrapport, SVOX AG 3
Utbildningsfärdigheter som var mig till nytta under praktiken Under praktikens gång kunde jag vid ett flertal tillfällen märka av att jag hade stor nytta av olika kurser de kunskaper jag förvärvat mig under min utbildning. Programmering: Då jag under utbildningens gång läst flertalet olika programmeringsspråk kunde jag lätt och snabbt sätta mig in i den syntax som användes i företagets egenskrivna språk samt även jobba med perlskript utan att behöva klura allt för länge på hur jag skulle gå tillväga. Projekterfarenhet: Genom att ha läst bland annat Datalingvistisk Projektkurs samt liknande kurser som kursen Formell Syntax och kursen Människa dator interkation kunde jag se och lägga upp mitt arbete och ha ett hum om vad som väntade. Jag var även befattad med den terminologi som användes och förstod de olika faser som fanns i projektets gång och varför de kom som de kom. Dessutom har min erfarenhet av att arbeta i grupp och kunna dela upp arbete inom gruppen varit till nytta. Lingvistik och Språkteknologi: Då jag läst flertalet kurser i hur man hanterar lingvistiska fenomen och grammatik i datoriserade system har jag snabbt kunnat sätta mig in i hur jag skulle lösa olika system samt även kommit på flertalet lösningar som varit till företagets fördel. Jag har även kunnat identifiera olika mönster i för mig tidigare okända språk då jag kunnat analysera dem ur ett lingvistiskt perspektiv, inte enbart ur programmeringsperspektiv. Sammanfattning och min erfarenhet För mig var denna praktik som säkert framkommer ur beskrivningen väldigt givande ur flera olika perspektiv. Kanske främst ur utbildningsperspektiv då jag under de fyra och en halv månad jag arbetade fick lära mig in på djupet hur det går till och fungerar att jobba ute i arbetslivet med det område jag utbildar mig i. Att projektet var upplagt på så vis att vi startade från början med originaldata från kunden och några halvfärdiga skript som vi sedan fick skriva om mer eller mindre helt och hållet till det att vi hade ett färdigt system med alla de verktyg som behövdes var väldigt givande och gav en god inblick i hur arbetet faktiskt ser ut. En lärdom var den klassiska gör om, gör rätt, då många problem som uppstod faktiskt resulterade i att man fick skrota stora delar av det man utvecklat för att skapa en bättre och mer heltäckande lösning. Detta är ju visserligen något man stött på i kurser också, som i projektkursen exempelvis, men inte på samma sätt, då det kanske finns en lösning som är möjlig, men det måste göras om för att exakt passa in på vad som förväntas av kunden. Dessa restriktioner att följa den data man fått och arbeta med de verktyg som finns gjorde det hela väldigt intressant. Exempelvis använder SVOX sig av ett programeringspråk som de själva skapat när det kommer till regelextrahering, i detta språk kan man inte hantera strängar eller rekursion, något som för mig gjorde saker och ting lite mer komplicerade. Många problem kom också från kundens hål så att säga. Kunden ändrade i sin fonetiska transkribering mitt i projektet vilket gjorde oss tvungna att ändra om stora delar av vårt system. Liksom kunde vissa saker lösas enklare om kundens data varit annorlunda skapad, men det var saker man bara fick acceptera och köpa. Praktikrapport, SVOX AG 4
Jag har även fått lära mig otroligt mycket i arbetsmetodik och hur det funkar med företagsstruktur där man har en viss person att rapportera till och sedan knyta samma olika delar från olika avdelningar för att tillföra något till den större bilden. Jag fick även ser hur det fungerar i ett land där man har en helt annan syn på företagshierarki och vilka för samt nackdelar det för med sig. Vissa företeelser som för mig var helt främmande i form av adressering och status var här helt normalt, något som jag tror är bland det viktigaste att kunna förstå när man ska jobba utomlands. Så här i efterhand ser jag på praktiktiden som en ovärderlig upplevelse och erfarenhet. Inte bara har jag lärt mig väldigt mycket om hur det fungerar på ett företag som sysslar med det jag intresserad mig för, jag har även lärt mig hur jag fungerar i en sådan miljö och vilka delar av mitt intresseområde som jag gärna skulle vilja jobba vidare med och vilka områden som jag vill lära mig i. Något jag tror är väldigt viktigt att ha med sig när man senare söker anställning på ett företag. Thomas Broniewicz thomas.broniewicz@cling.gu.se Adressen till in praktikplats praktikplats: SVOX AG Baslerstrasse 30 8048 Zurich Schweiz http://www.svox.com Praktikrapport, SVOX AG 5