Коротко обсудим, как устроен алгоритм Negative Sampling в методе SkipGram:
В одной статье вычисление функции ewi⋅dj∑|V|j=1ewi⋅djewi⋅dj∑j=1|V|ewi⋅dj\frac{e^{w_i \cdot d_j}}{\sum_{j=1}^{|V|}e^{w_i \cdot d_j}} по всему словарю сводится к задаче отличать случаи, когда следующее за последовательностью cicic_i слово wiwiw_i взято из обучающей выборки, а когда - выбрано наугад из словаря:
Вероятность события "слово wiwiw_i следующее за контекстом cicic_i взято из обучающей выборки" обозначим как P(y=1|wi,ci)P(y=1|wi,ci)P(y=1|w_i,c_i).
Вероятность того, что следующее слово выбрано наугад из словаря: P(y=0|w~ij,ci)P(y=0|w~ij,ci)P(y=0|\tilde{w}_{ij},c_i).
Авторы статьи предлагают оптимизировать следующую функцию:
Jθ=∑wi∈V[logP(y=1|wi,ci)+∑kj=1logP(y=0|w~ij,ci)]→maxJθ=∑wi∈V[logP(y=1|wi,ci)+∑j=1klogP(y=0|w~ij,ci)]→maxJ_θ = \sum_{w_i∈V}[logP(y=1|w_i,c_i) + \sum_{j=1}^{k}logP(y=0|\tilde{w}_{ij},c_i)] \to \max
В своей статье word2vec Томаш Миколов определяет указанные выше вероятности как сигмоиду от скалярного произведения центрального вектора слова wiwiw_i и контекстного вектора слова cicic_i:
P(y=1|wi,ci)=σ((wi,dj))P(y=0|wi~,ci)=1−σ((wi~,dj))=σ((−wi~,dj))P(y=1|wi,ci)=σ((wi,dj))P(y=0|wi~,ci)=1−σ((wi~,dj))=σ((−wi~,dj))P(y=1|w_i,c_i) = \sigma((w_i,d_j)) \\ P(y=0|\tilde{w_i},c_i) = 1-\sigma((\tilde{w_i},d_j)) = \sigma((-\tilde{w_i},d_j))
Таким образом вычисление softmax в SkipGram сводится к вычислению Negative Sampling Loss:
Jθ=∑wi∈V[logσ(wi,ci)+∑kj=1log(1−σ(w~ij,ci))]→maxJθ=∑wi∈V[logσ(wi,ci)+∑j=1klog(1−σ(w~ij,ci))]→maxJ_θ = \sum_{w_i∈V}[log\sigma(w_i,c_i) + \sum_{j=1}^{k}log(1-\sigma(\tilde{w}_{ij},c_i))] \to \max
К сожалению, у нас пока нет статистики ответов на данный вопрос,
но мы работаем над этим.