Построение мультимодальных моделей: использование пакета widedeep Pytorch

Исходный узел: 1181295

Построение мультимодальных моделей: использование пакета widedeep Pytorch

Эта статья поможет вам начать работу с фреймворком PyTorch с открытым исходным кодом, разработанным Хавьером Родригесом Заурином.


By Раджив Шах, специалист по данным в Snorkel.ai


широкая глубокая архитектура
Изображение автора

 

Сталкиваетесь ли вы с моделированием на больших наборах данных, мультимодальных данных или сложных целевых объектах, таких как многоклассовый, многоцелевой или многозадачный? Гибкая модульная архитектура глубокого обучения может хорошо подойти для решения этих проблем. Pytorch-широко-глубоко — это пакет глубокого обучения с открытым исходным кодом, созданный для решения мультимодальных задач.

Widedeep был разработан Хавьером Родригесом Заурином и представляет собой популярный пакет PyTorch с более чем 600 звездами Github. Он создан, чтобы быть простым в использовании, имеет модульную архитектуру и постоянно обновляется, чтобы содержать последние модели, такие как SAINT, Perceiver и FastFormer. Я нашел этот пакет, когда искал объяснимость мультимодальных подходов к глубокому обучению. Чтобы больше специалистов по обработке и анализу данных познакомились с widedeep, я написал этот пост, чтобы представить пакет.

Хотите погрузиться в код? Возьмите сопутствующие ноутбуки и начните их использовать!

В этой статье рассматриваются следующие темы:

  • Подходит ли вам PyTorch WideDeep?
  • Предварительная обработка ваших данных
  • Определение модели
  • Тренировочное время
  • Объяснение вашей модели
  • Получение прогнозов и сохранение модели

Подходит ли вам Pytorch WideDeep?

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

Как правило, вы не должны начинать моделирование с погружения в глубокое обучение. Если вы только начинаете, вам лучше использовать такой подход, как машины с градиентным усилением, которые обычно лучше работают с табличными данными. Видеть Силард для обзора подходов к табличным данным или сообщение Хавьера для сравнения GBM с глубоким обучением с использованием widedeep. Тем не менее, такие команды, как Pinterest or Lyft переходят на модели глубокого обучения для некоторых приложений.

Этот пост посвящен widedeep — моему любимому пакету с открытым исходным кодом для создания мультимодальных пакетов. Но в экосистеме PyTorch есть много других замечательных пакетов, которые я бы рекомендовал включить быстрый.айpytorch-табличныйи pytorch-прогнозирование.

Предварительная обработка ваших данных

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

Существуют разумные настройки по умолчанию, поэтому в качестве отправной точки вы можете создать препроцессор, используя значения по умолчанию, со следующим кодом:

tab_preprocessor = TabPreprocessor(embed_cols=cat_embed_cols, continuous_cols=continuous_cols)X_tab = tab_preprocessor.fit_transform(df)

Определение модели

 
 
Widedeep обеспечивает большую гибкость при указании модели. Есть четыре основных компонента, которые ставят под угрозу модель Wide and Deep: широкий, глубокий табличный, глубокий текст и глубокое изображение.

Widedeep предлагает модели для каждого из этих компонентов. Например, для deepimage доступны предварительно обученные модели ResNet. Для deeptabular доступен огромный набор опций, включая: TabMlp, TabResnet, TabNet, TabTransformer, SAINT, FTTransformer, TabPerceiver и TabFastFormer. Чтобы копать глубже, ознакомьтесь с записными книжками, посвященными глубинные табличные модели или модели трансформеры.

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

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

tabfastformer = TabFastFormer( column_idx=tab_preprocessor.column_idx, continuous_cols=tab_preprocessor.continuous_cols, embed_input=tab_preprocessor.embeddings_input, n_blocks=2, n_heads=4)model = WideDeep(deeptabular=tabfastformer)

Тренировочное время

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

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

fasttab_model = Trainer(model, objective=”rmse”)fasttab_model.fit(X_tab=X_tab_train, target=y_train, n_epochs=50, batch_size=256, val_split=0.2)

Объяснение вашей модели

 
 
После того, как модель построена, мой следующий шаг — использовать инструменты объяснимости, чтобы понять, как работает модель. WideDeep предоставляет крючки для получения веса внимания, а также легко использовать известные библиотеки объяснимости, такие как Каптум и Шап.

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

from captum.attr import FeaturePermutationfeature_perm = FeaturePermutation(model.deeptabular.eval())
attr_fic = feature_perm.attribute(X_tab_test,target=0)
attr_fic

Эти результаты можно легко визуализировать:



Изображение автора

 

Чтобы получить объяснения Шепли с помощью выборки с использованием библиотеки captum:

from captum.attr import ShapleyValueSamplingshapv = ShapleyValueSampling(model.deeptabular.eval())
shapv_attr_test = shapv.attribute(X_tab_test,target=0)
shapv_attr_test

Чтобы получить объяснения интегрированного градиента Shapley с помощью библиотеки shap:

import shapexplainer = shap.GradientExplainer(model.deeptabular.eval(), torch.Tensor(background))
shap_values_gradient = explainer.shap_values(X_tab_test)
shap_values_gradient

Библиотека shap также позволяет визуализировать отдельное объяснение:



Объяснения Шэпа сосредоточены на влиянии особенностей на отдельные наблюдения (известное как локальное объяснение). Вы также можете суммировать значения Шепли, чтобы получить глобальную важность функций.

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



Изображение автора

 

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

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

Получение прогнозов и сохранение моделей

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

results = fasttab_model.predict_proba(X_tab=X_tab)
results

Вы можете сериализовать как препроцессор, так и модель с помощью pickle.

import pickle#save preprocessing
with open('tab_preproc.pkl', 'wb') as wp:pickle.dump(tab_preprocessor, dp)#save the model and training history
fasttab_model.save(path ="",model_filename="model_saved.pt")

Резюме и следующие шаги

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

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

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

 
Bio: Раджив Шах является специалистом по данным в Snorkel.ai. Ранее Раджив работал в командах по обработке и анализу данных в DataRobot, Caterpillar и State Farm. Ему нравится наука о данных, и он проводит время, обучая специалистов по данным, выступая на мероприятиях и развлекаясь публикациями в блогах. У него есть докторская степень. из Университета Иллинойса в Урбана Шампейн.

Оригинал, Перемещено с разрешения.

Связанный:

Источник: https://www.kdnuggets.com/2021/10/building-multimodal-models-widedeep-pytorch-package.html.

Отметка времени:

Больше от КДнаггетс