logo

Comprensione del TF-IDF (frequenza del documento inversa alla frequenza dei termini)

TF-IDF sta per Term Frequency Inverse Document Frequency dei record. Può essere definito come il calcolo della rilevanza di una parola in una serie o in un corpus per un testo. Il significato aumenta proporzionalmente al numero di volte in cui una parola appare nel testo ma è compensato dalla frequenza delle parole nel corpus (data-set).

Terminologie:



    Frequenza dei termini: nel documento d, la frequenza rappresenta il numero di occorrenze di una determinata parola t. Pertanto, possiamo vedere che diventa più rilevante quando nel testo appare una parola che è razionale. Poiché l'ordine dei termini non è significativo, possiamo utilizzare un vettore per descrivere il testo nel sacchetto dei modelli di termini. Per ogni termine specifico nel documento, è presente una voce il cui valore corrisponde alla frequenza del termine.

Il peso di un termine presente in un documento è semplicemente proporzionale alla frequenza del termine.

tf(t,d) = count of t in d / number of words in d>
    Frequenza del documento: verifica il significato del testo, che è molto simile a TF, nell'intera raccolta del corpus. L'unica differenza è che nel documento d, TF è il contatore di frequenza per un termine t, mentre df è il numero di occorrenze nel set di documenti N del termine t. In altre parole, il numero di articoli in cui è presente la parola è DF.
df(t) = occurrence of t in documents>
    Frequenza inversa del documento: verifica principalmente la rilevanza della parola. Lo scopo principale della ricerca è individuare i record appropriati che soddisfino la domanda. Poiché tf considera tutti i termini ugualmente significativi, non è quindi possibile utilizzare solo le frequenze dei termini per misurare il peso del termine nel documento. Per prima cosa, trova la frequenza del documento di un termine t contando il numero di documenti che contengono il termine:
df(t) = N(t) where df(t) = Document frequency of a term t N(t) = Number of documents containing the term t>

La frequenza del termine è il numero di occorrenze di un termine solo in un singolo documento; sebbene la frequenza del documento sia il numero di documenti separati in cui appare il termine, dipende dall'intero corpus. Consideriamo ora la definizione di frequenza della carta inversa. L'IDF della parola è il numero di documenti nel corpus separati dalla frequenza del testo.

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

Si suppone che la parola più comune sia considerata meno significativa, ma l'elemento (gli interi più definiti) sembra troppo duro. Prendiamo quindi il logaritmo (in base 2) della frequenza inversa della carta. Quindi l'if del termine t diventa:



idf(t) = log(N/ df(t))>
    Calcolo: Tf-idf è uno dei migliori parametri per determinare quanto sia significativo un termine per un testo in una serie o in un corpus. tf-idf è un sistema di ponderazione che assegna un peso a ciascuna parola in un documento in base alla frequenza del termine (tf) e alla frequenza reciproca del documento (tf) (idf). Le parole con punteggi di peso più alti sono ritenute più significative.

Di solito, il peso tf-idf è costituito da due termini:

    Frequenza dei termini normalizzata (tf) Frequenza inversa del documento (idf)
tf-idf(t, d) = tf(t, d) * idf(t)>

In Python i valori tf-idf possono essere calcolati utilizzando TfidfVectorizer() metodo dentro sklearn modulo.

Sintassi:



sklearn.feature_extraction.text.TfidfVectorizer(input)

parametri:

    ingresso : Si riferisce al documento parametro passato, può essere un nome file, un file o il contenuto stesso.

Attributi:

    vocabolario _ : Restituisce un dizionario di termini come chiavi e valori come indici di caratteristiche. idf_ : Restituisce il vettore di frequenza del documento inverso del documento passato come parametro.

Ritorna:

    fit_transform(): restituisce un array di termini insieme ai valori tf-idf. get_feature_names(): restituisce un elenco di nomi di funzionalità.

Approccio passo dopo passo:

  • Importa moduli.

Python3




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

>

>

  • Raccogli stringhe dai documenti e crea un corpus contenente una raccolta di stringhe dai documenti d0, d1, E d2 .

Python3




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

>

>

  • Ottieni i valori tf-idf da fit_transform() metodo.

Python3




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

>

arraylist e linkedlist

>

  • Visualizza i valori idf delle parole presenti nel corpus.

Python3




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

>

>

Produzione:

  • Visualizza i valori tf-idf insieme all'indicizzazione.

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

>

>

Produzione:

modello di progettazione di fabbrica

IL risultato La variabile è composta da parole univoche e dai valori tf-if. Può essere elaborato utilizzando l'immagine seguente:

Dall'immagine sopra può essere generata la tabella seguente:

Documento Parola Indice dei documenti Indice delle parole valore tf-idf
d0 per 0 0 0,549
d0 geek 0 1 0,8355
d1 geek 1 1 1.000
d2 r2j 2 2 1.000

Di seguito sono riportati alcuni esempi che descrivono come calcolare i valori tf-idf delle parole da un corpus:

Esempio 1: Di seguito è riportato il programma completo basato sull’approccio di cui sopra:

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

>

>

Produzione:

Esempio 2: Qui, i valori tf-idf vengono calcolati da un corpus avente valori univoci.

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

>

>

Produzione:

Esempio 3: In questo programma, i valori tf-idf vengono calcolati da un corpus con documenti simili.

al metodo stringa java

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

>

>

Produzione:

Esempio 4: Di seguito è riportato il programma in cui proviamo a calcolare il valore tf-idf di una singola parola geek viene ripetuto più volte in più documenti.

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

>

>

Produzione: