Méthodes de représentation de texte

La représentation de texte est une tâche fondamentale du traitement du langage naturel (NLP), qui convertit des données textuelles non structurées en formes numériques que les ordinateurs peuvent traiter.

Cet article présente systématiquement les méthodes de représentation de texte couramment utilisées en NLP, des méthodes traditionnelles aux techniques modernes d'apprentissage profond, aidant les lecteurs à bien comprendre ce concept fondamental.


Représentation textuelle traditionnelle

Modèle de sac de mots

Le modèle de sac de mots est l'une des méthodes de représentation de texte les plus simples ; il traite le texte comme une collection non ordonnée de mots.

Concepts de base

  • Ignore l'ordre des mots et la grammaire, se concentre uniquement sur la présence des mots
  • Construire un vocabulaire et compter les occurrences de chaque mot dans le document
  • La représentation finale est un vecteur creux de grande dimension

Exemple de code

Exemple

from sklearn.feature_extraction.text import CountVectorizer

corpus = [
    'Ceci est le premier document.',
    'Ce document est le deuxième document.',
    'Et ceci est le troisième.',
    'Est-ce le premier document ?'
]

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names_out())
print(X.toarray())

Analyse des avantages et des inconvénients

✅ Avantages :

  • Implémentation simple, efficacité de calcul élevée
  • Convient aux jeux de données de petite taille et aux tâches simples

❌ Inconvénients :

  • Ignore l’ordre des mots et l’information sémantique
  • Problème de sparsité en haute dimension
  • Ne peut pas gérer les synonymes et les mots polysémiques

TF-IDF

TF-IDF (fréquence du terme - fréquence inverse du document) est une amélioration du modèle de sac de mots qui prend en compte l’importance des mots dans l’ensemble du corpus.

Formule de calcul

  • TF (fréquence du terme) :The number of times a word appears in a document / total number of words in the document
  • IDF (fréquence inverse du document) :log(文档总数 / 包含该词的文档数)
  • TF-IDF = TF × IDF

Implémentation du code

Exemple

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf_vectorizer = TfidfVectorizer()
X_tfidf = tfidf_vectorizer.fit_transform(corpus)
print(tfidf_vectorizer.get_feature_names_out())
print(X_tfidf.toarray())

Avantages et inconvénients

✅ Avantages :

  • Réduit l'impact des mots courants et met en évidence les mots importants
  • Meilleures performances que le modèle simple de sac de mots

❌ Inconvénients :

  • Ne peut toujours pas capturer les relations sémantiques
  • Le problème de haute dimensionnalité existe toujours

Modèle N-gram

Le modèle N-gram tient compte de l'ordre des mots et représente le texte par des combinaisons de n mots consécutifs.

Types courants

  • Unigramme (1-gram): un seul mot
  • Bigramme (2-gram): combinaison de deux mots consécutifs
  • Trigramme (3-gram): combinaison de trois mots consécutifs

Exemple de code

Exemple

bigram_vectorizer = CountVectorizer(ngram_range=(2, 2))
X_bigram = bigram_vectorizer.fit_transform(corpus)
print(bigram_vectorizer.get_feature_names_out())

Avantages et inconvénients

✅ Avantages :

  • Capture les informations sur l'ordre local des mots
  • Peut représenter des phrases et des collocations figées

❌ Inconvénients :

  • Le problème d'explosion de la dimensionnalité est plus grave
  • Ne peut toujours pas gérer les dépendances à longue distance

Représentation vectorielle des mots

Principes et mise en œuvre de Word2Vec

Word2Vec est une méthode de représentation vectorielle de mots basée sur un réseau de neurones proposée par Google en 2013.

Deux architectures de modèles

  1. CBOW(Continuous Bag of Words): prédire le mot courant à partir du contexte
  2. Skip-gram: prédire le contexte à partir du mot courant

Implémentation du code

Exemple

from gensim.models import Word2Vec

sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)

# Obtenir les vecteurs de mots
vector = model.wv['cat']
# Trouver des mots similaires
similar_words = model.wv.most_similar('cat')

Fonctionnalités

  • Vecteurs denses de faible dimension (généralement 50-300 dimensions)
  • Peuvent capturer les relations sémantiques et syntaxiques entre les mots
  • Prend en charge les opérations vectorielles (par exemple, roi - homme + femme ≈ reine)

Vecteurs de mots GloVe

GloVe (Global Vectors for Word Representation) combine les avantages des informations statistiques globales et des fenêtres de contexte locales.

Idée centrale

  • Basé sur une matrice de co-occurrence de mots
  • L’objectif d’optimisation est de rendre le produit scalaire de deux vecteurs de mots égal au logarithme de leur nombre de co-occurrences

Comparaison avec Word2Vec

Fonctionnalité Word2Vec GloVe
Méthode d’entraînement Fenêtre locale Statistiques globales
Efficacité de calcul Relativement élevée Relativement faible
Performance sur les petits ensembles de données Meilleur Moyenne
Performance sur les grands ensembles de données OK Meilleur

FastText

FastText est un modèle de vecteurs de mots développé par Facebook, caractérisé par la prise en compte d'informations sur les sous-mots.

