Bygga tf-idf-dokumentvektorer

Funktionsutveckling för NLP i Python

Rounak Banik

Data Scientist

n-gram-modellering

  • Dimensionens vikt beror på frekvensen av ordet som motsvarar dimensionen.
    • Dokumentet innehåller ordet human på fem ställen.
    • Dimensionen för human får vikten 5.
Funktionsutveckling för NLP i Python

Motivation

  • Vissa ord förekommer mycket ofta i alla dokument
  • Korpus med dokument om universum
    • Ett dokument innehåller jupiter och universe 20 gånger vardera.
    • jupiter är sällsynt i övriga dokument. universe är vanligt.
    • Ge jupiter högre vikt på grund av dess exklusivitet.
Funktionsutveckling för NLP i Python

Tillämpningar

  • Detektera stoppord automatiskt
  • Sökning
  • Rekommendationssystem
  • Bättre prestanda i prediktiv modellering i vissa fall
Funktionsutveckling för NLP i Python

Termfrekvens-invers dokumentfrekvens

  • Proportionell mot termfrekvensen
  • Invers funktion av antalet dokument där termen förekommer
Funktionsutveckling för NLP i Python

Matematisk formel

$$\red{w_{i,j}} = tf_{i,j} \cdot \log\left(\frac{N}{df_{i}}\right) $$

$$\red{w_{i,j}} \rightarrow \text{vikt för term } i \text{ i dokument } j$$

Funktionsutveckling för NLP i Python

Matematisk formel

$$w_{i,j} = \red{tf_{i,j}} \cdot \log\left(\frac{N}{df_{i}}\right) $$

$$w_{i,j} \rightarrow \text{vikt för term } i \text{ i dokument } j$$

$$\red{tf_{i,j}} \rightarrow \text{termfrekvens för term } i \text{ i dokument } j $$

Funktionsutveckling för NLP i Python

Matematisk formel

$$w_{i,j} = tf_{i,j} \cdot \red{\log\left(\frac{N}{df_{i}}\right)} $$

$$w_{i,j} \rightarrow \text{vikt för term } i \text{ i dokument } j$$

$$tf_{i,j} \rightarrow \text{termfrekvens för term } i \text{ i dokument } j $$

$$\red{N} \rightarrow \text{antal dokument i korpusen} $$

$$\red{df_{i}} \rightarrow \text{antal dokument som innehåller term } i$$

Funktionsutveckling för NLP i Python

Matematisk formel

$$w_{i,j} = tf_{i,j} \cdot \log\left(\frac{N}{df_{i}}\right) $$

$$w_{i,j} \rightarrow \text{vikt för term } i \text{ i dokument } j$$

$$tf_{i,j} \rightarrow term \; frequency \; of \; term \; i \; in \; document \; j $$

$$N \rightarrow number \; of \; documents \; in \; the \; corpus $$

$$df_{i} \rightarrow number \; of \; documents \; cotaining \; term \; i$$

Exempel:

$\red{w_{library, document}} = 5 \cdot log(\frac{20}{8}) \approx 2 $

Funktionsutveckling för NLP i Python

tf-idf med scikit-learn

# Import TfidfVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer

# Create TfidfVectorizer object vectorizer = TfidfVectorizer()
# Generate matrix of word vectors tfidf_matrix = vectorizer.fit_transform(corpus) print(tfidf_matrix.toarray())
[[0.         0.         0.         0.         0.25434658 0.33443519
  0.33443519 0.         0.25434658 0.         0.25434658 0.
  0.76303975]
 [0.         0.46735098 0.         0.46735098 0.         0.
  0.         0.46735098 0.         0.46735098 0.35543247 0.
  0.        ]
...
Funktionsutveckling för NLP i Python

Nu kör vi en övning!

Funktionsutveckling för NLP i Python

Preparing Video For Download...