Dans cet article, nous discuterons de la vectorisation – une technique PNL, et comprendrons son importance avec un guide complet sur les différents types de vectorisation.
Nous avons discuté des concepts fondamentaux du prétraitement NLP et du nettoyage de texte. Nous avons examiné les bases du NLP, ses diverses applications et techniques telles que la tokenisation, la normalisation, la standardisation et le nettoyage de texte.
Avant de discuter de la vectorisation, révisons ce qu’est la tokenisation et en quoi elle diffère de la vectorisation.
Table des matières
Qu’est-ce que la tokenisation ?
La tokenisation est le processus de décomposition des phrases en unités plus petites appelées jetons. Token aide les ordinateurs à comprendre et à travailler facilement avec du texte.
EX. « Cet article est bon »
Jetons- [‘This’, ‘article’, ‘is’, ‘good’.]
Qu’est-ce que la vectorisation ?
Comme nous le savons, les modèles et algorithmes d’apprentissage automatique comprennent les données numériques. La vectorisation est un processus de conversion de données textuelles ou catégorielles en vecteurs numériques. En convertissant les données en données numériques, vous pouvez entraîner votre modèle avec plus de précision.
Pourquoi avons-nous besoin de vectorisation ?
❇️ La tokenisation et la vectorisation ont une importance différente dans le traitement du langage naturel (NPL). La tokenisation divise les phrases en petits jetons. La vectorisation le convertit en un format numérique afin que le modèle informatique/ML puisse le comprendre.
❇️ La vectorisation est non seulement utile pour le convertir sous forme numérique, mais également pour capturer une signification sémantique.
❇️ La vectorisation peut réduire la dimensionnalité des données et les rendre plus efficaces. Cela pourrait être très utile lorsque vous travaillez sur un grand ensemble de données.
❇️ De nombreux algorithmes d’apprentissage automatique nécessitent une entrée numérique, comme les réseaux de neurones, pour que la vectorisation puisse nous aider.
Il existe différents types de techniques de vectorisation, que nous allons comprendre à travers cet article.
Sac de mots
Si vous avez un tas de documents ou de phrases et que vous souhaitez les analyser, un sac de mots simplifie ce processus en traitant le document comme un sac rempli de mots.
L’approche du sac de mots peut être utile dans la classification de textes, l’analyse des sentiments et la récupération de documents.
Supposons que vous travailliez sur beaucoup de texte. Un sac de mots vous aidera à représenter des données textuelles en créant un vocabulaire de mots uniques dans nos données textuelles. Après avoir créé le vocabulaire, il encodera chaque mot sous forme de vecteur en fonction de la fréquence (la fréquence à laquelle chaque mot apparaît dans ce texte) de ces mots.
Ces vecteurs sont constitués de nombres non négatifs (0,1,2…..) qui représentent le nombre de fréquences dans ce document.
Le sac de mots comporte trois étapes :
Étape 1 : tokenisation
Cela divisera les documents en jetons.
Ex – (Phrase : « J’aime la pizza et j’aime les hamburgers »)
Étape 2 : Séparation de mots/création de vocabulaire unique
Créez une liste de tous les mots uniques qui apparaissent dans vos phrases.
[“I”, “love”, “Pizza”, “and”, “Burgers”]
Étape 3 : Comptage des occurrences de mots/création de vecteurs
Cette étape comptera combien de fois chaque mot du vocabulaire est répété et le stockera dans une matrice clairsemée. Dans la matrice clairsemée, chaque ligne d’un vecteur de phrase dont la longueur (les colonnes de la matrice) est égale à la taille du vocabulaire.
Importer CountVectorizer
Nous allons importer CountVectorizer pour entraîner notre modèle Sac de mots
from sklearn.feature_extraction.text import CountVectorizer
Créer un vecteur
Dans cette étape, nous allons créer notre modèle à l’aide de CountVectorizer et l’entraîner à l’aide de notre exemple de document texte.
# Sample text documents documents = [ "This is the first document.", "This document is the second document.", "And this is the third one.", "Is this the first document?", ] # Create a CountVectorizer cv = CountVectorizer()
# Fit and Transform X = cv.fit_transform(documents)
Convertir en un tableau dense
Dans cette étape, nous allons convertir nos représentations en tableau dense. Nous obtiendrons également des noms de fonctionnalités ou des mots.
# Get the feature names/words feature_names = vectorizer.get_feature_names_out() # Convert to dense array X_dense = X.toarray()
Imprimons la matrice des termes du document et les mots caractéristiques
# Print the DTM and feature names print("Document-Term Matrix (DTM):") print(X_dense) print("\nFeature Names:") print(feature_names)
Document – Matrice de termes (DTM) :
Matrice
Noms des fonctionnalités :
Mots caractéristiques
Comme vous pouvez le voir, les vecteurs sont constitués de nombres non négatifs (0,1,2……) qui représentent la fréquence des mots dans le document.
Nous disposons de quatre exemples de documents texte et nous avons identifié neuf mots uniques à partir de ces documents. Nous avons stocké ces mots uniques dans notre vocabulaire en leur attribuant des « noms de fonctionnalités ».
Ensuite, notre modèle Bag of Words vérifie si le premier mot unique est présent dans notre premier document. S’il est présent, il attribue la valeur 1, sinon il attribue 0.
Si le mot apparaît plusieurs fois (par exemple 2 fois), il attribue une valeur en conséquence.
Par exemple, dans le deuxième document, le mot « document » est répété deux fois, sa valeur dans la matrice sera donc 2.
Si nous voulons un seul mot comme caractéristique dans la clé de vocabulaire – représentation Unigram.
n – grammes = Unigrammes, bigrammes…….etc.
Il existe de nombreuses bibliothèques comme scikit-learn pour implémenter un sac de mots : Keras, Gensim et autres. C’est simple et peut être utile dans différents cas.
Mais Bag of Words est plus rapide mais il présente certaines limites.
Pour résoudre ce problème, nous pouvons choisir de meilleures approches, l’une d’elles est TF-IDF. Comprenons en détail.
TF-IDF
TF-IDF, ou Term Frequency – Inverse Document Frequency, est une représentation numérique permettant de déterminer l’importance des mots dans le document.
Pourquoi avons-nous besoin de TF-IDF plutôt que de Bag of Words ?
Un sac de mots traite tous les mots de la même manière et ne concerne que la fréquence des mots uniques dans les phrases. TF-IDF accorde de l’importance aux mots dans un document en considérant à la fois la fréquence et l’unicité.
Les mots répétés trop souvent n’écrasent pas les mots moins fréquents et plus importants.
TF : La fréquence des termes mesure l’importance d’un mot dans une seule phrase.
IDF : la fréquence inverse des documents mesure l’importance d’un mot dans l’ensemble de la collection de documents.
TF = Fréquence des mots dans un document / Nombre total de mots dans ce document
DF = Document contenant le mot w / Nombre total de documents
IDF = log (Nombre total de documents / Documents contenant le mot w)
Tsahal est réciproque de DF. La raison derrière cela est que plus le mot est courant dans tous les documents, moins son importance dans le document actuel.
Score final TF-IDF : TF-IDF = TF * IDF
C’est un moyen de découvrir quels mots sont communs dans un seul document et uniques dans tous les documents. Ces mots peuvent être utiles pour trouver le thème principal du document.
Par exemple,
Doc1 = « J’adore l’apprentissage automatique »
Doc2 = « J’adore toptips.fr »
Nous devons trouver la matrice TF-IDF pour nos documents.
Tout d’abord, nous créerons un vocabulaire de mots uniques.
Vocabulaire = [“I,” “love,” “machine,” “learning,” “Geekflare”]
Nous avons donc 5 cinq mots. Trouvons TF et IDF pour ces mots.
TF = Fréquence des mots dans un document / Nombre total de mots dans ce document
TF :
- Pour « I » = TF pour Doc1 : 1/4 = 0,25 et pour Doc2 : 1/3 ≈ 0,33
- Pour « love » : TF pour Doc1 : 1/4 = 0,25 et pour Doc2 : 1/3 ≈ 0,33
- Pour « Machine » : TF pour Doc1 : 1/4 = 0,25 et pour Doc2 : 0/3 ≈ 0
- Pour « Apprentissage » : TF pour Doc1 : 1/4 = 0,25 et pour Doc2 : 0/3 ≈ 0
- Pour « toptips.fr » : TF pour Doc1 : 0/4 = 0 et pour Doc2 : 1/3 ≈ 0,33
Maintenant, calculons l’IDF.
IDF = log (Nombre total de documents / Documents contenant le mot w)
FDI :
- Pour « I » : IDF est log(2/2) = 0
- Pour « amour » : IDF est log(2/2) = 0
- Pour « Machine » : IDF est log(2/1) = log(2) ≈ 0,69
- Pour « Apprentissage » : IDF est log(2/1) = log(2) ≈ 0,69
- Pour « toptips.fr » : IDF est log(2/1) = log(2) ≈ 0,69
Maintenant, calculons le score final de TF-IDF :
- Pour « I » : TF-IDF pour Doc1 : 0,25 * 0 = 0 et TF-IDF pour Doc2 : 0,33 * 0 = 0
- Pour « love » : TF-IDF pour Doc1 : 0,25 * 0 = 0 et TF-IDF pour Doc2 : 0,33 * 0 = 0
- Pour « Machine » : TF-IDF pour Doc1 : 0,25 * 0,69 ≈ 0,17 et TF-IDF pour Doc2 : 0 * 0,69 = 0
- Pour « Learning » : TF-IDF pour Doc1 : 0,25 * 0,69 ≈ 0,17 et TF-IDF pour Doc2 : 0 * 0,69 = 0
- Pour « toptips.fr » : TF-IDF pour Doc1 : 0 * 0,69 = 0 et TF-IDF pour Doc2 : 0,33 * 0,69 ≈ 0,23
La matrice TF-IDF ressemble à ceci :
I love machine learning toptips.fr Doc1 0.0 0.0 0.17 0.17 0.0 Doc2 0.0 0.0 0.0 0.0 0.23
Les valeurs d’une matrice TF-IDF vous indiquent l’importance de chaque terme dans chaque document. Des valeurs élevées indiquent qu’un terme est important dans un document particulier, tandis que des valeurs faibles suggèrent que le terme est moins important ou moins courant dans ce contexte.
TF-IDF est principalement utilisé dans la classification de texte, la création de récupération d’informations sur les chatbots et le résumé de texte.
Importer TfidfVectorizer
Importons TfidfVectorizer depuis sklearn
from sklearn.feature_extraction.text import TfidfVectorizer
Créer un vecteur
Comme vous voulez le voir, nous allons créer notre modèle Tf Idf en utilisant TfidfVectorizer.
# Sample text documents text = [ "This is the first document.", "This document is the second document.", "And this is the third one.", "Is this the first document?", ] # Create a TfidfVectorizer cv = TfidfVectorizer()
Créer une matrice TF-IDF
Entraîneons notre modèle en fournissant du texte. Après cela, nous convertirons la matrice représentative en tableau dense.
# Fit and transform to create the TF-IDF matrix X = cv.fit_transform(text)
# Get the feature names/words feature_names = vectorizer.get_feature_names_out() # Convert the TF-IDF matrix to a dense array for easier manipulation (optional) X_dense = X.toarray()
Imprimer la matrice TF-IDF et les mots caractéristiques
# Print the TF-IDF matrix and feature words print("TF-IDF Matrix:") print(X_dense) print("\nFeature Names:") print(feature_names)
Matrice TF-IDF :
Mots caractéristiques
Comme vous pouvez le constater, ces nombres entiers décimaux indiquent l’importance des mots dans des documents spécifiques.
Vous pouvez également combiner des mots en groupes de 2,3,4, etc. en utilisant des n-grammes.
Il existe d’autres paramètres que nous pouvons inclure : min_df, max_feature, subliner_tf, etc.
Jusqu’à présent, nous avons exploré les techniques de base basées sur la fréquence.
Mais TF-IDF ne peut pas fournir une signification sémantique et une compréhension contextuelle du texte.
Comprenons les techniques plus avancées qui ont changé le monde de l’intégration de mots et qui sont les meilleures pour la signification sémantique et la compréhension contextuelle.
Mot2Vec
Word2vec est un populaire intégration de mots (type de vecteur de mot et utile pour capturer la similarité sémantique et syntaxique) en PNL. Ceci a été développé par Tomas Mikolov et son équipe chez Google en 2013. Word2vec représente les mots comme des vecteurs continus dans un espace multidimensionnel.
Word2vec vise à représenter les mots d’une manière qui capture leur signification sémantique. Les vecteurs de mots générés par word2vec sont positionnés dans un espace vectoriel continu.
Ex – Les vecteurs « Chat » et « Chien » seraient plus proches que les vecteurs « chat » et « fille ».
Source: usna.edu
Deux architectures de modèles peuvent être utilisées par word2vec pour créer une intégration de mots.
CBOW : sac continu de mots ou CBOW tente de prédire un mot en faisant la moyenne de la signification des mots proches. Il prend un nombre fixe ou une fenêtre de mots autour du mot cible, puis le convertit sous forme numérique (intégration), puis fait la moyenne de tout et utilise cette moyenne pour prédire le mot cible avec le réseau neuronal.
Cible ex-Predict : « Renard »
Mots de phrase : « le », « rapide », « marron », « saute », « par-dessus », « le »
Mot2Vec
- CBOW prend une fenêtre de taille fixe (nombre) de mots comme 2 (2 à gauche et 2 à droite)
- Convertir en intégration de mots.
- CBOW fait la moyenne du mot intégration.
- CBOW fait la moyenne des mots intégrés aux mots contextuels.
- Le vecteur moyenné tente de prédire un mot cible à l’aide d’un réseau neuronal.
Maintenant, comprenons en quoi skip-gram est différent de CBOW.
Skip-gram : Il s’agit d’un modèle d’intégration de mots, mais il fonctionne différemment. Au lieu de prédire le mot cible, skip-gram prédit les mots contextuels en fonction des mots cibles.
Skip-grams est plus efficace pour capturer les relations sémantiques entre les mots.
Ex- ‘Roi – Hommes + Femmes = Reine’
Si vous souhaitez travailler avec Word2Vec, vous avez deux choix : soit vous pouvez entraîner votre propre modèle, soit utiliser un modèle pré-entraîné. Nous passerons par un modèle pré-entraîné.
Importer des gensim
Vous pouvez installer gensim en utilisant pip install :
pip install gensim
Tokenisez la phrase en utilisant word_tokenize :
Tout d’abord, nous allons convertir les phrases en versions inférieures. Après cela, nous symboliserons nos phrases en utilisant word_tokenize.
# Import necessary libraries from gensim.models import Word2Vec from nltk.tokenize import word_tokenize # Sample sentences sentences = [ "I love thor", "Hulk is an important member of Avengers", "Ironman helps Spiderman", "Spiderman is one of the popular members of Avengers", ] # Tokenize the sentences tokenized_sentences = [word_tokenize(sentence.lower()) for sentence in sentences]
Entraîneons notre modèle :
Nous entraînerons notre modèle en fournissant des phrases symbolisées. Nous utilisons 5 fenêtres pour ce modèle de formation, vous pouvez l’adapter selon vos besoins.
# Train a Word2Vec model model = Word2Vec(sentences=tokenized_sentences, vector_size=100, window=5, min_count=1, sg=0) # Find similar words similar_words = model.wv.most_similar("avengers")
# Print similar words print("Similar words to 'avengers':") for word, score in similar_words: print(f"{word}: {score}")
Mots similaires à ‘vengeurs’ :
Similitude Word2Vec
Voici quelques-uns des mots similaires à « avengers » basés sur le modèle Word2Vec, ainsi que leurs scores de similarité.
Le modèle calcule un score de similarité (principalement une similarité cosinus) entre les mots vecteurs de « Avengers » et d’autres mots de son vocabulaire. Le score de similarité indique à quel point deux mots sont étroitement liés dans l’espace vectoriel.
Ex –
Ici, le mot « aide » avec une similarité cosinus -0,005911458611011982 avec le mot « avengers ». La valeur négative suggère qu’ils pourraient être différents les uns des autres.
Les valeurs de similarité cosinus vont de -1 à 1, où :
- 1 indique que les deux vecteurs sont identiques et présentent une similarité positive.
- Les valeurs proches de 1 indiquent une similarité positive élevée.
- Les valeurs proches de 0 indiquent que les vecteurs ne sont pas fortement liés.
- Des valeurs proches de -1 indiquent une forte dissimilarité.
- -1 indique que les deux vecteurs sont totalement opposés et présentent une parfaite similarité négative.
Visitez ceci lien si vous souhaitez une meilleure compréhension des modèles word2vec et une représentation visuelle de leur fonctionnement. C’est un outil vraiment sympa pour voir CBOW et skip-gram en action.
Semblable à Word2Vec, nous avons GloVe. GloVe peut produire des intégrations qui nécessitent moins de mémoire que Word2Vec. Apprenons-en davantage sur GloVe.
Gant
Les vecteurs globaux pour la représentation des mots (GloVe) sont une technique comme word2vec. Il est utilisé pour représenter des mots sous forme de vecteurs dans un espace continu. Le concept derrière GloVe est le même que celui de Word2Vec : il produit des intégrations de mots contextuelles tout en prenant en compte les performances supérieures de Word2Vec.
Pourquoi avons-nous besoin de GloVe ?
Word2vec est une méthode basée sur une fenêtre et utilise des mots proches pour comprendre les mots. Cela signifie que la signification sémantique du mot cible n’est affectée que par les mots qui l’entourent dans les phrases, ce qui constitue une utilisation inefficace des statistiques.
Alors que GloVe capture à la fois des statistiques mondiales et locales avec l’intégration de mots.
Quand utiliser GloVe ?
Utilisez GloVe lorsque vous souhaitez une intégration de mots qui capture des relations sémantiques plus larges et une association globale de mots.
GloVe est meilleur que les autres modèles sur les tâches de reconnaissance d’entités nommées, d’analogie de mots et de similarité de mots.
Tout d’abord, nous devons installer Gensim :
pip install gensim
Étape 1 : Nous allons installer des bibliothèques importantes
# Import the required libraries import numpy as np import matplotlib.pyplot as plt from sklearn.manifold import TSNE import gensim.downloader as api
Étape 2 : Importer le modèle de gant
import gensim.downloader as api glove_model = api.load('glove-wiki-gigaword-300')
Étape 3 : Récupérer la représentation vectorielle du mot « mignon »
glove_model["cute"]
Vecteur pour le mot « mignon »
Ces valeurs capturent la signification du mot et ses relations avec d’autres mots. Les valeurs positives indiquent des associations positives avec certains concepts, tandis que les valeurs négatives indiquent des associations négatives avec d’autres concepts.
Dans un modèle GloVe, chaque dimension du vecteur de mot représente un certain aspect de la signification ou du contexte du mot.
Les valeurs négatives et positives de ces dimensions contribuent à la façon dont « mignon » est sémantiquement lié aux autres mots du vocabulaire du modèle.
Les valeurs peuvent être différentes selon les modèles. Trouvons des mots similaires au mot « garçon »
Top 10 des mots similaires qui, selon le modèle, ressemblent le plus au mot « garçon »
# find similar word glove_model.most_similar("boy")
Top 10 des mots similaires à ‘garçon’
Comme vous pouvez le constater, le mot le plus similaire à « garçon » est « fille ».
Nous allons maintenant essayer de déterminer avec quelle précision le modèle obtiendra une signification sémantique à partir des mots fournis.
glove_model.most_similar(positive=['boy', 'queen'], negative=['girl'], topn=1)
Le mot le plus pertinent pour «reine»
Notre modèle est capable de trouver une relation parfaite entre les mots.
Définir une liste de vocabulaire :
Essayons maintenant de comprendre la signification sémantique ou la relation entre les mots à l’aide d’une intrigue. Définissez la liste de mots que vous souhaitez visualiser.
# Define the list of words you want to visualize vocab = ["boy", "girl", "man", "woman", "king", "queen", "banana", "apple", "mango", "cow", "coconut", "orange", "cat", "dog"]
Créer une matrice d’intégration :
Écrivons du code pour créer une matrice d’intégration.
# Your code for creating the embedding matrix EMBEDDING_DIM = glove_model.vectors.shape[1] word_index = {word: index for index, word in enumerate(vocab)} num_words = len(vocab) embedding_matrix = np.zeros((num_words, EMBEDDING_DIM)) for word, i in word_index.items(): embedding_vector = glove_model[word] if embedding_vector is not None: embedding_matrix[i] = embedding_vector
Définir une fonction pour la visualisation t-SNE :
À partir de ce code, nous définirons la fonction de notre tracé de visualisation.
def tsne_plot(embedding_matrix, words): tsne_model = TSNE(perplexity=3, n_components=2, init="pca", random_state=42) coordinates = tsne_model.fit_transform(embedding_matrix) x, y = coordinates[:, 0], coordinates[:, 1] plt.figure(figsize=(14, 8)) for i, word in enumerate(words): plt.scatter(x[i], y[i]) plt.annotate(word, xy=(x[i], y[i]), xytext=(2, 2), textcoords="offset points", ha="right", va="bottom") plt.show()
Voyons à quoi ressemble notre intrigue :
# Call the tsne_plot function with your embedding matrix and list of words tsne_plot(embedding_matrix, vocab)
tracé t-SNE
Ainsi, comme nous pouvons le voir, il y a des mots comme « banane », « mangue », « orange », « noix de coco » et « pomme » sur le côté gauche de notre intrigue. Alors que « vache », « chien » et « chat » se ressemblent parce que ce sont des animaux.
Ainsi, notre modèle peut également trouver une signification sémantique et des relations entre les mots !
En changeant simplement le vocabulaire ou en créant votre modèle à partir de zéro, vous pouvez expérimenter différents mots.
Vous pouvez utiliser cette matrice d’intégration comme bon vous semble. Il peut être appliqué uniquement aux tâches de similarité de mots ou intégré à la couche d’intégration d’un réseau neuronal.
GloVe s’entraîne sur une matrice de cooccurrence pour en dériver une signification sémantique. Elle repose sur l’idée que les cooccurrences mot-mot constituent un élément de connaissance essentiel et que leur utilisation constitue un moyen efficace d’utiliser les statistiques pour produire des intégrations de mots. C’est ainsi que GloVe parvient à ajouter des « statistiques mondiales » au produit final.
Et c’est GloVe ; Une autre méthode populaire de vectorisation est FastText. Discutons-en davantage.
Texte rapide
FastText est une bibliothèque open source introduite par l’équipe AI Research de Facebook pour la classification de texte et l’analyse des sentiments. FastText fournit des outils pour entraîner l’intégration de mots, qui sont des mots vectoriels denses. Ceci est utile pour capturer la signification sémantique du document. FastText prend en charge la classification multi-étiquettes et multi-classes.
Pourquoi FastText ?
FastText est meilleur que les autres modèles en raison de sa capacité à généraliser à des mots inconnus, ce qui manquait dans d’autres méthodes. FastText fournit des vecteurs de mots pré-entraînés pour différentes langues, ce qui pourrait être utile dans diverses tâches où nous avons besoin de connaissances préalables sur les mots et leur signification.
FastText et Word2Vec
Comment ça marche?
Comme nous en avons discuté, d’autres modèles, comme Word2Vec et GloVe, utilisent des mots pour l’intégration de mots. Mais l’élément constitutif de FastText est constitué de lettres plutôt que de mots. Ce qui signifie qu’ils utilisent des lettres pour intégrer des mots.
Utiliser des caractères plutôt que des mots présente un autre avantage. Moins de données sont nécessaires pour la formation. Au fur et à mesure qu’un mot devient son contexte, davantage d’informations peuvent être extraites du texte.
L’intégration de mots obtenue via FastText est une combinaison d’intégrations de niveau inférieur.
Voyons maintenant comment FastText utilise les informations sur les sous-mots.
Disons que nous avons le mot « lecture ». Pour ce mot, des n-grammes de caractères de longueur 3 à 6 seraient générés comme suit :
- Le début et la fin sont indiqués par des crochets angulaires.
- Le hachage est utilisé car il peut y avoir un grand nombre de n-grammes ; au lieu d’apprendre une intégration pour chaque n-gramme distinct, nous apprenons les intégrations totales B, où B représente la taille du seau. La taille de 2 millions de seaux a été utilisée dans le document original.
- Chaque n-gramme de caractère, tel que « eadi », est mappé sur un entier compris entre 1 et B à l’aide de cette fonction de hachage, et cet index a l’intégration correspondante.
- En faisant la moyenne de ces intégrations de n-grammes constitutifs, l’intégration de mots complète est alors obtenue.
- Même si cette approche de hachage entraîne des collisions, elle aide dans une large mesure à gérer la taille du vocabulaire.
- Le réseau utilisé dans FastText est similaire à Word2Vec. Tout comme là-bas, nous pouvons entraîner le FastText dans deux modes : CBOW et skip-gram. Nous n’avons donc pas besoin de répéter cette partie ici.
Vous pouvez entraîner votre propre modèle ou utiliser un modèle pré-entraîné. Nous allons utiliser un modèle pré-entraîné.
Tout d’abord, vous devez installer FastText.
pip install fasttext
Nous utiliserons un ensemble de données constitué de textes conversationnels concernant quelques médicaments, et nous devons classer ces textes en 3 types. Comme avec le type de drogues auxquelles ils sont associés.
Base de données
Désormais, pour entraîner un modèle FastText sur n’importe quel ensemble de données, nous devons préparer les données d’entrée dans un certain format, à savoir :
__label__
Faisons cela également pour notre ensemble de données.
all_texts = train['text'].tolist() all_labels = train['drug type'].tolist() prep_datapoints=[] for i in range(len(all_texts)): sample="__label__"+ str(all_labels[i]) + ' '+ all_texts[i] prep_datapoints.append(sample)
prep_datapoints
Nous avons omis beaucoup de prétraitement dans cette étape. Sinon, notre article sera trop volumineux. Dans les problèmes du monde réel, il est préférable d’effectuer un prétraitement pour rendre les données adaptées à la modélisation.
Maintenant, écrivez les points de données préparés dans un fichier .txt.
with open('train_fasttext.txt','w') as f: for datapoint in prep_datapoints: f.write(datapoint) f.write('n') f.close()
Entraîneons notre modèle.
model = fasttext.train_supervised('train_fasttext.txt')
Nous obtiendrons les prédictions de notre modèle.
Le modèle prédit l’étiquette et lui attribue un score de confiance.
Comme pour tout autre modèle, les performances de celui-ci dépendent de diverses variables, mais si vous souhaitez avoir une idée rapide de la précision attendue, FastText pourrait être une excellente option.
Conclusion
En conclusion, les méthodes de vectorisation de texte telles que Bag of Words (BoW), TF-IDF, Word2Vec, GloVe et FastText offrent une variété de fonctionnalités pour les tâches PNL.
Alors que Word2Vec capture la sémantique des mots et s’adapte à une variété de tâches de PNL, BoW et TF-IDF sont simples et adaptés à la classification et à la recommandation de textes.
Pour des applications telles que l’analyse des sentiments, GloVe propose des intégrations pré-entraînées, et FastText fonctionne bien au niveau de l’analyse des sous-mots, ce qui le rend utile pour les langues structurellement riches et la reconnaissance d’entités.
Le choix de la technique dépend de la tâche, des données et des ressources. Nous discuterons plus en profondeur des complexités de la PNL au fur et à mesure de la progression de cette série. Bon apprentissage!
Ensuite, découvrez les meilleurs cours de PNL pour apprendre le traitement du langage naturel.