Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Tf-idf | Perustekstin Mallit
Johdatus NLP:hen

bookTf-idf

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.

Note
Määritelmä

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.

Kuinka TF-IDF toimii

TF-IDF-arvo termille dokumentissa lasketaan seuraavasti:

tf-idf(t,d)=tf(t,d)×idf(t)\def\tfidf{\operatorname{tf-idf}} \def\tf{\operatorname{tf}} \def\idf{\operatorname{idf}} \tfidf(t, d) = \tf(t, d) \times \idf(t)

missä:

  • tt on termi (sana tai n-grammi);
  • dd on dokumentti.

On olemassa useita tapoja laskea tf\operatorname{tf}- ja idf\operatorname{idf}-arvot. Tarkastellaan yhtä yleistä vaihtoehtoa kummallekin:

Termien esiintymistiheys (TF)

Kuvaa, kuinka usein termi esiintyy dokumentissa, ja mittaa sen suhteellista merkitystä kyseisessä dokumentissa. Samoin kuin bag of words -mallissa, käytetään usein yksinkertaista laskentaa:

tf(t,d)=count(t,d)\def\tf{\operatorname{tf}} \def\count{\operatorname{count}} \tf(t, d) = \count(t, d)

Käänteinen dokumenttitiheys (IDF)

Mittaa, kuinka harvinainen termi on koko aineistossa. Se voidaan laskea luonnollisena logaritmina kaikkien dokumenttien määrän ja termiä sisältävien dokumenttien määrän suhteesta:

idf(t)=log(1+Ndocuments1+df(t))+1\def\idf{\operatorname{idf}} \def\df{\operatorname{df}} \idf(t) = \log\Bigl(\frac{1 + N_{documents}}{1 + \df(t)}\Bigr) + 1

Tässä kaavassa käytetään pehmennystä (lisätään 1), jotta nollalla jakaminen vältetään ja jotta myös yleiset termit saavat ei-nolla 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 yksinkertaisia. Aloitamme laskemalla kunkin sanan termifrekvenssit molemmissa dokumenteissa, minkä jälkeen lasketaan termien "a" ja "is" IDF-arvot.

Note
Huomio

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 kunkin termin TF-IDF-arvot molemmissa dokumenteissa kertomalla TF IDF:llä, jolloin saadaan seuraava matriisi:

L2-normalisointi

Tuloksena saadut TF-IDF-vektorit voivat vaihdella merkittävästi suuruudeltaan, erityisesti suurissa tekstikorpuksissa, 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.

Note
Lisätietoa

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)d = (w_1, w_2, w_3, ..., w_N)

missä wiw_i on termin ii paino,

niin euklidinen normi näyttää tältä:

d2=w12+w22+w32+...+wN2\|d\|_2 = \sqrt{w^2_1 + w^2_2 + w^2_3 + ... + w^2_N}

ja normalisoitu vektori näyttää tältä:

dnorm=(w1d2,w2d2,w3d2,...,wNd2)d_{norm} = \Bigl(\frac{w_1}{\|d\|_2}, \frac{w_2}{\|d\|_2}, \frac{w_3}{\|d\|_2}, ..., \frac{w_N}{\|d\|_2})

Näin L2-normalisointi toimii kaksiulotteiselle vektorille (dokumentti, jossa on 2 termiä):

Note
Huomio

Älä huoli, vaikka kaavat näyttävät monimutkaisilta. Kaikki, mitä teemme, on jakaa jokainen TF-IDF-arvo dokumentissa 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 oleva matriisi on täsmälleen sama kuin esimerkissä, jonka käsittelimme aiemmissa luvuissa.

question mark

Mikä on TF-IDF-mallin keskeinen etu verrattuna BoW-malliin?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 3.45

bookTf-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.

Note
Määritelmä

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.

Kuinka TF-IDF toimii

TF-IDF-arvo termille dokumentissa lasketaan seuraavasti:

tf-idf(t,d)=tf(t,d)×idf(t)\def\tfidf{\operatorname{tf-idf}} \def\tf{\operatorname{tf}} \def\idf{\operatorname{idf}} \tfidf(t, d) = \tf(t, d) \times \idf(t)

missä:

  • tt on termi (sana tai n-grammi);
  • dd on dokumentti.

On olemassa useita tapoja laskea tf\operatorname{tf}- ja idf\operatorname{idf}-arvot. Tarkastellaan yhtä yleistä vaihtoehtoa kummallekin:

Termien esiintymistiheys (TF)

Kuvaa, kuinka usein termi esiintyy dokumentissa, ja mittaa sen suhteellista merkitystä kyseisessä dokumentissa. Samoin kuin bag of words -mallissa, käytetään usein yksinkertaista laskentaa:

tf(t,d)=count(t,d)\def\tf{\operatorname{tf}} \def\count{\operatorname{count}} \tf(t, d) = \count(t, d)

Käänteinen dokumenttitiheys (IDF)

Mittaa, kuinka harvinainen termi on koko aineistossa. Se voidaan laskea luonnollisena logaritmina kaikkien dokumenttien määrän ja termiä sisältävien dokumenttien määrän suhteesta:

idf(t)=log(1+Ndocuments1+df(t))+1\def\idf{\operatorname{idf}} \def\df{\operatorname{df}} \idf(t) = \log\Bigl(\frac{1 + N_{documents}}{1 + \df(t)}\Bigr) + 1

Tässä kaavassa käytetään pehmennystä (lisätään 1), jotta nollalla jakaminen vältetään ja jotta myös yleiset termit saavat ei-nolla 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 yksinkertaisia. Aloitamme laskemalla kunkin sanan termifrekvenssit molemmissa dokumenteissa, minkä jälkeen lasketaan termien "a" ja "is" IDF-arvot.

Note
Huomio

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 kunkin termin TF-IDF-arvot molemmissa dokumenteissa kertomalla TF IDF:llä, jolloin saadaan seuraava matriisi:

L2-normalisointi

Tuloksena saadut TF-IDF-vektorit voivat vaihdella merkittävästi suuruudeltaan, erityisesti suurissa tekstikorpuksissa, 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.

Note
Lisätietoa

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)d = (w_1, w_2, w_3, ..., w_N)

missä wiw_i on termin ii paino,

niin euklidinen normi näyttää tältä:

d2=w12+w22+w32+...+wN2\|d\|_2 = \sqrt{w^2_1 + w^2_2 + w^2_3 + ... + w^2_N}

ja normalisoitu vektori näyttää tältä:

dnorm=(w1d2,w2d2,w3d2,...,wNd2)d_{norm} = \Bigl(\frac{w_1}{\|d\|_2}, \frac{w_2}{\|d\|_2}, \frac{w_3}{\|d\|_2}, ..., \frac{w_N}{\|d\|_2})

Näin L2-normalisointi toimii kaksiulotteiselle vektorille (dokumentti, jossa on 2 termiä):

Note
Huomio

Älä huoli, vaikka kaavat näyttävät monimutkaisilta. Kaikki, mitä teemme, on jakaa jokainen TF-IDF-arvo dokumentissa 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 oleva matriisi on täsmälleen sama kuin esimerkissä, jonka käsittelimme aiemmissa luvuissa.

question mark

Mikä on TF-IDF-mallin keskeinen etu verrattuna BoW-malliin?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 6
some-alt