Prédire le mot suivant en 5 étapes faciles à l’aide de Python



Vous avez sans doute déjà constaté que votre téléphone portable anticipe le mot que vous êtes sur le point de taper. Cette fonctionnalité, très pratique, accélère la saisie et vous fait gagner un temps précieux.

Cette méthode de saisie intuitive s’avère particulièrement utile lors de l’envoi de messages, de recherches sur Internet ou de la rédaction d’e-mails. Mais vous êtes-vous déjà interrogé sur la manière dont votre appareil devine le mot qu’il doit vous suggérer ?

Dans ce tutoriel, je vais vous expliquer comment créer votre propre système de prédiction de mots en utilisant Python.

Pour une meilleure compréhension, il est préférable d’avoir quelques notions de base en Traitement Automatique du Langage Naturel (TALN). Si ce domaine vous est nouveau, pas de panique ! Vous pouvez consulter notre article « Introduction au TALN », où nous en expliquons les principes fondamentaux de manière simple et accessible.

Applications de la prédiction du mot suivant

  • La prédiction du mot suivant améliore la rapidité et la précision de la saisie sur les appareils mobiles, ce qui la rend indispensable pour les applications de messagerie et de communication.
  • Les moteurs de recherche utilisent le texte prédictif pour suggérer des requêtes, facilitant ainsi la recherche d’informations pertinentes par les utilisateurs.
  • Cette technologie permet de corriger automatiquement les erreurs d’orthographe et de réduire les fautes de frappe dans diverses applications, comme les traitements de texte et les clients de messagerie.
  • Les développeurs et les programmeurs bénéficient de la saisie intuitive lors de l’écriture de code, car elle suggère des fonctions, des méthodes et des noms de variables pertinents.
  • Les plateformes en ligne et les services de streaming utilisent la prédiction de texte pour recommander du contenu personnalisé aux utilisateurs.

Découvrons ensemble cette technique fascinante du TALN et son utilité, en examinant chaque étape de manière claire et détaillée.

Préparation des données

Pour commencer, nous devons importer les librairies nécessaires à notre projet. Ensuite, nous allons définir un exemple de texte qui servira pour l’entraînement du modèle. Vous êtes libre d’utiliser n’importe quel texte de votre choix.

Vous pouvez également utiliser un jeu de données contenant des données textuelles, que vous trouverez facilement sur des plateformes comme Kaggle.

# Importation des librairies nécessaires

import nltk
from nltk import ngrams
from collections import defaultdict
import random

Voici un exemple de données textuelles que nous utiliserons pour prédire le mot suivant.

# Exemple de données textuelles
text = """
Dans la ville étrange et paisible de Sérendipité, sous une nuit étoilée et lumineuse,
une jeune exploratrice nommée Amélia s'est lancée dans une aventure extraordinaire.
Munie de sa fidèle loupe et d'un courage à toute épreuve, elle partit à la recherche du trésor d'Elysium, caché au cœur d'une forêt labyrinthique.
En s'enfonçant dans les bois verdoyants, Amélia croisa un écureuil parlant et excentrique, prénommé Percival, qui s'exprimait par énigmes et la guida vers l'emplacement du trésor.
La forêt resplendissait d'une flore bioluminescente, illuminant son chemin d'un kaléidoscope de couleurs.
Amélia arriva bientôt à un précipice dominant une cascade céruléenne d'une beauté saisissante, dont les eaux s'écrasaient en une mélodieuse sérénade.
Au pied de la cascade se dressait une pierre colossale et moussue, ornée d'inscriptions mystérieuses.
Grâce aux indications de Percival, elle déchiffra les runes antiques et découvrit l'entrée de la caverne aux trésors.
À l'intérieur, elle trouva un coffre opulent, décoré de filigranes d'or délicats.
En l'ouvrant, une symphonie de joyaux scintillants, de pierres précieuses éclatantes et d'objets brillants l'accueillit d'une lueur éthérée.
Le trésor d'Elysium était sien, une preuve de son courage intrépide et de sa curiosité insatiable.
Le retour d'Amélia à Sérendipité fut célébré par des festivités joyeuses, et son aventure extraordinaire devint une légende, incitant les autres à se lancer dans leurs propres explorations au royaume merveilleux de l'imagination et de la découverte.
"""

N’hésitez pas à modifier ce texte selon vos besoins.

Tokenisation

Nous allons maintenant prétraiter notre texte et le convertir en tokens. La tokenisation est le processus qui consiste à diviser le texte en mots ou en unités individuelles. Nous allons utiliser la librairie nltk de Python pour tokeniser notre texte.

Afin que notre modèle se concentre sur les mots et ignore la casse ou la ponctuation, nous allons effectuer un prétraitement. Cette étape consiste à convertir tous les mots en minuscules et à supprimer toute ponctuation.

import nltk

# Tokenisation du texte en mots
words = nltk.word_tokenize(text)

# Prétraitement des mots (conversion en minuscules, suppression de la ponctuation)
words = [word.lower() for word in words if word.isalnum()]

words

Après le prétraitement et la tokenisation, tous les mots seront en minuscules et sans ponctuation.

Mots tokenisés

Construction des N-grammes

