15 марта 2020

Системный Блокъ
5 лет назад

FastText — это библиотека, содержащая предобученные готовые векторные представления слов (читать, что это такое) и классификатор, то есть алгоритм машинного обучения разбивающий слова на классы. FastText разработала команда исследователей из Facebook AI Research, в составе которых был и создатель Word2vec Томаш Миколов (к тому времени перешедший из Google в Facebook).Для получения векторного представления слов одновременно используются модели skipgram и CBOW (Continuous Bag-of-Words). Как работают эти модели можно прочитать в нашем материале о word2vec.Так что же отличает FastText? Более быстрая работа по сравнению с другими пакетами и моделями. Для модели векторных представлений слов используется skip-gram с негативным сэмплированием. Негативное сэмплирование — это способ создать для обучения векторной модели отрицательные примеры, то есть показать ей пары слов, которые не являются соседями по контексту. Для каждого положительного примера (когда слова в тексте стоят рядом, например, «пушистый котик») мы подбираем несколько отрицательных («пушистый утюг», «пушистый радиосигнал», «пушистое бегство»). Всего подбирается от 3 до 20 случайных слов. Такой случайный подбор нескольких примеров не требует много компьютерного времени и позволяет ускорить работу FastText.Skip-gram игнорирует структуру слова, но в некоторых языках есть составные слова, как, например, в немецком. Поэтому к основной модели была добавлена subword-модель. Subword-модель — это представление слова через цепочки символов (n-граммы) с n от 3 до 6 символов от начала до конца слова плюс само слово целиком. Например слово замок с n = 3 будет представлено n-граммами <за, зам, амо, мок, ок > и последовательностью <замок>. Таким образом, для модели есть разница между последовательностью <зам> в слове зам — и n-граммой зам из слова замок. Такой подход позволяет работать и с теми словами, которые модель ранее не встречала.Признаки, полученные при помощи разбиения на n-граммы, имеют огромную размерность (т.е. для текста получается огромная тяжелая таблица). Это может замедлить работу обучаемой на этих признаках модели. Для фиксирования размерности признаков применяется хэширование признаков (специальная процедура, которая позволяет кодировать объекты разных размеров с помощью символьных цепочек одинаковой длины). Признаки получают хэш-индексы, что помогает считывать их быстрее.В основе классификатора лежит модель линейной классификации, по архитектуре схожая с моделью CBOW. Чем больше количество классов, тем больше время работы линейной модели. Для оптимизации классификатора используется иерархический софтмакс основанный на алгоритме кодирования Хаффмана.Дерево классов состоит из веток, где в самом верху наиболее встречающейся класс, а его дети — связанные менее встречающееся классы. Например, у класса «Биология» будут дети узлы классов «Животные» и «Растения» и т.д. Вероятности классов определяется для каждого узла от первого узла-родителя до последнего узла-ребенка. Таким образом, у дочернего узла вероятность всегда меньше, чем у его узла-родителя.Как можно применить библиотеку в практической задаче, рассмотрим ниже.Как применить FastText в задачах NLPСкачать предобученные векторные представления слов для русского языка можно по ссылке в конце статьи. Там же список всех доступных языков — сейчас их 157. То есть мы берем уже готовые векторы слов и используем их, чтобы представить слова из нашего корпуса.Может оказаться, что каких-то слов не будет в предобученных векторах FastText, так как обучение проходило на определенном корпусе. Однако мы уже знаем, что FastText обучается не только на словах, но и на символьных последовательностях. Поэтому модель может порождать адекватные вектора и для слов, которые не встречала.По умолчанию FastText использует вектора слов размерностью 300. Но при желании размерность можно изменить с помощью утилит FastText.Официально FastText можно установить или на Linux или Mac OS. Существует и неофициальная сборка для Windows. Также, FastText-модели есть внутри некоторых библиотек для Python, работающих вне зависимости от операционной системы. И конечно, модель запускается в Google Colab.В репозитории проекта FastText на GitHub есть справка по установке и функциям библиотеки. После адаптации уже готовых векторных представлений слов под нужную задачу их используют для обучения нейросети или классификатора вроде логической регрессии. Кстати, использование логистической регрессии позволяет проверить собранный вами алгоритм автоматической обработки текста, не тратя много времени.Самый простой способ попробовать FastTextПопробовать просчитать векторное представление FastText можно, используя пакет gensim в питон. Там есть модель FastText. Импортируется модель так:from gensim.models import FastTextПеред тем как подать модели ваш корпус, не забудьте сделать предобработку текста. Сначала текст очищается от всех символов, кроме букв, приводится в нижний регистр, делается стемминг или лемматизация. В модель текст подается токенизированным (разбитым на слова). После этого можем начинать строить модель.У модели есть гиперпараметры. Вот описание некоторых из них: Размерность вектора модели. Если установить 100 — каждое слово в корпусе будет представлено в виде 100-мерного вектора, и т.п. Размер окна. Этот параметр задает, сколько соседних слов считается частью контекста. Если выставить 40, то алгоритм возьмет 40 слов спереди от слова и 40 слов сзади от слова; Наименьшее допустимое количество символов в слове, для которого будет создаваться векторное представление; так можно убрать частотные, но не очень значимые слова типа союзов и предлогов. Выбор архитектуры векторной модели: skip-gram или СBOW. Sg = 1 переключит на модель skip-gram. По умолчанию значение параметра 0, что означает использование CBOW.Ксения МихайловаИсточники P. Bojanowski, E. Grave, A. Joulin, T. Mikolov. Enriching Word Vectors with Subword Information A. Joulin, E. Grave, P. Bojanowski, T. Mikolov. Bag of Tricks for Efficient Text Classification Статья, в которой разбирают работу с библиотекой fasttext на python Гитхаб проекта fasttext Гитхаб неофициальной версии для Windows Предобученные векторы fasttext на 157 языках Туториал модели fasttext в пакете gensim Google Colab

