Отображение тегов среды

Машинное обучение воплощает в жизнь теги Medium

Изначально это было опубликовано 18 января 2018 г. на Hatch, внутреннем экземпляре Medium, с целью объяснить компании проект "Недели взлома".

Когда вы публикуете сообщение на Medium, вам предлагается добавить к нему ярлыки, описывающие его содержание. Эти теги в основном имеют произвольную форму. Авторы могут писать все, что, по их мнению, описывает их сообщение.

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

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

  • Глобальное потепление = изменение климата
  • Хиллари Клинтон = Хилари Клинтон (обычная орфография)
  • Поэзия = Поэма = Стихи = Поэзия на медиуме
  • Стартап = Предпринимательство = Уроки стартапа = Истории основателей

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

Теги как многомерные символы

Вместо того, чтобы каждый тег был просто представлен строкой, что, если бы мы могли представить его по его качествам и как он соотносится с другими тегами? Когда мы говорим о людях, мы не сравниваем их по именам, а описываем и сравниваем их по многим качествам, которыми они обладают. Для нас люди «многомерны». Что, если бы теги тоже были?

Мы собираемся воспринимать слово «многомерный» буквально и представлять каждый тег вектором чисел в многомерном векторном пространстве.

Прежде всего, что такое вектор? Для кода Python этого проекта вектор - это просто массив чисел фиксированной длины. Однако вы можете интерпретировать этот список чисел по-разному. Вы можете интерпретировать это как точку в пространстве (например, (5,3) - это точка, которая смещена на 5 по оси x и на 3 по оси Y в 2-мерном пространстве). Однако иногда более полезно интерпретировать его как вектор с направлением и величиной, который вы, возможно, помните на уроках физики. Это сбивает с толку. Я рекомендую это короткое видеообъяснение.

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

Обучение векторов тегов

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

Данные для обучения, которые я использовал, были тегами 500 000 надежных общедоступных сообщений на английском языке. Я притворился, что список тегов каждого поста представляет собой предложение (где каждый тег - слово), и ввел их в обучающий алгоритм, который обычно берет реальные предложения и изучает векторные представления слов. Я использовал для этого word2vec реализацию gensim и указал, что эти векторы должны иметь 100 измерений.

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

Говорят, что такие алгоритмы, как word2vec, «встраивают» объекты (например, теги или слова) в многомерное векторное пространство, и поэтому эти типы векторов также известны как «встраивания». Если вы ищете дополнительную информацию обо всем этом в Google, вам нужно будет выполнить поиск по запросу «вложения».

Изучение векторов

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

Большой. Не волнуйтесь, вы не должны понимать, что означают эти числа. Я даже не мог тебе сказать. К сожалению, это даже не так просто, как сказать: «X -ое измерение представляет качество Y, а значение - насколько тег выражает это качество». Скорее, размеры работают согласованно, чтобы представить информацию о тегах.

Легче увидеть, что происходит, сравнив векторы. Мы можем найти близкие друг к другу векторы тегов. Здесь мы интерпретируем их как векторы с направлением и величиной, чтобы вычислить косинусное сходство между ними:

Объединение векторов

Мы также можем выполнять арифметические действия с нашими векторами, чтобы перемещаться по векторному пространству. Здесь мы усредняем вектор «Технологии» с «Образованием» и оказываемся рядом с тегами EdTech:

Теперь мы можем попробовать «Изобразительное искусство» + «Города», чтобы получить «Граффити»:

«Программирование» + «Игры» - это «Разработка игр»:

Мы также можем решать аналогии, подобные этой, которая по сути "Education" is to "EdTech" as "Agriculture" is to _:

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

Визуализация векторов

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

Для этого мы не просто берем первые два измерения векторов и называем это днем. Скорее, мы пытаемся сохранить некоторую информацию из всех измерений и держать точки, которые находятся близко в 100-мерном пространстве, близко в 2-м пространстве. Есть множество способов сделать это уменьшение размерности. Особенно хорошо подходит для визуализации t-SNE.

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

Вселенная средних тегов:

Солнечная система «Домашние животные»:

Спиральная галактика «Музыка» с рукавом «Подкаст»:

Группа галактик «Повествование»:

Галактика «Данные»:

Солнечная система «индийская политика»:

Туманность «Семья»:

«Игровая» бинарная галактика:

Галактика «Места США»:

Места неизменно сгруппированы вместе и часто сгруппированы по географическому признаку. Некоторые места находятся в других тематических кластерах. Вирджиния и Алабама входят в кластер политики США. Страны Европы и Азии входят в туристический кластер. Африканские страны имеют метки некоммерческих организаций и развития.

Межгалактическая пыль «Времена года»:

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

«Повествовательная» галактика в португальской Вселенной:

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

Случаи применения

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

Синонимичные теги

На Medium есть множество наборов тегов, которые означают одно и то же (например, «Научная фантастика» и «Научная фантастика»). Теги, которые означают одно и то же, обычно расположены очень близко в векторном пространстве. Это может помочь нам определить повторяющиеся теги и нормализовать их.

Другие прогнозы

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

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

Проблемы и улучшения

Представления тегов, которые мы узнали, не идеальны. Вот некоторые вещи, которые нам необходимо учитывать при будущем использовании векторов тегов в Medium.

Неоднозначные теги

Мы уже сталкивались с проблемой, связанной с тегом Spring: неоднозначность. Весна имеет как минимум два значения на Medium. Многие люди используют этот тег для стихов о сезоне, но другие используют его для сообщений о среде программирования Java. Нам нужно автоматически определять, что есть два различных представления, которые нужно изучить: Весна (сезон) и Весна (программирование). Эта проблема называется устранение смысловой неоднозначности. К счастью, это область активных исследований.

Предвзятость

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

Поскольку страны представляют собой группы людей, я подумал, что при некоторых обстоятельствах может быть нежелательно связывать страны с темами. Страны Африки довольно близки к благотворительным биркам. Пуэрто-Рико = ураганы, что касается тегов. Это необходимо учитывать при любом последующем использовании. Вложения с устранением смещения - это область активных исследований.

Связывание тегов на разных языках

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

Альтернативные алгоритмы обучения

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

Ресурсы

Если вам интересно узнать больше о встраиваниях и используемых здесь алгоритмах, я бы порекомендовал эти ресурсы: