Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer TF-IDF | Basis Tekstmodellen
Introductie tot NLP met Python

TF-IDF

Veeg om het menu te tonen

Inzicht in TF-IDF

Hoewel het bag of words-model eenvoudig en effectief is, heeft het de neiging om veelvoorkomende termen te overschatten, waardoor het moeilijker wordt om minder frequente maar meer informatieve woorden te identificeren. Om dit te verhelpen, wordt vaak het TF-IDF-model gebruikt.

Note
Definitie

TF-IDF (term frequency-inverse document frequency) is een statistische maat die aangeeft hoe belangrijk een woord is voor een specifiek document ten opzichte van een grotere corpus.

In tegenstelling tot BoW, dat vertrouwt op ruwe termfrequenties, houdt TF-IDF rekening met zowel de frequentie van een term binnen een document als de inverse frequentie over het gehele corpus. Dit vermindert de invloed van veelvoorkomende termen en benadrukt zeldzamere, meer informatieve woorden.

Hoe TF-IDF werkt

De TF-IDF-score voor een term in een document wordt als volgt berekend:

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)

waarbij:

  • tt de term is (een woord of n-gram);
  • dd het document is.
TF-IDF-formules

Er zijn veel varianten voor het berekenen van de waarden van tf\operatorname{tf} en idf\operatorname{idf}. Hier volgt een veelgebruikte optie voor elk:

Termfrequentie (TF)

Geeft aan hoe vaak een term voorkomt in een document, waarmee het relatieve belang binnen dat document wordt weergegeven. Vergelijkbaar met het bag of words-model wordt vaak een eenvoudige telling gebruikt:

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

Omgekeerde documentfrequentie (IDF)

Meet hoe zeldzaam een term is in de gehele corpus. Dit kan worden berekend als de natuurlijke logaritme van de verhouding tussen het totale aantal documenten en het aantal documenten waarin de term voorkomt:

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

Deze formule gebruikt smoothing (het toevoegen van 1) om deling door nul te voorkomen en zorgt ervoor dat zelfs veelvoorkomende termen een niet-nul IDF-score krijgen. In feite verlaagt IDF het gewicht van frequente termen en benadrukt het meer informatieve, zeldzame termen.

Zonder de IDF-component zou TF-IDF terugvallen op een eenvoudige termtelling — feitelijk een bag of words-model.

TF-IDF berekenen

Een eenvoudig voorbeeld:

TF-IDF-berekening

In dit geval zijn er slechts twee documenten en gebruiken we alleen unigrammen (individuele woorden), waardoor de berekeningen eenvoudig zijn. Eerst worden de termfrequenties voor elk woord in beide documenten berekend, gevolgd door de IDF-waarden voor de termen "a" en "is".

Note
Opmerking

Aangezien er slechts twee documenten in onze corpus zijn, krijgt elke term die in beide documenten voorkomt een IDF-waarde van 1, terwijl andere termen een IDF-waarde van ~1.406465 krijgen.

Ten slotte kunnen we de TF-IDF-waarden voor elke term in elk document berekenen door TF met IDF te vermenigvuldigen, wat resulteert in de volgende matrix:

TF-IDF-matrix

L2-normalisatie

De resulterende TF-IDF-vectoren kunnen aanzienlijk verschillen in grootte, vooral in grote corpora, door verschillen in documentlengte. Daarom wordt L2-normalisatie vaak toegepast — om alle vectoren te schalen naar een gelijke lengte, waardoor eerlijke en onbevooroordeelde vergelijkingen van documenten met verschillende lengtes mogelijk zijn.

Note
Meer leren

L2-normalisatie, ook bekend als Euclidische normalisatie, is een proces dat wordt toegepast op individuele vectoren waarbij hun waarden worden aangepast zodat de lengte van de vector gelijk is aan 1.

De L2-normalisatie wordt uitgevoerd door elk element in de vector te delen door de Euclidische norm van de vector.

Als de documentvector er als volgt uitziet:

d=(w1,w2,w3,...,wN)d = (w_1, w_2, w_3, ..., w_N)

waarbij wiw_i het gewicht is van term ii,

dan ziet de Euclidische norm er als volgt uit:

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

en de genormaliseerde vector ziet er als volgt uit:

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})

Hier volgt hoe L2-normalisatie werkt voor een 2-dimensionale vector (een document met 2 termen):

L2-normalisatie
Note
Opmerking

Maak je geen zorgen als de formules complex lijken. We delen simpelweg elke TF-IDF-waarde in een document door de lengte (of grootte) van de TF-IDF-vector van dat document. Hierdoor wordt de vector geschaald zodat de lengte 1 wordt, wat zorgt voor consistente vergelijkingen van vectoren.

Laten we nu L2-normalisatie toepassen op onze TF-IDF-matrix, die we hierboven hebben berekend:

TF-IDF-matrix

De resulterende matrix is precies wat we als voorbeeld hadden in een van de vorige hoofdstukken.

question mark

