Estoy leyendo el artículo a continuación y tengo algunos problemas para comprender el concepto de muestreo negativo.
http://arxiv.org/pdf/1402.3722v1.pdf
¿Alguien puede ayudar, por favor?
Estoy leyendo el artículo a continuación y tengo algunos problemas para comprender el concepto de muestreo negativo.
http://arxiv.org/pdf/1402.3722v1.pdf
¿Alguien puede ayudar, por favor?
Respuestas:
La idea de word2vec
es maximizar la similitud (producto escalar) entre los vectores de las palabras que aparecen juntas (en el contexto de las otras) 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. Tienes
v_c * v_w
-------------------
sum(v_c1 * v_w)
El numerador es básicamente la similitud entre las palabras c
(el contexto) y w
la palabra (objetivo). El denominador calcula la similitud de todos los demás contextos c1
y la palabra de destino 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; simplemente seleccione un par de contextos c1
al azar. El resultado final es que si cat
aparece en el contexto de food
, entonces 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(por ejemplo democracy
, greed
, Freddy
), en lugar de todas las otras palabras en el lenguaje . Esto hace word2vec
que entrenar sea mucho más rápido.
word2vec
, para cualquier palabra dada, tiene una lista de palabras que deben ser similares (la clase positiva) pero la clase negativa (palabras que no son similares a la palabra de destino) se compila por muestreo.
Cálculo de Softmax (función para determinar qué palabras son similares a la palabra objetivo actual) es caro ya que requiere sumando sobre todas las palabras en V (denominador), que generalmente es muy grande.
¿Qué se puede hacer?
Se han propuesto diferentes estrategias para aproximar el softmax. Estos enfoques se pueden agrupar en basada en Softmax y basada en muestreo enfoques. Los enfoques basados en Softmax son métodos que mantienen intacta la capa softmax, pero modifican su arquitectura para mejorar su eficiencia (por ejemplo, softmax jerárquico). Los enfoques basados en muestreo, 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) yk seleccionadas aleatoriamente de corpora como etiquetas falsas (y = 0, muestra negativa).
Mira el siguiente párrafo. Supongamos que nuestra palabra objetivo es " Word2vec ". Con 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. Escogemos al azar algunas palabras del corpus ( produce
, software
, Collobert
, margin-based
, probabilistic
) y los consideramos como muestras negativas. Esta técnica que seleccionamos aleatoriamente de un corpus se llama muestreo negativo.
Referencia :
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 los V
vocablos del corpus con:
V
puede superar fácilmente decenas de miles al entrenar el modelo Skip-Gram. La probabilidad debe calcularse V
veces, lo que la hace computacionalmente costosa. Además, el factor de normalización en el denominador requiere V
cálculos adicionales .
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
es un vector de palabra para todas K
las muestras negativas en la matriz de ponderación de salida. Con SGNS, la probabilidad debe calcularse solo K + 1
veces, donde K
normalmente está 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 tarea de clasificación binaria.
Con SGNS, los vectores de palabras ya no se aprenden al predecir 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, no suele observarse regression
con palabras aleatorias 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 palabra-contexto positivo es ( drilling
, engineer
). K=5
muestras negativas se extraen aleatoriamente a partir de la distribución de ruido : minimized
, primary
, concerns
, led
, page
. A medida que el modelo itera a través de las muestras de entrenamiento, las ponderaciones se optimizan de modo que se genere la probabilidad de par positivo p(D=1|w,c_pos)≈1
y la probabilidad de pares negativos p(D=1|w,c_neg)≈0
.
K
como V -1
, entonces el muestreo negativo es igual que el modelo vanilla skip-gram. ¿Es correcto mi entendimiento?