Изучите TensorFlow, модель Word2Vec и алгоритм TSNE с помощью рок-групп

1656559575 izuchite tensorflow model word2vec i algoritm tsne s pomoshhyu rok grupp

от Патрика Ферриса

Изучение способ TensorFlow для создания нейронной сети может показаться большим препятствием для начала работы с машинным обучением. В этом учебнике мы рассмотрим этот шаг за шагом и объясним все важные компоненты, участвующие в создании модели Bands2Vec с помощью данных Pitchfork от Kaggle.

Полный код можно найти на странице GitHub.

Модель Word2Vec

Нейронные сети потребляют числа и производят числа. У них это очень хорошо получается. Но дайте им текст, и они устроят истерику и не сделают ничего увлекательного.

Если работа нейронной сети состоит в том, чтобы обрабатывать цифры и производить значимые результаты, то наша работа состоит в том, чтобы убедиться, что то, что мы кормим, тоже имеет значение. Этот поиск содержательного представления информации породил модель Word2Vec.

Одним из подходов к работе со словами является формирование векторов с одноразовым кодированием. Создайте длинный (количество разных слов в нашем словаре) список нулей и пусть каждое слово указывает на уникальный индекс этого списка. Если мы видим это слово, сделайте этот индекс в списке номер один.

Хотя этот подход работает, он требует много места и полностью лишен смысла. «Хорошо» и «Отлично» такие же похожи, как «Утка» и «Черная дыра». Если бы был способ векторизовать слова, чтобы мы сохранили это контекстное подобие…

К счастью, есть способ!

Используя нейронную сеть, мы можем создавать «встраивание» наших слов. Это векторы, представляющие каждое уникальное слово извлеченное из веса связей в нашей сети.

Но остается вопрос: как мы убедиться, что они имеют смысл? Ответ: подавайте парами слов в качестве целевого слова и контекстного слова. Делайте это достаточно раз, приводя также несколько плохих примеров, и нейронная сеть начинает изучать какие слова появляются вместе и как это образует почти график. Как социальная сеть слов, связанных между собой контекстами. «Хорошо» означает «полезный», а также «заботливый» и т.д. Наша задача – передать эти данные в нейронную сеть.

Одним из распространенных подходов является модель Skipgram, которая генерирует эти пары целевого контекста на основе перемещения окна по набору данных текста. Но что если наши данные не являются предложениями, но мы все равно имеем контекстное значение?

В этом учебнике наши слова – это имена исполнителей, а контексты – жанры и средняя оценка. Мы хотим, чтобы исполнитель А был близок к исполнителю Б, если он разделяет жанр и имеет подобную среднюю оценку. Итак начнем.

Создание нашего набора данных

Pitchfork — американский музыкальный онлайн-журнал, освещающий преимущественно рок, независимую и новую музыку. Данные, опубликованные в Kaggle, были удалены с их веб-сайта и содержат информацию, например, обзоры, жанры и даты, связанные с каждым исполнителем.

Давайте создадим класс художника и словарь, чтобы хранить всю необходимую нам полезную информацию.

Прекрасно! Теперь мы хотим создать пары целевого контекста на основе жанра и средней оценки. Для этого мы создадим два словаря: один для разных уникальных жанров, а второй для партитур (дискретизированных до целых чисел).

Мы добавим всех наших исполнителей к соответствующему жанру и средней оценке в этих словарях, чтобы использовать их позже при создании пар исполнителей.

Последний шаг, прежде чем мы погрузимся в код TensorFlow: создание пакета! Пакет — это образец данных, которые наша нейронная сеть будет использовать для каждой эпохи. Эпоха – это один шаг по нейронной сети на этапе обучения. Мы хотим создать два массива numpy. Один будет содержать следующий код:

TensorFlow

Существует множество учебных пособий TensorFlow и источников знаний. Любая из этих замечательных статей поможет вам и документация. Следующий код в значительной степени основан на учебнике word2vec от самих людей TensorFlow. Надеюсь, я смогу демистифицировать некоторые из них и свести это к основному.