Wat is het belangrijkste voordeel van het TF-IDF-model in vergelijking met het BoW-model?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 6

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

TF-IDF

Inzicht in TF-IDF

Hoewel het bag of words-model eenvoudig en effectief is, heeft het de neiging om veelvoorkomende termen te overschatten, waardoor het moeilijker wordt om minder frequente maar meer informatieve woorden te identificeren. Om dit te verhelpen, wordt vaak het TF-IDF-model gebruikt.

Note
Definitie

TF-IDF (term frequency-inverse document frequency) is een statistische maat die aangeeft hoe belangrijk een woord is voor een specifiek document ten opzichte van een grotere corpus.

In tegenstelling tot BoW, dat vertrouwt op ruwe termfrequenties, houdt TF-IDF rekening met zowel de frequentie van een term binnen een document als de inverse frequentie over het gehele corpus. Dit vermindert de invloed van veelvoorkomende termen en benadrukt zeldzamere, meer informatieve woorden.

Hoe TF-IDF werkt

De TF-IDF-score voor een term in een document wordt als volgt berekend:

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)

waarbij:

  • tt de term is (een woord of n-gram);
  • dd het document is.
TF-IDF-formules

Er zijn veel varianten voor het berekenen van de waarden van tf\operatorname{tf} en idf\operatorname{idf}. Hier volgt een veelgebruikte optie voor elk:

Termfrequentie (TF)

Geeft aan hoe vaak een term voorkomt in een document, waarmee het relatieve belang binnen dat document wordt weergegeven. Vergelijkbaar met het bag of words-model wordt vaak een eenvoudige telling gebruikt:

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

Omgekeerde documentfrequentie (IDF)

Meet hoe zeldzaam een term is in de gehele corpus. Dit kan worden berekend als de natuurlijke logaritme van de verhouding tussen het totale aantal documenten en het aantal documenten waarin de term voorkomt:

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

Deze formule gebruikt smoothing (het toevoegen van 1) om deling door nul te voorkomen en zorgt ervoor dat zelfs veelvoorkomende termen een niet-nul IDF-score krijgen. In feite verlaagt IDF het gewicht van frequente termen en benadrukt het meer informatieve, zeldzame termen.

Zonder de IDF-component zou TF-IDF terugvallen op een eenvoudige termtelling — feitelijk een bag of words-model.

TF-IDF berekenen

Een eenvoudig voorbeeld:

TF-IDF-berekening

In dit geval zijn er slechts twee documenten en gebruiken we alleen unigrammen (individuele woorden), waardoor de berekeningen eenvoudig zijn. Eerst worden de termfrequenties voor elk woord in beide documenten berekend, gevolgd door de IDF-waarden voor de termen "a" en "is".

Note
Opmerking

Aangezien er slechts twee documenten in onze corpus zijn, krijgt elke term die in beide documenten voorkomt een IDF-waarde van 1, terwijl andere termen een IDF-waarde van ~1.406465 krijgen.

Ten slotte kunnen we de TF-IDF-waarden voor elke term in elk document berekenen door TF met IDF te vermenigvuldigen, wat resulteert in de volgende matrix:

TF-IDF-matrix

L2-normalisatie

De resulterende TF-IDF-vectoren kunnen aanzienlijk verschillen in grootte, vooral in grote corpora, door verschillen in documentlengte. Daarom wordt L2-normalisatie vaak toegepast — om alle vectoren te schalen naar een gelijke lengte, waardoor eerlijke en onbevooroordeelde vergelijkingen van documenten met verschillende lengtes mogelijk zijn.

Note
Meer leren

L2-normalisatie, ook bekend als Euclidische normalisatie, is een proces dat wordt toegepast op individuele vectoren waarbij hun waarden worden aangepast zodat de lengte van de vector gelijk is aan 1.

De L2-normalisatie wordt uitgevoerd door elk element in de vector te delen door de Euclidische norm van de vector.

Als de documentvector er als volgt uitziet:

d=(w1,w2,w3,...,wN)d = (w_1, w_2, w_3, ..., w_N)

waarbij wiw_i het gewicht is van term ii,

dan ziet de Euclidische norm er als volgt uit:

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

en de genormaliseerde vector ziet er als volgt uit:

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})

Hier volgt hoe L2-normalisatie werkt voor een 2-dimensionale vector (een document met 2 termen):

L2-normalisatie
Note
Opmerking

Maak je geen zorgen als de formules complex lijken. We delen simpelweg elke TF-IDF-waarde in een document door de lengte (of grootte) van de TF-IDF-vector van dat document. Hierdoor wordt de vector geschaald zodat de lengte 1 wordt, wat zorgt voor consistente vergelijkingen van vectoren.

Laten we nu L2-normalisatie toepassen op onze TF-IDF-matrix, die we hierboven hebben berekend:

TF-IDF-matrix

De resulterende matrix is precies wat we als voorbeeld hadden in een van de vorige hoofdstukken.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 6
some-alt