logo

Forstå TF-IDF (Term Frequency-Inverse Document Frequency)

TF-IDF står for Term Frequency Inverse Document Frequency of records. Det kan defineres som beregningen av hvor relevant et ord i en serie eller korpus er for en tekst. Betydningen øker proporsjonalt med antall ganger i teksten et ord vises, men kompenseres av ordfrekvensen i korpuset (datasettet).

Terminologier:



    Term Frekvens: I dokument d representerer frekvensen antall forekomster av et gitt ord t. Derfor kan vi se at det blir mer aktuelt når et ord dukker opp i teksten, noe som er rasjonelt. Siden rekkefølgen av termer ikke er signifikant, kan vi bruke en vektor for å beskrive teksten i posen med termmodeller. For hvert spesifikt begrep i oppgaven er det en oppføring med verdien som termen frekvens.

Vekten av et begrep som forekommer i et dokument er ganske enkelt proporsjonalt med begrepsfrekvensen.

tf(t,d) = count of t in d / number of words in d>
    Dokumentfrekvens: Dette tester betydningen av teksten, som er veldig lik TF, i hele korpussamlingen. Den eneste forskjellen er at i dokument d er TF frekvenstelleren for et ledd t, mens df er antall forekomster i dokumentsettet N av leddet t. Med andre ord, antall papirer der ordet er til stede er DF.
df(t) = occurrence of t in documents>
    Invers dokumentfrekvens: Hovedsakelig tester det hvor relevant ordet er. Hovedmålet med søket er å finne de riktige postene som passer etterspørselen. Siden tf anser alle begreper like betydningsfulle, er det derfor ikke bare mulig å bruke begrepet frekvenser for å måle vekten av begrepet i oppgaven. Finn først dokumentfrekvensen til en term t ved å telle antall dokumenter som inneholder termen:
df(t) = N(t) where df(t) = Document frequency of a term t N(t) = Number of documents containing the term t>

Termhyppighet er antall forekomster av en term i bare et enkelt dokument; Selv om frekvensen av dokumentet er antallet separate dokumenter som begrepet forekommer i, avhenger det av hele korpuset. La oss nå se på definisjonen av frekvensen til det omvendte papiret. Ordets IDF er antall dokumenter i korpuset atskilt med frekvensen til teksten.

idf(t) = N/ df(t) = N/N(t)>

Det mer vanlige ordet er ment å være mindre betydningsfullt, men elementet (de fleste bestemte heltall) virker for strengt. Vi tar så logaritmen (med base 2) av den inverse frekvensen til papiret. Så hvis av begrepet t blir:



idf(t) = log(N/ df(t))>
    Beregning: Tf-idf er en av de beste beregningene for å bestemme hvor viktig et begrep er for en tekst i en serie eller et korpus. tf-idf er et vektingssystem som tildeler en vekt til hvert ord i et dokument basert på termfrekvensen (tf) og den gjensidige dokumentfrekvensen (tf) (idf). Ordene med høyere vektscore anses å være mer betydningsfulle.

Vanligvis består tf-idf-vekten av to ledd-

    Normalisert termfrekvens (tf) Invers dokumentfrekvens (idf)
tf-idf(t, d) = tf(t, d) * idf(t)>

I python kan tf-idf-verdier beregnes ved hjelp av TfidfVectorizer() metode i lære modul.

Syntaks:



sklearn.feature_extraction.text.TfidfVectorizer(input)

Parametere:

    input : Det refererer til parameterdokument som er bestått, det kan være et filnavn, en fil eller selve innholdet.

Attributter:

    ordforråd _ : Den returnerer en ordbok med termer som nøkler og verdier som funksjonsindekser. idf_ : Den returnerer invers dokumentfrekvensvektor for dokumentet som sendes som en parameter.

Returnerer:

    fit_transform(): Den returnerer en rekke termer sammen med tf-idf-verdier. get_feature_names(): Den returnerer en liste over funksjonsnavn.

Steg-for-steg tilnærming:

  • Importer moduler.

Python3




# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer>

>

>

  • Samle strenger fra dokumenter og lag et korpus med en samling strenger fra dokumentene d0, d1, og d2 .

Python3




# assign documents> d0>=> 'Geeks for geeks'> d1>=> 'Geeks'> d2>=> 'r2j'> # merge documents into a single corpus> string>=> [d0, d1, d2]>

>

>

  • Få tf-idf verdier fra fit_transform() metode.

Python3




# create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)>

>

spiss vinkel

>

  • Vis idf-verdier for ordene som finnes i korpuset.

Python3




# get idf values> print>(>' idf values:'>)> for> ele1, ele2>in> zip>(tfidf.get_feature_names(), tfidf.idf_):> >print>(ele1,>':'>, ele2)>

>

>

Produksjon:

  • Vis tf-idf-verdier sammen med indeksering.

Python3




# get indexing> print>(>' Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>' tf-idf value:'>)> print>(result)> # in matrix form> print>(>' tf-idf values in matrix form:'>)> print>(result.toarray())>

>

>

Produksjon:

kommando touch i linux

De resultat variabel består av unike ord samt tf-if-verdier. Det kan utdypes ved hjelp av bildet nedenfor:

Fra bildet ovenfor kan tabellen nedenfor genereres:

Dokument Ord Dokumentindeks Ordindeks tf-idf-verdi
d0 til 0 0 0,549
d0 nerder 0 1 0,8355
d1 nerder 1 1 1000
d2 r2j 2 2 1000

Nedenfor er noen eksempler som viser hvordan man beregner tf-idf-verdier for ord fra et korpus:

Eksempel 1: Nedenfor er det komplette programmet basert på tilnærmingen ovenfor:

Python3




# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> # assign documents> d0>=> 'Geeks for geeks'> d1>=> 'Geeks'> d2>=> 'r2j'> # merge documents into a single corpus> string>=> [d0, d1, d2]> # create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> # get idf values> print>(>' idf values:'>)> for> ele1, ele2>in> zip>(tfidf.get_feature_names(), tfidf.idf_):> >print>(ele1,>':'>, ele2)> # get indexing> print>(>' Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>' tf-idf value:'>)> print>(result)> # in matrix form> print>(>' tf-idf values in matrix form:'>)> print>(result.toarray())>

>

>

Produksjon:

Eksempel 2: Her beregnes tf-idf-verdier fra et korpus som har unike verdier.

Python3




# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> # assign documents> d0>=> 'geek1'> d1>=> 'geek2'> d2>=> 'geek3'> d3>=> 'geek4'> # merge documents into a single corpus> string>=> [d0, d1, d2, d3]> # create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> # get indexing> print>(>' Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>' tf-idf values:'>)> print>(result)>

kaller js-funksjonen fra html
>

>

Produksjon:

Eksempel 3: I dette programmet beregnes tf-idf-verdier fra et korpus som har lignende dokumenter.

Python3




# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> # assign documents> d0>=> 'Geeks for geeks!'> d1>=> 'Geeks for geeks!'> # merge documents into a single corpus> string>=> [d0, d1]> # create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> # get indexing> print>(>' Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>' tf-idf values:'>)> print>(result)>

>

>

Produksjon:

Eksempel 4: Nedenfor er programmet der vi prøver å beregne tf-idf-verdien til et enkelt ord nerder gjentas flere ganger i flere dokumenter.

Python3




# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> # assign corpus> string>=> [>'Geeks geeks'>]>*>5> # create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> # get indexing> print>(>' Word indexes:'>)> print>(tfidf.vocabulary_)> # display tf-idf values> print>(>' tf-idf values:'>)> print>(result)>

>

>

Produksjon: