Le TF‑IDF

Introduction au traitement automatique des langues en R

Kasey Jones

Research Data Scientist

Pièges du sac de mots

t1 <- "My name is John. My best friend is Joe. We like tacos."
t2 <- "Two common best friend names are John and Joe."
t3 <- "Tacos are my favorite food. I eat them with my buddy Joe."
clean_t1 <- "john friend joe tacos"
clean_t2 <- "common friend john joe names"
clean_t3 <- "tacos favorite food eat buddy joe"
Introduction au traitement automatique des langues en R

Mots communs partagés

clean_t1 <- "john friend joe tacos"
clean_t2 <- "common friend john joe names"
clean_t3 <- "tacos favorite food eat buddy joe"

Comparer t1 et t2

  • 3/4 des mots de t1 sont dans t2
  • 3/5 des mots de t2 sont dans t1

Comparer t1 et t3

  • 2/4 des mots de t1 sont dans t3
  • 2/6 des mots de t3 sont dans t1
Introduction au traitement automatique des langues en R

Les tacos comptent

t1 <- "My name is John. My best friend is Joe. We like tacos."
t2 <- "Two common best friend names are John and Joe."
t3 <- "Tacos are my favorite food. I eat them with my friend Joe."

Mots par texte :

  • John : t1, t2
  • Joe : t1, t2, t3
  • Tacos : t1, t3
Introduction au traitement automatique des langues en R

TF‑IDF

clean_t1 <- "john friend joe tacos"
clean_t2 <- "common friend john joe names"
clean_t3 <- "tacos favorite food eat buddy joe"
  • TF : fréquence du terme
    • Proportion de mots d'un texte correspondant à ce terme
    • john est 1/4 des mots dans clean_t1, tf = 0,25
  • IDF : fréquence inverse des documents
    • Poids reflétant la fréquence d'un terme dans l'ensemble des documents
    • john est dans 3/3 documents, IDF = 0
Introduction au traitement automatique des langues en R

Équation de l'IDF

 

$ IDF = log \frac{N}{n_{t}} $

  • N : nombre total de documents du corpus
  • $n_{t}$ : nombre de documents où le terme apparaît

Exemple :

  • IDF de Taco : $log (\frac{3}{2}) = 0,405$
  • IDF de Buddy : $log (\frac{3}{1}) = 1,10$
  • IDF de John : $log (\frac{3}{3}) = 0$
Introduction au traitement automatique des langues en R

TF + IDF

clean_t1 <- "john friend joe tacos"
clean_t2 <- "common friend john joe names"
clean_t3 <- "tacos favorite food eat buddy joe"

TF‑IDF pour « tacos » :

  • clean_t1 : TF * IDF = (1/4) * (0,405) = 0,101
  • clean_t2 : TF * IDF = (0/4) * (0,405) = 0
  • clean_t3 : TF * IDF = (1/6) * (0,405) = 0,068
Introduction au traitement automatique des langues en R

Calcul de la matrice TF‑IDF

# Create a data.frame
df <- data.frame('text' = c(t1, t2, t3), 'ID' = c(1, 2, 3))
df %>%
  unnest_tokens(output = "word", token = "words", input = text) %>%
  anti_join(stop_words) %>%
  count(ID, word, sort = TRUE) %>%
  bind_tf_idf(word, ID, n)
  • word : la colonne contenant les termes
  • ID : la colonne contenant les ID de documents
  • n : le compte de mots produit par count()
Introduction au traitement automatique des langues en R

Sortie de bind_tf_idf

# A tibble: 15 x 6
       X word         n    tf   idf tf_idf
   <dbl> <chr>    <int> <dbl> <dbl>  <dbl>
 1     1 friend       1 0.25  0.405 0.101 
 2     1 joe          1 0.25  0     0     
 3     1 john         1 0.25  0.405 0.101 
 4     1 tacos        1 0.25  0.405 0.101 
 5     2 common       1 0.2   1.10  0.220 
 6     2 friend       1 0.2   0.405 0.0811
 ...
Introduction au traitement automatique des langues en R

Pratique TF‑IDF

Introduction au traitement automatique des langues en R

Preparing Video For Download...