Les technologies d'intelligence artificielle transforment radicalement les opérations de sécurité, depuis la détection automatisée des menaces jusqu'à l'analyse prédictive des comportements malveillants et l'orchestration des réponses aux incidents en temps réel. Dans un paysage technologique en constante mutation, l'intelligence artificielle redéfinit les paradigmes de la cybersécurité. Les avancées récentes en machine learning, deep learning et modèles de langage (LLM) ouvrent des perspectives inédites tant pour les défenseurs que pour les attaquants. Comprendre ces évolutions est devenu indispensable pour tout professionnel de la sécurité informatique souhaitant anticiper les menaces émergentes et déployer des stratégies de défense adaptées à l'ère de l'IA générative. À travers l'analyse de Embeddings vs Tokens : Guide Pratique Cybersecurit, nous vous proposons un décryptage complet des enjeux et des solutions à mettre en œuvre.

  • Architecture technique et principes de fonctionnement du modèle
  • Cas d'usage concrets en cybersécurité et performance mesurée
  • Limites, biais potentiels et considérations éthiques
  • Guide d'implémentation et ressources recommandées

Résumé exécutif

Tokens et embeddings sont deux concepts fondamentaux mais distincts en NLP moderne. Les tokens sont des identifiants discrets (entiers) obtenus après découpage du texte via tokenisation (BPE, WordPiece). Les embeddings sont des vecteurs denses de nombres réels (768-12288 dimensions) qui capturent la sémantique des tokens.

Pipeline : Texte → Tokens (IDs) → Embeddings (vecteurs) → Transformers → Représentations contextuelles. Les tokens servent d'index pour récupérer les embeddings dans une matrice de lookup. Les embeddings sont ensuite enrichis par les couches Transformer pour devenir contextuels (un même token a différents embeddings selon son contexte). Comprendre cette distinction est crucial pour : optimiser les coûts API (facturation au token), dimensionner les systèmes RAG (stockage des embeddings), et choisir le bon modèle selon ses contraintes.

Qu'est-ce qu'un token ?

Un token est l'unité atomique de traitement du texte dans un modèle de langage. Il s'agit d'une représentation discrète et symbolique d'un fragment de texte, obtenu après la phase de tokenisation.

Définition formelle

Un token est un identifiant unique (ID entier) associé à un élément du vocabulaire d'un modèle. Il peut représenter un caractère, un mot, une partie de mot (sous-mot), ou un symbole spécial. Par exemple, le mot "intelligence" peut être tokenisé en : ["int", "elli", "gence"] avec les IDs correspondants [524, 8765, 15436].

Caractéristiques clés d'un token :

  • Nature discrète : Un token est un symbole distinct, non continu
  • Appartenance à un vocabulaire fini : GPT-3 utilise ~50 257 tokens, GPT-4 ~100 000 tokens
  • Pas de sémantique intrinsèque : Le token ID 524 n'a aucune signification avant d'être converti en embedding
  • Unité de facturation : Les APIs LLM (OpenAI, Anthropic) facturent au nombre de tokens traités

Qu'est-ce qu'un embedding ?

Un embedding (ou représentation vectorielle) est une transformation d'un token en un vecteur dense de nombres réels de dimension fixe, généralement entre 128 et 12 288 dimensions selon le modèle.

Définition mathématique

Un embedding est une fonction E : V → ℝ^d qui projette un token du vocabulaire V vers un espace vectoriel de dimension d. Par exemple, le token "intelligence" (ID 524) devient un vecteur [0.012, -0.543, 0.891, ..., 0.234] de 768 dimensions dans BERT-base.

Propriétés fondamentales des embeddings :

  • Nature continue : Chaque dimension est un nombre réel (float32/float16)
  • Capture sémantique : Les tokens similaires ont des embeddings proches dans l'espace vectoriel
  • Appris par le modèle : Les valeurs sont optimisées durant l'entraînement pour minimiser la loss
  • Contextuels (LLMs modernes) : L'embedding d'un mot change selon son contexte ("banque de données" vs "banque financière")

La relation entre les deux

Les tokens et embeddings forment un pipeline séquentiel dans tout modèle de langage moderne :

Texte brut[Tokenisation]Tokens (IDs)[Lookup Table]Embeddings (vecteurs)[Transformers]Représentations contextuelles

Exemple concret avec la phrase "ChatGPT transforme l'IA" :

# Étape 1 : Tokenisation (avec tiktoken pour GPT-4)
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4")
tokens = enc.encode("ChatGPT change l'IA")
print(tokens)  # [13158, 38, 2898, 96265, 326, 10485, 8, 5987]

