NatLibFi / Annif

Annif is a multi-algorithm automated subject indexing tool for libraries, archives and museums.
https://annif.org
Other
197 stars 41 forks source link

Overly popular suggestion "Määri" with Finnish YSO-nn model #492

Closed kauttoj closed 3 years ago

kauttoj commented 3 years ago

I've applied the latest Annif yso-fi model to large corpus of Finnish thesis abstracts. I noticed that term "Määri" (https://finto.fi/yso-paikat/fi/page/p124541), which is a Czech province, comes up surprisingly often in my top suggested terms without any rational reason. In fact, "Määri" comes in top-10 terms for 1787 theses out of 174955 (should be none), so it's doen't appear as a random glitch.

Here are couple of text examples which you can test, e.g., using annif.org demo with "YSO-nn ensemble Finnish" model (as of 30.5.2021). These are from public Theseus website.

"Joka päivä tuotetaan valtavia määriä tuotteisiin liittyviä tietoja. Tiedot jaetaan insinöörien, asiantuntijoiden ja projektipäälliköiden välillä. Tärkeät tiedot lähetetään sähköpostitse, jaetaan tallennuslaitteiden kautta tai tallennetaan paikallisille kiintolevyille. Tarve suoraan yhteyteen tuotteen ja tuotteisiin liittyvän tiedon välillä syntyy, kun aiemmin tuotetut tiedot aikaisemmista moduuleista ja konsepteista voivat lyhentää kehitysaikaa. Tämän opinnäytetyön tarkoituksena oli kehittää Wärtsilän tutkimus- ja kehitysosaston ja W2X-projektiryhmän kanssa sovellus, joka mahdollistaisi kaiken tuotetun datan arkistoinnin ja strukturoinnin siten, että moottorin kehityksen ja ylläpidon vaiheet tulevat näkyviin. Luomalla PLM-järjestelmään linkitetyn sovelluksen, jota suunnittelijat ja asiantuntijat käyttävät heidän työsään yksinkertaistaakseen tuotetun datan hallintaa, kaikki sidosryhmät voivat nähdä luodut tuotteeseen liittyvät tiedot milloin tahansa." Top suggestions: Määri, tiedonhallinta, moduulirakentaminen, tuotekehitys, modulaarisuus

"Jätevesiä syntyy kaivosteollisuudessa yleensä suuria määriä, joten jätevesistä on päästävä eroon tavalla tai toisella. Tässä opinnäytetyössä käsiteltiin rikastushiekka-altailla tapahtuvaa jätevesien laskeutumista ja selvitettiin kokeellisesti kahden eri tuotantolaitoksen jätevesien yhdistämismahdollisuutta. Tutkimuksen aluksi tavoitteena oli hankkia mahdollisimman paljon tietoa Suomen Karbonaatin ja Nordkalkin prosessijätevesien kiintoaine-pitoisuuksista, kemiallisesta ja fysikaalisesta koostumuksesta, määristä ja vaihteluista. Laskeutuskokeet suunniteltiin suoritettavaksi siten, että molempien tehtaiden jätevesimääriä yhdisteltäisiin eri koepisteisiin ja näitä arvoja verrattaisiin laskeutuskokeiden referenssiarvoihin. Näytteistä analysoitiin kiintoainepitoisuus, sameus, varaustiheys, dispergointiainepitoi-suus. Laskeutuskokeiden tarkoituksena oli selvittää mahdollisuutta voisiko Nordkalk Oy:n rikastushiekka-altaille ohjata molempien tuotantolaitoksien jätevedet niin, että tästä ei aiheutuisi tuotantolaitoksien prosessissa ongel-mia. Tuloksellisesti laskeutuskokeilla saatiin selville, millä tavalla jätevedet laskeutuivat keskenään, mitkä olivat suurimmat kiintoainepitoisuudet, jotka rikastushiekka-altaille voidaan turvallisesti ohjata, jotta altailla tapahtuva laskeutuminen ei häiriintyisi. Jäännöspitoisuudet dispergointiaineesta oli tärkeä mittaustulos laskeutuskokeiden kannalta, mittauksella saatiin tietoa, kuinka paljon laskeutumisen jälkeen prosessivesi sisälsi dispergointiainetta." Top suggestions: jätevesi, Määri, karbonaatit, kemiallinen koostumus, tuotantolaitokset

"Yritys- ja mainosvideot ovat tulleet lähivuosina yhä enemmissä määrin varteenotettavammaksi tavaksi markkinoida yrityksen tuotteita ja palveluja. Internet-videoiden ja erilaisten mediaruutujen helppo lähestyttävyys ja liikkuvan kuvan uutuudenviehätys ovat luoneet videoille uudenlaiset markkinat. Tämä työ käy läpi yhden pienessä mainostoimistossa tiukalla aikataululla toteutetun lyhyen mainosvideon tekoprosessin, kaluston hankinnasta esituotantovaiheeseen ja lopullisen työn toimittamiseen. Työssä pohditaan myös käsiteltävän videoprojektin aikana tehtyjä ratkaisuja ja työskentelytapoja – miten vältyttäisiin toistamasta virheitä ja luotaisiin parempia menetelmiä pienten videotuotantojen tekoon." Top suggestions: Määri, yritykset, video, palvelut, mainostoimistot

