Учебное пособие по Tensorflow здесь относится к их базовой реализации, которую вы можете найти на github здесь, где авторы Tensorflow реализуют обучение/оценку встраивания вектора word2vec с помощью модели Skipgram.
Мой вопрос касается фактического создания пар (цель, контекст) в функции generate_batch()
.
В этой строке Авторы Tensorflow случайным образом выбирают близлежащие целевые индексы из «центрального» индекса слов в скользящем окне слов.
Однако они также хранят данные структура targets_to_avoid
, к которой они добавляют сначала «центральное» контекстное слово (которое, конечно, мы не хотим сэмплировать), но ТАКЖЕ другие слова после их добавления.
Мои вопросы заключаются в следующем:
- Зачем сэмплировать из этого скользящего окна вокруг слова, почему бы просто не использовать цикл и не использовать их все вместо сэмплирования? Кажется странным, что они беспокоятся о производительности/памяти в
word2vec_basic.py
(их "базовой" реализации). - Каким бы ни был ответ на вопрос 1), почему они оба производят выборку и отслеживают то, что они выбрали с помощью
targets_to_avoid
? Если бы им нужен был действительно случайный выбор, они бы использовали выборку с заменой, а если бы они хотели убедиться, что получили все варианты, они должны были просто использовать цикл и получить их все в первую очередь! - Использует ли встроенный tf.models.embedding.gen_word2vec тоже так работает? Если да, то где я могу найти исходный код? (не удалось найти файл .py в репозитории Github)
Спасибо!