TF-IDF znamená Term Frequency Inverse Document Frequency of records. Lze jej definovat jako výpočet toho, jak relevantní je slovo v řadě nebo korpusu pro text. Význam se zvyšuje úměrně tomu, kolikrát se v textu slovo objeví, ale je kompenzován četností slov v korpusu (souboru dat).
Terminologie:
- Termín Frekvence: V dokumentu d, frekvence představuje počet výskytů daného slova t. Proto můžeme vidět, že se stává relevantnějším, když se v textu objeví slovo, které je racionální. Vzhledem k tomu, že řazení termínů není podstatné, můžeme použít vektor k popisu textu v sáčku termínových modelů. U každého konkrétního termínu v příspěvku je položka, jejíž hodnotou je termín frekvence.
Váha termínu, který se vyskytuje v dokumentu, je jednoduše úměrná frekvenci termínu.
tf(t,d) = count of t in d / number of words in d>
- Document Frequency: Testuje význam textu, který je velmi podobný TF, v celé kolekci korpusů. Jediný rozdíl je v tom, že v dokumentu d je TF frekvenční čítač pro člen t, zatímco df je počet výskytů v sadě dokumentů N pro člen t. Jinými slovy, počet papírů, ve kterých je slovo přítomno, je DF.
df(t) = occurrence of t in documents>
- Inverzní frekvence dokumentu: Především testuje, jak relevantní je slovo. Hlavním cílem vyhledávání je najít vhodné záznamy, které odpovídají poptávce. Vzhledem k tomu, že tf považuje všechny termíny za stejně významné, není tedy možné použít termín frekvence pouze k měření váhy termínu v příspěvku. Nejprve zjistěte frekvenci dokumentu výrazu t spočítáním počtu dokumentů obsahujících 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>
Frekvence výrazů je počet výskytů výrazu pouze v jednom dokumentu; ačkoli četnost dokumentu je počet samostatných dokumentů, ve kterých se daný termín vyskytuje, záleží na celém korpusu. Nyní se podívejme na definici frekvence inverzního papíru. IDF slova je počet dokumentů v korpusu oddělený četností textu.
idf(t) = N/ df(t) = N/N(t)>
Běžnější slovo má být považováno za méně významné, ale prvek (nejurčitější celá čísla) se zdá být příliš tvrdý. Potom vezmeme logaritmus (se základem 2) inverzní frekvence papíru. Takže if termínu t se stává:
idf(t) = log(N/ df(t))>
- Výpočet: Tf-idf je jednou z nejlepších metrik k určení, jak významný je výraz pro text v sérii nebo korpusu. tf-idf je váhový systém, který přiřazuje váhu každému slovu v dokumentu na základě jeho termínové frekvence (tf) a reciproční frekvence dokumentu (tf) (idf). Slova s vyšším skóre hmotnosti jsou považována za významnější.
Obvykle se váha tf-idf skládá ze dvou pojmů-
- Frekvence normalizovaného termínu (tf) Inverzní frekvence dokumentu (idf)
tf-idf(t, d) = tf(t, d) * idf(t)>
V pythonu lze hodnoty tf-idf vypočítat pomocí TfidfVectorizer() metoda v sklearn modul.
Syntax:
sklearn.feature_extraction.text.TfidfVectorizer(vstup)
Parametry:
vstup : Odkazuje na předaný parametr dokumentu, může to být název souboru, soubor nebo samotný obsah.
Atributy:
slovní zásoba _ : Vrací slovník termínů jako klíče a hodnoty jako rysové indexy. idf_ : Vrací to inverzní vektor frekvence dokumentu dokumentu předávaného jako parametr.
Vrácení:
fit_transform(): Vrací pole výrazů spolu s hodnotami tf-idf. get_feature_names(): Vrací seznam názvů funkcí.
Postup krok za krokem:
- Import modulů.
Python3
# import required module> from> sklearn.feature_extraction.text>import> TfidfVectorizer> |
>
>
- Sbírejte řetězce z dokumentů a vytvořte korpus obsahující kolekci řetězců z dokumentů 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ískejte hodnoty tf-idf z fit_transform() metoda.
Python3
# create object> tfidf>=> TfidfVectorizer()> # get tf-df values> result>=> tfidf.fit_transform(string)> |
>
co dělá počítač rychlým
>
- Zobrazit hodnoty idf slov přítomných v korpusu.
Python3
# get idf values> print>(>'
idf values:'>)> for> ele1, ele2>in> zip>(tfidf.get_feature_names(), tfidf.idf_):> >print>(ele1,>':'>, ele2)> |
>
>
Výstup:

- Zobrazte hodnoty tf-idf spolu s indexování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ýstup:

c struktura ve struktuře
The výsledek proměnná se skládá z jedinečných slov a také z hodnot tf-if. Lze jej upřesnit pomocí níže uvedeného obrázku:

Z výše uvedeného obrázku lze vygenerovat následující tabulku:
| Dokument | Slovo | Rejstřík dokumentů | Rejstřík slov | hodnota tf-idf |
|---|---|---|---|---|
| d0 | pro | 0 | 0 | 0,549 |
| d0 | geeky | 0 | 1 | 0,8355 |
| d1 | geeky | 1 | 1 | 1 000 |
| d2 | r2j | 2 | 2 | 1 000 |
Níže je uvedeno několik příkladů, které znázorňují, jak vypočítat hodnoty tf-idf slov z korpusu:
Příklad 1: Níže je uveden kompletní program založený na výše uvedeném přístupu:
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ýstup:

Příklad 2: Zde jsou hodnoty tf-idf počítány 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ýstup:

Příklad 3: V tomto programu jsou hodnoty tf-idf počítány z korpusu s podobnými dokumenty.
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)> |
rdbms
>
>
Výstup:

Příklad 4: Níže je program, ve kterém se snažíme vypočítat hodnotu tf-idf jednoho slova geeky se několikrát opakuje ve více dokumentech.
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ýstup:
