Как работает механизм внимания в BERT и почему он эффективнее Word2Vec
Что проверяют
Понимаете ли вы разницу между статическими и контекстными эмбеддингами и можете ли расписать self-attention формулой, а не словами «модель смотрит на важные слова». Следом часто спрашивают про задачи предобучения BERT и про цену внимания на длинных текстах.
Как отвечать
Начните с Word2Vec. Это неглубокая модель (CBOW или skip-gram с negative sampling), которая учится по окну соседних слов, но на выходе даёт один вектор на слово. У «замка» на двери и «замка» с башнями вектор общий, а слова вне словаря не представлены вообще.
BERT это стек энкодеров Transformer (в base 12 слоёв, 768 измерений, 12 голов). Внимание в каждом слое устроено так:
- проекции: каждый токен превращается в три вектора: запрос Q, ключ K и значение V;
- веса:
softmax(QKᵀ / √d_k)показывает, насколько токен опирается на каждый другой токен последовательности, деление на корень из размерности не даёт softmax насытиться; - выход: взвешенная сумма V, то есть новый вектор токена собран из контекста;
- многоголовость: несколько голов параллельно ловят разные связи, например синтаксические и кореферентные.
Двунаправленность в том, что маски на будущие токены нет: каждый токен видит всё предложение сразу. Учить так можно благодаря MLM: 15% токенов скрываются, модель их восстанавливает. Во втором исходном задании, NSP, модель угадывала, идёт ли второе предложение за первым. Токенизатор WordPiece режет редкие слова на части, поэтому проблема неизвестных слов почти уходит.
«Эффективнее» здесь значит качество на задачах, где смысл зависит от контекста: NER, классификация, вопросно-ответные системы. По вычислениям BERT на порядки дороже Word2Vec.
Где спотыкаются
Говорят, что Word2Vec контекст не учитывает. При обучении учитывает, но не при использовании: вектор слова один на все случаи.
Путают BERT с генеративными моделями. Это энкодер, текст он не пишет, а строит представления для классификации, поиска и разметки.
Забывают про цену внимания: память и время растут квадратично от длины, а исходный BERT ограничен 512 токенами. Длинные документы приходится резать на куски.