# Étape 2 : Conversion en embeddings (simplifié)
# Dans le modèle, chaque token ID est converti via une matrice d'embeddings
embedding_matrix = model.get_input_embeddings()  # Shape: [vocab_size, hidden_dim]
embeddings = embedding_matrix(tokens)  # Shape: [8, 768] pour BERT-base
print(embeddings[0][:5])  # [-0.234, 0.891, -0.012, 0.543, 0.234]

La matrice d'embeddings (ou lookup table) est une simple table de correspondance : chaque ligne correspond à un token du vocabulaire, et contient son vecteur d'embedding.

Pourquoi cette confusion ?

La confusion entre tokens et embeddings provient de plusieurs facteurs :

  • Terminologie ambiguë : On entend souvent "encoder un texte en tokens" alors qu'on parle en fait d'embeddings
  • APIs simplifiées : Les bibliothèques comme Hugging Face encapsulent la conversion token → embedding de façon transparente
  • Usage interchangeable erroné : Dans le langage courant, "tokeniser" est parfois utilisé pour désigner l'ensemble du processus jusqu'à l'embedding
  • Abstractions masquées : Rares sont les praticiens qui manipulent directement les token IDs ; on travaille généralement avec les embeddings

Erreur courante

Faux : "J'ai tokenisé mon texte et je l'ai envoyé au modèle."
Correct : "J'ai tokenisé mon texte (obtention des IDs), puis le modèle a converti ces tokens en embeddings avant de les traiter dans les couches Transformer."

DonneesSources & corpusEmbeddingsVectorisationLLMInference & RAGReponseGenerationPipeline Intelligence ArtificielleArchitecture IA - Du traitement des donnees a la generation de reponses

Comment garantir que vos modèles de machine learning ne deviennent pas des vecteurs d'attaque ?

Le processus de tokenisation

Tokenisation au niveau caractère

La tokenisation par caractères découpe le texte en unités individuelles de caractères. Chaque lettre, chiffre ou symbole devient un token.

Exemple :

Texte : "IA"
Tokens : ["I", "A"]
Vocabulaire : ~100-500 tokens (a-z, A-Z, 0-9, ponctuation, espaces)

Avantages :

  • Vocabulaire minimal (pas de tokens OOV - Out Of Vocabulary)
  • Capable de traiter n'importe quelle langue ou symbole

Inconvénients majeurs :

  • Séquences très longues (limite de contexte atteinte rapidement)
  • Perte de l'information morphologique ("chat" et "chats" partagent peu de structure)
  • Performances médiocres : modèles anciens comme CharRNN (2015) sont obsolètes

Utilisation actuelle : Très rare. Uniquement pour des tâches de bas niveau (OCR, correction orthographique caractère par caractère).

Tokenisation au niveau mot

La tokenisation par mots sépare le texte en mots complets, généralement en utilisant les espaces et la ponctuation comme délimiteurs.

Exemple :

Texte : "L'intelligence artificielle transforme les entreprises."
Tokens : ["L'", "intelligence", "artificielle", "transforme", "les", "entreprises", "."]
Vocabulaire : 50 000 à 1 000 000 de mots

Avantages :

  • Sémantique préservée (chaque mot = une unité de sens)
  • Séquences plus courtes qu'au niveau caractère

Inconvénients critiques :

  • Vocabulaire explosif : 1M+ mots en français si on inclut formes fléchies, néologismes, noms propres
  • Tokens OOV (Out-Of-Vocabulary) : Incapacité à traiter les mots rares, fautes de frappe, langues mixtes
  • Mémoire prohibitive : Matrice d'embeddings de 1M tokens × 768 dimensions = 3GB en float32

Obsolescence

Les modèles pré-2018 (Word2Vec, GloVe) utilisaient la tokenisation par mots. Cette approche n'est plus compétitive depuis l'apparition des tokeniseurs par sous-mots (BPE, WordPiece).

Tokenisation par sous-mots (BPE, WordPiece)

La tokenisation par sous-mots (subword tokenization) représente le standard actuel pour tous les LLMs modernes (GPT, BERT, T5, LLaMA). Elle divise les mots en fragments fréquents, optimisant le compromis entre taille de vocabulaire et expressivité. Pour approfondir, consultez Intégration d'Agents IA avec les API Externes.

Notre avis d'expert

