[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