logo

Pochopenie TF-IDF (pojemová frekvencia-inverzná frekvencia dokumentu)

TF-IDF znamená Term Frequency Inverse Document Frequency of records. Dá sa definovať ako výpočet toho, nakoľko relevantné je slovo v rade alebo korpuse pre text. Význam sa zvyšuje úmerne s počtom výskytov slova v texte, ale je kompenzovaný frekvenciou slov v korpuse (súbore údajov).

Terminológie:



    Termín Frekvencia: V dokumente d, frekvencia predstavuje počet výskytov daného slova t. Preto môžeme vidieť, že sa stáva relevantnejším, keď sa v texte objaví slovo, ktoré je racionálne. Keďže zoradenie pojmov nie je podstatné, môžeme použiť vektor na opis textu v taške pojmových modelov. Pre každý konkrétny výraz v článku je položka s hodnotou frekvencie výrazu.

Váha výrazu, ktorý sa vyskytuje v dokumente, je jednoducho úmerná frekvencii výrazu.

tf(t,d) = count of t in d / number of words in d>
    Frekvencia dokumentu: Testuje význam textu, ktorý je veľmi podobný TF, v celej kolekcii korpusov. Jediný rozdiel je v tom, že v dokumente d je TF frekvenčný čítač pre člen t, zatiaľ čo df je počet výskytov v súbore dokumentov N pre člen t. Inými slovami, počet dokumentov, v ktorých sa slovo nachádza, je DF.
df(t) = occurrence of t in documents>
    Inverzná frekvencia dokumentu: Predovšetkým testuje, nakoľko je slovo relevantné. Hlavným cieľom vyhľadávania je nájsť vhodné záznamy, ktoré zodpovedajú dopytu. Keďže tf považuje všetky termíny za rovnako významné, nie je možné použiť iba termín frekvencie na meranie váhy termínu v príspevku. Najprv nájdite frekvenciu dokumentu pre výraz t spočítaním počtu dokumentov obsahujúcich daný výraz:
df(t) = N(t) where df(t) = Document frequency of a term t N(t) = Number of documents containing the term t>

Frekvencia výrazov je počet výskytov výrazu iba v jednom dokumente; frekvencia dokumentu je síce počet samostatných dokumentov, v ktorých sa daný pojem vyskytuje, ale závisí od celého korpusu. Teraz sa pozrime na definíciu frekvencie inverzného papiera. IDF slova je počet dokumentov v korpuse oddelený frekvenciou textu.

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

Bežnejšie slovo by sa malo považovať za menej významné, ale prvok (najpresnejšie celé čísla) sa zdá byť príliš tvrdý. Potom vezmeme logaritmus (so základom 2) inverznej frekvencie papiera. Takže if z výrazu t sa stáva:



idf(t) = log(N/ df(t))>
    Výpočet: Tf-idf je jednou z najlepších metrík na určenie významu výrazu pre text v sérii alebo korpuse. tf-idf je systém váženia, ktorý priraďuje váhu každému slovu v dokumente na základe jeho časovej frekvencie (tf) a recipročnej frekvencie dokumentu (tf) (idf). Slová s vyšším skóre hmotnosti sa považujú za významnejšie.

Váha tf-idf sa zvyčajne skladá z dvoch výrazov –

    Normalizovaná termínová frekvencia (tf) Inverzná dokumentová frekvencia (idf)
tf-idf(t, d) = tf(t, d) * idf(t)>

V pythone možno hodnoty tf-idf vypočítať pomocou TfidfVectorizer() metóda v sklearn modul.

Syntax:



sklearn.feature_extraction.text.TfidfVectorizer(vstup)

Parametre:

    vstup : Odkazuje na odovzdaný parameter dokumentu, môže to byť názov súboru, súbor alebo samotný obsah.

Vlastnosti:

    slovná zásoba _ : Vráti slovník pojmov ako kľúče a hodnoty ako indexy vlastností. idf_ : Vracia inverzný vektor frekvencie dokumentu odovzdaný ako parameter.

Vrátenie:

    fit_transform(): Vráti pole výrazov spolu s hodnotami tf-idf. get_feature_names(): Vráti zoznam názvov funkcií.

Postup krok za krokom:

  • Import modulov.

Python3




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

>

>

  • Zbierajte reťazce z dokumentov a vytvorte korpus so zbierkou reťazcov z dokumentov d0, d1, a d2 .

Python3




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

>

>

  • Získajte hodnoty tf-idf z fit_transform() metóda.

Python3




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

>

java do while príklad

>

  • Zobraziť hodnoty idf slov prítomných v korpuse.

Python3




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

>

>

Výkon:

  • Zobrazte hodnoty tf-idf spolu s indexovaním.

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

>

>

Výkon:

reťazec v int

The výsledok premenná pozostáva z jedinečných slov, ako aj z hodnôt tf-if. Dá sa to vypracovať pomocou obrázku nižšie:

Z obrázku vyššie je možné vygenerovať tabuľku nižšie:

Dokument Slovo Index dokumentov Index slov hodnota tf-idf
d0 pre 0 0 0,549
d0 geekov 0 1 0,8355
d1 geekov 1 1 1 000
d2 r2j 2 2 1 000

Nižšie je uvedených niekoľko príkladov, ktoré zobrazujú, ako vypočítať hodnoty tf-idf slov z korpusu:

Príklad 1: Nižšie je uvedený kompletný program založený na vyššie uvedenom prístupe:

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

>

>

Výkon:

Príklad 2: Tu sú hodnoty tf-idf vypočítané z korpusu s jedinečnými hodnotami.

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

>

>

Výkon:

Príklad 3: V tomto programe sú hodnoty tf-idf vypočítané z korpusu s podobnými dokumentmi.

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

>

>

Výkon:

Príklad 4: Nižšie je uvedený program, v ktorom sa pokúsime vypočítať hodnotu tf-idf jedného slova geekov sa viackrát opakuje vo viacerých dokumentoch.

testovanie výkonu

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

>

>

Výkon: