Solución:
La idea de word2vec
es maximizar la similitud (producto escalar) entre los vectores de las palabras que aparecen juntas (en el contexto de las demás) en el texto y minimizar la similitud de las palabras que no lo hacen. En la ecuación (3) del artículo al que se vincula, ignore la exponenciación por un momento. Tú tienes
v_c * v_w
-------------------
sum(v_c1 * v_w)
El numerador es básicamente la similitud entre palabras. c
(el contexto) y w
(el objetivo) palabra. El denominador calcula la similitud de todos los demás contextos c1
y la palabra objetivo w
. Maximizar esta proporción asegura que las palabras que aparecen más juntas en el texto tengan vectores más similares que las palabras que no lo hacen. Sin embargo, calcular esto puede ser muy lento, porque hay muchos contextos c1
. El muestreo negativo es una de las formas de abordar este problema; solo seleccione un par de contextos c1
al azar. El resultado final es que si cat
aparece en el contexto de food
, luego el vector de food
es más similar al vector de cat
(como medidas por su producto escalar) que los vectores de varias otras palabras elegidas al azar (p.ej democracy
, greed
, Freddy
), en lugar de todas las demás palabras en el idioma. Esto hace word2vec
mucho más rápido de entrenar.
Informática Softmax (Función para determinar qué palabras son similares a la palabra objetivo actual) es costosa ya que requiere sumar todas las palabras en V (denominador), que generalmente es muy grande.
¿Qué se puede hacer?
Se han propuesto diferentes estrategias para aproximado el softmax. Estos enfoques se pueden agrupar en basado en softmax y basado en muestreo enfoques. Basado en Softmax Los enfoques son métodos que mantienen intacta la capa softmax, pero modifican su arquitectura para mejorar su eficiencia (por ejemplo, softmax jerárquico). Basado en muestreo Los enfoques, por otro lado, eliminan por completo la capa softmax y en su lugar optimizan alguna otra función de pérdida que se aproxima al softmax (hacen esto aproximando la normalización en el denominador del softmax con alguna otra pérdida que es barata de calcular como muestreo negativo) .
La función de pérdida en Word2vec es algo como:
Qué logaritmo se puede descomponer en:
Con alguna fórmula matemática y de gradiente (Ver más detalles en 6) se convirtió en:
Como ve, se convirtió en una tarea de clasificación binaria (y = 1 clase positiva, y = 0 clase negativa). Como necesitamos etiquetas para realizar nuestra tarea de clasificación binaria, designamos todas las palabras de contexto C como etiquetas verdaderas (y = 1, muestra positiva), y k seleccionados al azar de corpus como etiquetas falsas (y = 0, muestra negativa).
Mira el siguiente párrafo. Supongamos que nuestra palabra objetivo es “Word2vec“. Con una ventana de 3, nuestras palabras de contexto son: The
, widely
, popular
, algorithm
, was
, developed
. Estas palabras de contexto se consideran etiquetas positivas. También necesitamos algunas etiquetas negativas. Elegimos al azar algunas palabras del corpus (produce
, software
, Collobert
, margin-based
, probabilistic
) y considérelos como muestras negativas. Esta técnica que seleccionamos al azar de un ejemplo del corpus se llama muestreo negativo.
Referencia :
- (1) C. Dyer, “Notas sobre la estimación por contraste de ruido y el muestreo negativo”, 2014
- (2) http://sebastianruder.com/word-embeddings-softmax/
Escribí un artículo tutorial sobre muestreo negativo aquí.
¿Por qué utilizamos el muestreo negativo? -> para reducir el costo computacional
La función de costo para el muestreo vanilla Skip-Gram (SG) y Skip-Gram negativo (SGNS) se ve así:
Tenga en cuenta que T
es el número de todos los vocablos. Es equivalente a V
. En otras palabras, T
= V
.
La distribución de probabilidad p(w_t+j|w_t)
en SG se calcula para todos V
vocabulario en el corpus con:
V
puede superar fácilmente decenas de miles al entrenar el modelo Skip-Gram. La probabilidad debe calcularse V
veces, haciéndolo computacionalmente costoso. Además, el factor de normalización en el denominador requiere extra V
cálculos.
Por otro lado, la distribución de probabilidad en SGNS se calcula con:
c_pos
es un vector de palabra para palabra positiva, y W_neg
son vectores de palabras para todos K
muestras negativas en la matriz de ponderaciones de salida. Con SGNS, la probabilidad solo debe calcularse K + 1
tiempos, donde K
es típicamente entre 5 ~ 20. Además, no se necesitan iteraciones adicionales para calcular el factor de normalización en el denominador.
Con SGNS, solo se actualiza una fracción de los pesos para cada muestra de entrenamiento, mientras que SG actualiza todos los millones de pesos para cada muestra de entrenamiento.
¿Cómo logra SGNS esto? -> transformando la tarea de clasificación múltiple en una tarea de clasificación binaria.
Con SGNS, los vectores de palabras ya no se aprenden prediciendo palabras de contexto de una palabra central. Aprende a diferenciar las palabras del contexto real (positivas) de las palabras extraídas al azar (negativas) de la distribución de ruido.
En la vida real, normalmente no observas regression
con palabras al azar como Gangnam-Style
, o pimples
. La idea es que si el modelo puede distinguir entre los pares probables (positivos) y los pares improbables (negativos), se aprenderán buenos vectores de palabras.
En la figura anterior, el par actual positivo palabra-contexto es (drilling
, engineer
). K=5
Las muestras negativas se extraen aleatoriamente de la distribución del ruido: minimized
, primary
, concerns
, led
, page
. A medida que el modelo itera a través de las muestras de entrenamiento, las ponderaciones se optimizan para que la probabilidad de un par positivo se genere p(D=1|w,c_pos)≈1
, y la probabilidad de pares negativos dará como resultado p(D=1|w,c_neg)≈0
.