L'IA responsable n'est pas un luxe — c'est une nécessité opérationnelle. Nos audits révèlent que 70% des déploiements IA en entreprise manquent de mécanismes de détection des biais et de garde-fous contre les injections de prompt. Il est temps d'intégrer la sécurité dès la conception des pipelines ML.

Byte-Pair Encoding (BPE)

BPE est un algorithme de compression adapté au NLP. Il fusionne itérativement les paires de caractères/sous-mots les plus fréquentes dans le corpus d'entraînement.

Algorithme simplifié :

# Étape 1 : Initialiser avec caractères
vocab = {"a", "b", "c", ..., "z", " "}

# Étape 2 : Fusionner les paires les plus fréquentes N fois
for _ in range(50000):  # GPT-3 utilise ~50K merges
    pair = find_most_frequent_pair(corpus)
    vocab.add(pair)  # Ex: ("th", "e") → "the"

# Étape 3 : Tokeniser nouveau texte en appliquant les merges
text = "intelligence"
tokens = bpe_tokenize(text, vocab)  # ["int", "elli", "gence"]

Exemple avec GPT-4 (tiktoken) :

import tiktoken
enc = tiktoken.encoding_for_model("gpt-4")

print(enc.encode("intelligence"))    # [396, 8677, 7761]
print(enc.encode("anticonstitutionnellement"))  # [519, 1965, 17453, 28324, 479]
print(enc.encode("🤖"))              # [9468, 97, 230]  # Émoji = plusieurs tokens

WordPiece (utilisé par BERT)

Variante de BPE développée par Google, utilisée dans BERT et ses dérivés. Différence clé : utilise une métrique probabiliste (likelihood) au lieu de la simple fréquence.

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

print(tokenizer.tokenize("intelligence"))  # ['intelligence']  # Mot connu
print(tokenizer.tokenize("superintelligence"))  # ['super', '##int', '##ellig', '##ence']
# Note: ## indique la continuation d'un mot

Pourquoi BPE/WordPiece dominent ?

  • Vocabulaire optimal : 30K-100K tokens (vs 1M+ pour les mots, 100 pour caractères)
  • Zéro OOV : Tout texte peut être tokenisé en décomposant jusqu'aux caractères si nécessaire
  • Multilingue efficace : Partage de sous-mots entre langues ("internationalization" en anglais ≈ "internationalisation" en français)
  • Robustesse : Gère fautes de frappe, néologismes, noms propres

SentencePiece et tokenisation moderne

SentencePiece (Google, 2018) est une bibliothèque de tokenisation indépendante de la langue, utilisée par LLaMA, T5, ALBERT, et de nombreux modèles multilingues.

Innovations clés :

  • Traitement du texte brut : Pas de pré-tokenisation (pas d'hypothèses sur les espaces ou la ponctuation)
  • Réversible : Permet de retrouver exactement le texte original (important pour les langues sans espaces comme le chinois)
  • Supporte BPE et Unigram LM : Deux algorithmes selon les besoins
import sentencepiece as spm

# Entraîner un tokenizer SentencePiece
spm.SentencePieceTrainer.train(
    input='corpus.txt',
    model_prefix='tokenizer',
    vocab_size=32000,
    character_coverage=0.9995,  # Couverture des caractères Unicode
    model_type='bpe'  # ou 'unigram'
)

# Utilisation
sp = spm.SentencePieceProcessor(model_file='tokenizer.model')
print(sp.encode("L'IA transforme le monde", out_type=str))
# ['▁L', "'", 'IA', '▁transform', 'e', '▁le', '▁monde']
# Note: ▁ représente un espace

LLaMA tokenizer

LLaMA (Meta) utilise SentencePiece avec un vocabulaire de 32 000 tokens. Particularité : chaque chiffre est un token individuel (0-9), permettant un meilleur raisonnement arithmétique.

Vocabulaire et tokens spéciaux

Tous les tokenizers incluent des tokens spéciaux pour encoder la structure et les limites des séquences.

Token Rôle Exemple d'utilisation
[PAD] Padding pour uniformiser la longueur des batchs Séquences de longueurs variables dans un batch
[UNK] Token inconnu (rare avec BPE) Caractères Unicode non couverts
[CLS] Classification (BERT) Début de séquence, embedding utilisé pour classification
[SEP] Séparateur entre phrases (BERT) Séparer question/contexte dans QA
<|endoftext|> Fin de document (GPT) Séparation entre documents dans le corpus
<|im_start|>, <|im_end|> Marqueurs de rôle (ChatGPT) Délimiter messages user/assistant/system

Exemple avec BERT :