#python #nlp
#python #nlp
Вопрос:
Насколько я понимаю, отрицательная выборка случайным образом отбирается K negative samples
из распределения шума, P(w)
. Распределение шума — это в основном частотное распределение некоторая модификация слов. Обычно мы выбираем K = 5 ~ 20
отрицательные выборки.
P(w) = Uw(w)^(3/4) / normalization_factor
И я видел эти два одинаковых уравнения, которые представлены в двух разных обозначениях:
Три вопроса:
- Что означает синяя рамка? В чем значение
j
иi
? - Второе уравнение, похоже, не показывает ничего, что «случайным образом извлекает» слова из распределения шума. Что означает
k
в красном поле? - Как вы выбираете образцы шума из распределения шума?
Допустим, что нормализованное распределение шума выглядит как следующий словарь:
dist = {'apple': 0.0023, 'bee': 0.004, 'desk':0.032', 'chair': 0.032 ...}
Как вы «случайным образом извлекаете» K
образцы шума из dist
?
Комментарии:
1. Хотя этот вопрос, безусловно, имеет отношение к переполнению стека, я думаю, вы могли бы добиться большего успеха, задав его в перекрестной проверке или математике . Только мои два цента.
Ответ №1:
Я понял это и написал обучающую статью об отрицательной выборке.
- Синяя рамка означает, что это
u_j
происходит из распределения шумаP_n(w)
. - Синяя рамка включает в себя аспект отрицательной выборки «случайная выборка».
u_j
являетсяi
-й отрицательной выборкой из распределения шума, а также, в то же время,j
-м вектором слов в выходной матрице весов. - Вы используете что-то вроде
np.random.choice()
Исходная функция стоимости, приведенная в оригинальной статье Word2Vec, на самом деле довольно запутанна с точки зрения обозначений. Более четкой формой функции затрат было бы:
где c_pos
— вектор слов для положительного слова, а h
— скрытый слой и эквивалентен вектору слов входного слова w
. c_neg
— вектор слов из случайно нарисованных отрицательных слов, и W_neg
— вектор слов из всех K
отрицательных слов.
Распределение шума — это нормализованное частотное распределение слов, возведенных в степень α
. Математически это может быть выражено как:
Распределение слов, основанное на том, сколько раз каждое слово появлялось в корпусе, называется распределением unigram и обозначается как U(w)
. Z
является фактором нормализации и α
является гиперпараметром, который обычно α=3/4
.
Повышение распределения до степени α
приводит к сглаживанию распределения:
Он пытается устранить дисбаланс между общими словами и редкими словами, уменьшая вероятность рисования общих слов и увеличивая вероятность рисования редких слов.
Отрицательные выборки случайным образом извлекаются из распределения шума:
import numpy as np
unig_dist = {'apple': 0.023, 'bee': 0.12, 'desk': 0.34, 'chair': 0.517}
sum(unig_dist.values())
>>> 1.0
alpha = 3 / 4
noise_dist = {key: val ** alpha for key, val in unig_dist.items()}
Z = sum(noise_dist.values())
noise_dist_normalized = {key: val / Z for key, val in noise_dist.items()}
noise_dist_normalized
>>> {'apple': 0.044813853132981724,
'bee': 0.15470428538870049,
'desk': 0.33785130228003507,
'chair': 0.4626305591982827}
Изначально chair
было наиболее распространенным словом и имело вероятность быть нарисованным 0.517
. После того, как распределение unigram U(w)
было возведено в степень 3/4
, оно имеет вероятность 0.463
.
С другой стороны, apple
было наименее распространенным словом вероятности 0.023
, но после преобразования оно имеет вероятность 0.045
. Был устранен дисбаланс между наиболее распространенным словом ( chair
) и наименее распространенным словом ( apple
).