Видео проигрыватель загружается.Воспроизвести видеоВоспроизвестиБез звукаТекущее время 0:00/Продолжительность 4:17Загрузка: 0.00%0:00Тип потока ОНЛАЙНSeek to live, currently behind liveОНЛАЙНОставшееся время -4:17 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%Стиль края текстаНичегоПоднятыйПониженныйОдинаковыйТеньШрифтПропорциональный без засечекМоноширинный без засечекПропорциональный с засечкамиМоноширинный с засечкамиСлучайныйПисьменныйМалые прописныеСбросить сбросить все найстройки по умолчаниюГотовоЗакрыть модальное окноКонец диалогового окна.
Прошло немного времени, наша модель обучилась — мы видим, что даже уже за одну эпоху функция потерь достигла приемлемого значения и в последующих итерациях она менялась слабо. Наше дополнение для уменьшения скорости обучения тоже сработало. На всякий случай, сохраним нашу модель. Давайте теперь достанем вектора слов из обученной модели и посмотрим — что же мы там "научили". Для того, чтобы было удобно экспериментировать с обученными эмбеддингами слов, мы сделали небольшой класс, который на вход принимает numpy-массив двумерный — прямоугольную матрицу, количество строк в которой совпадает с количеством слов в словаре, а количество столбцов с размерностью эмбеддинга. А также, этот класс принимает словарь, который отображает токены в текстовом виде в номера токенов. Важный момент — для того, чтобы было удобнее искать похожие слова, мы нормируем вектора — каждый вектор нормируется на его евклидову норму (на его длину). Этот класс поддерживает несколько методов — например, поиск ближайших слов, решение семантической пропорции — то есть задача аналогии, а также получение списка векторов для слов. Все эти функции, так или иначе, завязаны на самое главное — это вычисление близости векторов. Этот алгоритм реализуется в методе most similar by vector. Метод принимает на вход вектор и возвращает список пар. В каждой паре первый элемент — это токен в строковом виде, второй — это оценка сходства с вектором-запросом. Мы здесь сначала находим сходство данного вектора со всеми вообще векторами в нашей таблице, а затем выбираем заданное количество наиболее близких. Итак, давайте поэкспериментируем с полученными эмбеддингами, посмотрим, "что же там научилось". Давайте найдём слова, самые близкие по смыслу, к слову "сыр". Мы видим, что список похожих слов содержит, в первую очередь, сорта сыра — чеддер, пармезан, рикотта, и так далее. В принципе, выглядит неплохо! Давайте ещё какой-нибудь пример посмотрим — например, "курица". Мы видим, что здесь "утка", "индейка", "грудка" и другие виды мяса. Давайте также попробуем решить смысловую пропорцию, то есть найти слова которые относятся к сыру так же, как "какао" относится к "пирожному". Список похожих слов получился не очень осмысленным, это вполне понятно, потому что предложения короткие, и "сыр", допустим, с "вином", редко встречается в одном предложении — хотя бы поэтому. Из такого небольшого корпуса, как наш, мы могли и не выучить нужные закономерности. То есть, размер корпуса очень важен при обучении дистрибутивно-семантических моделей. Давайте теперь получим вектора для сразу нескольких слов и набросаем их на плоскость. Наши вектора имеют размерность "100". Вектора размерности "100" непосредственно нельзя визуализировать — мы можем визуализировать только вектора размерности не больше трёх, но более удобно использовать вообще "2", чтобы всё на плоскости было. У нас в библиотеке есть специально небольшая функция для этого. Что же у нас тут выучилось? На этом графике мы видим, что — допустим, слова, соответствующие сортам винограда ближе к друг другу, чем к другим словам, а также мясные и рыбные изделия тоже объединились в группу. Центральная группа соответствует тоже каким-то напиткам, куда попало и "вино", и "какао", и "кофе". Алгоритм обучения word2vec не детерминированный, потому что мы случайно инициализируем таблицы эмбеддингов, делаем случайные шаги по случайно выбранным группам примеров, мы используем случайное сэмплирование отрицательных слов, и поэтому, если вы несколько раз запустите обучение, то вы получите разные рисунки и немного отличающиеся списки "похожих" слов.
К сожалению, у нас пока нет статистики ответов на данный вопрос,
но мы работаем над этим.