Fonctionnalités principales

  • Représente les mots comme un ensemble de n-grammes de caractères
  • Peut gérer les mots hors vocabulaire (OOV)
  • Particulièrement adapté aux langues à morphologie riche

Exemple de code

Exemple

from gensim.models import FastText

model = FastText(sentences, vector_size=100, window=5, min_count=1, workers=4)
# Même les mots qui ne sont pas dans le dictionnaire peuvent obtenir des vecteurs
vector = model.wv['unseenword']

Représentations sensibles au contexte

Modèle ELMo

ELMo (Embeddings from Language Models) est l'une des premières méthodes de représentation de mots dépendantes du contexte.

Fonctionnalités principales

  • Fondé sur des modèles de langue LSTM bidirectionnels
  • La représentation d’un mot dépend de l’intégralité de la phrase d’entrée
  • Génère des représentations multicouches (peut combiner la sémantique à différents niveaux)

Diagramme de l’architecture


BERT et ses variantes

BERT (Bidirectional Encoder Representations from Transformers) est un modèle de langue pré-entraîné proposé par Google.

Innovations clés

  • Architecture Transformer
  • Objectif d’entraînement du modèle de langue masqué (MLM)
  • Tâche de prédiction de la phrase suivante (NSP)

Variantes courantes

  1. RoBERTa: stratégie d’entraînement optimisée
  2. DistilBERT: version allégée de BERT
  3. ALBERT: le partage de paramètres réduit la taille du modèle

Exemple de code

Exemple

from transformers import BertTokenizer, BertModel

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

inputs = tokenizer("Bonjour, mon chien est mignon", return_tensors="pt")
outputs = model(**inputs)
last_hidden_states = outputs.last_hidden_state

Aperçu des modèles de langage pré-entraînés

Le TAL moderne utilise principalement le paradigme pré-entraînement + fine-tuning :

  1. Étape de pré-entraînement: entraîner des représentations linguistiques générales sur des corpus à grande échelle
  2. Étape de fine-tuning: ajuster les paramètres du modèle sur des données spécifiques à la tâche

Comparaison des modèles

Modèle Date de sortie Fonctionnalités principales
Word2Vec 2013 Vecteurs de mots statiques
GloVe 2014 Statistiques globales + fenêtre locale
ELMo 2018 LSTM bidirectionnel, dépendant du contexte
BERT 2018 Transformer, contexte bidirectionnel
GPT-3 2020 Transformer unidirectionnel, forte capacité de génération

Représentations au niveau du document

Doc2Vec

Doc2Vec est une extension de Word2Vec qui peut apprendre directement des représentations vectorielles de documents.

Deux modèles

  1. PV-DM(Distributed Memory): similaire à CBOW, ajoute l'ID du document
  2. PV-DBOW(Distributed Bag of Words): similaire à Skip-gram

Exemple de code

Exemple

from gensim.models import Doc2Vec
from gensim.models.doc2vec import TaggedDocument

documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(corpus)]
model = Doc2Vec(documents, vector_size=100, window=5, min_count=1, workers=4)
vector = model.infer_vector(["new", "document", "text"])

Vecteurs de phrases et vecteurs de documents

Méthodes courantes

  1. Moyenne: faire la moyenne des vecteurs de mots
  2. SIF: moyenne pondérée par fréquence inverse lissée
  3. Vecteurs de phrases BERT: utiliser le token [CLS] ou faire la moyenne de tous les vecteurs de mots

Exemple de code (avec Sentence-BERT)

Exemple

from sentence_transformers import SentenceTransformer

model = SentenceTransformer('all-MiniLM-L6-v2')
sentences = ["This is an example sentence", "Each sentence is converted"]
embeddings = model.encode(sentences)

Modèle de sujets (LDA)

L'allocation Dirichlet latente (LDA) est une méthode de modélisation de sujets non supervisée.

Principes de base

  • Représente un document comme un mélange de plusieurs sujets
  • Chaque thème est une distribution de probabilité sur les mots
  • Appris par inférence variationnelle ou échantillonnage de Gibbs

Exemple de code

Exemple

from sklearn.decomposition import LatentDirichletAllocation
from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
lda = LatentDirichletAllocation(n_components=2)
lda.fit(X)

Scénarios d'application

  • Regroupement de documents
  • Recommandation de contenu
  • Résumé de texte

Résumé

Le développement des méthodes de représentation de texte est passé de simples statistiques à l'apprentissage profond :

  1. Méthodes traditionnelles: Simples et efficaces, adaptées aux données à petite échelle
  2. Vecteurs de mots: Capturent les relations sémantiques, faible dimensionnalité
  3. Modèles sensibles au contexte: Représentation dynamique, meilleures performances mais coût de calcul élevé
  4. Représentation de document: passe du niveau du mot au niveau du document

Lors du choix des méthodes de représentation de texte, tenez compte de :

  • Exigences de la tâche (si une compréhension sémantique est nécessaire)
  • Échelle des données
  • Ressources de calcul
  • Caractéristiques de la langue

Avec le développement des grands modèles de langage, les techniques de représentation de texte évoluent encore rapidement, mais comprendre ces méthodes fondamentales reste crucial pour maîtriser le NLP.

Autres extensions