Qu'est-ce que l'intégration de mots?
L'incorporation de mots est un type de représentation de mots qui permet aux mots ayant une signification similaire d'être compris par des algorithmes d'apprentissage automatique. Techniquement parlant, il s'agit d'une cartographie des mots en vecteurs de nombres réels à l'aide du réseau neuronal, du modèle probabiliste ou de la réduction de dimension sur la matrice de cooccurrence de mots. C'est la modélisation du langage et la technique d'apprentissage des fonctionnalités. L'incorporation de mots est un moyen d'effectuer un mappage à l'aide d'un réseau neuronal. Il existe différents modèles d'incorporation de mots tels que word2vec (Google), Glove (Stanford) et le plus rapide (Facebook).
L'incorporation de mots est également appelée modèle sémantique distribué ou espace vectoriel représenté ou sémantique distribué ou modèle d'espace vectoriel. En lisant ces noms, vous rencontrez le mot sémantique qui signifie catégoriser des mots similaires ensemble. Par exemple, les fruits comme la pomme, la mangue, la banane doivent être placés à proximité tandis que les livres seront loin de ces mots. Dans un sens plus large, l'incorporation de mots créera le vecteur de fruits qui sera placé loin de la représentation vectorielle des livres.
Dans ce tutoriel, vous apprendrez
- Qu'est-ce que l'intégration de mots?
- Où est utilisé Word Embedding?
- Qu'est-ce que word2vec?
- Que fait word2vec?
- Pourquoi Word2vec?
- Architecture de Word2vec
- Sac continu de mots.
- Modèle Skip-Gram
- La relation entre Word2vec et NLTK
- Activateurs et Word2Vec
- Qu'est-ce que Gensim?
- Implémentation du code de word2vec avec Gensim
Où est utilisé Word Embedding?
L'incorporation de Word facilite la génération d'entités, le regroupement de documents, la classification de texte et les tâches de traitement du langage naturel. Énumérons-les et discutons de chacune de ces applications.
- Calculer des mots similaires: l' incorporation de mots est utilisée pour suggérer des mots similaires au mot soumis au modèle de prédiction. Parallèlement à cela, il suggère également des mots différents, ainsi que les mots les plus courants.
- Créez un groupe de mots apparentés: il est utilisé pour le regroupement sémantique qui regroupera des éléments de caractéristique similaire ensemble et dissemblables loin.
- Fonctionnalité de classification de texte: le texte est mappé dans des tableaux de vecteurs qui sont transmis au modèle pour l'apprentissage ainsi que la prédiction. Les modèles de classificateurs basés sur du texte ne peuvent pas être entraînés sur la chaîne, ce qui convertira le texte en une forme entraînable par machine. En outre, ses fonctionnalités de construction d'une aide sémantique dans la classification basée sur du texte.
- Le regroupement de documents est une autre application où l'incorporation de mots est largement utilisée
- Traitement du langage naturel: il existe de nombreuses applications dans lesquelles l'incorporation de mots est utile et l'emporte sur les phases d'extraction de fonctionnalités telles que des parties du balisage de la parole, de l'analyse sentimentale et de l'analyse syntaxique.
Nous avons maintenant une certaine connaissance de l'incorporation de mots. Un peu de lumière est également jetée sur différents modèles pour implémenter l'incorporation de mots. L'ensemble de ce tutoriel est axé sur l'un des modèles (word2vec).
Qu'est-ce que word2vec?
Word2vec est la technique / le modèle pour produire l'incorporation de mots pour une meilleure représentation des mots. Il capture un grand nombre de relations de mots syntaxiques et sémantiques précises. C'est un réseau neuronal à deux couches peu profond. Avant d'aller plus loin, veuillez voir la différence entre un réseau de neurones peu profond et profond:
Le réseau neuronal peu profond se compose de la seule couche cachée entre l'entrée et la sortie, tandis que le réseau neuronal profond contient plusieurs couches cachées entre l'entrée et la sortie. L'entrée est soumise à des nœuds tandis que la couche cachée, ainsi que la couche de sortie, contient des neurones.
Figure: Apprentissage superficiel et apprentissage profond
word2vec est un réseau à deux couches où il y a une couche cachée d'entrée et une sortie.
Word2vec a été développé par un groupe de chercheurs dirigé par Tomas Mikolov chez Google. Word2vec est meilleur et plus efficace que le modèle d'analyse sémantique latente.
Que fait word2vec?
Word2vec représente des mots dans une représentation d'espace vectoriel. Les mots sont représentés sous forme de vecteurs et le placement est fait de telle manière que des mots de sens similaire apparaissent ensemble et que des mots différents sont situés loin. Ceci est également appelé une relation sémantique. Les réseaux de neurones ne comprennent pas le texte au lieu de cela, ils ne comprennent que des nombres. L'incorporation de mots fournit un moyen de convertir du texte en vecteur numérique.
Word2vec reconstruit le contexte linguistique des mots. Avant d'aller plus loin, comprenons, qu'est-ce que le contexte linguistique? Dans un scénario de vie général, lorsque nous parlons ou écrivons pour communiquer, d'autres personnes essaient de comprendre quel est l'objectif de la phrase. Par exemple, "Quelle est la température de l'Inde", ici le contexte est que l'utilisateur souhaite connaître la "température de l'Inde" qui est le contexte. En bref, l'objectif principal d'une phrase est le contexte. Un mot ou une phrase entourant le langage parlé ou écrit (divulgation) aide à déterminer la signification du contexte. Word2vec apprend la représentation vectorielle des mots à travers les contextes.
Pourquoi Word2vec?
Avant l'intégration de mots
Il est important de savoir quelle approche est utilisée avant l'incorporation de mots et quels sont ses inconvénients, puis nous passerons au sujet de la façon dont les inconvénients sont surmontés par l'intégration de Word en utilisant l'approche word2vec. Enfin, nous allons déplacer le fonctionnement de word2vec car il est important de comprendre qu'il fonctionne.
Approche pour l'analyse sémantique latente
C'est l'approche qui était utilisée avant l'incorporation de mots. Il a utilisé le concept de Sac de mots où les mots sont représentés sous la forme de vecteurs codés. Il s'agit d'une représentation vectorielle clairsemée où la dimension est égale à la taille du vocabulaire. Si le mot apparaît dans le dictionnaire, il est compté, sinon non. Pour en savoir plus, veuillez consulter le programme ci-dessous.
from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())
Production:
[[1 2 1 1 1 1 1 1 1 1]]
[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']
Explication du code
- CountVectorizer est le module qui est utilisé pour stocker le vocabulaire en fonction de l'ajustement des mots qu'il contient. Ceci est importé de sklearn
- Créez l'objet en utilisant la classe CountVectorizer.
- Écrivez les données dans la liste à insérer dans le CountVectorizer.
- Les données sont adaptées à l'objet créé à partir de la classe CountVectorizer.
- Appliquez une approche par sac de mots pour compter les mots dans les données à l'aide du vocabulaire. Si le mot ou le jeton n'est pas disponible dans le vocabulaire, cette position d'index est mise à zéro.
- La variable de la ligne 5 qui est x est convertie en tableau (méthode disponible pour x). Cela fournira le nombre de chaque jeton dans la phrase ou la liste fournie à la ligne 3.
- Cela montrera les caractéristiques qui font partie du vocabulaire lorsqu'il est ajusté à l'aide des données de la ligne 4.
Dans l'approche sémantique latente, la ligne représente des mots uniques tandis que la colonne représente le nombre de fois où ce mot apparaît dans le document. C'est une représentation des mots sous la forme de la matrice de document. La fréquence inverse du document terme-fréquence (TFIDF) est utilisée pour compter la fréquence des mots dans le document qui est la fréquence du terme dans le document / fréquence du terme dans l'ensemble du corpus.
Défaut de la méthode du sac de mots
- Il ignore l'ordre du mot, par exemple, c'est mauvais = mauvais est-ce.
- Il ignore le contexte des mots. Supposons que si j'écris la phrase "Il aimait les livres. L'éducation se trouve mieux dans les livres". Cela créerait deux vecteurs, l'un pour «Il aimait les livres» et l'autre pour «L'éducation se trouve mieux dans les livres». Cela les traiterait tous les deux orthogonaux ce qui les rend indépendants, mais en réalité, ils sont liés les uns aux autres
Pour surmonter ces limitations, l'incorporation de mots a été développée et word2vec est une approche pour l'implémenter.
Comment fonctionne Word2vec?
Word2vec apprend le mot en prédisant son contexte environnant. Par exemple, prenons le mot «Il aime le football».
Nous voulons calculer le mot2vec pour le mot: aime.
Supposer
loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.
Word aime se déplace sur chaque mot du corpus. La relation syntaxique et sémantique entre les mots est codée. Cela aide à trouver des mots similaires et analogues.
Toutes les caractéristiques aléatoires du mot aime sont calculées. Ces fonctionnalités sont modifiées ou mises à jour concernant les mots voisins ou contextuels à l'aide d'une méthode de rétro-propagation.
Une autre façon d'apprendre est que si le contexte de deux mots est similaire ou si deux mots ont des caractéristiques similaires, ces mots sont liés.
Architecture de Word2vec
Il existe deux architectures utilisées par word2vec
- Sac continu de mots (CBOW)
- sauter gramme
Avant d'aller plus loin, expliquons pourquoi ces architectures ou modèles sont importants du point de vue de la représentation des mots. L'apprentissage de la représentation des mots n'est essentiellement pas supervisé, mais des cibles / étiquettes sont nécessaires pour entraîner le modèle. Skip-gram et CBOW convertissent la représentation non supervisée en forme supervisée pour la formation du modèle.
Dans CBOW, le mot courant est prédit à l'aide de la fenêtre des fenêtres contextuelles environnantes. Par exemple, si w i-1 , w i-2 , w i + 1 , w i + 2 reçoivent des mots ou un contexte, ce modèle fournira w i
Skip-Gram effectue l'opposé de CBOW, ce qui implique qu'il prédit la séquence ou le contexte donné à partir du mot. Vous pouvez inverser l'exemple pour le comprendre. Si w i est donné, cela prédira le contexte ou w i-1 , w i-2 , w i + 1 , w i + 2.
Word2vec offre une option pour choisir entre CBOW (Sac continu de mots) et skim-gram. Ces paramètres sont fournis lors de l'apprentissage du modèle. On peut avoir la possibilité d'utiliser un échantillonnage négatif ou une couche softmax hiérarchique.
Sac continu de mots.
Dessinez un diagramme simple pour comprendre le sac continu de l'architecture des mots.
Figure Sac continu d'architecture de mots
Calculons mathématiquement les équations. Supposons que V est la taille du vocabulaire et N la taille du calque caché. L'entrée est définie comme {x i-1 , x i-2, x i + 1, x i + 2 }. Nous obtenons la matrice de poids en multipliant V * N. Une autre matrice est obtenue en multipliant le vecteur d'entrée par la matrice de poids. Cela peut également être compris par l'équation suivante.
h = xi t W
où xi t ∧ W sont respectivement le vecteur d'entrée et la matrice de poids,
Pour calculer la correspondance entre le contexte et le mot suivant, veuillez vous référer à l'équation ci-dessous
u = représentation prédite * h
où la représentation prédite est obtenue model∧h dans l'équation ci-dessus.
Modèle Skip-Gram
L'approche Skip-Gram est utilisée pour prédire une phrase à partir d'un mot d'entrée. Pour mieux le comprendre, dessinons le diagramme.
Figure Modèle Skip-Gram
On peut le traiter comme l'inverse du modèle de sac continu de mots où l'entrée est le mot et le modèle fournit le contexte ou la séquence. Nous pouvons également conclure que la cible est transmise à la couche d'entrée et que la couche de sortie est répliquée plusieurs fois pour accueillir le nombre choisi de mots de contexte. Le vecteur d'erreur de toute la couche de sortie est additionné pour ajuster les poids via une méthode de rétropropagation.
Quel modèle choisir?
CBOW est plusieurs fois plus rapide que skip gram et fournit une meilleure fréquence pour les mots fréquents, tandis que skip gram a besoin d'une petite quantité de données d'entraînement et représente même des mots ou des phrases rares.
La relation entre Word2vec et NLTK
NLTK est une boîte à outils en langage naturel. Il est utilisé pour le prétraitement du texte. On peut effectuer différentes opérations telles que des parties de balisage de la parole, de lemmatisation, de radicalisation, de suppression de mots vides, de suppression de mots rares ou de mots les moins utilisés. Il aide à nettoyer le texte et aide à préparer les fonctionnalités à partir des mots efficaces. Dans l'autre sens, word2vec est utilisé pour la correspondance sémantique (éléments étroitement liés ensemble) et syntaxique (séquence). En utilisant word2vec, on peut trouver des mots similaires, des mots différents, une réduction dimensionnelle et bien d'autres. Une autre caractéristique importante de word2vec est de convertir la représentation dimensionnelle supérieure du texte en vecteurs de dimension inférieure.
Où utiliser NLTK et Word2vec?
Si l'on doit accomplir certaines tâches à usage général comme mentionné ci-dessus, comme la tokenisation, le balisage POS et l'analyse, il faut utiliser NLTK, tandis que pour prédire les mots en fonction d'un contexte, d'une modélisation de sujet ou d'une similitude de document, il faut utiliser Word2vec.
Relation entre NLTK et Word2vec à l'aide de code
NLTK et Word2vec peuvent être utilisés ensemble pour trouver une représentation de mots similaires ou une correspondance syntaxique. La boîte à outils NLTK peut être utilisée pour charger de nombreux packages fournis avec NLTK et le modèle peut être créé à l'aide de word2vec. Il peut ensuite être testé sur les mots en temps réel. Voyons la combinaison des deux dans le code suivant. Avant de poursuivre le traitement, veuillez consulter les corpus fournis par NLTK. Vous pouvez télécharger en utilisant la commande
nltk(nltk.download('all'))
Figure Corpus téléchargés à l'aide de NLTK
Veuillez voir la capture d'écran pour le code.
import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)
Production:
[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]
Explication du code
- La bibliothèque nltk est importée d'où vous pouvez télécharger le corpus abc que nous utiliserons à l'étape suivante.
- Gensim est importé. Si Gensim n'est pas installé, veuillez l'installer en utilisant la commande "pip3 install gensim". Veuillez voir la capture d'écran ci-dessous.
Figure Installation de Gensim à l'aide de PIP
- importez le corpus abc qui a été téléchargé en utilisant nltk.download ('abc').
- Passez les fichiers au modèle word2vec qui est importé à l'aide de Gensim sous forme de phrases.
- Le vocabulaire est stocké sous la forme de la variable.
- Le modèle est testé sur un exemple de science des mots car ces fichiers sont liés à la science.
- Ici, le mot similaire de «science» est prédit par le modèle.
Activateurs et Word2Vec
La fonction d'activation du neurone définit la sortie de ce neurone étant donné un ensemble d'entrées. Biologiquement inspiré par une activité dans notre cerveau où différents neurones sont activés en utilisant différents stimuli Comprenons la fonction d'activation à travers le schéma suivant.
Figure Comprendre la fonction d'activation
Ici x1, x2,… x4 est le nœud du réseau neuronal.
w1, w2, w3 est le poids du nœud,
∑ est la somme de toutes les valeurs de poids et de nœud qui fonctionnent comme fonction d'activation.
Pourquoi la fonction d'activation?
Si aucune fonction d'activation n'est utilisée, la sortie serait linéaire mais la fonctionnalité de la fonction linéaire est limitée. Pour obtenir des fonctionnalités complexes telles que la détection d'objets, la classification d'images, la saisie de texte à l'aide de la voix et de nombreuses autres sorties non linéaires est nécessaire, ce qui est obtenu à l'aide de la fonction d'activation.
Comment la couche d'activation est calculée dans le mot incorporation (word2vec)
Softmax Layer (fonction exponentielle normalisée) est la fonction de couche de sortie qui active ou déclenche chaque nœud. Une autre approche utilisée est le softmax hiérarchique où la complexité est calculée par O (log 2 V) où le softmax c'est O (V) où V est la taille du vocabulaire. La différence entre ceux-ci est la réduction de la complexité dans la couche hiérarchique softmax. Pour comprendre sa fonctionnalité (Hierarchical softmax), veuillez consulter l'exemple ci-dessous:
Figure Structure hiérarchique de type arbre softmax
Supposons que nous voulions calculer la probabilité d'observer le mot amour dans un certain contexte. Le flux de la racine au nœud feuille sera le premier passage au nœud 2, puis au nœud 5. Donc, si nous avons eu la taille de vocabulaire de 8, seuls trois calculs sont nécessaires. Cela permet donc de décomposer, de calculer la probabilité d'un mot ( amour ).
Quelles autres options sont disponibles autres que Hierarchical Softmax?
Si vous parlez dans un sens général, les options d'incorporation de mots disponibles sont Softmax différencié, CNN-Softmax, échantillonnage d'importance, échantillonnage d'importance adaptative, estimations de contraste de bruit, échantillonnage négatif, auto-normalisation et normalisation peu fréquente.
Parlant spécifiquement de Word2vec, nous avons un échantillonnage négatif disponible.
L'échantillonnage négatif est un moyen d'échantillonner les données d'entraînement. C'est un peu comme la descente de gradient stochastique, mais avec une certaine différence. L'échantillonnage négatif ne recherche que les exemples d'entraînement négatifs. Il est basé sur une estimation contrastive du bruit et échantillonne les mots au hasard, pas dans le contexte. C'est une méthode de formation rapide et choisit le contexte au hasard. Si le mot prédit apparaît dans le contexte choisi au hasard, les deux vecteurs sont proches l'un de l'autre.
Quelle conclusion peut-on tirer?
Les activateurs déclenchent les neurones tout comme nos neurones sont déclenchés à l'aide de stimuli externes. La couche Softmax est l'une des fonctions de couche de sortie qui déclenche les neurones en cas d'incorporation de mots. Dans word2vec, nous avons des options telles que le softmax hiérarchique et l'échantillonnage négatif. En utilisant des activateurs, on peut convertir la fonction linéaire en fonction non linéaire, et un algorithme d'apprentissage automatique complexe peut être implémenté à l'aide de tels.
Qu'est-ce que Gensim?
Gensim est une boîte à outils de modélisation de sujets implémentée en python. La modélisation de sujet découvre une structure cachée dans le corps du texte. Word2vec est importé de la boîte à outils Gensim. Veuillez noter que Gensim fournit non seulement une implémentation de word2vec mais aussi Doc2vec et FastText, mais ce tutoriel est entièrement consacré à word2vec, nous allons donc nous en tenir au sujet actuel.
Implémentation de word2vec avec Gensim
Jusqu'à présent, nous avons discuté de ce qu'est word2vec, de ses différentes architectures, des raisons pour lesquelles il y a un passage d'un sac de mots à word2vec, de la relation entre word2vec et NLTK avec le code en direct et les fonctions d'activation. Dans cette section, implémentera word2vec en utilisant Gensim
Étape 1) Collecte de données
La première étape pour mettre en œuvre un modèle d'apprentissage automatique ou implémenter le traitement du langage naturel est la collecte de données
Veuillez observer les données pour créer un chatbot intelligent.
[{"tag": "welcome","patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],"responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"]},{"tag": "goodbye","patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]},{"tag": "thankful","patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]},{"tag": "hoursopening","patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]},{"tag": "payments","patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ],"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"]}]
Voici ce que nous comprenons des données
- Ces données contiennent trois éléments: balise, modèle et réponses. La balise est l'intention (quel est le sujet de discussion).
- Les données sont au format JSON.
- Un modèle est une question que les utilisateurs poseront au bot
- Les réponses sont la réponse que le chatbot fournira à la question / modèle correspondant.
Étape 2) Prétraitement des données.
Il est très important de traiter les données brutes. Si des données nettoyées sont transmises à la machine, le modèle répondra plus précisément et apprendra les données plus efficacement.
Cette étape consiste à supprimer les mots vides, les racines, les mots inutiles, etc. Avant de continuer, il est important de charger les données et de les convertir en une trame de données. Veuillez consulter le code ci-dessous pour un tel
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
Explication de CODE.
- Comme les données sont au format json, json est donc importé
- Le fichier est stocké dans la variable
- Le fichier est ouvert et chargé dans la variable de données
Les données sont maintenant importées et il est temps de convertir les données en bloc de données. Veuillez consulter le code ci-dessous pour voir l'étape suivante
import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)
Explication du CODE
1. Les données sont converties en trame de données à l'aide de pandas qui ont été importés ci-dessus.
2. Il convertira la liste en modèles de colonnes en chaîne.
from nltk.corpus import stopwordsfrom textblob import Wordstop = stopwords.words('english')df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
Explication du code
1. Les mots vides anglais sont importés à l'aide du module de mots vides de la boîte à outils nltk
2. Tous les mots du texte sont convertis en minuscules en utilisant la condition for et la fonction lambda. La fonction Lambda est une fonction anonyme.
3. Toutes les lignes du texte dans le bloc de données sont vérifiées pour les ponctuations de chaîne et celles-ci sont filtrées.
4. Les caractères tels que les nombres ou les points sont supprimés à l'aide d'une expression régulière.
5. Les chiffres sont supprimés du texte.
6. Les mots vides sont supprimés à ce stade.
7. Les mots sont maintenant filtrés et les différentes formes du même mot sont supprimées à l'aide de la lemmatisation. Avec ceux-ci, nous avons terminé le prétraitement des données.
Production:
, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments
Étape 3) Création d'un réseau neuronal à l'aide de word2vec
Il est maintenant temps de construire un modèle en utilisant le module de Gensim word2vec. Nous devons importer word2vec de Gensim. Faisons cela, puis nous construirons et dans la dernière étape, nous vérifierons le modèle sur des données en temps réel.
from gensim.models import Word2Vec
Maintenant, nous pouvons réussir à créer le modèle à l'aide de Word2Vec. Veuillez vous référer à la ligne de code suivante pour savoir comment créer le modèle à l'aide de Word2Vec. Le texte est fourni au modèle sous la forme d'une liste afin que nous convertissions le texte du bloc de données en liste en utilisant le code ci-dessous
Bigger_list=[]for i in df['patterns']li = list(i.split(""))Bigger_list.append(li)Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)
Explications du code
1. Création de la liste plus grande où la liste interne est ajoutée. C'est le format qui alimente le modèle Word2Vec.
2. La boucle est implémentée et chaque entrée de la colonne de motifs de la trame de données est itérée.
3. Chaque élément des modèles de colonne est divisé et stocké dans la liste interne li
4. la liste interne est ajoutée à la liste externe.
5. Cette liste est fournie au modèle Word2Vec. Laissez-nous comprendre certains des paramètres fournis ici
Min_count: Il ignorera tous les mots avec une fréquence totale inférieure à cela.
Taille: Il indique la dimensionnalité des vecteurs de mot.
Travailleurs: ce sont les fils pour former le modèle
Il existe également d'autres options disponibles, et certaines importantes sont expliquées ci-dessous
Fenêtre: distance maximale entre le mot actuel et le mot prédit dans une phrase.
Sg: C'est un algorithme de formation et 1 pour skip-gramme et 0 pour un sac continu de mots. Nous en avons discuté en détail ci-dessus.
Hs: Si c'est 1, nous utilisons le softmax hiérarchique pour la formation et si 0, un échantillonnage négatif est utilisé.
Alpha: taux d'apprentissage initial
Laissez-nous afficher le code final ci-dessous
#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(df)df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))#taking the outer listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = Word2Vec(bigger_list, min_count=1,size=300,workers=4)#print(model)
Étape 4) Enregistrement du modèle
Le modèle peut être enregistré sous forme de bac et de formulaire modèle. Bin est le format binaire. Veuillez consulter les lignes ci-dessous pour enregistrer le modèle
model.save("word2vec.model")model.save("model.bin")
Explication du code ci-dessus
1. Le modèle est enregistré sous la forme d'un fichier .model.
2. le modèle est enregistré sous la forme d'un fichier .bin
Nous utiliserons ce modèle pour effectuer des tests en temps réel tels que des mots similaires, des mots différents et des mots les plus courants.
Étape 5) Chargement du modèle et réalisation de tests en temps réel
Le modèle est chargé en utilisant le code ci-dessous
model = Word2Vec.load('model.bin')
Si vous souhaitez imprimer le vocabulaire à partir de celui-ci, utilisez la commande ci-dessous
S'il vous plaît voir le résultat
['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']
Étape 6) Vérification des mots les plus similaires
Laissez-nous mettre en œuvre les choses pratiquement
similar_words = model.most_similar('thanks')print(similar_words)
S'il vous plaît voir le résultat
[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]
Étape 7) Ne correspond pas au mot des mots fournis
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Nous avons fourni les mots «À plus tard, merci de votre visite». Cela imprimera les mots les plus différents de ces mots. Exécutons ce code et trouvons le résultat
Le résultat après l'exécution du code ci-dessus.
Thanks
Étape 8) Trouver la similitude entre deux mots
Cela indiquera le résultat de la probabilité de similitude entre deux mots. Veuillez consulter le code ci-dessous pour savoir comment exécuter cette section.
similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)
Le résultat du code ci-dessus est comme ci-dessous
0,13706
Vous pouvez également trouver des mots similaires en exécutant le code ci-dessous
similar = model.similar_by_word('kind')print(similar)
Sortie du code ci-dessus
[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]
Conclusion
- L'incorporation de mots est un type de représentation de mots qui permet aux mots ayant une signification similaire d'être compris par des algorithmes d'apprentissage automatique.
- L'incorporation de mots est utilisée pour calculer des mots similaires, créer un groupe de mots associés, fonctionnalité de classification de texte, regroupement de documents, traitement du langage naturel
- Word2vec est un modèle de réseau neuronal à deux couches peu profond pour produire une incorporation de mots pour une meilleure représentation des mots
- Word2vec représente des mots dans une représentation d'espace vectoriel. Les mots sont représentés sous forme de vecteurs et le placement est fait de telle manière que les mots de sens similaire apparaissent ensemble et que les mots différents sont situés loin
- Word2vec a utilisé 2 architectures Continuous Bag of words (CBOW) et skip gram
- CBOW est plusieurs fois plus rapide que skip gram et fournit une meilleure fréquence pour les mots fréquents, tandis que skip gram a besoin d'une petite quantité de données d'entraînement et représente même des mots ou des phrases rares.
- NLTK et word2vec peuvent être utilisés ensemble pour créer des applications puissantes
- La fonction d'activation du neurone définit la sortie de ce neurone étant donné un ensemble d'entrées. Dans word2vec. Softmax Layer (fonction exponentielle normalisée) est la fonction de couche de sortie qui active ou déclenche chaque nœud. Word2vec a également un échantillonnage négatif disponible
- Gensim est une boîte à outils de modélisation de sujet implémentée en python