![]() |
![]() |
![]() |
|||||
![]() |
Word2vec в картинках |
||||||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-04-03 08:36 ![]() «Во всякой вещи скрыт узор, который есть часть Вселенной. В нём есть симметрия, элегантность и красота — качества, которые прежде всего схватывает всякий истинный художник, запечатлевающий мир. Этот узор можно уловить в смене сезонов, в том, как струится по склону песок, в перепутанных ветвях креозотового кустарника, в узоре его листа. Я считаю, что концепция вложений (embeddings) — одна из самых замечательных идей в машинном обучении. Если вы когда-нибудь использовали Siri, Google Assistant, Alexa, Google Translate или даже клавиатуру смартфона с предсказанием следующего слова, то уже работали с моделью обработки естественного языка на основе вложений. За последние десятилетия произошло значительное развитие этой концепции для нейронных моделей (последние разработки включают контекстуализированные вложения слов в передовых моделях, таких как BERT и GPT2). Word2vec — метод эффективного создания вложений, разработанный в 2013 году. Кроме работы со словами, некоторые его концепции оказались эффективны в разработке рекомендательных механизмов и придании смысла данным даже в коммерческих, неязыковых задачах. Эту технологию применили в своих движках рекомендаций такие компании, как Airbnb, Alibaba, Spotify и Anghami. В этой статье рассмотрим концепцию и механику генерации вложений с помощью word2vec. Начнём с примера, чтобы ознакомиться с тем, как представлять объекты в векторном виде. Вы знаете, насколько много о вашей личности может сказать список из пяти чисел (вектор)? Встраивание личностей: что вы из себя представляете? «Я даю тебе хамелеона Пустыни; его способность сливаться с песком скажет тебе всё, что надлежит знать о корнях экологии и основаниях сохранения личности». — Дети Дюны По шкале от 0 до 100 у вас интровертный или экстравертный тип личности (где 0 — максимально интровертный тип, а 100 — максимально экстравертный)? Вы когда-нибудь проходили личностный тест: например, MBTI, а ещё лучше «большую пятёрку»? Вам дают список вопросов, а затем оценивают по нескольким осям, в том числе интровертность/экстравертность. ![]() Предположим, я набрал 38 из 100 по оценке интроверсии/экстраверсии. Это можно изобразить следующим образом: ![]() ![]() ![]() Я не показываю, какие черты личности мы наносим на график, чтобы вы не привязывались к конкретным чертам, а сразу понимали векторное представление личности человека в целом. Теперь можно сказать, что этот вектор частично отражает мою личность. Это полезное описание, если сравнить разных людей. Допустим, меня сбил красный автобус, и нужно заменить меня похожей личностью. Кто из двух людей на следующем графике больше на меня похож? ![]() ![]() Опять же, двух измерений недостаточно для оценки людей. Десятилетия развития психологической науки привели к созданию теста на пять основных характеристик личности (с множеством дополнительных). Итак, давайте используем все пять измерений: ![]() ![]() В конце этой главы хочу повторить две главные идеи:
![]() Встраивание cлов «Дар слов — это дар обмана и иллюзий». — Дети Дюны С этим пониманием перейдём к векторным представлениям слов, полученным в результате обучения (их также называют вложениями) и посмотрим на их интересные свойства. Вот вложение для слова «король» (вектор GloVe, обученный на Википедии): [ 0.50451 , 0.68607 , -0.59517 , -0.022801, 0.60046 , -0.13498 , -0.08813 , 0.47377 , -0.61798 , -0.31012 , -0.076666, 1.493 , -0.034189, -0.98173 , 0.68229 , 0.81722 , -0.51874 , -0.31503 , -0.55809 , 0.66421 , 0.1961 , -0.13495 , -0.11476 , -0.30344 , 0.41177 , -2.223 , -1.0756 , -1.0783 , -0.34354 , 0.33505 , 1.9927 , -0.04234 , -0.64319 , 0.71125 , 0.49159 , 0.16754 , 0.34344 , -0.25663 , -0.8523 , 0.1661 , 0.40102 , 1.1685 , -1.0137 , -0.21585 , -0.15155 , 0.78321 , -0.91241 , -1.6106 , -0.64426 , -0.51042 ] Мы видим список из 50 чисел, но по ним трудно что-то сказать. Давайте их визуализируем, чтобы сравнить с другими векторами. Поместим числа в один ряд.: ![]() ![]() ![]() ![]()
Аналогии «Слова выносят любую нагрузку, какую мы только пожелаем. Всё, что для этого требуется, — это соглашение о традиции, согласно которой мы строим понятия». — Бог-император Дюны Знаменитые примеры, которые показывают невероятные свойства вложений, — понятие аналогий. Мы можем складывать и вычитать векторы слов, получая интересные результаты. Самый известный пример — формула «король ? мужчина + женщина»: ![]() Визуализируем эту аналогию, как раньше: ![]() Рассмотрев вложения слов, давайте изучим, как происходит обучение. Но прежде чем перейти к word2vec, нужно взглянуть на концептуального предка вложений слов: нейронную модель языка. Модель языка «Пророк не подвержен иллюзиям прошлого, настоящего или будущего. Фиксированность языковых форм определяет такие линейные различия. Пророки же держат в руках ключ к замку языка. Для них физический образ остаётся всего лишь физическим образом и не более того. Один из примеров NLP (обработка естественного языка) — функция предсказания следующего слова на клавиатуре смартфона. Миллиарды людей используют её сотни раз в день. ![]() На скриншоте вверху модель взяла эти два зелёных слова ( thou shalt ) и вернула список вариантов (наибольшая вероятность для слова not ):![]() ![]() ![]() После обучения первые нейронные модели (Bengio 2003) рассчитывали прогноз в три этапа: ![]() ![]() Обучение модели языка «Процесс нельзя понять посредством его прекращения. Понимание должно двигаться вместе с процессом, слиться с его потоком и течь вместе с ним» — Дюна У языковых моделей огромное преимущество перед большинством других моделей машинного обучения: их можно обучать на текстах, которые у нас в изобилии. Подумайте обо всех книгах, статьях, материалах Википедии и других формах текстовых данных, которые у нас есть. Сравните с другими моделями машинного обучения, которым нужен ручной труд и специально собранные данные. «Вы должны узнать слово по его компании» — Дж. Р. Фёрс Вложения для слов вычисляются по окружающим словам, которые чаще появляются рядом. Механика такая:
![]() «Да не построишь машины, наделённой подобием разума людского» — Дюна Когда мы начинаем, окно располагается на первых трёх словах предложения: ![]() ![]() Затем перемещаем окно в следующую позицию и создаём второй образец: ![]() ![]() Смотрим в обе стороны «Парадокс — это признак того, что надо постараться рассмотреть, что за ним кроется. Если парадокс доставляет тебе беспокойство, то это значит, что ты стремишься к абсолюту. Релятивисты рассматривают парадокс просто как интересную, возможно, забавную, иногда страшную, мысль, но мысль весьма поучительную». Бог-император Дюны С учётом всего сказанного ранее, заполните пробел: ![]() ![]() Skip-gram «Когда абсолютно безошибочный выбор неизвестен, интеллект получает шанс поработать с ограниченными данными на арене, где ошибки не только возможны, но и необходимы». — Капитул Дюны Кроме двух слов перед целевым, можно учитывать ещё два слова после него. ![]() ![]() ![]() У розовых прямоугольников разные оттенки, потому что это скользящее окно фактически создает четыре отдельных образца в нашем наборе данных обучения: ![]() ![]() ![]() ![]() ![]() ![]() Пересмотр процесса обучения «Муад'Диб быстро учился потому, что прежде всего его научили тому, как надо учиться. Но самым первым уроком стало усвоение веры в то, что он может учиться, и это — основа всего. Просто поразительно, как много людей не верят в то, что могут учиться и научиться, и насколько больше людей считают, что учиться очень трудно». — Дюна Теперь, когда у нас есть набор skip-gram, используем его для обучения базовой нейронной модели языка, которая предсказывает соседнее слово. ![]() ![]() ![]() Насколько ошиблась модель? Вычитаем вектор прогноза из целевого и получаем вектор ошибки: ![]() ![]() Отрицательный отбор «Пытаться понять Муад'Диба без того, чтобы понять его смертельных врагов — Харконненов, — это то же самое, что пытаться понять Истину, не поняв, что такое Ложь. Это — попытка познать Свет, не познав Тьмы. Это — невозможно». — Дюна Вспомним три этапа, как нейронная модель вычисляет прогноз: ![]()
В этой статье сосредоточимся на первом шаге. Для увеличения производительности можно отойти от прогнозирования соседнего слова… ![]() ![]() ![]() ![]() ![]() Но что ввести в качестве выходных слов? Выберем слова произвольно: ![]() Skip-gram с отрицательной выборкой (SGNS) Мы рассмотрели две центральные концепции word2vec: вместе они называются «skip-gram с отрицательной выборкой». ![]() Обучение word2vec «Машина не может предвидеть каждую проблему, важную для живого человека. Существует большая разница между дискретным пространством и непрерывным континуумом. Мы живём в одном пространстве, а машины существуют в другом». — Бог-император Дюны Разобрав основные идеи skip-gram и отрицательной выборки, можем перейти к более пристальному рассмотрению процесса обучения word2vec. Сначала предварительно обрабатываем текст, на котором обучаем модель. Определим размер словаря (будем называть его vocab_size ), скажем, в 10 000 вложений и параметры слов в словаре.В начале обучения создаём две матрицы: Embedding и Context . В этих матрицах хранятся вложения для каждого слова в нашем словаре (поэтому vocab_size является одним из их параметров). Второй параметр — размерность вложения (обычно embedding_size устанавливают на 300, но ранее мы рассматривали пример с 50 измерениями).![]() ![]() not и выходные/контекстные слова thou (фактический сосед), aaron и taco (отрицательные примеры). Начинаем поиск их вложений в матрицах Embedding (для входного слова) и Context (для контекстных слов), хотя в обеих матрицах есть вложения для всех слов из нашего словаря.![]() ![]() ![]() taco самый высокий балл, а у aaron по-прежнему самая низкая оценка как до, так и после sigmoid.Когда необученная модель сделала прогноз и имея реальную целевую метку для сравнения, давайте посчитаем, сколько ошибок в прогнозе модели. Для этого просто вычитаем оценку sigmoid из целевых меток. ![]() error = target ? sigmoid_scores Вот здесь наступает фаза «обучение» из термина «машинное обучение». Теперь мы можем использовать эту оценку ошибок для корректировки вложений not , thou , aaron и taco , чтобы при следующем расчёте результат был бы ближе к целевым оценкам.![]() not , thou , aaron и taco ). Теперь переходим к следующему этапу (следующий положительный образец и связанные с ним отрицательные) и повторяем процесс.![]() Context и использовать обученную матрицу Embeddings для следующей задачи.Размер окна и количество отрицательных образцов В процессе обучения word2vec два ключевых гиперпараметра — это размер окна и количество отрицательных образцов. ![]() ![]() Вывод «Если ваше поведение выпадает за ваши мерки, то вы живой человек, а не автомат» — Бог-император Дюны Надеюсь, теперь вы поняли вложения слов и суть алгоритма word2vec. Также надеюсь, что теперь вам станут понятнее статьи, в которых упоминается концепция «skip-gram с отрицательной выборкой» (SGNS), как в вышеупомянутых рекомендательных системах. Ссылки и дополнительная литература
Источник: habr.com ![]() Комментарии: |
||||||