Выучить новый язык непросто, правда? Идея изучения нового языка почти всегда доставляет боль. В то же время я не могу ожидать, что мой ноутбук так легко выучит то, что я говорю. Все, что мы можем сделать, - это заставить наши компьютеры научиться устанавливать определенные отношения между словами, которые мы говорим.

«Вы должны знать слово по компании, которую оно составляет» - Дж. Р. Ферт

Зачем вообще нужны вложения?

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

Intel Core i5- Привет, дружище, почему бы тебе не научить меня своему языку!

Я- Эмм, давай начнем с этого, я научу тебя некоторым словам. Хорошо?

Intel Core i5- Yups! Это было бы прекрасно.

Я- Ну, возьмите это Apple - ›[1 0 0 0], Blackberry -› [0 1 0 0], Raspberry - ›[0 0 1 0], Django -› [0 0 0 1]

Intel Core i5- (демонический смех) О боже, всего 4 фрукта, и это твой язык!

Я- извините, но есть еще 171 476 слов, в среднем 14 слов в предложении, что дает 1.6837782655e + 73 возможных перестановок для каждое предложение. И, кстати, я имел в виду не плоды, а компании и случайный веб-фреймворк.

Intel Core i5- Вы ведь знаете, что у вас плохо получается, правда?

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

Но что такое вложения?

Вложения - это низкоразмерные, усвоенные непрерывные векторные представления того, что мы хотим объяснить компьютеру.

Возьмем, например, это яблоко, с практической точки зрения, как бы вы объяснили, что такое яблоко, другому человеку, который никогда его не видел?

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

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

Вложения похожи, мы представляем вещи векторами. И есть умный способ показать сходство между словами: евклидово расстояние между двумя векторами - это мера того, насколько похожи две вещи.

Скажем, я решил сделать вложение того, насколько хорош фрукт, мне нужно решить, какой должна быть его размерность, то есть сколько функций я хочу добавить? Если я хочу создать слишком простую модель того, насколько хорош фруктовый вкус, я могу выбрать только одно измерение (насколько хорош он на вкус). Итак, мои вложения выглядят примерно так: Apple - ›[0.8], Mango -› [0.9999], Grapes - ›[0.9], Watermelon -› [0.75]. Но мы чувствуем, что это не всегда дает хорошее изображение. Мы знаем, что размер плода также имеет значение. Поэтому я решил добавить еще одно измерение, чтобы лучше оценить это, например, яблоко - ›[0.8,0.5], манго -› [0.9999,0.6], виноград - ›[0.9,0.1], арбуз -› [0,75,0.9]. Точно так же другие могут захотеть добавить еще одно измерение для популярности и еще одно для доступности.

Как мы можем заметить, нет фиксированного встраивания и фиксированного выбора размерности, они могут варьироваться в зависимости от потребностей.

Это только яблоки и манго?

Вовсе нет, вложения используются в нескольких областях глубокого обучения.

Вложения слов. Встраивание слов - это заученное представление текста, где слова, имеющие одинаковое значение, имеют аналогичное представление. Как и в нашем примере с фруктами, с использованием word2vec разработанное встраивание слов очень помогает в задачах НЛП. Как завершение слова, предсказание следующего слова, «Окей, Google», Google Assistant, и список можно продолжить. Вложение слов настолько мощно, что развило мощные семантические отношения между представлением слов. Например, если мы сделаем это, вектор Короля - вектор мужчины + вектор женщины - ›ближайшее евклидово расстояние указывает на вектор Королевы.

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

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

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

Просто измерив расстояние от среднего значения, можно создать довольно хороший распознаватель динамиков. Самое приятное то, что все предварительно обученные модели доступны бесплатно в Интернете.

Но как выбрать количество габаритов для вложения?

Подумайте об этом примерно так:

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

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

Но так же, как для примерно 100 автомобилей мы не делаем 100-полосное шоссе, мы не выбираем настолько большую размерность, чтобы она начала влиять на пространство памяти.

Это может привести к пиратскому феномену «Проклятие размерности». Наличие слишком большого количества функций просто означает массовую переборку ваших данных. С точки зрения непрофессионала происходит следующее: каждое наблюдение в вашем наборе данных оказывается равноудаленным от всех остальных. Более того, если вы попытаетесь добавить новую знаменитость к своему чрезмерно подогнанному встраиванию знаменитости, новая знаменитость при добавлении данных создаст огромный скачок в пространстве для встраивания, поскольку ей придется изменить свое понимание лиц знаменитостей. Вот фантастическая запись в блоге, которая расскажет о вас.



Всегда существовал компромисс между эффективностью использования времени и эффективностью памяти. Приоритеты имеют значение. Для встраивания слов хорошее практическое правило - корень 4-й степени из числа категорий.

Выводы

Встраивания обеспечивают простой способ работы с дискретными данными. Tensorboard предоставляет эффективный способ легко визуализировать вложения во время обучения модели. Попробуйте поэкспериментировать, сейчас отличное время для жизни.



Использовать вложения слов на Keras довольно просто, я настоятельно рекомендую проверить эту ссылку.



Обо мне

Бакалавр IIIT-A, энтузиаст ИИ и счастливый ученик!