bild
Skolan för
elektroteknik
och datavetenskap

Spr�kteknologi

Laboration 3

Statistisk Lexikal Semantik: Random Indexing

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

Uppgift
Din/er uppgift �r att unders�ka hur man med hj�lp av ett datorprogram kan f�rs�ka l�sa en del av "synonymtestet" ORD som ing�r som en del i H�gskoleprovet. 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 slumpvektor, en m�ngdimensionell vektor (t.ex. 1800 dimensioner) med n�gra f� slumpvis utvalda nollskilda element, t.ex. 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� t.ex. 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. Man anv�nder ett viktningsschema f�r att vikta orden olika beroende p� t.ex. 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, d.v.s. 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, t.ex. det kartesiska avst�ndet mellan dem.

F�r mer information om RI se An Introduction to Random Indexing (pdf) och �vriga texter p� sidan f�r f�rel�sningen om statistisk lexikal semantik.

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 tr�ningsm�ngd och provar dess f�rm�ga att gissa r�tt p� orden i en fil med fr�gor (testm�ngd).

Testm�ngd

B�rja med att kopiera Random Indexing-paketet till din hemkatalog:
cp -r /info/sprakt10/ri/randomindexing/ .

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

De fr�gor du ska jobba med finns i filerna test1.dat och test2.dat. Titta g�rna i dem. F�rsta ordet p� varje rad �r fr�geordet, sedan f�ljer svarsalternativen. Siffran sist p� varje rad anger vilket alternativ som �r det r�tta (vi b�rjar r�kna p� 0). Till exempel:

ansats|sammanfattning|syfte|forts�ttning|f�rs�k|granskning|3

H�r fr�gas efter synonymen till ordet "ansats". Alternativen �r "sammanfattning", "syfte", "forts�ttning", "f�rs�k" och "granskning". R�tt alternativ �r nr 3, d.v.s. "f�rs�k".

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 s�dana sidor fr�n n�tet. I /info/sprakt10/ri/ri_dataset1/ finns snippetar (de korta textsnuttar som Google ger under varje l�nk) f�r orden. F�r att prova tidskr�vande saker 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.

Testa programmet

K�r nu programmet OrdHP med tr�ningsm�ngd ri_dataset1/ och testfilen test1.dat:
java -Xmx1000m -cp lib:RI:OrdHP OrdHP /info/sprakt10/ri/ri_dataset1/ test1.dat