Dans cette étape, nous allons créer des N-grammes, qui sont des séquences de N mots utilisées en traitement du langage naturel (TALN).

Dans notre code, nous allons créer des bigrammes, où N est égal à 2. Cela signifie que chaque N-gramme sera composé de paires de mots.

Cette étape est essentielle dans la construction d’un modèle de prédiction du mot suivant car elle nous permet d’analyser des séquences de mots et de prédire le mot suivant en fonction du contexte fourni par les N-1 mots précédents.

# Définition de l'ordre du modèle N-gram (N=2 pour les bigrammes)
N = 2

# Création des N-grammes à partir des mots tokenisés
ngrams_list = list(ngrams(words, N))

# Création d'un defaultdict pour stocker les N-grammes et leur fréquence
ngram_freq = defaultdict(int)
for ngram in ngrams_list:
    ngram_freq[ngram] += 1

Ces N-grammes serviront de base pour l’entraînement et l’exécution de notre modèle de prédiction du mot suivant.

Définition de la fonction

Ici, nous allons créer une fonction nommée « predict_next_word » qui devine le mot suivant dans une phrase en se basant sur un préfixe donné (une séquence de mots).

Cette fonction est essentielle dans notre modèle, car elle utilise le contexte fourni par le préfixe pour prédire le mot suivant le plus probable.

Voici une explication simplifiée de ce processus :

  • La fonction examine toutes les paires de mots (bigrammes) dans nos données textuelles qui commencent par le préfixe donné (les mots qui précèdent le mot manquant).
  • Elle compte le nombre de fois où chaque mot apparaît dans ces paires et les classe par ordre de fréquence, du plus fréquent au moins fréquent.
  • La fonction suggère ensuite le mot qui apparaît le plus souvent comme étant le mot suivant après le préfixe donné.
# Définition de la fonction
def predict_next_word(prefix):
    # Filtrage des N-grammes qui commencent par le préfixe donné
    matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix]

    if not matching_ngrams:
        return "Aucune prédiction disponible."

    # Tri des N-grammes par fréquence en ordre décroissant
    sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True)

    # Sélection du N-gramme ayant la fréquence la plus élevée comme prédiction
    prediction = sorted_ngrams[0][0][-1]

    return prediction

Cette fonction est un élément clé du modèle de prédiction du mot suivant. Elle nous permet de générer des suggestions contextuelles pour le mot suivant dans une séquence de texte donnée.

Test

Ce code vous permet de tester le modèle avec vos propres entrées. Vous saisissez quelques mots, vous appuyez sur Entrée, et le modèle prédit le mot suivant. Si vous entrez une séquence invalide, il vous demandera de réessayer.

# Vous pouvez utiliser ce code pour tester interactivement le modèle avec des entrées utilisateur
user_input = input("Entrez un préfixe pour la prédiction du mot suivant: ").lower().split()
if len(user_input) != N - 1:
    print("Veuillez entrer un préfixe valide.")
else:
    prefix = tuple(user_input)
    prediction = predict_next_word(prefix)
    print(f"Prédiction du mot suivant: {prediction}")

Notre code créera une interface de ce type. Vous pouvez y saisir des préfixes et appuyer sur Entrée.

Entrez le préfixe

Après avoir appuyé sur Entrée, vous obtiendrez le mot suivant prédit.

Mot prédit

C’est un exemple concret de l’utilisation du modèle de prédiction du mot suivant.

Défis :

  • La précision de la prédiction du mot suivant dépend fortement de la taille et de la qualité des données d’entraînement. Des données limitées ou bruitées peuvent conduire à des prédictions moins précises.
  • Si un mot du texte saisi n’existe pas dans les données d’entraînement, il ne pourra pas être prédit avec précision.
  • La ponctuation peut affecter la précision des prédictions, en particulier dans des langues comme l’anglais, où les limites des mots peuvent être ambiguës.
  • Une tokenisation ou un prétraitement incorrects peuvent conduire à des prédictions incorrectes.
  • De nombreux mots ont des significations multiples et le contexte ne les clarifie pas toujours.

Comment améliorer la précision

  • L’utilisation d’un ensemble de données plus grand et plus diversifié améliore la compréhension du modèle de divers contextes et mots.
  • Envisagez d’utiliser des N-grammes d’ordre supérieur (par exemple, des trigrammes) pour obtenir plus de contexte, mais équilibrez-le avec la disponibilité des données.
  • Recueillez les commentaires des utilisateurs et améliorez continuellement le modèle en fonction de l’utilisation réelle.
  • Évaluez régulièrement les performances du modèle avec des mesures appropriées et ajustez les stratégies en conséquence.
  • Vous pouvez implémenter des modèles basés sur des réseaux neuronaux, comme LSTM ou Transformer, pour une modélisation de contexte plus complexe.

Derniers mots

Dans le domaine du traitement du langage naturel, la prédiction du mot suivant est une compétence précieuse. Grâce à ces 5 étapes simples en Python, vous disposez d’un outil puissant pour une communication plus rapide et une technologie plus intelligente.

Continuez à explorer et à utiliser ces connaissances pour améliorer vos expériences linguistiques. Le voyage ne fait que commencer !

Vous pouvez également découvrir comment télécharger des fichiers à partir d’une URL en utilisant Python.