Tf-idf
TF-IDF:n ymmärtäminen
Vaikka bag of words -malli on yksinkertainen ja tehokas, se antaa liikaa painoarvoa yleisille termeille, 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 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 tapoja laskea tf- ja idf-arvot. Tarkastellaan yhtä yleistä vaihtoehtoa kummallekin:
Term Frequency (TF)
Kuvaa, kuinka usein termi esiintyy dokumentissa, mikä 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 kaikkien dokumenttien mää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ältetään nollalla jakaminen ja varmistetaan, että myös yleiset termit saavat nollasta poikkeavan IDF-arvon. Käytännössä IDF pienentää usein esiintyvien termien painoarvoa ja korostaa informatiivisempia, harvinaisempia termejä.
Ilman IDF-komponenttia TF-IDF yksinkertaistuisi pelkäksi termien laskemiseksi — eli bag of words -malliksi.
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 jokaisen sanan termifrekvenssit molemmissa dokumenteissa, minkä jälkeen lasketaan termien "a" ja "is" IDF-arvot.
Koska korpuksessa on vain kaksi dokumenttia, jokaisella termillä, joka esiintyy molemmissa dokumenteissa, on IDF-arvo 1, kun taas muilla termeillä IDF-arvo on ~1.406465.
Lopuksi voimme laskea jokaisen termin TF-IDF-arvot kummassakin 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 eripituisille 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 on seuraavanlainen:
d=(w1,w2,w3,...,wN)missä wi on termin i paino,
niin euklidinen normi on seuraavanlainen:
∥d∥2=w12+w22+w32+...+wN2ja normalisoitu vektori on seuraavanlainen:
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. Jaamme vain jokaisen TF-IDF-arvon dokumentissa kyseisen dokumentin TF-IDF-vektorin pituudella (tai magnitudilla). Tämä skaalaa vektorin niin, että sen pituudeksi tulee 1, mikä varmistaa vektorien yhdenmukaisen vertailun.
Soveltakaamme nyt L2-normalisointia TF-IDF-matriisiimme, jonka laskimme aiemmin:
Tuloksena saatu matriisi on täsmälleen sama kuin esimerkissä yhdessä aiemmista luvuista.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain why L2 normalization is important for comparing documents?
How does TF-IDF differ from the bag of words model in practice?
Can you walk me through a step-by-step example of calculating TF-IDF for a small dataset?
Awesome!
Completion rate improved to 3.45
Tf-idf
Pyyhkäise näyttääksesi valikon
TF-IDF:n ymmärtäminen
Vaikka bag of words -malli on yksinkertainen ja tehokas, se antaa liikaa painoarvoa yleisille termeille, 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 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 tapoja laskea tf- ja idf-arvot. Tarkastellaan yhtä yleistä vaihtoehtoa kummallekin:
Term Frequency (TF)
Kuvaa, kuinka usein termi esiintyy dokumentissa, mikä 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 kaikkien dokumenttien mää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ältetään nollalla jakaminen ja varmistetaan, että myös yleiset termit saavat nollasta poikkeavan IDF-arvon. Käytännössä IDF pienentää usein esiintyvien termien painoarvoa ja korostaa informatiivisempia, harvinaisempia termejä.
Ilman IDF-komponenttia TF-IDF yksinkertaistuisi pelkäksi termien laskemiseksi — eli bag of words -malliksi.
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 jokaisen sanan termifrekvenssit molemmissa dokumenteissa, minkä jälkeen lasketaan termien "a" ja "is" IDF-arvot.
Koska korpuksessa on vain kaksi dokumenttia, jokaisella termillä, joka esiintyy molemmissa dokumenteissa, on IDF-arvo 1, kun taas muilla termeillä IDF-arvo on ~1.406465.
Lopuksi voimme laskea jokaisen termin TF-IDF-arvot kummassakin 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 eripituisille 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 on seuraavanlainen:
d=(w1,w2,w3,...,wN)missä wi on termin i paino,
niin euklidinen normi on seuraavanlainen:
∥d∥2=w12+w22+w32+...+wN2ja normalisoitu vektori on seuraavanlainen:
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. Jaamme vain jokaisen TF-IDF-arvon dokumentissa kyseisen dokumentin TF-IDF-vektorin pituudella (tai magnitudilla). Tämä skaalaa vektorin niin, että sen pituudeksi tulee 1, mikä varmistaa vektorien yhdenmukaisen vertailun.
Soveltakaamme nyt L2-normalisointia TF-IDF-matriisiimme, jonka laskimme aiemmin:
Tuloksena saatu matriisi on täsmälleen sama kuin esimerkissä yhdessä aiemmista luvuista.
Kiitos palautteestasi!