Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära TF-IDF | Grundläggande Textmodeller
Introduktion till NLP med Python

TF-IDF

Svep för att visa menyn

Förståelse av TF-IDF

Även om bag of words-modellen är enkel och effektiv tenderar den att överskatta vanliga termer, vilket gör det svårare att identifiera mindre frekventa men mer informativa ord. För att hantera detta används ofta TF-IDF-modellen istället.

Note
Definition

TF-IDF (term frequency-inverse document frequency) är ett statistiskt mått som visar hur viktig ett ord är för ett specifikt dokument i förhållande till en större korpus.

Till skillnad från BoW, som bygger på råa termfrekvenser, tar TF-IDF hänsyn till både en terms frekvens inom ett dokument och dess omvända frekvens i hela korpusen. Detta minskar påverkan av vanliga termer och lyfter fram ovanligare, mer informativa ord.

Hur TF-IDF fungerar

TF-IDF-poängen för ett ord i ett dokument beräknas som:

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)

Där:

  • tt är termen (ett ord eller n-gram);
  • dd är dokumentet.
TF-IDF-formler

Det finns många varianter för att beräkna tf\operatorname{tf} och idf\operatorname{idf}-värden. Här är ett vanligt alternativ för vardera:

Termfrekvens (TF)

Anger hur ofta en term förekommer i ett dokument och fångar dess relativa betydelse inom det dokumentet. Liknande bag of words-modellen används ofta en enkel räkning:

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

Omvänd dokumentfrekvens (IDF)

Mäter hur ovanlig en term är i hela korpuset. Det kan beräknas som den naturliga logaritmen av kvoten mellan det totala antalet dokument och antalet dokument som innehåller termen:

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

Denna formel använder utjämning (adderar 1) för att undvika division med noll och säkerställer att även vanliga termer får ett IDF-värde större än noll. IDF nedtonar frekventa termer och lyfter fram mer informativa, ovanliga termer.

Utan IDF-komponenten skulle TF-IDF reduceras till en enkel termräkning — vilket i princip motsvarar en bag of words-modell.

Beräkning av TF-IDF

En genomgång av ett enkelt exempel:

TF-IDF-beräkning

I detta fall har vi endast två dokument och använder enbart unigram (enskilda ord), vilket gör beräkningarna enkla. Vi börjar med att räkna ut termfrekvensen för varje ord i båda dokumenten, följt av IDF-värdena för termerna "a" och "is".

Note
Notering

Eftersom det endast finns två dokument i vårt korpus kommer varje term som förekommer i båda dokumenten att ha ett IDF-värde på 1, medan andra termer kommer att ha ett IDF-värde på ~1.406465.

Slutligen kan vi beräkna TF-IDF-värdena för varje term i varje dokument genom att multiplicera TF med IDF, vilket ger följande matris:

TF-IDF-matris

L2-normalisering

De resulterande TF-IDF-vektorerna kan variera avsevärt i storlek, särskilt i stora korpusar, på grund av skillnader i dokumentlängd. Därför tillämpas ofta L2-normalisering — för att skala alla vektorer till en enhetlig längd, vilket möjliggör rättvisa och opartiska jämförelser av dokument med olika längd.

Note
Läs mer

L2-normalisering, även kallad euklidisk normalisering, är en process som tillämpas på individuella vektorer och justerar deras värden så att vektorns längd blir 1.

L2-normalisering utförs genom att varje term i vektorn divideras med vektorns euklidiska norm.

Om dokumentvektorn ser ut så här:

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

där wiw_i är vikten för term ii,

så ser den euklidiska normen ut så här:

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

och den normaliserade vektorn ser ut så här:

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

Så här fungerar L2-normalisering för en tvådimensionell vektor (ett dokument med 2 termer):

L2-normalisering
Note
Notering

Oroa dig inte om formlerna ser komplicerade ut. Allt vi gör är att dividera varje TF-IDF-värde i ett dokument med längden (eller magnituden) av dokumentets TF-IDF-vektor. Detta skalar vektorn så att dess längd blir 1, vilket säkerställer konsekventa jämförelser av vektorer.

Låt oss nu tillämpa L2-normalisering på vår TF-IDF-matris, som vi beräknade ovan:

TF-IDF-matris

Den resulterande matrisen är exakt samma som vi hade som exempel i ett av de tidigare kapitlen.

question mark

