word2vec: muestreo negativo (en términos simples)?

Respuestas:

164

La idea de word2veces 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 wla palabra (objetivo). El denominador calcula la similitud de todos los demás contextos c1y 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 c1al azar. El resultado final es que si cataparece en el contexto de food, entonces el vector de foodes 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 word2vecque entrenar sea mucho más rápido.

mbatchkarov
fuente
15
gracias o la linda explicación. Creo que es solo una muestra. pero ¿sabes por qué se llama "negativo"?
HappyCoding
46
La terminología se toma prestada de la clasificación, una aplicación común de las redes neuronales. Ahí tienes un montón de ejemplos positivos y negativos. Con 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.
mbatchkarov
38

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.

ingrese la descripción de la imagen aquí

¿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:

ingrese la descripción de la imagen aquí

Qué logaritmo se puede descomponer en:

ingrese la descripción de la imagen aquí

Con alguna fórmula matemática y de gradiente (Ver más detalles en 6 ) se convirtió en:

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí

Referencia :

Amir
fuente
1
Hola @amir, mi pregunta inicial es que tengo algunos problemas para comprender el concepto de muestreo negativo ...
Andy K
1
Muy bien explicado y un poco más técnico que la respuesta aceptada. Entonces, una situación SO perfecta: lea la respuesta aceptada para obtener la idea y luego esta respuesta para comprenderla en detalle.
Ursin Brunner
21

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í:

ingrese la descripción de la imagen aquí

Tenga en cuenta que Tes 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 Vvocablos del corpus con:

ingrese la descripción de la imagen aquí

Vpuede superar fácilmente decenas de miles al entrenar el modelo Skip-Gram. La probabilidad debe calcularse Vveces, lo que la hace computacionalmente costosa. Además, el factor de normalización en el denominador requiere Vcálculos adicionales .

Por otro lado, la distribución de probabilidad en SGNS se calcula con:

ingrese la descripción de la imagen aquí

c_poses un vector de palabra para palabra positiva y W_neges un vector de palabra para todas Klas muestras negativas en la matriz de ponderación de salida. Con SGNS, la probabilidad debe calcularse solo K + 1veces, donde Knormalmente 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.

ingrese la descripción de la imagen aquí

¿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.

ingrese la descripción de la imagen aquí

En la vida real, no suele observarse regressioncon 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.

ingrese la descripción de la imagen aquí

En la figura anterior, el par actual palabra-contexto positivo es ( drilling, engineer). K=5muestras 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)≈1y la probabilidad de pares negativos p(D=1|w,c_neg)≈0.

Eric Kim
fuente
1
T es para el número de tokens (ocurrencias de palabras en un texto). V de vocabulario (palabras únicas), diría yo.
Adam
Si establecemos Kcomo V -1, entonces el muestreo negativo es igual que el modelo vanilla skip-gram. ¿Es correcto mi entendimiento?
Shashwat
@Shashwat, el número de vectores de palabras actualizados para cada muestra de entrenamiento es el mismo, pero la función del objetivo de entrenamiento seguirá siendo fundamentalmente diferente
Eric Kim