Créer des vecteurs de documents tf-idf

Ingénierie des caractéristiques pour le NLP en Python

Rounak Banik

Data Scientist

Modélisation par n-grammes

  • Poids de la dimension selon la fréquence du mot associé.
    • Le document contient le mot human à cinq endroits.
    • La dimension correspondant à human a un poids de 5.
Ingénierie des caractéristiques pour le NLP en Python

Motivation

  • Certains mots apparaissent très souvent dans tous les documents
  • Corpus de documents sur l'univers
    • Un document contient jupiter et universe 20 fois chacun.
    • jupiter est rare ailleurs ; universe est courant.
    • Accorder plus de poids à jupiter en raison de son exclusivité.
Ingénierie des caractéristiques pour le NLP en Python

Applications

  • Détecter automatiquement les mots vides
  • Recherche
  • Systèmes de recommandation
  • Meilleure performance en modélisation prédictive dans certains cas
Ingénierie des caractéristiques pour le NLP en Python

Fréquence de terme–fréquence inverse de document

  • Proportionnel à la fréquence du terme
  • Fonction inverse du nombre de documents où il apparaît
Ingénierie des caractéristiques pour le NLP en Python

Formule mathématique

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

$$\red{w_{i,j}} \rightarrow \text{poids du terme } i \text{ dans le document } j$$

Ingénierie des caractéristiques pour le NLP en Python

Formule mathématique

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

$$w_{i,j} \rightarrow \text{poids du terme } i \text{ dans le document } j$$

$$\red{tf_{i,j}} \rightarrow \text{fréquence du terme } i \text{ dans le document } j $$

Ingénierie des caractéristiques pour le NLP en Python

Formule mathématique

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

$$w_{i,j} \rightarrow \text{poids du terme } i \text{ dans le document } j$$

$$tf_{i,j} \rightarrow \text{fréquence du terme } i \text{dans le document } j $$

$$\red{N} \rightarrow \text{nombre de documents dans le corpus} $$

$$\red{df_{i}} \rightarrow \text{nombre de documents contenant le terme } i$$

Ingénierie des caractéristiques pour le NLP en Python

Formule mathématique

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

$$w_{i,j} \rightarrow \text{poids du terme } i \text{ dans le document } j$$

$$tf_{i,j} \rightarrow \text{fréquence du terme } i \text{ dans le document } j $$

$$N \rightarrow \text{nombre de documents dans le corpus} $$

$$df_{i} \rightarrow \text{nombre de documents contenant le terme } i$$

Exemple :

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

Ingénierie des caractéristiques pour le NLP en Python

tf-idf avec 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.        ]
...
Ingénierie des caractéristiques pour le NLP en Python

Passons à la pratique !

Ingénierie des caractéristiques pour le NLP en Python

Preparing Video For Download...