Vad är den viktigaste fördelen med TF-IDF-modellen jämfört med BoW-modellen?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 6

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

TF-IDF

Förståelse av TF-IDF

Även om bag of words-modellen är enkel och effektiv tenderar den att överskatta vanliga termer, vilket gör det svårare att identifiera mindre frekventa men mer informativa ord. För att hantera detta används ofta TF-IDF-modellen istället.

Note
Definition

TF-IDF (term frequency-inverse document frequency) är ett statistiskt mått som visar hur viktig ett ord är för ett specifikt dokument i förhållande till en större korpus.

Till skillnad från BoW, som bygger på råa termfrekvenser, tar TF-IDF hänsyn till både en terms frekvens inom ett dokument och dess omvända frekvens i hela korpusen. Detta minskar påverkan av vanliga termer och lyfter fram ovanligare, mer informativa ord.

Hur TF-IDF fungerar

TF-IDF-poängen för ett ord i ett dokument beräknas som:

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)

Där:

  • tt är termen (ett ord eller n-gram);
  • dd är dokumentet.
TF-IDF-formler

Det finns många varianter för att beräkna tf\operatorname{tf} och idf\operatorname{idf}-värden. Här är ett vanligt alternativ för vardera:

Termfrekvens (TF)

Anger hur ofta en term förekommer i ett dokument och fångar dess relativa betydelse inom det dokumentet. Liknande bag of words-modellen används ofta en enkel räkning:

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

Omvänd dokumentfrekvens (IDF)

Mäter hur ovanlig en term är i hela korpuset. Det kan beräknas som den naturliga logaritmen av kvoten mellan det totala antalet dokument och antalet dokument som innehåller termen:

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

Denna formel använder utjämning (adderar 1) för att undvika division med noll och säkerställer att även vanliga termer får ett IDF-värde större än noll. IDF nedtonar frekventa termer och lyfter fram mer informativa, ovanliga termer.

Utan IDF-komponenten skulle TF-IDF reduceras till en enkel termräkning — vilket i princip motsvarar en bag of words-modell.

Beräkning av TF-IDF

En genomgång av ett enkelt exempel:

TF-IDF-beräkning

I detta fall har vi endast två dokument och använder enbart unigram (enskilda ord), vilket gör beräkningarna enkla. Vi börjar med att räkna ut termfrekvensen för varje ord i båda dokumenten, följt av IDF-värdena för termerna "a" och "is".

Note
Notering

Eftersom det endast finns två dokument i vårt korpus kommer varje term som förekommer i båda dokumenten att ha ett IDF-värde på 1, medan andra termer kommer att ha ett IDF-värde på ~1.406465.

Slutligen kan vi beräkna TF-IDF-värdena för varje term i varje dokument genom att multiplicera TF med IDF, vilket ger följande matris:

TF-IDF-matris

L2-normalisering

De resulterande TF-IDF-vektorerna kan variera avsevärt i storlek, särskilt i stora korpusar, på grund av skillnader i dokumentlängd. Därför tillämpas ofta L2-normalisering — för att skala alla vektorer till en enhetlig längd, vilket möjliggör rättvisa och opartiska jämförelser av dokument med olika längd.

Note
Läs mer

L2-normalisering, även kallad euklidisk normalisering, är en process som tillämpas på individuella vektorer och justerar deras värden så att vektorns längd blir 1.

L2-normalisering utförs genom att varje term i vektorn divideras med vektorns euklidiska norm.

Om dokumentvektorn ser ut så här:

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

där wiw_i är vikten för term ii,

så ser den euklidiska normen ut så här:

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

och den normaliserade vektorn ser ut så här:

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

Så här fungerar L2-normalisering för en tvådimensionell vektor (ett dokument med 2 termer):

L2-normalisering
Note
Notering

Oroa dig inte om formlerna ser komplicerade ut. Allt vi gör är att dividera varje TF-IDF-värde i ett dokument med längden (eller magnituden) av dokumentets TF-IDF-vektor. Detta skalar vektorn så att dess längd blir 1, vilket säkerställer konsekventa jämförelser av vektorer.

Låt oss nu tillämpa L2-normalisering på vår TF-IDF-matris, som vi beräknade ovan:

TF-IDF-matris

Den resulterande matrisen är exakt samma som vi hade som exempel i ett av de tidigare kapitlen.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 6
some-alt