Avant qu'une IA puisse comprendre votre question, rédiger un essai ou traduire une phrase, elle doit traiter du texte brut. Chaque chatbot, moteur de recherche et modèle de langage commence par des chaînes de caractères (strings) - des séquences de caractères représentant le langage humain.
Comprendre le fonctionnement des chaînes ouvre la porte au traitement du langage naturel (NLP), l'un des domaines les plus passionnants de l'intelligence artificielle.
Une chaîne est simplement une séquence de caractères - lettres, chiffres, espaces et symboles - stockés dans l'ordre.
message = "Hello, World!"
Chaque caractère a une position (index), exactement comme un tableau :
index: 0 1 2 3 4 5 6 7 8 9 10 11 12
char: H e l l o , W o r l d !
Une sous-chaîne (substring) est un extrait d'une chaîne. De « Hello, World! » on peut extraire « World » (indices 7 à 11). Les systèmes d'IA extraient constamment des sous-chaînes - noms dans des phrases, hashtags dans des tweets, URLs dans des pages web.
Dans la plupart des langages, les chaînes sont immuables - on ne peut pas modifier un caractère en place. On crée une nouvelle chaîne. Cela compte pour la performance : si votre pipeline IA modifie du texte des millions de fois, créer une nouvelle chaîne à chaque fois peut ralentir les choses.
L'œuvre complète de Shakespeare contient environ 900 000 mots. GPT-4 a été entraîné sur des jeux de données des milliers de fois plus grands - des centaines de milliards de mots, tous traités comme des chaînes avant d'être convertis en nombres.
Les modèles d'IA ne lisent pas les mots comme les humains. Ils utilisent la tokenisation - découper le texte en morceaux plus petits appelés tokens.
Input: "unhappiness"
Tokens: ["un", "happiness"]
Input: "ChatGPT is brilliant"
Tokens: ["Chat", "G", "PT", " is", " brilliant"]
La tokenisation se situe entre le traitement caractère par caractère et le traitement mot par mot. Elle gère les mots rares en les décomposant en sous-parties connues, gardant le vocabulaire gérable.
Sign in to join the discussion
Quand vous tapez un mot long et inhabituel comme « antidisestablishmentarianism » dans ChatGPT, le modèle le découpe en tokens de sous-mots familiers. Pourquoi est-ce mieux que de stocker chaque mot anglais possible comme un token séparé ?
Une opération fondamentale sur les chaînes : chercher un motif dans un texte plus grand. Cet email contient-il le mot « urgent » ? Ce code contient-il une faille de sécurité ?
Faire glisser le motif le long du texte, en vérifiant caractère par caractère :
text: "the cat sat on the mat"
pattern: "cat"
Position 0: "the" → no match
Position 1: "he " → no match
Position 4: "cat" → match found at index 4!
C'est du O(n × m) dans le pire cas, avec n la longueur du texte et m celle du motif. Pour de courts motifs, ça va. Pour scanner des millions de documents, il faut des approches plus malignes.
Pourquoi le pattern matching naïf est-il lent pour de très grands textes ?
reverse("hello") → "olleh"
L'IA utilise l'inversion dans les modèles séquence-à-séquence - certains modèles de traduction inversaient la phrase d'entrée pour améliorer la précision.
Un palindrome se lit de la même façon dans les deux sens : « racecar », « madam », « level ».
is_palindrome(text):
return text == reverse(text)
Deux mots sont des anagrammes s'ils contiennent les mêmes caractères dans un ordre différent : « listen » et « silent ».
La solution élégante ? Compter les fréquences de caractères avec une hash map :
are_anagrams(word1, word2):
return character_counts(word1) == character_counts(word2)
C'est directement lié au patron de comptage de fréquences de la leçon précédente - les hash maps rendent cela O(n).
Quelle approche vérifie le plus efficacement si deux mots sont des anagrammes ?
Les expressions régulières (regex) permettent de décrire des motifs plutôt que du texte exact :
| Motif | Correspond à | Cas d'usage |
|-------|-------------|-------------|
| \d+ | Un ou plusieurs chiffres | Extraire des nombres |
| [A-Z][a-z]+ | Un mot capitalisé | Trouver des noms propres |
| \b\w+@\w+\.\w+\b | Adresses email | Extraction de données |
| (cat\|dog\|bird) | L'un des trois mots | Mots-clés de classification |
Les pipelines IA utilisent les regex massivement pour le nettoyage de données - supprimer les balises HTML, extraire des dates, standardiser des numéros de téléphone.
Les expressions régulières sont puissantes mais piégeuses. Un regex mal écrit peut prendre un temps exponentiel sur certaines entrées - le fameux « catastrophic backtracking ». Testez toujours vos motifs sur des cas limites.
Chaque étape implique des opérations sur les chaînes - découpe, recherche, remplacement et division.
Quand vous envoyez un message à un chatbot dans une langue qui n'utilise pas d'espaces entre les mots (comme le chinois ou le japonais), comment la tokenisation pourrait-elle fonctionner différemment ?
Le tokeniseur d'OpenAI découpe « tokenisation » en ["token", "isation"] - deux tokens. Mais l'orthographe américaine « tokenization » donne ["token", "ization"]. Le même concept coûte différemment selon l'orthographe !
Dans un pipeline de traitement de texte, pourquoi effectue-t-on la tokenisation avant d'alimenter un modèle d'IA ?