Показать полностью…
0 отметок нравится. 0 комментариев. 0 репостов.
Пока нет комментариев
Системный Блокъ
5 лет назад

Бум нейросетей и глубинного обучения подстегнул развитие систем автоматической обработки языка (Natural Language Processing). За последние 5-6 лет машинные переводчики, вопросно-ответные системы, автозамена и спеллчекеры стали ощутимо умнее. Новый качественный скачок случился после выхода нейросетевой архитектуры Transformer (Vaswani et al., 2017). Модели-трансформеры, такие как BERT от Google, оказались очень хороши в задачах обработки языка.Допиши за меняНейросети научились порождать правдоподобные тексты, дописывая за человеком. Например, если мы напишем The food is awful (Еда ужасна), нейросетевая модель сгенерирует правдоподобное завершение предложения (сгенерировано из предварительно обученной модели GPT-2-medium):The food is awful. The staff are rude and lazy. The food is disgusting — even by my standards. (Еда ужасна. Персонал грубый и ленивый. Еда отвратительна даже по моим стандартам)Языковые модели способны выявлять и запоминать информацию о грамматике и типичных речевых паттернах, но нет простого способа заставить их генерировать текст с определенными свойствами или по конкретной тематике. К примеру, если мы хотим сгенерировать текст с тем же началом: Еда ужасна, но затем продолжить в положительном смысле или постепенно сменить тему создаваемого текста на тему политики.Мышь на голове у мамонтаИсследователи во всем мире предлагают способы генерации текста с заданием условий. Интересный метод предложен Uber AI в статье Plug and Play Language Models: A Simple Approach to Controlled Text Generation (далее по тексту просто «статья»). Ниже приведен пример, сгенерированный моделью из статьи. Модель настроили так, чтобы она завершила предложение позитивно:The food is awful, but there is also the music, the story and the magic! The «Avenged Sevenfold» is a masterfully performed rock musical that will have a strong presence all over the world.(Еда ужасна, но еще здесь есть музыка, сюжет, магическая атмосфера. «Avenged Sevenfold» [реальная американская рок-группа] — мастерски исполненный рок-мюзикл, который получит признание по всему миру)Plug and Play Language Model (PPLM) позволяет пользователю подключать одну или несколько моделей для каждого из желаемых параметров (позитив или негатив, тематика и т.п.) в большую предобученную языковую модель (LM). Ключевая особенность подхода заключается в том, что он использует LM как есть — никакого обучения или настройки не требуется. Это позволяет исследователям использовать лучшие языковые модели.Модели классификаторов могут быть в 100 000 раз меньше, чем основная модель (LM), и при этом эффективно управлять ими — как мышь, сидящая на голове мамонта и говорящая ему, куда идти.Как работает PPLMАлгоритм PPLM производит прямой и обратный обход нейронной сети, состоящей из двух подсетей — базовой предобученной языковой модели (LM) и модели классификатора по заданному пользователем атрибуту (attribute model):Сначала выполняется прямой проход через языковую модель LM для генерации слова и вычисления вероятности соответствия этого слова требуемому классу (атрибуту) с использованием модели классификатора. Далее, обратный проход обновляет внутренние скрытые представления LM на основе градиентов логарифмических вероятностей требуемого класса (подробнее об этом тут), чтобы увеличить вероятность соответствия сгенерированного текста заданному атрибуту.После обновления генерируется новое распределение по словарю из распределения, полученного из обновленных переменных, и выбирается один токен или слово. Этот процесс повторяется на каждом шаге, причем скрытые слои основной нейросети, представляющие прошлое состояние (для преобразователей: ключи и значения), постоянно изменяются на каждом временном шаге.Чтобы гарантировать, что полученная языковая модель возвращает не бессмыслицу, а примерно такие же разумные результаты, как и исходная языковая модель (в данном примере, GPT-2) применяются два подхода: Минимизация дивергенции Кульбака-Лейблера (KL) между выходным распределением модифицированной и немодифицированной языковой модели. Получение вероятности распределения для следующего слова с помощью смешанного распределения модифицированной и немодифицированной языковой модели (post-norm fusion (введено в Stahlberg et al. (2018)).Управление PPLM можно настроить: сила дополнительной модели с заданным нами атрибутом может быть увеличена или уменьшена, и при нулевой силе восстанавливается исходная языковая модель.Расскажи про космосПосмотрим , что можно получить из PPLM, применяя разные модели классификации.Исследователи Uber AI в качестве дополнительно модели использовали мешок слов (BoW) для различных тем, где вероятность темы определяется суммой вероятностей каждого слова в мешке. Например, BoW, представляющий тему Space, может содержать слова, такие как «планета», «галактика», «пространство» и «вселенная». В таблице ниже показаны примеры PPLM-BoW по теме [Space] с несколькими вариантами префиксов (начал предложений). В каждом примере получили связный текст, имеющий отношение к теме.Результаты для тем [Military], [Politics], [Computers] и [Science], начинающихся с одного и того же префикса, показаны ниже. Самый первый пример — генерация без заданной темы.Помимо этого были получены примеры с неестественными префиксами, которые не имеют никакого отношения к заданной теме. Например, исследователи задали начало предложения «The chicken», а в качестве темы — [Politics]. В результате, даже при таком варианте PPLM смог управлять генерацией текста и подстроить его под заданную тему.Хорошая и плохая курицаКогда необходимо управлять тональностью текста (т.е. сделать его положительно или отрицательно окрашенным), исследователи из Uber AI предлагают вместо BoW использовать дискриминатор, обученный на наборе данных, размеченном по тональности (эмоциональной окраске). Количество параметров в дискриминационных моделях PPLM-Discrim может быть 5000 или меньше. 5000 — это ничтожно мало по сравнению с количеством параметров в основной модели (LM), и обучать такую модель гораздо легче и быстрее.В следующих примерах использовали дискриминатор тональности с 5000 параметрами (1025 параметров на класс (— —, —, 0, +, + +)), обученный на наборе данных SST-5, чтобы управлять тональностью генерируемых текстов. Positive — от модели требуется текст с положительной эмоциональной окраской; Negative — с отрицательной окраской.Детоксикация языкаМодели, обученные на большом количестве текстов в Интернете, могут отражать предвзятость и токсичность, присутствующие в исходных данных. Например, GPT-2 может высказывать расистские суждения, если подобрать провоцирующее на это начало предложения. Этот риск ограничивает сферы применения языковых моделей.К счастью, PPLM можно легко адаптировать для детоксикации языка, подключив классификатор токсичности в качестве модели атрибута и обновив латентность с отрицательным градиентом. Исследователи из Uber AI провели тест, в котором добровольные оценщики отметили токсичность пятисот образцов текста, сгенерированных PPLM с детоксификацией, и сравнили их с базовой моделью GPT-2. В среднем доля токсичной речи снизилась с 63,6% до 4,6%.Если вам интересно узнать больше о работе, здесь и здесь представлен код. Также, можно поиграть с интерактивной демонстрацией transformer.huggingface.co/model/pplm

Показать полностью…
0 отметок нравится. 0 комментариев. 0 репостов.
Пока нет комментариев
Иван Кононов
5 лет назад

0 отметок нравится. 0 комментариев. 0 репостов.
Пока нет комментариев
Иван Кононов
5 лет назад

0 отметок нравится. 0 комментариев. 0 репостов.
Пока нет комментариев
Иван Кононов
5 лет назад

0 отметок нравится. 0 комментариев. 0 репостов.
Пока нет комментариев