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 позволяет командам по анализу данных автоматически отслеживать свои наборы данных, изменения кода и историю экспериментов. Таким образом, специалисты по данным могут легко воспроизводить свои модели и совместно работать над моделями в своей команде!