Para que la computadora comprenda un texto escrito, podemos representar las palabras como vectores numéricos. Una forma de hacerlo es mediante el uso de incrustaciones de Word, que son una forma de representar palabras como vectores numéricos. Estos vectores capturan el significado de las palabras y sus relaciones con otras palabras del idioma. Las incrustaciones de palabras se pueden generar utilizando algoritmos de aprendizaje no supervisados como palabra2vec, Guante , o Texto rápido .
Word2vec es un método basado en redes neuronales para generar incrustaciones de palabras, que son representaciones vectoriales densas de palabras que capturan su significado y relaciones semánticas. Hay dos enfoques principales para implementar Word2vec:
- Bolsa continua de palabras (CBOW)
- Saltar gramo
¿Qué es una bolsa continua de palabras (CBOW)?
Bolsa continua de palabras (CBOW) es una técnica popular de procesamiento del lenguaje natural que se utiliza para generar incrustaciones de palabras. Las incrustaciones de palabras son importantes para muchas tareas de PNL porque capturan las relaciones semánticas y sintácticas entre las palabras de un idioma. CBOW es un algoritmo basado en redes neuronales que predice una palabra objetivo dadas las palabras de contexto que la rodean. Es un tipo de sin supervisión aprendizaje, lo que significa que puede aprender de datos sin etiquetar y, a menudo, se usa para entrenar previamente incrustaciones de palabras que pueden usarse para diversas tareas de PNL, como análisis de sentimientos y traducción automática.

Ejemplo de un modelo CBOW
¿Existe alguna diferencia entre el modelo Bolsa de palabras (BoW) y la Bolsa continua de palabras (CBOW)?
- El modelo de bolsa de palabras y el modelo de bolsa continua de palabras son técnicas utilizadas en el procesamiento del lenguaje natural para representar texto en un formato legible por computadora, pero difieren en la forma en que capturan el contexto.
- El modelo BoW representa el texto como una colección de palabras y su frecuencia en un documento o corpus determinado. No considera el orden o contexto en el que aparecen las palabras y, por lo tanto, es posible que no capture el significado completo del texto. El modelo BoW es simple y fácil de implementar, pero tiene limitaciones a la hora de captar el significado del lenguaje.
- Por el contrario, el modelo CBOW es un enfoque basado en redes neuronales que captura el contexto de las palabras. Aprende a predecir la palabra objetivo en función de las palabras que aparecen antes y después en una ventana de contexto determinada. Al considerar las palabras circundantes, el modelo CBOW puede capturar mejor el significado de una palabra en un contexto determinado.
Arquitectura del modelo CBOW
El modelo CBOW utiliza la palabra objetivo alrededor de la palabra de contexto para predecirla. Considere el ejemplo anterior Ella es una gran bailarina. El modelo CBOW convierte esta frase en pares de palabras de contexto y palabras de destino. Los emparejamientos de palabras aparecerían así. ([ella, a], es), ([es, genial], a) ([a, bailarina], genial) teniendo tamaño de ventana = 2.
convertir cadena a la fecha

Arquitectura CBOW
El modelo considera las palabras de contexto e intenta predecir el término objetivo. Los cuatro vectores de entrada 1∗W se pasarán a la capa de entrada si tienen cuatro palabras, ya que las palabras de contexto se utilizan para predecir una palabra objetivo. La capa oculta recibirá los vectores de entrada y luego los multiplicará por una matriz W∗N. La salida 1∗N de la capa oculta finalmente ingresa a la capa de suma, donde los vectores se suman por elementos antes de llevar a cabo una activación final y la salida se obtiene de la capa de salida.
Implementación del código de CBOW
Implementemos una incrustación de palabras para mostrar la similitud de las palabras usando el modelo CBOW. En este artículo he definido mi propio corpus de palabras, puedes utilizar cualquier conjunto de datos. Primero, importaremos todas las bibliotecas necesarias y cargaremos el conjunto de datos. A continuación, tokenizaremos cada palabra y la convertiremos en un vector de números enteros.
Python3
import> tensorflow as tf> from> tensorflow.keras.models>import> Sequential> from> tensorflow.keras.layers>import> Dense,> >Embedding, Lambda> from> tensorflow.keras.preprocessing.text>import> Tokenizer> import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.decomposition>import> PCA> # Define the corpus> corpus>=> [>'The cat sat on the mat'>,> >'The dog ran in the park'>,> >'The bird sang in the tree'>]> # Convert the corpus to a sequence of integers> tokenizer>=> Tokenizer()> tokenizer.fit_on_texts(corpus)> sequences>=> tokenizer.texts_to_sequences(corpus)> print>('After converting our words>in> the corpus> into vector of integers:')> print>(sequences)> |
>
>
Producción:
After converting our words in the corpus into vector of integers: [[1, 3, 4, 5, 1, 6], [1, 7, 8, 2, 1, 9], [1, 10, 11, 2, 1, 12]]>
Ahora construiremos el modelo CBOW con un tamaño de ventana = 2.
Python3
# Define the parameters> vocab_size>=> len>(tokenizer.word_index)>+> 1> embedding_size>=> 10> window_size>=> 2> # Generate the context-target pairs> contexts>=> []> targets>=> []> for> sequence>in> sequences:> >for> i>in> range>(window_size,>len>(sequence)>-> window_size):> >context>=> sequence[i>-> window_size:i]>+>> >sequence[i>+> 1>:i>+> window_size>+> 1>]> >target>=> sequence[i]> >contexts.append(context)> >targets.append(target)> # Convert the contexts and targets to numpy arrays> X>=> np.array(contexts)> # Define the CBOW model> model>=> Sequential()> model.add(Embedding(input_dim>=>vocab_size,> >output_dim>=>embedding_size,> >input_length>=>2>*>window_size))> model.add(Lambda(>lambda> x: tf.reduce_mean(x, axis>=>1>)))> model.add(Dense(units>=>vocab_size, activation>=>'softmax'>))> model.save_weights(>'cbow_weights.h5'>)> # Load the pre-trained weights> model.load_weights(>'cbow_weights.h5'>)> |
>
>
A continuación, usaremos el modelo para visualizar las incrustaciones.
Python3
# Get the word embeddings> embeddings>=> model.get_weights()[>0>]> # Perform PCA to reduce the dimensionality> # of the embeddings> pca>=> PCA(n_components>=>2>)> reduced_embeddings>=> pca.fit_transform(embeddings)> # Visualize the embeddings> plt.figure(figsize>=>(>5>,>5>))> for> i, word>in> enumerate>(tokenizer.word_index.keys()):> >x, y>=> reduced_embeddings[i]> >plt.scatter(x, y)> >plt.annotate(word, xy>=>(x, y), xytext>=>(>5>,>2>),> >textcoords>=>'offset points'>,> >ha>=>'right'>, va>=>'bottom'>)> plt.show()> |
tamaños de texto de látex
>
>
Producción:

Representación vectorizada de las palabras utilizando el modelo CBOW.
Esta visualización nos permite observar la similitud de las palabras en función de sus incrustaciones. Se espera que las palabras que son similares en significado o contexto estén cerca unas de otras en la trama.