eller om du g�r labben i Windowsmilj� (t.ex. 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 blev det?
Hur m�nga r�tt hade det blivit om man 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 kommer 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!

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:

  • dimensionality = 1800
    Dimensionen p� vektorerna som representerar ordet (b�de Random Labels och kontextvektorer har denna dimension).
  • random_degree = 8
    Antalet 1:or och -1:or i en Random Label.
  • seed = 710225
    Slumpfr�. Eftersom RI slumpar fram Random Labels kan slumpen p�verka resultatet.
  • left_window_size = 4
    Antalet ord till v�nster om fokusordet som anv�nds f�r att uppdatera kontextvektorn.
  • right_window_size = 4
    Antalet ord till h�ger om fokusordet som anv�nds f�r att uppdatera kontextvektorn.
  • weighting_scheme = moj.ri.weighting.MangesWS
    Viktningsschema. Mer om det i Extrauppgiften nedan.
  • stoplist = False
    Om stopplista ska anv�ndas eller inte (se nedan).
  • stoplist_name = Stoplist.txt
    Namnet p� en eventuell stopplista.
  • shortest_word = 3
    Kortare ord �n det angivna v�rdet anv�nds inte vid indexeringen.
  • longest_word = 25
    L�ngre ord �n det angivna v�rdet anv�nds inte vid indexeringen.
  • minimum_words_per_file = 2
    L�gsta antalet ord en fil m�ste inneh�lla f�r att indexeras.

Uppgifter

G�r f�ljande tre uppgifter.
  • Stopplista
    �ndra fr�n "False" till "True" f�r parametern stoplist i TrainHP.properties och k�r igen p� ri_dataset1/. Orden i stopplistan kommer nu inte att tas med i indexeringen. Vad ger detta f�r resultat? Varf�r tror du?

  • �ndra parametrar
    P� vilket s�tt tror du att de olika parametrarna kan p�verka resultatet? (Du beh�ver inte resonera om alla.)

    V�lj minst tv� parametrar att prova (stoplist r�knas inte). Prova minst ett annat v�rde �n det som var fr�n b�rjan. F�r du b�ttre resultat?

    P� vilket s�tt tror du att de olika parametrarna spelar olika roll beroende p� vilken textm�ngd man anv�nder?
    (Om du har tid: prova om du kan hitta n�gon parameter som verkar ha olika inverkan d� du k�r p� ri_dataset1/ respektive ri_dataset2/.)

  • Egna synonymer
    G�r ett eget synonymtest i en fil som f�ljer formatet i testfilerna (du kan ha hur m�nga synonymf�rslag som helst till varje fr�ga). Prova t.ex. om programmet tycker att funktionsord (som t.ex. "och" och "men") �r mer lika varandra �n de som finns i n�gon av de ursprungliga testfilerna. D� kan du beh�lla n�gra av dessa i din nya fil. Kom ih�g att bara anv�nda ord i grundform (lemma)!

    T�nk efter s� att inst�llningarna inte g�r det om�jligt f�r programmet att lyckas (om du vill prova ordet "du" m�ste du t.ex. ha shortest_word = 2). Dessutom kan det vara s� att andra inst�llningar �r b�ttre f�r att l�sa just ditt synonymtest, men det hinner du nog inte unders�ka s� noga.

    Var ocks� medveten om att det finns en m�jlighet att de ord du �r intresserad av inte finns med i tr�ningsm�ngderna. De �r ju framtagna f�r det ursprungliga testet. Det �r allts� en f�rdel om du v�ljer r�tt vanligt f�rekommande ord som har en rimlig chans att f�rekomma i tr�ningsm�nderna.

Frivillig uppgift:
  • Eget viktningsschema (kr�ver Java-vana.)
    Det viktningsschema som anv�nts hittills i labben (MangesWS.java) finns tillsammans med ett par andra exempelklasser (MartinsWS.java och RosellsWS.java) i katalogen RI/moj/ri/weighting/.

    G�r ett eget viktningsschema genom att kopiera n�gon av exempelklasserna och d�pa om dem. Modifera sedan viktningsmetoderna applyLeftWeighting() och applyRightWeighting(). De beskriver hur ett av orden i kontextf�nstret adderas till kontextvektorn f�r fokusordet.

    • focusLabel �r fokusordets representation
    • focusContext �r fokusordets kontextvektor
    • distance �r avst�ndet till det ord vars Random Label ska adderas
    • xyzContextLabel �r representationen f�r det ord som ska adderas till fokusordet (d�r xyz �r left eller right)
    • negs och poss tilldelas arrayer med positioner f�r de nollskilda elementen i Random Label f�r ordet som ska adderas.

    L�s i dokumentationen f�r RI-paketet (javadoc-format) som finns i doc-katalogen i labbpaketet. D�r kan du se vad som �r m�jligt att g�ra. Naturligtvis finns det information om viktningsschemana d�r ocks�.

    Kom ih�g att kompilera ditt viktningsschema efter det att du skapat det. Om du st�r i katalogen randomindexing/RI/moj/ri/weighting/ n�r du kompilerar kan det t.ex. ske p� f�ljande vis:
    javac -classpath ../../../ DittAlldelesEgnaWS.java

    F�r att anv�nda ditt viktningsschema m�ste du ocks� �ndra parametern f�r weighting_scheme i TrainHP.properties. Sedan kan du k�ra som vanligt. En bra ide �r att prova att det funkar p� en liten tr�ningsm�ngd f�rst, innan man ger p� n�gon av de st�rre.

    Kan du f� fler r�tt med ditt viktningsschema �n med n�got av de vi redan skrivit?

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 motsvarande, s� �r du tvungen att l�gga till Java med kommandot:
module add jdk

Teoretisk uppgift

Till varje laboration finns en teoriuppgift knuten. Syftet är att uppmuntra till tidigare inläsning av stoffet. Varje teoriuppgift skall redovisas på papper (ca. 100 ord) vid aktuellt labbtillfälle. Hur bonuspoängen fungerar beskrivs i KursPM. Teoriuppgifterna är inte obligatoriska utan skall ses som ett stöd för att utveckla de teoretiska kunskaperna i språkteknologi.

Fr�ga:Det finns m�nga metoder f�r att statistiskt hitta relaterade ord, slarvigt kallade f�r synonymer. N�mn �tminstone en annan s�dan metod �n Random Indexing. Vilket antagande utg�r dessa metoder ifr�n? P� vilket s�tt anv�nder de antagandet? Vilka effekter f�r detta, t.ex. f�r en person som anv�nder metoden f�r att bygga synonymordlistor?
Copyright © Sidansvarig: Johan Boye <jboye@csc.kth.se>
Uppdaterad 2011-09-01