Esta es la clase que más me costó entender por completo, así que busqué más recursos. Comparto mi resumen de pasos:
.
- Construcción del vocabulario:
- Se construye un vocabulario que incluya todas las palabras únicas presentes en el corpus de texto, donde cada palabra se asociará a un índice único.
- Definición del contexto
- Se define la ventana de contexto, que determina el número de palabras a la izquierda y derecha de una palabra objetivo serán considerados como parte de su contexto.
- Creación de pares de palabras
- Se recorre todo el vocabulario para identificando una palabra y las palabras de su contexto, según la ventaja de contexto definido.
- Se crea pares de palabra objetivo y palabra de contexto, pares (i = palabra objetivo, j = palabra de contexto).
- Co-ocurrencia y matriz de co-ocurrencia
- Se crea una matriz donde las filas y las columnas representan las palabras del vocabulario construido. Si nuestro vocabulario es de 10000, la matriz será de 10000 x 10000.
- Cada celda de la matriz almacena la frecuencia con la que 2 palabras aparecen juntas en un mismo contexto (por ejemplo, en la misma oración o párrafo) a lo largo de todo el corpus. Para cada par de palabras (i, j), la celda (i, j) de la matriz contiene un número que indica cuántas veces aparecen las palabras i y j juntas.
- Estas matrices suelen ser grandes y dispersas (muchos ceros)
- Generación del vector de palabra (enbedding)
- Se crea un vector One-Hot para cada una de las palabras del vocabulario. Cada uno de estos vectores solo tiene un valor 1 en la posición de la palabra que representa, el resto de elementos es 0. Si nuestro vocabulario es de 1000 palabras el vector tendrá 999 ceros y 1 en la posición de la palabra que representa.
- Se crea la matriz de vectores de palabra (o matriz de proyección) en base al vocabulario y número de dimensiones que se ha definido. Esta matriz tiene una fila para cada palabra en el vocabulario y una columna para cada dimensión en el espacio vectorial deseado. En el entrenamiento se inicializa esta matriz con valores aleatorios pequeños, pero que luego serán ajustados continuamente por medio de técnicas de optimización.
- Para obtener la representación vectorial de una palabra objetivo en el espacio vectorial, se multiplica su vector one-hot por la matriz de proyección. Con lo cual ha generado el vector de palabra
- Función de pérdida
- Esta función cuantifica cuán diferentes son las predicciones del modelo de las palabras reales del contexto. Para eso en la variantes skip-gram de word2vec se utiliza el método “Muestreo negativo” con una función llamada “Binary Cross-Emtropy Loss”, el cual compara las probabilidades predichas por el modelo con las probabilidades reales.
- Se selecciona ejemplos positivos y negativo. Para cada palabra objetivo en el corpus seleccionamos algunas palabras de su contexto como ejemplos positivos y algunas palabras que no están es su contexto como ejemplos negativo.
- Se predicen las probabilidades. El modelo, por medio del cálculo de las distancias los vectores de palabras genera las probabilidades de que una palabra este en su contexto.
- Para los ejemplos positivos, el modelo calcula la probabilidad de que cada palabra real del contexto esté cerca de la palabra objetivo.
- Para los ejemplos negativos, el modelo también calcula la probabilidad de que las palabras que no están en el contexto estén cerca de la palabra objetivo.
- Finalmente, las probabilidades de ejemplos positivos y negativos se combinan para obtener la predicción total para la palabra objetivo. Esto se hace restando la probabilidad de los ejemplos negativos de la probabilidad de los ejemplos positivos. La idea es que la probabilidad total sea alta para las palabras del contexto real y baja para las palabras que no están en el contexto.
- Se calcula la pérdida. Para ello se compara las probabilidades predichas con las probabilidades reales
- Optimización
- En este paso se quiere ajustar la matriz de vectores de palabras (o matriz de proyección) para minimizar la función de pérdida.
- Se calcula el gradiente de la función de pérdida con respecto a los vectores de palabras. Estos gradientes indican el ajuste que deben hacerse a los vectores de palabra para reducir la pérdida.
- Se actualiza los vectores de palabras. Para ello se multiplica los vectores de palabra por una tasa de aprendizaje
Nuevo Vector = Vector Actual - Tasa de Aprendizaje * Gradiente
- Iteración y convergencia
- Se repite el proceso de cálculo de gradiente y actualización de vectores en múltiples épocas de entrenamiento
- El entrenamiento continua hasta que la función de pérdida converge, es decir, deja de disminuir significativamente. Lo que indica que los vectores de palabra han aprendido efectivamente las relaciones semánticas del corpus
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?