machine-learning - paper - word2vec python
word2vec: muestreo negativo(en términos simples)? (3)
Escribí un artículo tutorial sobre muestreo negativo here .
¿Por qué usamos muestreo negativo? -> para reducir el costo computacional
La función de costo para el muestreo van-Gram (SG) y el muestreo negativo Skip-Gram (SGNS) se ve así:
La distribución de probabilidad
p(w_t+j|w_t)
en SG se calcula para todos los vocabulario
V
en el 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 cálculos de
V
adicionales.
Por otro lado, la distribución de probabilidad en SGNS se calcula con:
c_pos
es un vector de palabras para palabras positivas, y
W_neg
son vectores de palabras para todas las muestras
K
negativas en la matriz de peso de salida.
Con SGNS, la probabilidad debe calcularse solo
K + 1
veces, 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 esto SGNS? -> transformando la tarea de clasificación múltiple en 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 de contexto reales (positivas) de las palabras aleatorias (negativas) de la distribución de ruido.
En la vida real, generalmente no se observa
regression
con palabras aleatorias como
Gangnam-Style
o
pimples
.
La idea es que si el modelo puede distinguir entre los pares probables (positivos) frente a los pares improbables (negativos), se aprenderán buenos vectores de palabras.
En la figura anterior, el par positivo actual de palabra-contexto es (
drilling
,
engineer
).
K=5
muestras negativas se
extraen aleatoriamente
de la
distribución de ruido
:
minimized
,
primary
,
concerns
,
led
,
page
.
A medida que el modelo recorre las muestras de entrenamiento, los pesos se optimizan de modo que la probabilidad de un par positivo
p(D=1|w,c_pos)≈1
, y la probabilidad de pares negativos
p(D=1|w,c_pos)≈1
p(D=1|w,c_neg)≈0
.
Estoy leyendo el documento 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?
La idea de
word2vec
es maximizar la similitud (producto de puntos) entre los vectores para las palabras que aparecen juntas (en el contexto de cada una) en el texto, y minimizar la similitud de las palabras que no lo hacen.
En la ecuación (3) del documento 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
(el objetivo).
El denominador calcula la similitud de todos los demás contextos
c1
y la palabra objetivo
w
.
Maximizar esta proporción garantiza que las palabras que aparecen más juntas en el texto tienen 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 el
cat
aparece en el contexto de los
food
, entonces el vector de los
food
es más similar al vector del
cat
(según las medidas de su producto de punto) 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 que
word2vec
sea mucho más rápido de entrenar.
Calcular Softmax (función para determinar qué palabras son similares a la palabra objetivo actual) es costoso ya que requiere la suma de 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 enfoques basados en softmax y basados en muestreo . 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). Por otro lado, los enfoques basados en muestreo eliminan por completo la capa softmax y, en cambio, optimizan alguna otra función de pérdida que se aproxima al softmax (lo hacen 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 así como:
Qué logaritmo puede descomponerse en:
Con alguna fórmula matemática y gradiente (ver más detalles en ) se convirtió a:
Como puede ver, 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 seleccionadas 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
algorithm
,
widely
popular
,
was
developed
.
Estas palabras de contexto se consideran como etiquetas positivas.
También necesitamos algunas etiquetas negativas.
Elegimos al azar algunas palabras del corpus (
produce
,
software
,
Collobert
,
margin-based
,
probabilistic
) y las consideramos como muestras negativas.
Esta técnica que elegimos algunos ejemplos al azar del corpus se llama muestreo negativo.
Referencia :
- (1) C. Dyer, "Notas sobre estimación de contraste de ruido y muestreo negativo" , 2014
- (2) http://sebastianruder.com/word-embeddings-softmax/