TF-IDF
Pyyhkäise näyttääksesi valikon
TF-IDF:n ymmärtäminen
Vaikka bag of words -malli on yksinkertainen ja tehokas, se korostaa liikaa yleisiä termejä, mikä vaikeuttaa harvinaisempien mutta informatiivisempien sanojen tunnistamista. Tämän ratkaisemiseksi käytetään usein TF-IDF-mallia.
TF-IDF (term frequency-inverse document frequency) on tilastollinen mittari, joka kuvaa, kuinka tärkeä sana on tietylle dokumentille suhteessa laajempaan aineistoon.
Toisin kuin BoW, joka perustuu raakatermimääriin, TF-IDF ottaa huomioon sekä termin esiintymistiheyden dokumentissa että sen käänteisen esiintymistiheyden koko aineistossa. Tämä vähentää yleisten termien vaikutusta ja korostaa harvinaisempia, informatiivisempia sanoja.
Miten TF-IDF toimii
TF-IDF-arvo tietylle termille dokumentissa lasketaan seuraavasti:
tf-idf(t,d)=tf(t,d)×idf(t)missä:
- t on termi (sana tai n-grammi);
- d on dokumentti.
On olemassa useita eri tapoja laskea tf- ja idf-arvot. Tarkastellaan yhtä yleistä vaihtoehtoa kummallekin:
Term Frequency (TF)
Kuvaa, kuinka usein termi esiintyy dokumentissa, ja kertoo sen suhteellisesta merkityksestä kyseisessä dokumentissa. Samoin kuin bag of words -mallissa, käytetään usein yksinkertaista laskentaa:
tf(t,d)=count(t,d)Inverse Document Frequency (IDF)
Mittaa, kuinka harvinainen termi on koko korpuksessa. Se voidaan laskea luonnollisena logaritmina dokumenttien kokonaismäärän ja termiä sisältävien dokumenttien määrän suhteesta:
idf(t)=log(1+df(t)1+Ndocuments)+1Tässä kaavassa käytetään pehmennystä (lisätään 1), jotta vältytään nollalla jakamiselta ja varmistetaan, että myös yleiset termit saavat nollasta poikkeavan IDF-arvon. Käytännössä IDF pienentää usein esiintyvien termien painoarvoa ja korostaa harvinaisempia, informatiivisempia termejä.
Ilman IDF-komponenttia TF-IDF palautuisi pelkkään termien laskentaan — käytännössä bag of words -malliin.
TF-IDF:n laskeminen
Käydään läpi yksinkertainen esimerkki:
Tässä tapauksessa meillä on vain kaksi dokumenttia ja käytämme ainoastaan unigrammeja (yksittäisiä sanoja), joten laskelmat ovat suoraviivaisia. Aloitamme laskemalla termin esiintymistiheydet jokaiselle sanalle molemmissa dokumenteissa, minkä jälkeen lasketaan termien "a" ja "is" IDF-arvot.
Koska korpuksessa on vain kaksi dokumenttia, kaikilla termeillä, jotka esiintyvät molemmissa dokumenteissa, on IDF-arvo 1, kun taas muilla termeillä IDF-arvo on ~1.406465.
Lopuksi voidaan laskea kunkin termin TF-IDF-arvot jokaisessa dokumentissa kertomalla TF IDF:llä, jolloin saadaan seuraava matriisi:
L2-normalisointi
Tuloksena saadut TF-IDF-vektorit voivat vaihdella merkittävästi suuruudeltaan, erityisesti suurissa aineistoissa, johtuen dokumenttien pituuseroista. Tämän vuoksi L2-normalisointia käytetään yleisesti — kaikkien vektorien skaalaamiseksi yhtenäiseen pituuteen, mikä mahdollistaa tasapuoliset ja puolueettomat vertailut eri pituisille dokumenteille.
L2-normalisointi, joka tunnetaan myös nimellä euklidinen normalisointi, on yksittäisiin vektoreihin sovellettava prosessi, jossa niiden arvot säädetään siten, että vektorin pituudeksi tulee 1.
L2-normalisointi tehdään jakamalla jokainen vektorin termi vektorin euklidisella normilla.
Jos dokumenttivektori näyttää tältä:
d=(w1,w2,w3,...,wN)missä wi on termin i paino,
niin euklidinen normi näyttää tältä:
∥d∥2=w12+w22+w32+...+wN2ja normalisoitu vektori näyttää tältä:
dnorm=(∥d∥2w1,∥d∥2w2,∥d∥2w3,...,∥d∥2wN)Näin L2-normalisointi toimii kaksiulotteiselle vektorille (dokumentti, jossa on 2 termiä):
Älä huoli, vaikka kaavat näyttävät monimutkaisilta. Käytännössä jaamme jokaisen TF-IDF-arvon dokumentissa dokumentin TF-IDF-vektorin pituudella (tai magnitudilla). Tämä skaalaa vektorin niin, että sen pituudeksi tulee 1, mikä mahdollistaa vektorien johdonmukaisen vertailun.
Soveltakaamme nyt L2-normalisointia TF-IDF-matriisiin, jonka laskimme aiemmin:
Tuloksena saatu matriisi on täsmälleen sama kuin esimerkkinä yhdessä aiemmista luvuista.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme