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?