NLP — отрицательная выборка — как извлечь отрицательные выборки из распределения шума?

#python #nlp

#python #nlp

Вопрос:

Насколько я понимаю, отрицательная выборка случайным образом отбирается K negative samples из распределения шума, P(w) . Распределение шума — это в основном частотное распределение некоторая модификация слов. Обычно мы выбираем K = 5 ~ 20 отрицательные выборки.

P(w) = Uw(w)^(3/4) / normalization_factor

И я видел эти два одинаковых уравнения, которые представлены в двух разных обозначениях:

введите описание изображения здесь

Три вопроса:

  1. Что означает синяя рамка? В чем значение j и i ?
  2. Второе уравнение, похоже, не показывает ничего, что «случайным образом извлекает» слова из распределения шума. Что означает k в красном поле?
  3. Как вы выбираете образцы шума из распределения шума?

Допустим, что нормализованное распределение шума выглядит как следующий словарь:

dist = {'apple': 0.0023, 'bee': 0.004, 'desk':0.032', 'chair': 0.032 ...}

Как вы «случайным образом извлекаете» K образцы шума из dist ?

Комментарии:

1. Хотя этот вопрос, безусловно, имеет отношение к переполнению стека, я думаю, вы могли бы добиться большего успеха, задав его в перекрестной проверке или математике . Только мои два цента.

Ответ №1:

Я понял это и написал обучающую статью об отрицательной выборке.

  1. Синяя рамка означает, что это u_j происходит из распределения шума P_n(w) .
  2. Синяя рамка включает в себя аспект отрицательной выборки «случайная выборка». u_j является i -й отрицательной выборкой из распределения шума, а также, в то же время, j -м вектором слов в выходной матрице весов.
  3. Вы используете что-то вроде 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 ).