Do you have any ideas why this unlikely term is so popular outcome of the model?

osma commented 3 years ago

I think the answer to this puzzle is in the example text you provided...these are the first sentences of each document, emphasis mine:

Joka päivä tuotetaan valtavia määriä tuotteisiin liittyviä tietoja.

Jätevesiä syntyy kaivosteollisuudessa yleensä suuria määriä, joten jätevesistä on päästävä eroon tavalla tai toisella.

Yritys- ja mainosvideot ovat tulleet lähivuosina yhä enemmissä määrin varteenotettavammaksi tavaksi markkinoida yrityksen tuotteita ja palveluja.

In short, some Annif algorithm (most likely the lexical MLLM algorithm) gets thrown off by a common word (määriä, määrin) that is close to the name of the province Määri. After lemmatization and case normalization, these look the same.

This is something that the NN ensemble might be able to correct, with the right training data.

kauttoj commented 3 years ago

Thanks. Yes, that was also my first guess. However, I was expecting this to happen with stemming, not lemmatization. This problem seem to affect mostly "NN ensemble" and "MLLM" models, while "Omikuji Bonsai" and "fastText" models are fine.

osma commented 3 years ago

However, I was expecting this to happen with stemming, not lemmatization.

You are right - lemmatization with Voikko should be better than this. And in fact it is, I just tested:

>>> from annif.analyzer.voikko import VoikkoAnalyzer
RDFLib Version: 5.0.0
>>> voikko = VoikkoAnalyzer('fi')
>>> voikko.tokenize_words('Määri')
['Määri']
>>> voikko.tokenize_words('Joka päivä tuotetaan valtavia määriä tuotteisiin liittyviä tietoja.')
['joka', 'päivä', 'tuottaa', 'valtava', 'määrä', 'tuote', 'liittyvä', 'tieto']

See that lemmatizing Määri gives a different result ('Määri') than määriä ('määrä').

There's something fishy going on here, maybe in the way the text is processed using CountVectorizer within MLLM. This needs further investigation.

This problem seem to affect mostly "NN ensemble" and "MLLM" models, while "Omikuji Bonsai" and "fastText" models are fine.

That makes sense - only lexical algorithms like MLLM suffer from this kind of problem. Omikuji and fastText are associative; they will only learn how to recognize a concept such as Määri (Moravia) if it appears in the training data, and then the recognition is not based on individual words but should be more robust (though homonyms may still cause trouble). The NN ensemble is a combination of the three other algorithms (MLLM, Omikuji, fastText) so it inherits the problem from MLLM.

osma commented 3 years ago

This seems to be a bug/weakness in libvoikko versions prior to 4.3. With libvoikko 4.1 or 4.2, analyzing the word määriä ('amounts') returns the base form Määri ('Moravia', the Czech province):

$ python3 -c "from voikko.libvoikko import Voikko; print(Voikko('fi').analyze('määriä')[0]['BASEFORM'])"
Määri
$ python3 -c "from voikko.libvoikko import Voikko; print(Voikko('fi').analyze('määrin')[0]['BASEFORM'])"
Määri

When using the newest libvoikko 4.3 (included in Ubuntu 20.04), this problem is gone:

$ python3 -c "from voikko.libvoikko import Voikko; print(Voikko('fi').analyze('määrin')[0]['BASEFORM'])"
määrä
$ python3 -c "from voikko.libvoikko import Voikko; print(Voikko('fi').analyze('määriä')[0]['BASEFORM'])"
määrä

Libvoikko 4.3 can still recognize Määri in the base form:

$ python3 -c "from voikko.libvoikko import Voikko; print(Voikko('fi').analyze('Määri')[0]['BASEFORM'])"
Määri

but not in the possessive or partitive forms:

$ python3 -c "from voikko.libvoikko import Voikko; print(Voikko('fi').analyze('Määrin')[0]['BASEFORM'])"
määrä
$ python3 -c "from voikko.libvoikko import Voikko; print(Voikko('fi').analyze('Määriä')[0]['BASEFORM'])"
määrä

We are still using libvoikko 4.2 in the Docker image for Annif, which is based on the Debian Buster distribution and is used to run api.annif.org and Finto AI. Until we upgrade, this problem will not go away; though it could help to train the NN ensemble with documents where this goes wrong. It could be useful to create a corpus from the Theseus repository so that we could use it for improving the NN ensemble.

osma commented 3 years ago

Correction: it's more likely that this depends on the version of the voikko-fi package, not libvoikko. The problem affects voikko-fi 2.2 (included in e.g. Debian buster) but not 2.3 (included in Ubuntu 20.04).