Первым шагом является понимание представления «графа». Это невероятно полезно для визуализаций TensorBoard и создания ментального образа потоков данных в нейронной сети.

Найдите время, чтобы прочитать код и комментарии ниже. Прежде чем передавать данные в нейронную сеть, мы должны инициализировать все части, которые мы собираемся использовать. Заполнители — это входящие данные, принимающие все, что мы предоставляем ‘feed_dict’. Переменные являются изменяемыми частями графика, которые мы в конечном счете настроим. Важнейшей частью нашей модели является функция утрат. Это оценка того, как хорошо мы сделали, и карта сокровищ, как мы можем улучшить.

Контрастная оценка шума (NCE) является функцией потерь. Обычно мы используем кросс-энтропию и softmax, но в мире обработки естественных языков все наши классы состоят из каждого уникального слова.

С точки зрения вычислений это плохо. NCE изменяет формулировку проблемы с вероятностей классов на то, правильно ли сочетание целевого контекста (бинарная классификация). Нужно настоящее сочетание, а затем выборки, чтобы получить плохие пары, константу num_sampled контролирует это. Наша нейронная сеть учится различать эти хорошие и плохие пары. В конце концов оно изучает контексты! Вы можете прочитать больше о NCE и как это работает здесь.

Запустите нейронную сеть

Теперь, когда все настроено хорошо, нам остается лишь нажать большую зеленую кнопку Go и немного покрутить большими пальцами.

Визуализация с помощью TSNE

Ладно, мы еще не закончили. Теперь мы имеем богатые контекстом 64-мерные векторы для наших художников, но это, возможно, слишком много измерений, чтобы реально представить его полезность.

По нашему счастью, мы можем разбить эту информацию на два измерения, сохранив столько свойств, сколько имели 64 измерения! Это T-распределенное встраивание стохастического соседа или сокращенно TSNE. Это видео отлично объясняет основную идею TSNE, но я попробую дать широкий обзор.

TSNE – это подход к уменьшению размерности, сохраняющий сходство (например, эвклидовое расстояние) более высоких размеров. Для этого он сначала строит матрицу подобия «точка-точка», рассчитанную с помощью нормального распределения. Центром распределения является первая точка, а сходством второй точки является значение распределения на расстоянии между точками, удаленными от центра распределения.

Затем мы случайным образом проецируем на измерение ниже и выполняем точно такой же процесс, используя t-распределение. Теперь у нас есть две матрицы подобия «точка-точка». Затем алгоритм медленно перемещает точки в нижнем измерении, чтобы попытаться сделать его похожим на матрицу для более высокого измерения, где сходство было сохранено. И повторяйте. К счастью, у Sci-kit Learn есть функция, которая может считать нас.

Результаты

1*RIQ6oJsW_ZfH2pgpNDiTDA
Все Художники создали графики, используя их встраивание с низкими размерами

Удивительным аспектом этих вложений является то, что, как и векторы, они поддерживают математические операции. Классическим примером является: King — Man + Woman = Queen , или по крайней мере очень близко к нему. Попробуем на примере.

Возьмем низкоразмерные встраивания Coil, группа с такими жанрами, [‘electronic’, ‘experimental', ‘rock’] и средний балл 7.9. Теперь вычтите низкие размеры встраивания Elder Ones, группы с жанрами,['electronic'] и средний балл 7.8. Благодаря этому отличию встраивания найдите ближайшие группы и напечатайте их названия и жанры.

Artist: black lips, Mean Score: 7.48, Genres: ['rock', 'rock', 'rock', 'rock', 'rock']
Artist: crookers, Mean Score: 5.5, Genres: ['electronic']
Artist: guided by voices, Mean Score: 7.23043478261, Genres: ['rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock']

Это сработало! Мы получаем рок- и электронные группы со смутно схожими оценками. Ниже приведены первые триста групп с ярлыками. Надеемся, этот проект для вас образовательный и вдохновляющий. Идите и стройте, исследуйте и играйте!

1*grGZRnIl-nutaVEiwzvLDA
Триста художников наметили и обозначили

Добавить комментарий

Ваш адрес email не будет опубликован.