• No results found

Folkets Synonymlexikon

N/A
N/A
Protected

Academic year: 2022

Share "Folkets Synonymlexikon"

Copied!
7
0
0

Loading.... (view fulltext now)

Full text

(1)

Folkets Synonymlexikon

Bakgrund

Folkets synonymlexikon1 är ett projekt lett av Viggo Kann på Kungliga Tekniska Högskolan som påbörjades 2005. Syftet med projektet var att skapa ett fritt online-synonymlexikon som styrs av användarna (folket). Metoden som används av Folkets synonymlexikon är att besökare får se slumpvist genererade förslag på synonympar, som de får ge en röst på skalan 0-5. Över tid blir synonymlexikonet alltså bättre på att föreslå synonymer.

En hel del av jobbet är dock hanterat automatiskt genom språkteknologiska metoder. De genererade förslagen är inte helt slumpvisa. Det första som gjordes, innan folk fick börja rösta, var att man använde olika lexikon mellan svenska och andra språk för att översätta ord fram och tillbaka. Två ord med samma översättning är kandidater till att vara synonyma med varandra. Över 600’000 synonymparskandidater genererades den vägen. Men på grund av att ord kan ha flera betydelser (det som är vårt mål att kartlägga), är många av dessa kandidater dåliga.

Nästa steg, fortfarande innan folket fick möjlighet att rösta på förslag, var att automatiskt sålla bort uppenbart dåliga kandidater med hjälp av Random Indexing. Kortfattat använder man en stor träningsmängd med olika texter och ger varje kandidat till synonympar ett numeriskt värde på hurpass lika orden används i texterna. Sedan tog man bara bort de paren som hade ett för lågt värde, och kvar var drygt 200’000 kandidater.

Sedan dess har folk fått rösta på paren. Vid ett antal tillfällen har par med väldigt låga graderingar raderats från listan, så att det inte längre dyker upp som förslag att rösta på.2

Frågeställning

Vi vill undersöka om man kan få ut hur många betydelser ett ord har utifrån synonymparen i folkets synonymlexikon.

1 http://folkets2.nada.kth.se/synlex.html

2 http://www.csc.kth.se/tcs/projects/infomat/rapporter/kannrosell05.pdf

(2)

Datamängder

Från folkets synonymlexikon fick vi ut en lista av alla synonympar som graderats med 3 eller högre. Detta är naturligt att se som en graf där ord representerar hörn och viktade kanter representerar synonymgraderingen. Från originaldatamängden skapade vi även en till datamängd där vi filtrerade så att den bara innehöll all synonympar som graderats 4 eller högre. Originaldatamängden innehöll 18 984 synonympar och 16 047 ord, 60% av orden ligger i samma komponent och Figur 1 visar den komponenten. Den filtrerade innehöll 9 836 synonympar och 11 126 ord och kan ses i Figur 2.

Figur 1. Den största komponenten med 60% av orden från originaldatamängden.

Genererad m.h.a. Gephi3.

3 Gephi, an open source graph visualization and manipulation software, https://gephi.org/

(3)

Figur 2. En graf av den filtrerade datamängden med gradering 4 eller mer.

Genererad m.h.a. Gephi.

Algoritm

För att dela upp ord i dess betydelser implementerade vi en algoritm som delar upp grannorden till ett ord i olika grupper. Vi implementerade två olika varianter av denna algoritm som har lite olika krav på vad som krävs för att två grannord ska tillhöra samma grupp. Den ena varianten (djup-1) anser att två grannord tillhör samma grupp om de har en kant mellan varandra (en grupp består alltså av ord som hänger ihop internt). Den andra varianten (djup-2) anser även att grannord tillhör samma grupp om de har en gemensam granne utöver de ordet som man letar betydelser för.

(4)

Figur 3. Exempel på graf av ord som ger olika resultat beroende på vilken variant av algoritmen man använder.

Om man skulle köra algoritmen på grafen i Figur 3 och letar efter betydelser till ordet A så skulle man med djup-1 få (G), (B), (C D E) som grupper medans med djup-2 så skulle resultat bli (G), (B C D E) då B och C båda är synonyma med ordet F.

Implementation

För att implementera grupperingen effektivt så används en variant av datastrukturen disjoint- set4. Våran implementation skiljer sig dock lite då vi använder ordhörnens unika id som set- identifierare istället för att skapa det med MakeSet. Då våran graf är mycket gles så lämpade det sig att använda grannlistor för att representera grafen.

Djup-1

Pseudo-kod:

def find_meanings_d1(word_node):

neighbor_set = HashSet(word_node.neighbors) disjoint_set = DisjointSet()

for neighbor in word_node:

for next_neighbor in neighbor.neighbors:

if next_neighbor != word_node && next_neighbor in neighbor_set:

disjoint_set.Union(neighbor, next_neighbor)

return word_node.neighbors.group_by(disjoint_set.Find)

Djup-1 algoritmen implementeras genom att man har ett HashSet som säger vilka hörn i grafen som är direkta grannar till ordet man undersöker, denna används så att grupperna endast

4 http://en.wikipedia.org/wiki/Disjoint-set_data_structure

(5)

kunna implementera en snabbare variant som inte tittar på orelaterad kanter om man hade en kantmatris istället för grannlista.

Djup-2

Pseudo-kod:

def find_meanings_d2(word_node):

disjoint_set = DisjointSet() for neighbor in word_node:

for next_neighbor in neighbor.neighbors:

