[voikko] tokenize isoille dokumenteille

Harri Pitkänen hatapitk at iki.fi
Wed Jan 6 12:13:32 EET 2016


Hei!

On Wednesday 06 January 2016 11:48:52 Teemu Kanstrén wrote:
>  Yritän tässä ajaa Voikon läpi isohkojakin dokumentteja. Käytän Java
> rajapintaa ja (vielä) libvoikko 3.8 versiota. Isommilla dokumenteille
> tokenize() funktio näyttää muuttuvan todella hitaaksi. Onko jotain temppuja
> millä saan tämän toimimaan paremmin? Tai näkyvyyttä mistä tämä johtuu,
> esim. joku konfiguraatio ongelma.

Tämä on todennäköisesti bugi libvoikossa (tuskin korjattu vielä uudemmassakaan 
versiossa). Selvitän asiaa. Periaatteessa tokenize-funktio on suunniteltu 
käytettäväksi siten, että sille annetaan syötteenä tekstikappale eikä 
kokonainen dokumentti. Tästä syystä tämä tehottomuus pitkillä teksteillä on 
varmaankin jäänyt huomaamatta. Mutta en näe syytä, miksi sen pitäisi olla noin 
hidas.

Eli jos haluat kiertää ongelman, voit jakaa tekstin kappaleisiin. Jos 
kappalejako ei ole tiedossa, jakaminen minkä tahansa whitespace-merkin 
kohdalta vaikkapa noin 10 000 merkin välein riittää myös, jos tarkoitus on 
vain saada sanat poimittua tekstistä.

>  Ajelin näitä siis OSX:ssä, libvoikko 3.8. Muistia JVM:llä oli alkuun 2GB,
> nostin sitten 8GB, mutta sillä ei näyttänyt olevan suuremmin merkitystä. 1
> core näyttää olevan kohtuu tasaisesti käytössä ja muistin kulutus JVM:n
> osalta näytti jopa laskevan kun ohjelma oli pidempään ajossa. 1.5GB-2GB kun
> oli tuo 2GB raja, 3GB enimmillään kun oli 8GB raja.

JVM:n muistiasetukset eivät luultavasti vaikuta tähän, koska libvoikko varaa 
suurimman osan muististaan natiivikoodin puolella. Tietysti bugi voi olla myös 
Java-rajapinnassa, tarkistan tämänkin varmuuden vuoksi.

> 1.5k noin 0.01s
> 25k noin 1s
> 30k noin 2s
> 40k noin 3s
> 60k noin 5s
> 65k noin 7s
> 115k noin 20s
> 270k noin 2min 8s eli 128s
> 415k noin 5min 20s eli 320s

Tämä näyttää viittaavan melko selvästi siihen, että aikaa kuluu neliöllisesti 
syötteen pituuteen nähden (pituuden kaksinkertaistaminen nelinkertaistaa 
ajankäytön). Teoriassa tämän algoritmin aikavaativuuden pitäisi olla 
lineaarinen, joten bugihan siellä jossain on.

Yritän korjailla loppuviikon aikana.

Harri


More information about the voikko mailing list