Skip to content

Latest commit

 

History

History
324 lines (219 loc) · 11.1 KB

chapter1.md

File metadata and controls

324 lines (219 loc) · 11.1 KB
title description prev next type id
Chapitre 1 : Recherche de mots, phrases, noms et concepts
Ce chapitre te présente les bases du traitement de texte avec spaCy. Tu vas découvrir les structures de données, comment utiliser les pipelines pré-entraînés, et comment les employer pour prédire des caractéristiques linguistiques dans ton texte.
/chapter2
chapter
1

Commençons à utiliser spaCy ! Dans cet exercice, tu vas pouvoir essayer quelques uns des 60+ langages disponibles.

Partie 1 : Français

  • Utilise spacy.blank pour créer un objet nlp français (fr) vierge.
  • Crée un doc et affiche son texte.

Partie 2 : Anglais

  • Utilise spacy.blank pour créer un objet nlp anglais (en) vierge.
  • Crée un doc et affiche son texte.

Partie 3 : Espagnol

  • Utilise spacy.blank pour créer un objet nlp espagnol (es) vierge.
  • Crée un doc et affiche son texte.

Quand tu passes une chaîne de caractères à un objet nlp, spaCy commence par découper le texte en tokens et crée un objet document. Dans cet exercice, tu vas en apprendre davantage sur le Doc, ainsi que sur ses vues Token et Span.

Étape 1

  • Utilise spacy.blank pour créer l'objet nlp français.
  • Traite le texte et crée un objet Doc affecté à une variable doc.
  • Sélectionne le premier token du Doc et affiche son attribut text.

Tu peux utiliser les indices dans un Doc comme dans une liste Python. Par exemple, doc[4] désigne le token à l'indice 4, qui est le cinquième token dans le texte. N'oublie pas qu'en Python le premier indice est 0, et pas 1.

Étape 2

  • Utilise spacy.blank pour créer l'objet nlp français.
  • Traite le texte et crée un objet Doc affecté à une variable doc.
  • Crée les portions du Doc pour les tokens "loups gris" et "loups gris et renards roux".

La création d'une portion d'un Doc s'effectue exactement comme pour la portion d'une liste en Python en utilisant la notation :. N'oublie pas que l'indice du dernier token est exclu – par exemple, 0:4 désigne les tokens à partir de 0 jusqu'au token 4, mais sans inclure le token 4.

Dans cet exemple, tu vas utiliser les objets Doc et Token de spaCy, et les attributs lexicaux pour trouver des pourcentages dans un texte. Tu vas chercher deux tokens consécutifs : un nombre et un symbole pourcentage.

  • Utilise l'attribut like_num pour vérifier si un token du doc ressemble à un nombre.
  • Obtiens le token suivant le token courant dans le document. L'indice du token suivant dans le doc est token.i + 1.
  • Vérifie si l'attribut text du token suivant est un symbole "%".

Pour obtenir le token situé à un indice, tu peux utiliser la notation indicielle sur le doc. Par exemple, doc[5] est le token situé à l'indice 5.

Qu'est-ce qui n'est pas inclus dans un paquet de pipeline et que tu peux charger dans spaCy ?

Tous les pipelines sauvegardés comportent un config.cfg qui définit la langue à initialiser, les composants de pipeline à charger ainsi que des détails sur la manière dont le pipeline a été entraîné et quels paramétrages ont été utilisés.

Les packages de pipelines incluent des poids binaires pour prédire les annotations linguistiques comme l'étiquetage de partie du discours, les relations de dépendance ou les entités nommées.

Les pipelines entraînés te permettent de généraliser à partir d'un jeu de données d'apprentissage. Une fois entraînés, ils utilisent les poids binaires pour effectuer des prédictions. Il n'est donc pas nécessaire de les fournir avec leurs données d'apprentissage.

Les packages de pipelines contiennent un strings.json qui stocke les entrées dans le vocabulaire du pipeline et la correspondance avec leurs hashs. Cela permet à spaCy de communiquer uniquement en hashs et de chercher la chaîne correspondante si nécessaire.

Les pipelines que nous utilisons dans ce cours sont déjà pré-installés. Pour plus d'informations sur les pipelines entraînés de spaCy et la manière de les installer sur ta machine, consulte la documentation.

  • Utilise spacy.load pour charger le petit modèle français "fr_core_news_sm".
  • Traite le texte et affiche le texte du document.

Pour charger un pipeline, appelle spacy.load avec la chaîne de caractères qui le désigne. Les noms des pipelines diffèrent selon les langues et les données sur lesquelles ils ont été entraînés - donc fais attention à utiliser le bon nom.

