Видео проигрыватель загружается.Воспроизвести видеоВоспроизвестиБез звукаТекущее время 0:00/Продолжительность 4:55Загрузка: 0.00%0:00Тип потока ОНЛАЙНSeek to live, currently behind liveОНЛАЙНОставшееся время -4:55 1xСкорость воспроизведения2x1.75x1.5x1.25x1x, выбрано0.75x0.5xГлавыГлавыОписанияОтключить описания, выбраноСубтитрынастройки субтитров, откроется диалог настройки субтитровСубтитры выкл., выбраноЗвуковая дорожкаPicture-in-PictureПолноэкранный режимThis is a modal window.Начало диалоговго окна. Кнопка Escape закроет или отменит окноТекстColorБелыйЧерныйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачностьПолупрозрачныйФонColorЧерныйБелыйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачностьПолупрозрачныйПрозрачныйОкноColorЧерныйБелыйКрасныйЗеленыйСинийЖелтыйПурпурныйГолубойTransparencyПрозрачныйПолупрозрачныйПрозрачностьРазмер шрифта50%75%100%125%150%175%200%300%400%Стиль края текстаНичегоПоднятыйПониженныйОдинаковыйТеньШрифтПропорциональный без засечекМоноширинный без засечекПропорциональный с засечкамиМоноширинный с засечкамиСлучайныйПисьменныйМалые прописныеСбросить сбросить все найстройки по умолчаниюГотовоЗакрыть модальное окноКонец диалогового окна.
Один из прорывов в этой области произошел в районе 2013 года, когда Миколав и компания придумали word2vec, а именно две модели: SkipGram и Continuous Bag-of-words (CBoW). Модель SkipGram ориентирована на предсказание соседних слов в некотором окне при условии наблюдения центрального слова. Модель CBoW (Continuous Bag-of-words) работает в обратном направлении — она предсказывает центральное слово по остальным словам, в рамках окна. Принципиальное отличие от N-граммной модели заключается в том, что вероятности больше не хранятся в явном виде — они вычисляются через произведение векторов. Для каждого слова мы храним два таких вектора. Один из них мы используем, когда слово выступает в роли условия, то есть находится справа от вертикальной черты, а второй — когда мы предсказываем это слово, то есть когда хотим оценить вероятность его появления. Вероятности, при этом, считаются через софтмакс от скалярных произведений этих векторов. Однако если словарь большой — порядка сотен тысяч слов, честный софтмакс считать очень дорого из-за этой суммы в знаменателе, и поэтому используют одну из аппроксимаций — например, "negative sampling", когда знаменатель оценивается по небольшому количеству случайно выбранных слов. Есть и другие аппроксимации — например, иерархический софтмакс[1]. По сути, модель языка решает задачу классификации, в которой количество классов равно размеру словаря. Настраиваются модели word2vec с помощью градиентного спуска и в качестве целевой функции выступает кросс-энтропия. Когда модель обучена, мы можем оценивать правдоподобие текста по такой вот формуле, предложенной авторами. Самое главное преимущество word2vec — это его простота. Любой человек с ноутбуком может скачать википедию[2] на своём языке и за пол-дня обучить модель, получить признаки и начать их использовать в своей задаче. word2vec даёт сжатое представление, которое можно использовать как признаки в задачах машинного обучения. Такие вектора содержат какую-то семантическую информацию. Помните арифметику смыслов? Например, выражение "король минус мужчина плюс женщина" примерно равно "королеве". Благодаря предложенным аппроксимациям софтмакса — negative sampling или иерархический софтмакс — word2vec может эффективно работать с очень большими словарями, до нескольких миллионов слов. Однако, из коробки, word2vec не умеет работать с неизвестными словами. Зато FastText — умеет (который, по сути, тот же самый word2vec, только на N-граммах символов). Так что это можно не считать большой проблемой. Фундаментальное ограничение word2vec заключается в том, что, в результате обучения, мы получаем только один вектор для слова — и всё. А ведь одно слово может иметь несколько смыслов и смысл может меняться в зависимости от контекста... Другими словами, представления слов, которые получаются с помощью word2vec — они не зависят от контекста. Вот это уже проблема. Вот тут на сцену выходят авторегрессионные языковые модели на основе нейросетей. Скелет таких моделей примерно одинаковый, всегда. Сначала каждый токен по-отдельности преобразуется в вектор, получается embedding токена без учёта контекста, затем, с помощью рекуррентных, свёрточных или архитектур с вниманием происходит учёт контекста, а затем, на последнем слое, предсказываются вероятности слов. Чаще всего в последнее время используется честный софтмакс, а не его аппроксимация, так как использование приближений несколько ухудшает результаты. Поэтому важно не раздувать словарь слишком сильно — на практике, многие большие языковые модели работают со словарями размера не больше пятидесяти тысяч уникальных токенов. Очевидно, что при этом мы отбрасываем очень большое количество слов. Самый очевидный ход для решения этой проблемы — работать не с целыми словами, а с символами. Однако это очень сильно растягивает последовательности и моделям требуется помнить гораздо более длинную историю. На практике, символьные модели работают не так хорошо, как модели на уровне токенов, поэтому последнее время ищут другие способы.
[1] Hierarchical softmax and negative sampling: short notes worth telling
[2] https://dumps.wikimedia.org/

К сожалению, у нас пока нет статистики ответов на данный вопрос, но мы работаем над этим.