NADA

Laboration 3:
Statistisk Lexikal Semantik: Random Indexing

Laboration måndag 27 september 2004, 10-12 i Röd

Martin Hassel och Magnus Rosell

Syfte
Syftet med laborationen är se att man kan utvinna oklassificerade semantiska relationer ur fritextdata.

Uppgift
Din/er uppgift är att försöka lösa en del av "synonymtestet" ORD som ingår som en del i Högskoleprovet. Grupper om upp till tre personer tillåts och tävling om vem som kan få flest rätt uppmuntras.

Först

Ögna igenom hela labbpeket innan du börjar, i synnerhet det sista avsnittet, "Redovising".

Bakgrund

Random Indexing (RI) är ett sätt att utvinna relaterade ord ur fritext. Varje ord associeras med en Random Label, en mångdimensionell vektor (tex 1800 dimensioner) med några få slumpvis utvalda nollskilda element, tex fyra -1:or och fyra 1:or. Metoden skapar sedan en kontextvektor för varje ord genom att gå igenom en textmängd ord för ord (indexering). Kring varje ord upprätthåller metoden ett kontextfönster på tex fyra ord före och fyra ord efter. Då ett ord befinner sig i fokus (med kontextfönstret runt omkring sig) adderar man till dess kontextvektor de omkringliggande ordens slumpvektorer (Random Label). Man använder ett viktningsschema för att vikta orden olika beroende tex avstånd till fokusordet eller någon annan egenskap hos kontextordet (oftast vill man att de ord som står närmast fokusordet ska bidra mest till dess kontextvektor.) Två ord som förekommer i liknande kontexter, dvs tillsammans med liknande ord, kommer härigenom att få liknande kontextvektorer. Man avgör deras likhet genom att jämföra kontextvektorerna med ett avstånds- eller likhetsmått, tex det kartesiska avståndet mellan dem.

För mer information om RI se Representing Word Meanings Based on Random Labels, Sahlgren, M. 2001.

I denna labb ska vi använda RI för att svara på frågor ur ORD-delen på högskoleprovet (ett synonymtest). Varje fråga består av ett ord och fyra närbesläktade ord. Testdeltagaren ska ange vilket ord som är närmast i betydelse (det som är mest synonymt).

Javaprogrammet OrdHP.java tränar ett RI på en textmängd (träningsmängd) och provar dess förmåga att gissa rätt på orden i en fil med frågor (testmängd).

För att komma igång

Börja med att kopiera Random Indexing-paketet till din hemkatalog:
cp -r /afs/nada.kth.se/public/www/kurser/kth/2D1418/laborationer04/randomindexing/ .

Gå sedan in i Random Indexing-katalogen i din hemkatalog:
cd randomindexing/

Kör nu programmet OrdHP med träningsmängd ri_dataset1/ och testfilen test1.dat:
java -Xmx1000m -cp lib:RI:OrdHP OrdHP /afs/nada.kth.se/public/www/kurser/kth/2D1418/laborationer04/ri_dataset1/ test1.dat

eller om du gör labben i Windowsmiljö (tex hemma, förutsatt att du kopierat även textmängderna):
java -Xmx1000m -cp lib;RI;OrdHP OrdHP ../ri_dataset1/ test1.dat

Hur många rätt fick du?
Hur många hade du fått om du chansat?

I katalogen results/ ligger nu en fil i vilken resultatet finns att läsa. Varje gång du kör OrdHP generaras en ny unik sådan fil. De är bra att ha kvar när du ska jämföra resultatet för olika inställningar (se nedan). Öppna filen och bekanta dig med resultatet.

Överst i filen finns information om hur träningen gick till (mer om det senare). Sedan följer resultaten. Först antal rätt och fel och sedan vilka ord som blev rätt och fel. Med "Correct" menas de ord som programmet gett rätt svar på, med "Missed" menas de som det inte gjorde rätt på och med "Insufficient" menas de ord som träningsmängden inte gav tillräckligt med information om.

Orden presenteras så här:
konstituera => inrätta [inrätta(0.205) avgöra(0.105) bekräfta(0.089) kritisera(0.071) slutföra(0.065)],
först ordet man söker synonym till, sedan den rätta synonymen och därefter inom hakparenteser hur lika programmet tyckte att alternativen var frågeordet (i fallande ordning). I det här exemplet har programmet alltså rätt!

Nu är det dags att du bekantar dig med test- och träningsmängderna.

Testmängd

De frågor du ska jobba med finns i filerna test1.dat och test2.dat. Titta gärna i dem om du vill. Första ordet är frågeordet. Siffran sist på varje rad anger vilket alternativ som är det rätta (vi börjar räkna på 0). Att det finns två olika tester beror på att de är anpassade till de två träningsmängderna.

Träningsmängder

För att träningen ska ge någonting måste textmängden innehålla orden i testet. Därför har vi laddat ned sidor från nätet som Google svarat att de ska innehålla dem. I
/afs/nada.kth.se/public/www/kurser/kth/2D1418/laborationer04/ri_dataset1/
finns snippetar (de korta textsnuttar som Google ger under varje länk) för orden. För att prova vissa saker som tar tid har vi också gjort ri_dataset0/ som bara innehåller några få filer.

I ri_dataset2/ finns hela texter som också hämtats med Google. ri_dataset3/ innehåller länkar till båda textmängderna och kan därför användas som en ännu större mängd.

Vi har också lemmatiserat alla ord för att de olika formerna inte ska anses vara olika ord. Titta på några av texterna i ri_dataset1/ och ri_dataset2/. Som du kan se har vi inte tagit bort all engelsk text och alla adresser, men det borde inte spela någon större roll.

För att få riktigt bra resultat måste man ha bra och stora träningsmängder. Då tar emellertid indexeringen för lång tid för att det ska vara rimligt att prova några olika faktorer under ett laborationspass.

Parametrar

Den första provkörning du gjorde ovan under "För att komma igång" hade specifika inställningar. Dessa är angivna i filen TrainHP.properties. Det du ska göra är att ändra dessa och se om du kan få bättre resultat.

De parametrar i TrainHP.properties som du kan ändra på är:

Uppgifter

Gör följande två uppgifter. Gör minst en av följande uppgifter (den andra är svårare). Gärna båda om du hinner.

Redovisning

Redovisa gör man för någon av assistenterna under labbpasset genom att muntligen svara på de frågor som ställts i detta labbpek och redogöra för de försök man genomfört (gärna genom att visa resultatfilerna). Frågorna är till största delen av resonerande karaktär och egentligen omöjliga att svara på genom att prova sig fram på så kort tid, men vi vill ändå höra ett ärligt försök. Spekulera!

Ju fortare man redovisar desto mer förväntas man ha gjort.

OBS!

Om du under labben får felmeddelandet: java: Command not found. eller motdvarande, så är du tvungen att lägga till Java med kommandot:
module add jdk


Sidansvarig: Martin Hasel <xmartin@nada.kth.se> och Magnus Rosell <rosell@nada.kth.se>
Senast ändrad 31 augusti 2004
Tekniskt stöd: <webmaster@nada.kth.se>