Préparer le texte pour la modélisation

Introduction au Natural Language Processing en R

Kasey Jones

Research Data Scientist

Apprentissage supervisé en R : classification

Introduction au Natural Language Processing en R

Modélisation de classification

  • approche d'apprentissage supervisé
  • classe les observations en catégories
    • victoire/défaite
    • dangereux, amical ou indifférent
  • peut utiliser plusieurs techniques :
    • régression logistique
    • arbres de décision/random forest/xgboost
    • réseaux de neurones
    • etc.
Introduction au Natural Language Processing en R

Étapes de base de la modélisation

  1. Nettoyer/préparer les données
  2. Créer des jeux d'entraînement et de test
  3. Entraîner un modèle sur le jeu d'entraînement
  4. Rapporter la précision sur le jeu de test
Introduction au Natural Language Processing en R

Reconnaissance de personnages

Napoléon Napoleon

Boxer Boxer

1 https://comicvine.gamespot.com/napoleon/4005-141035/ 2 https://hero.fandom.com/wiki/Boxer_(Animal_Farm)
Introduction au Natural Language Processing en R

Phrases sur les animaux

# Make sentences
sentences <- animal_farm %>%
  unnest_tokens(output = "sentence", token = "sentences", input = text_column)
# Label sentences by animal
sentences$boxer <- grepl('boxer', sentences$sentence)
sentences$napoleon <- grepl('napoleon', sentences$sentence)
# Replace the animal name
sentences$sentence <- gsub("boxer", "animal X", sentences$sentence)
sentences$sentence <- gsub("napoleon", "animal X", sentences$sentence)
animal_sentences <- sentences[sentences$boxer + sentences$napoleon == 1, ]
Introduction au Natural Language Processing en R

Suite des phrases

animal_sentences$Name <-
    as.factor(ifelse(animal_sentences$boxer, "boxer", "napoleon"))
# 75 of each
animal_sentences <- 
  rbind(animal_sentences[animal_sentences$Name == "boxer", ][c(1:75), ],
        animal_sentences[animal_sentences$Name == "napoleon", ][c(1:75), ])
animal_sentences$sentence_id <- c(1:dim(animal_sentences)[1])
Introduction au Natural Language Processing en R

Préparer les données

library(tm); library(tidytext)
library(dplyr); library(SnowballC)
animal_tokens <- animal_sentences %>%
  unnest_tokens(output = "word", token = "words", input = sentence) %>%
  anti_join(stop_words) %>%
  mutate(word = wordStem(word))
Introduction au Natural Language Processing en R

Préparation : suite

animal_matrix <- animal_tokens %>%
  count(sentence_id, word) %>%
  cast_dtm(document = sentence_id, term = word,
           value = n, weighting = tm::weightTfIdf)
animal_matrix
<<DocumentTermMatrix (documents: 150, terms: 694)>>
Non-/sparse entries: 1235/102865
Sparsity           : 99%
Maximal term length: 17
Weighting          : term frequency - inverse document frequency
Introduction au Natural Language Processing en R

Supprimer les termes rares

  • Non vides (1 235) + vides (102 865)
  • Dimensions de la matrice : 150 × 694
  • Parcimonie : 102 865 / 104 100 (99 %)

Solution : removeSparseTerms()

Introduction au Natural Language Processing en R

Jusqu'où aller dans la parcimonie ?

removeSparseTerms(animal_matrix, sparse = .90)
<<DocumentTermMatrix (documents: 150, terms: 4)>>
Non-/sparse entries: 207/393
Sparsity           : 66%
removeSparseTerms(animal_matrix, sparse = .99)
removeSparseTerms(animal_matrix, sparse = .99)
<<DocumentTermMatrix (documents: 150, terms: 172)>>
Non-/sparse entries: 713/25087
Sparsity           : 97%
Introduction au Natural Language Processing en R

Passons à la pratique !

Introduction au Natural Language Processing en R

Preparing Video For Download...