if next_neighbor != word_node:

disjoint_set.Union(neighbor, next_neighbor)

return word_node.neighbors.group_by(disjoint_set.Find)

Djup-2 implementeras nästan på samma sätt som Djup-1 förutom att man inte längre behöver undvika att göra Union på hörn som inte är grannar till ordet man undersöker. Om man tar Figur 3 som exempel så kommer B och C tillhöra samma grupp då de båda kallar Union på F och på så sätt blir i samma grupp.

Resultat

Några exempel med djup-2

● bar - 3 betydelser:

○ bardisk

○ kal, naken, näck, skallig

○ pub

● hjärta - 2 betydelser:

○ blodpump

○ kärnpunkt

● liv - 7 betydelser:

○ leva

○ leverne

○ midja

○ oljud, stoj

○ rabalder, tumult, ståhej

○ rörelse

○ väsnas

● ringa - 6 betydelser:

(6)

○ slå en signal, telefonera

○ modest, anspråkslös

○ få

○ nätt, betydelselös, futtig, bagatellartad, små, liten, skral, obetydlig, smått, svag, späd, föga, knapphändig, otillräcklig, oansenlig

○ vagt

○ lindrig, mild, måttlig

● ringa (filter < 4.0) - 9 betydelser:

○ otillräcklig

○ slå en signal, telefonera

○ få

○ svag, späd

○ obetydlig, smått, föga

○ vagt

○ oansenlig

○ knapphändig

○ lindrig

● försiktig - 9 betydelser

○ aktsam

○ diskret, återhållsam

○ eftertänksam

○ lätt

○ reserverad

○ vaksam

○ varsam

○ varsamt

Analys

Resultaten ovan är ordnade efter hur bra vi tycker att de är. “bar” får en uppdelning av sina synonymer som precis matchar den vi själva hade gjort för hand. “liv” klarar av att slå ihop vissa av betydelserna, men “oljud”, “stoj”, “rabalder”, “tumult”, “ståhej” och kanske också “rörelse”

borde kanske ha hamnat under samma betydelse. Dessutom är “leva” och “väsnas” verb som nog inte borde anses vara synonymer alls. “försiktig” fick i princip varje synonym som en unik betydelse. Det är så klart långt ifrån ett optimalt resultat när man tittar på vilka ord det handlar om.

Över lag anser vi att programmet egentligen aldrig slår ihop flera ord i en betydelse i onödan, men tyvärr ofta låter ett ord anta lite för många olika betydelser. Och det är när vi använder djup-2. Djup-1 gav givetvis ett ännu mer partitionerade resultat, även om skillnaden oftast inte var stor. Vi provade också med att filtrera bort synonymer med gradering under 4.0 istället för

(7)

på “ringa” ovan. Antalet synonymer går från 24 till 13 och på samma gång går antalet betydelser från 6 till 9. Vi hade snarare velat se antalet betydelser minska.

Samtidigt kan resultat i stil med det vi såg för “försiktig”, där antalet betydelser blir många och antalet synonymer inte är mycket större, ge goda indikationer på ord som kan vara synonymer.

Inbördes bör klart fler av “försiktig”s synonymer också inbördes vara synonyma. Så kanske sådana resultat kan användas för att generera dessa synonymförslag oftare för röstning.

Som mått på antalet betydelser hos ett ord, gör vårt program inte så mycket nytta. Det säger att ordet med flest olika betydelser är “hej” med 15 betydelser, följt (ironiskt nog) av “synonym” med 14 betydelser. Men själva uppdelningen som görs kan ändå vara ganska användbar att titta på.

Förbättringar

I och med att vi tycker att grupperingarna i princip bara blev för lösa, skulle man kunna tänka sig att söka djupare, för att se om man förstärker grupperingarna på ett bra sätt. Risken är att man med djup-3 och högre börjar få ordkedjor där betydelsen drastiskt ändras på vägen, och har man otur kan två synonymer till det ursprunglga ordet ha en annan gemensam synonym längre bort även om de inte alls är synonyma med varandra.

Man skulle också kunna använda sig av synonymparens graderingar på ett mer sofistikerat sätt i algoritmen. Kanske skulle man till exempel kunna titta på direkta synonymer utan filter, och synonymer med djup två med ett starkare filter och sedan djup 3 med ännu starkare filter.

Men frågan är om det hjälper så mycket med tanke på att två synonymer som tillhör samma faktiska betydelse antagligen borde vara synonyma. Om man hade ett perfekt synonymlexikon, skulle det säkert vara den bäst förbättringen man kan tänka sig.

References

Related documents

Jag vill därför uppmana all personal att se till att nedanstående information ställs till expeditionspersonalens förfogande i god tid före.. terminsstart eller start av helt

Läs noggrant informationen nedan innan du börjar skriva tentamen..  Svara kort

Läs noggrant informationen nedan innan du börjar skriva tentamen..  Svara kort

Läs noggrant informationen nedan innan du börjar skriva tentamen..  Svara kort

Läs noggrant informationen nedan innan du börjar skriva tentamen..  Svara kort

 Svara kort och koncist.  Till alla uppgifterna ska fullständiga lösningar lämnas.  Lösningen till varje ny uppgift skall börjas på en ny sida.  Använd bara en sida

Läs noggrant informationen nedan innan du börjar skriva tentamen..  Svara kort

 Efter varje uppgift anges maximala antalet poäng som ges.  Även delvis lösta problem kan