La sémantique est importante car dans la PNL, ce sont les relations entre les mots qui sont étudiés. L'une des procédures les plus simples mais très efficaces est le sac continu de mots (CBOW) qui mappe les mots à des vecteurs très significatifs appelés vecteurs de mots. CBOW est utilisé dans le cadre Word2Vec et prédit un mot basé sur les mots qui y sont adjacents qui capturent le sens sémantique et syntaxique du langage. Dans cet article, le lecteur se rendra compte du fonctionnement du modèle CBOW, ainsi que des méthodes de son utilisation.
Le sac continu de mots (CBOW) est également un modèle qui est utilisé lors de la détermination de l'intégration des mots à l'aide d'un réseau de neurones et fait partie des modèles Word2Vec de Tomas Mikolov. CBOW essaie de prédire un mot cible en fonction des mots de contexte l'observant dans une phrase donnée. De cette façon, il est capable de capturer les relations sémantiques, donc les mots proches sont représentés étroitement dans un espace de grande dimension.
Par exemple, dans la phrase «Le chat s'est assis sur le tapis» , si la taille de la fenêtre de contexte est 2, les mots de contexte pour «SAT» sont [le «», «chat», «on», «le»] , et la tâche du modèle est de prédire le mot «SAT» .
CBOW opère en agrégeant les mots de contexte (par exemple, en moyenne leurs intérêts) et en utilisant cette représentation agrégée pour prédire le mot cible. L'architecture du modèle implique une couche d'entrée pour les mots de contexte, une couche cachée pour la génération d'intégration et une couche de sortie pour prédire le mot cible à l'aide d'une distribution de probabilité.
Il s'agit d'un modèle rapide et efficace adapté à la gestion des mots fréquents, ce qui le rend idéal pour les tâches nécessitant une compréhension sémantique, telles que la classification du texte, les systèmes de recommandation et l'analyse des sentiments.
Le CBOW est l'une des techniques les plus simples et les plus efficaces selon le contexte de l'intégration des mots où l'ensemble du vocabulaire des mots est cartographié aux vecteurs. Cette section décrit également le fonctionnement du système CBOW comme un moyen de comprendre la méthode à son niveau le plus élémentaire, discutant des principales idées qui sous-tendent la méthode CBOW, ainsi que d'offrir un guide complet de la disposition architecturale du système de calcul de Hit CBOW.
CBOW s'appuie sur deux concepts clés: les mots de contexte et le mot cible.
En analysant la relation entre le contexte et les mots cibles dans les grands corpus, CBOW génère des intégres qui capturent les relations sémantiques entre les mots.
Voici une ventilation du fonctionnement du CBOW, étape par étape:
Convertissez les mots de contexte et le mot cible en vecteurs à un hot basé sur la taille du vocabulaire. Pour un vocabulaire de la taille 5, la représentation à un hot du mot «amour» pourrait ressembler à [0, 1, 0, 0, 0] .
Passez les mots de contexte codés à un hot à travers une couche d'intégration. Cette couche mappe chaque mot à une représentation vectorielle dense, généralement d'une dimension inférieure que la taille du vocabulaire.
Agréger les intérêts de tous les mots de contexte (par exemple, en les faisant la moyenne ou en les additionnant) pour former un seul vecteur de contexte.
Répétez le processus pour toutes les paires de cibles contextuelles dans le corpus jusqu'à ce que le modèle converge.
L'architecture du modèle de mots continu (CBOW) est conçue pour prédire un mot cible basé sur ses mots contextuels environnants. Il s'agit d'un réseau neuronal peu profond avec une structure simple mais efficace. L'architecture CBOW se compose des composants suivants:
Saisir :
Phrase: «J'adore l'apprentissage automatique» , Target Word: «Machine» , Mots de contexte: [«I», «Love», «Learning»] .
Encodage à un hot :
Vocabulaire: [«I», «Love», «Machine», «Learning», «AI»]
Couche d'intégration :
Embeddings:
Agrégation :
Couche de sortie :
Couche d'entrée: ["I", "Love", "Learning"] -> Encodage à un hot -> Couche d'intégration -> des incorporations denses -> vecteur contextuel agrégé -> calque entièrement connecté softmax Sortie: mot prévu "machine"
Nous allons maintenant parcourir la mise en œuvre du modèle CBOW à partir de zéro dans Python.
La première pointe consiste à transformer le texte en jetons, des mots générés en paires de cibles de contexte avec le contexte comme les mots contenant le mot cible.
Corpus = "Le renard brun rapide saute par-dessus le chien paresseux" corpus = corpus.lower (). Split () # tokenisation et conversion minuscule # Définir la taille de la fenêtre de contexte C = 2 context_target_pairs = [] # Générer des paires de cibles contextuelles pour I à portée (C, Len (Corpus) - C): context = corpus [i - c: i] corpus [i 1: i c 1] Target = corpus [i] context_target_pairs.append ((contexte, cible)) print ("Paies de contexte-cible:", context_target_pairs)
Sortir:
Context-Target Pairs: [(['the', 'quick', 'fox', 'jumps'], 'brown'), (['quick', 'brown', 'jumps', 'over'], 'fox'), (['brown', 'fox', 'over', 'the'], 'jumps'), (['fox', 'jumps', 'the', 'lazy'], 'over'), (['jumps', «Over», «paresseux», «chien»], «le»)]
Nous construisons un vocabulaire (un ensemble unique de mots), puis cartons chaque mot à un index unique et vice versa pour des recherches efficaces pendant la formation.
# Créer un vocabulaire et cartographier chaque mot à un index vocab = set (corpus) word_to_index = {word: idx pour idx, word in énumérer (vocab)} index_to_word = {idx: word pour word, idx dans word_to_index.items ()} Print ("Word à Index Dictionary:", word_to_index)
Sortir:
Word to index Dictionary: {'Brown': 0, 'Dog': 1, 'Quick': 2, 'Jump': 3, 'Fox': 4, 'Over': 5, 'The': 6, 'Lazy': 7}
Le codage d'un hot fonctionne en transformant chaque mot dans le système de formation de mots en un vecteur, où l'indicateur du mot est «1» tandis que le reste des lieux prend «0», pour des raisons qui seront bientôt claires.
def one_hot_encode (word, word_to_index): one_hot = np.zeros (len (word_to_index))) one_hot [word_to_index [word]] = 1 retourner un_hot # Exemple utilisation pour un mot "rapide" context_one_hot = [one_hot_encode (word, word_to_index) pour word dans ['the', 'Quick']] print ("Encodage à un hot pour 'Quick':", context_one_hot [1])
Sortir:
Encodage à un hot pour «Quick»: [0. 0. 1. 0. 0. 0. 0. 0.]
Dans cette étape, nous créons un réseau neuronal de base avec deux couches: un pour les incorporations de mots et une autre pour calculer la sortie en fonction des mots de contexte, en moyenne le contexte et en le faisant passer par le réseau.
Classe CBOW: def __init __ (self, vocab_size, embedding_dim): # Initialiser aléatoirement des poids pour les couches d'incorporation et de sortie self.w1 = np.random.randn (vocab_size, embedding_dim) self.w2 = np.random.randn (embedding_dim, vocab_size) Def en avant (self, context_words): # Calculez la couche cachée (moyenne des mots de contexte) h = np.mean (context_words, axe = 0) # Calculez la couche de sortie (SoftMax Probabilités) sortie = np.dot (h, self.w2) Sortie de retour Def Backward (self, context_words, cible_word, apprentissage_rate = 0,01): # Passe avant h = np.mean (context_words, axe = 0) sortie = np.dot (h, self.w2) # Calculer l'erreur et les gradients error = cible_word - sortie self.w2 = apprentissage_rate * np.outer (h, erreur) self.w1 = apprentissage_rate * np.outer (context_words, erreur) # Exemple de création d'un objet CBow vocab_size = len (word_to_index) Embedding_dim = 5 # Supposons des intégres à 5 dimensions cbow_model = cbow (vocab_size, embedding_dim) # Utilisation de mots de contexte aléatoire et de cible (comme exemple) context_words = [one_hot_encode (word, word_to_index) pour word dans ['le', 'rapide', 'Fox', 'saute']]] context_words = np.array (context_words) context_words = np.mean (context_words, axe = 0) # Moyens de contexte Mots Target_word = one_hot_encode ('Brown', word_to_index) # Passage avant le modèle CBOW output = cbow_model.forward (context_words) Imprimer ("Sortie de CBow Forward Pass:", sortie)
Sortir:
Sortie de CBOW Pass Forward: [[-0.20435729 -0.23851241 -0.08105261 -0.14251447 0.20442154 0,14336586 -0,06523201 0,0255063] [-0.0192184 -0.12958821 0.1019369 0.11101922 -0.17773069 -0.02340574 -0.22222151 -0.23863179] [0.21221977 -0.15263454 -0.015248 0,27618767 0,02959409 0,2177961 0.16619577 -0.20560026] [0,05354038 0,06903295 0,0592706 -0.13509918 -0.00439649 0,18007843 0,1611929 0,2449023] [0.01092826 0.19643582 -0.07430934 -0.16443165 -0.01094085 -0.27452367 -0.13747784 0,31185284]]
TensorFlow simplifie le processus en définissant un réseau neuronal qui utilise une couche d'intégration pour apprendre des représentations de mots et une couche dense pour la sortie, en utilisant des mots contextuels pour prédire un mot cible.
Importer TensorFlow comme TF # Définissez un modèle CBOW simple à l'aide de TensorFlow classe CBowModel (tf.keras.model): def __init __ (self, vocab_size, embedding_dim): super (cbowmodel, self) .__ init __ () self.embeddings = tf.keras.layers.embedding (input_dim = vocab_size, output_dim = embedding_dim) self.output_layer = tf.keras.layers.dense (vocab_size, activation = 'softmax') Def Call (self, context_words): embedded_context = self.embeddings (context_words) context_avg = tf.reduce_mean (embedded_context, axe = 1) output = self.output_layer (context_avg) Sortie de retour # Exemple d'utilisation modèle = cbowmodel (vocab_size = 8, embedding_dim = 5) context_input = np.random.randint (0, 8, taille = (1, 4)) # entrée de contexte aléatoire context_input = tf.convert_to_tensor (context_input, dtype = tf.int32) # Passe avant Output = modèle (context_input) Print ("Sortie de TensorFlow CBOW Modèle:", Output.Numpy ())
Sortir:
Sortie du modèle CBOW TensorFlow: [[0,12362909 0,12616573 0,12758036 0,12601459 0,12477358 0,1237749 0.12319998 0.12486169]]
Gensim propose une implémentation prête à l'emploi de CBOW dans la fonction word2vec () où l'on n'a pas besoin de travailler lors de la formation, car Gensim entraîne des intégrations de mots dans un corpus de texte.
importer gensim de gensim.models importe word2vec # Préparer les données (liste des listes de mots) Corpus = [["le", "rapide", "Brown", "Fox"], ["sauts", "Over", "le", "paresseux", "chien"]] # Entraîner le modèle Word2Vec à l'aide de CBOW modèle = word2vec (corpus, vector_size = 5, window = 2, min_count = 1, sg = 0) # Obtenez la représentation vectorielle d'un mot vector = modèle.wv ['Fox'] Print ("Représentation vectorielle de 'Fox':", Vector)
Sortir:
Représentation vectorielle de 'Fox': [-0.06810732 -0.01892803 0.11537147 -0.15043275 -0.07872207]
Nous allons maintenant explorer les avantages du sac continu de mots:
Discutons maintenant des limites de CBOW:
Le modèle continu de mots (CBOW) s'est avéré être une approche efficace et intuitive pour générer des incorporations de mots en tirant parti du contexte environnant. Grâce à son architecture simple mais efficace, CBOW comble l'écart entre le texte brut et les représentations vectorielles significatives, permettant un large éventail d'applications NLP. En comprenant le mécanisme de travail de CBOW, ses forces et ses limites, nous gagnons plus approfondie de l'évolution des techniques de PNL. Avec son rôle fondamental dans la génération d'intégration, CBOW continue d'être un tremplin pour explorer des modèles de langage avancé.
R: CBOW prédit un mot cible en utilisant des mots contextuels, tandis que Skip-Gram prédit des mots contextuels en utilisant le mot cible.
Q2: Pourquoi CBOW est-il plus rapide en calcul que Skip-Gram?R: CBOW traite simultanément plusieurs mots de contexte, tandis que Skip-Gram évalue chaque mot de contexte indépendamment.
Q3: CBOW peut-il gérer efficacement les mots rares?R: Non, Skip-Gram est généralement meilleur dans l'apprentissage des représentations pour des mots rares.
Q4: Quel est le rôle de la couche d'intégration dans CBOW?R: La couche d'intégration transforme des vecteurs clairsemés à un hot en représentations denses, capturant la sémantique de mots.
Q5: CBOW est-il toujours pertinent aujourd'hui?R: Oui, alors que des modèles plus récents comme Bert existent, CBOW reste un concept fondamental dans les incorporations de mots.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!