Tu vas maintenant pouvoir essayer un des paquets de pipelines pré-entraînés de spaCy et le voir effectuer des prédictions. N'hésite pas à le tester avec ton propre texte ! Pour savoir ce que signifie une étiquette ou un label, tu peux appeler spacy.explain dans la boucle. Par exemple : spacy.explain("PROPN") ou spacy.explain("GPE").

Partie 1

  • Traite le texte avec l'objet nlp et crée un doc.
  • Pour chaque token, affiche le texte du token, le .pos_ du token (étiquette de partie du discours) et le .dep_ du token (relation de dépendance).

Pour créer un doc, appelle l'objet nlp avec une chaîne de caractères en argument. Rappelle-toi que tu dois utiliser les noms d'attributs avec un tiret bas pour obtenir les valeurs de la chaîne.

Partie 2

  • Traite le texte et crée un objet doc.
  • Itère sur les doc.ents et affiche le texte de l'entité et son attribut label_.

Pour créer un doc, appelle l'objet nlp avec une chaîne de caractères en argument. Rappelle-toi que tu dois utiliser les noms d'attributs avec un tiret bas pour obtenir les valeurs de la chaîne.

Les modèles sont statistiques et pas toujours exacts. La justesse de leurs prédictions dépend du jeu de données d'apprentissage et du texte que tu traites. Voyons cela avec un exemple.

  • Traite le texte avec l'objet nlp.
  • Itère sur les entités et affiche le texte et le label de chaque entité.
  • Il semble que le modèle n'a pas prédit correctement "X Pro". Crée un span manuellement pour ces tokens.
  • Pour créer un doc, appelle l'objet nlp sur le texte. Les entités nommées sont accessibles avec l'attribut doc.ents.
  • La manière la plus facile de créer un objet Span est d'utiliser la notation par portion – par exemple doc[5:10] pour le token depuis la position 5 jusqu'à la position 10. N'oublie pas que la dernière position d'indice du token n'est pas incluse.

Essayons le Matcher de spaCy basé sur des règles. Tu vas utiliser l'exemple de l'exercice précédent et écrire un motif pour trouver l'expression "X Pro" dans le texte.

  • Importe le Matcher depuis spacy.matcher.
  • Initialise-le avec le vocab partagé de l'objet nlp.
  • Crée un motif qui corresponde avec les valeurs de "TEXT" de deux tokens : "X" et "Pro".
  • Utilise la méthode matcher.add pour ajouter le motif au matcher.
  • Appelle le matcher sur le doc et affecte le résultat à la variable matches.
  • Itère sur les correspondances et obtiens les spans correspondants depuis l'indice start jusqu'à l'indice end.
  • Le vocabulaire partagé est accessible avec l'attribut nlp.vocab.
  • Un motif est une liste de dictionnaires dont les clés sont des noms d'attributs. Par exemple, [{"TEXT": "Hello"}] recherchera un token dont le texte exact est "Hello".
  • Les valeurs start et end de chaque correspondance indiquent les indices de début et de fin du span trouvé. Pour obtenir le span, tu peux créer une portion du doc en utilisant les valeurs fournies de début et de fin.

Dans cet exercice, tu vas t'entraîner à écrire des motifs de correspondance plus complexes qui utilisent différents attributs des tokens et des opérateurs.

Partie 1

  • Écris un motif qui recherche uniquement les mentions de versions complètes d'iOS : "iOS 7", "iOS 11" et "iOS 10".
  • Pour obtenir la correspondance d'un token avec un texte exact, tu peux utiliser l'attribut TEXT. Par exemple, {"TEXT": "Apple"} recherchera des tokens dont le texte est exactement "Apple".
  • Pour rechercher un token numérique, tu peux utiliser l'attribut "IS_DIGIT", qui retournera True pour les tokens constitués uniquement de nombres.

Partie 2

  • Écris un motif qui recherche uniquement des formes de "télécharger" (tokens avec le lemme "télécharger"), suivies par un token avec l'étiquette de partie de discours "PROPN" (nom propre).
  • Pour spécifier un lemme, tu peux utiliser l'attribut "LEMMA" dans le motif du token. Par exemple, {"LEMMA": "être"} trouvera des tokens comme "est", "était" ou "serait".
  • Pour trouver des noms propres, tu pourras chercher tous les tokens dont la valeur de "POS" est "PROPN".

Partie 3

  • Écris un motif qui recherche un nom "NOUN" suivi par un ou deux adjectifs ("ADJ"), c'est-à-dire un adjectif et un adjectif optionnel.
  • Pour trouver des adjectifs, recherche les tokens dont la valeur de "POS" est "ADJ". Pour des noms, recherche "NOUN".
  • Des opérateurs peuvent être ajoutés avec la clé "OP" key. Par exemple, "OP": "?" pour zéro ou une correspondance.