Классическое объяснение word2vec как архитектуры Skip-gram с отрицательной выборкой в оригинальной научной статье и бесчисленных блог-постах выглядит так:
while(1) {
1. vf = vector of focus word
2. vc = vector of focus word
3. train such that (vc . vf = 1)
4. for(0 <= i <= negative samples):
vneg = vector of word *not* in context
train such that (vf . vneg = 0)
}
Действительно, если погуглить [word2vec skipgram], что мы видим:
- Страница Википедии, которая описывает алгоритм на высоком уровне
- Страница Tensorflow с тем же объяснением
- Блог Towards Data Science c описанием того же алгоритма, и список продолжается.
Но все эти реализации ошибочны.
Читать полностью »