TL; DR: в этом посте мы рассмотрим, как простая модель fastText учится представлять сущности в подмножестве графа знаний FB15K, классифицируя отношения между парами сущностей на графе.

Автор: Друв Наир

Все большее количество решений для машинного обучения, и компании используют данные графов знаний для работы в отраслях, требующих глубоких знаний в предметной области. Фактически, графы знаний лежат в основе возможностей естественного языка в Alexa, Siri, Cortana и Google Now. Наши пользователи Comet.ml изучают такие приложения, как; семантический поиск, интеллектуальные чат-боты, передовые исследования наркотиков и динамический анализ рисков.

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

Хотите сразу перейти к хорошему 😎?

Не стесняйтесь пропустить приведенный ниже справочный раздел, посвященный Сети знаний, и сразу перейти к разделам 1) Данные, 2) модель fastText и 3) Интерпретация результатов.

Вот данные для этой модели. Смотрите полный код + результаты в общедоступном проекте C omet.ml! 📓

Справочная информация: что такое сети знаний?

Графы знаний - это очень гибкие структуры данных, которые используются для представления отношений между объектами реального мира. Такие объекты, как «Мона Лиза» или «Да Винчи», представлены как узлы на графе, а отношения, такие как «created_by», представлены как ребра.

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



Есть много способов осмыслить данные на этих графиках. Один из подходов - следовать стандарту Resource Description Framework и представлять факты в форме субъект, предикат, троек объектов (S, P, O) вместе с двоичной оценкой, указывающей, является ли тройка действительной или нет.

Скажем так

представляет набор всех сущностей на графе, а

представляет собой набор всех отношений в графе. Любая тройка,

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

Матрица Y может быть довольно большой для большинства графов знаний. Однако только некоторые из возможных соотношений в графе оказываются верными, и матрица оказывается довольно разреженной.

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

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

Как правило, цель методов скрытых признаков состоит в том, чтобы организовать символические объекты (например, слова, сущности, концепции) таким образом, чтобы их сходство в скрытом пространстве отражало их семантическое или функциональное сходство ²

В этом посте мы рассмотрим, как простая модель fastText учится представлять сущности в подмножестве графа знаний FB15K, пытаясь классифицировать отношения между парами сущностей.

Хотите еще больше погрузиться в Сети знаний? Посмотрите Какого черта это граф знаний? от Джо Стичбери на тему: https://hackernoon.com/wtf-is-a-knowledge-graph-a16603a1a25f

Что такое fastText и как он работает?

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

Например, наша модель fastText классифицирует пару сущностей (Такеши Китано, Япония) с отношениями (/ люди / человек / национальность).

** Примечание: Такеши Китано - японский сценарист и комик. Ты узнаешь что-то новое каждый день!

Для чего я могу его использовать?

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

Вот данные для этой модели. Смотрите полный код + результаты в общедоступном проекте C omet.ml! 📓

1. Набор данных

Мы используем Сеть знаний Freebase (FB15K). Когда вы посмотрите на необработанные данные, вы увидите три столбца: первые два столбца - это MID Freebase для объектов на графике, а третий описывает их взаимосвязь.

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

Полный код см. В общедоступном проекте Comet.ml.

Чтобы узнать больше о встраиваниях, посетите: http://colah.github.io/posts/2014-07-NLP-RNNs-Representations/

2. Модель fastText

Опять же, мы будем использовать f astText, чтобы изучить наши вложения. Несмотря на то, что это простая модель с единственным скрытым слоем, fastText обеспечивает сопоставимую производительность с более сложными моделями и требует значительно меньше времени на обучение .³

На актуальную модель!

В этом фрагменте мы инициализируем слой внедрения с количеством объектов, которые мы рассматриваем из подмножества нашего графа. Таким образом, наш input_dim будет равен количеству уникальных объектов в нашем наборе данных графика. Наш output_dim - это размерность нашего вектора внедрения. Это гиперпараметр, который мы можем оптимизировать. Joulin et. Также следует учитывать следующие размеры вложений [10, 25, 50, 100, 150, 200] ⁴

В этом посте мы рассмотрели размеры встраивания размером 25 и 200. Помимо измерения встраивания, мы также можем настроить скорость обучения (0,001 или 0,0001) и размер пакета (128 или 256).

