Word2vec: учим эмбеддинги через предсказание соседей
skip-gram учит классификатор отличать настоящих соседей слова от случайных слов, а его веса и становятся эмбеддингами.
Зачем это нужно
Плотные векторы короче разреженных: их 50–1000 измерений вместо размера словаря. По словам источника, плотные векторы работают в задачах лучше разреженных. Классификатору нужно меньше весов, и это помогает не переобучаться.
Как это работает
Для каждой пары «целевое слово w, слово-кандидат c» модель считает P(+|w,c) = σ(c·w), где σ — сигмоида. Настоящие соседи из окна — положительные примеры. Для каждого из них берут k случайных шумовых слов — отрицательные примеры. Модель учится повышать сходство с соседями и понижать сходство с шумом. Метод учится градиентным спуском.
Шумовые слова выбираются с весом α = 0.75 по частоте. Так редкие слова получают чуть больше шансов.
Пример
В предложении «…lemon, a [tablespoon of apricot jam, a] pinch…» для слова apricot пары (apricot, jam) и (apricot, aardvark) — положительный и отрицательный пример. Модель должна поставить jam выше aardvark.
Что запомнить
- Skip-gram — это логистическая регрессия, и текст даёт для неё разметку сам.
- У каждого слова два вектора: как цели (W) и как контекста (C).
- Эмбеддинги выучиваются ради этой задачи, а сам классификатор не нужен.
Где читать дальше
- SLP3, гл. 5 «Embeddings», разделы 5.5.1–5.5.2