После усреднения векторных представлений наших сущностей мы передаем это представление на полностью связанный слой с тем же количеством нейронов, что и рассматриваемые отношения (в нашем случае 60). Затем мы применяем сигмовидную функцию активации к каждому нейрону, которая эффективно превращает их в классификатор один против всех для данного класса.

main_input = Input(shape=(2,), dtype='int32', name='main_input')
embedding = Embedding(name="embedding",
                      input_dim=n_entities, # Number of entities
                      input_length=2,
                      output_dim=embedding_dimension,
                      embeddings_initializer=RandomUniform(
                          minval=-0.05, maxval=0.05, seed=None))
x = embedding(main_input)
x = GlobalAveragePooling1D()(x)
x = Dense(n_relationships)(x) # Number of relationships 
output = Activation('sigmoid')(x)
model = Model(inputs=main_input, outputs=output)
model.summary()

Полный код в виде сценария см. В общедоступном проекте Comet.ml.

3. Анализ результатов модели с помощью Comet.ml

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

Ниже вы можете увидеть шесть итераций, которые мы выполнили и сообщили с помощью Comet.ml. Модель с наивысшей производительностью (наивысший показатель AUC и наименьшие потери) - fastText 12 (верхняя строка на скриншоте), с показателем AUC 0,89311097 и величина убытка 0,07944. Эта модель была обучена со скоростью обучения 0,001, размером встраивания 25 и размером пакета 256.

Примечание. Мы рассмотрели только 60 из 1435 возможных отношений в этом наборе данных.

As a test: try improving fastText 12 with a higher embedding dimension (keeping other variables constant) of 200.
What's the AUC score for fastText 12.1?  🤔

Поскольку мы имеем дело с набором данных с несколькими целевыми метками, таких показателей, как точность или отзыв, недостаточно для описания производительности классификатора. Точность также не лучший показатель для нашей модели fastText, потому что он не дает вам представления о том, как на самом деле распределяются ваши данные (не учитывает дисбаланс классов в данных). .

Вместо точности лучше отслеживать следующие показатели:

  • Потеря журнала (eval_loss)
  • Оценка AUC

Вот пример предсказания от fastText12:

Мы также используем Comet.ml для сравнения fastText 12 и fastText 3, где единственная разница - скорость обучения. Возможно, fastText 3 зафиксировался на некоторых неоптимальных минимумах. Когда мы снова запустили ту же конфигурацию (fastText 13), новый показатель AUC был немного лучше и составил 0,5926, но fastText 12 все равно не выдержал.

См. Прямое сравнение здесь между fastText 12 и fastText 3. Вы можете выполнять сравнение кода (на снимке экрана ниже), а также сравнения диаграмм, показателей и гиперпараметров в Comet.ml.

Есть несколько способов продолжить итерацию и (потенциально) улучшить нашу модель:

  • получить больше данных (рассмотреть полный набор значений отношений)
  • изменить функцию потерь

Мы надеемся, что вам понравилось создавать эту модель fastText вместе с нами и вы познакомились с возможностями Comet.ml! 🚀 🚀 🚀

использованная литература

Набор данных от: https://github.com/thunlp/KB2E

[1] Никель, Максимилиан и др. «Обзор реляционного машинного обучения для графов знаний». Протоколы IEEE 104.1 (2016): 11–33.

[2] Никель, Максимилиан и Дуве Кила. «Вложения Пуанкаре для изучения иерархических представлений». Достижения в системах обработки нейронной информации. 2017 г.

[3] Джоулен, Арман и др. «Набор хитростей для эффективной классификации текста». Препринт arXiv arXiv: 1607.01759 (2016).

[4] Джоулен, Арман и др. «Быстрая линейная модель для встраивания графов знаний». Препринт arXiv arXiv: 1710.10881 (2017).

Дхрув Наир - специалист по анализу данных в команде Comet.ml. До того, как присоединиться к Comet.ml, он работал инженером-исследователем в группе физической аналитики в IBM T.J. Лаборатория Ватсона.

О Comet.ml - Comet.ml делает для машинного обучения то же, что Github сделал для кода. Наш легкий SDK позволяет командам по анализу данных автоматически отслеживать свои наборы данных, изменения кода и историю экспериментов. Таким образом, специалисты по данным могут легко воспроизводить свои модели и совместно работать над моделями в своей команде!