Интерактивная линза с поддержкой машинного обучения о еде

Майкл Дейли, Джон МакНалли

Введение

Еда является одним из самых богатых источников человеческого опыта. Он овладевает нашими эмоциями и нашими чувствами. Сладкий аромат свежих блинов, успокаивающий контраст теплого супа в холодную ночь, шипение сырого стейка на огненном гриле. На протяжении тысячелетий люди собирались вместе, чтобы преломить хлеб. Совсем недавно появились письменные рецепты, поскольку мы сохраняем и делимся своими методами приготовления хорошей еды. Правильная еда может увековечить память. Особый рецепт может стать основой семейных уз или компании стоимостью в миллиард долларов. Наша команда Rec² создала веб-приложение, чтобы способствовать изучению и экспериментированию с новыми и старыми рецептами!

Сегодня миллионы высококачественных рецептов доступны онлайн. Исследовательская группа из Массачусетского технологического института собрала более 1 миллиона из них с популярных веб-сайтов, чтобы сформировать набор данных Recipe1M+ (Marin, 2019). Каждый рецепт включает в себя смесь естественного языка, величин и изображений — богатую основу для машинного обучения. Наша команда использовала набор данных Recipe1M+ для разработки набора моделей для интерпретации и сопоставления этих рецептов. Мы считаем, что следующая эволюция открытия продуктов питания и творчества будет дополнена наукой о данных. Новые сочетания вкусов, замены ингредиентов или целые рецепты могут быть созданы искусственным интеллектом. Интеллектуальный анализ может обеспечить лучшее управление запасами продуктов питания для улучшения логистики и эффективного потребления.

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

Вот это приложение. Пожалуйста, попробуйте несколько ваших собственных подсказок и изображений!

Методы

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

Приложение Rec² построено с использованием библиотеки Python под названием Streamlit, пользоваться которой очень приятно. Streamlit позволяет разработчикам быстро запускать и размещать свои модели машинного обучения из репозитория GitHub. Наше приложение запускается из основного сценария, который управляет внешним видом сайта и отображает результаты вспомогательных сценариев, выполняющих выводы из наших сохраненных моделей и данных. Простые, но мощные функции Streamlit упростили внедрение нашего приложения и его легко улучшить.

Рецепт1M+ набор данных

Набор данных Recipe1M+ — это большой, богатый набор данных, который можно использовать по-разному. Чтобы ограничить объем этого проекта, мы решили сосредоточиться на наличии ингредиентов, а не на точном количестве каждого ингредиента. Первая крупная очистка данных заключалась в удалении из ингредиентов дополнительной информации, такой как измерения или методы приготовления. В этом случае мы хотим извлечь лук из такой фразы, как 1 чашка нарезанного лука. Точно так же для названий рецептов мы хотели извлечь названия блюд без общего наполнителя, который добавляется к названиям рецептов. Например, мы хотим извлечь шоколадное печенье из Всемирно известного шоколадного печенья бабушки Бетти. Хотя мы бы с удовольствием попробовали печенье бабушки Бетти, эти слова-паразиты просто сбили бы моделей с толку.

Для выполнения этих шагов очистки был написан сценарий для преобразования исходного файла JSON в очищенную и более удобную версию. Первым шагом в сценарии было токенизация и маркировка части речи (POS) для каждого токена. Затем из ингредиентов и заголовков были удалены стоп-слова, определенные части речи и некоторые дополнительные регулярные выражения. Затем результат сохранялся двумя способами. Первыми были 999 лучших токенов, сохраненные в виде нового JSON для использования с моделью «название-ингредиент». Этот JSON содержал токены с наибольшим числом 999, а все остальные токены были указаны как «другие» для 1000-го токена. Второй способ сохранения очищенных данных — очищенный и сжатый CSV, который можно легко загрузить в Pandas DataFrame. Затем этот файл CSV использовался для создания моделей LDA и Word2Vec.

Первоначальная версия очищенных данных дала хорошие результаты для наших моделей, но было много возможностей для улучшения. Наиболее очевидным вариантом является изменение названий общих ингредиентов. Например, в рецептах, в которых в качестве ингредиента указана мука, она может быть указана как [‘мука’, ‘универсальная мука’, ‘мука AP’ и т. д.]. Для наших моделей это разные ингредиенты, но для пользователя все они означают одно и то же. Чтобы исправить эту вариацию, было вручную создано сопоставление ингредиентов для 40 лучших ингредиентов, чтобы улучшить производительность модели. Сопоставление было создано путем замены основных вариантов токенов наиболее распространенным токеном (например, «универсальная мука» и «мука AP» были заменены на «мука»). Это сопоставление значительно улучшило производительность модели и могло быть улучшено с помощью более крупного сопоставления или настроено для различных приложений, требующих различных уровней специфичности между ингредиентами.

Эпический набор данных

Одним из недостатков набора данных Recipe1M+ было то, что некоторые изображения были отправлены пользователями на веб-сайты, которые команда исследовала. Среди этих изображений есть значительный шум, и многие из них, кажется, не изображают блюдо, к которому они привязаны. Вместо того, чтобы пытаться вручную обрезать зашумленные изображения, был выбран отдельный набор данных, который поможет обучить модель преобразования изображения в заголовок. Набор данных Пищевые ингредиенты и рецепты с изображениями на Kaggle содержит более 13 000 рецептов от Epicurious. Хотя этот набор данных намного меньше, чем Recipe1M+, каждое изображение является основной стоковой фотографией в реальном рецепте, поэтому точность между заголовками и изображениями гораздо выше. Кроме того, рецепты Epicurious, как правило, имели более подробные и описательные названия, поэтому мы полагали, что это приведет к наиболее интересным результатам.

Распознавание рецептов

Модель распознавания рецептов принимает изображение еды в качестве входных данных и выводит последовательность токенов, в идеале название изображенного рецепта. Модель должна узнать, как выглядит еда и как устроен язык. Было протестировано несколько архитектур моделей, но в конечном итоге мы выбрали преобразователь-декодер с устройством для встраивания изображений, точно следуя учебнику по подписям изображений от Tensorflow. Устройство для встраивания изображений представляет собой безголовую модель MobileNet от Google (MobileNetV3Small), которая извлекает функции из изображения для передачи в нашу модель. Модели MobileNet компактны и обучены на миллионах изображений в наборе данных ImageNet. Модель распознавания рецептов использует эти функции и последовательно создает название рецепта.

К сожалению, хотя модель распознавания рецептов достаточно хороша для создания реалистично звучащих названий блюд, она не очень хороша для сопоставления предоставленного входного изображения. Другие архитектуры и варианты, которые мы протестировали, включали модель последовательностей (seq2seq) с вложениями GloVe для токенов заголовков, встраивание изображений на основе InceptionV3 и модель сегментации изображений в сочетании с классификатором продуктов питания (Bose, 2020). К сожалению, никакая вариация или архитектура не справились с этой задачей значительно лучше. Архитектура преобразователя-декодера со слоем извлечения признаков изображения MobileNet была выбрана потому, что она была наименьшей, что помогло сохранить легкость конечного веб-приложения, и она дает самые подробные и интересные прогнозы.

Карты внимания помогают объяснить, что вызывает низкую производительность. Карты внимания показывают, какие области изображения активируют больше всего нейронов в модели. В просторечии он показывает, куда смотрит модель в изображении, когда она предсказывает каждый токен. Как показано выше, модель предсказывает «mac» на основе области, которая отчетливо представляет цвет и текстуру макарон и сыра. Оттуда области фокуса находятся на полях и углах изображения, поскольку модель, похоже, больше полагается на свое понимание грамматики, чем на любые данные в пикселях изображения. Модель также лучше работает на хорошо освещенных, четких профессиональных фотографиях, вероятно, потому, что обучающие данные почти исключительно содержали изображения, снятые профессионалами. Более разнообразный, но более чистый набор обучающих данных, вероятно, значительно улучшит производительность модели. Штраф за регуляризацию также может быть применен, чтобы побудить модель учитывать больше центральных областей изображения во время прогнозов (Xu, 2015).

Предсказание ингредиентов

Учитывая название рецепта, модель прогнозирования ингредиентов выводит вероятные ингредиенты, содержащиеся в этом рецепте. Чтобы ограничить размер модели, во время обучения были включены только 999 наиболее часто встречающихся жетонов титулов и ингредиентов, а все остальные элементы были отнесены к категории «другие». В отличие от модели распознавания рецептов, модель прогнозирования ингредиентов использует разреженные векторы в качестве входных и выходных данных вместо последовательностей. Порядок списка ингредиентов произвольный, а порядок жетонов в рецепте менее важен для определения основных ингредиентов. Нейронная сеть состоит всего из трех плотных скрытых слоев с активациями ReLU в простой архитектуре кодер-декодер.

Хотя архитектура была простой, методы обучения должны были быть сильно адаптированы для этой задачи классификации с несколькими метками. В любом заданном рецепте подавляющее большинство известных ингредиентов не будет присутствовать. Следовательно, тривиальная модель, которая выводит нулевые вероятности для всех ингредиентов, будет иметь точность более 99% из-за подавляющего числа истинных отрицательных значений. Чтобы компенсировать крайний дисбаланс классов, функция weighted_cross_entropy_with_logits Tensorflow была изменена, чтобы придавать гораздо больший вес положительным прогнозам. Кроме того, веса для каждого ингредиента были линейно масштабированы по частоте, так что точное предсказание редкого ингредиента имело больший вес, чем предсказание обычного ингредиента. Эти веса помогли предотвратить модель от простого предсказания нескольких наиболее распространенных ингредиентов для каждого рецепта, несмотря на дисбаланс в распределении ингредиентов.

Средний рецепт в нашем тестовом разделе содержит менее 1% из 1000 ингредиентов, известных модели (5,05 настоящих ингредиентов). Хотя модель прогнозирования ингредиентов по-прежнему имеет общую точность более 99%, она также достигла отзыва 0,50 и точности 0,32, что означает, что в среднем модель делает 7,78 прогнозов на рецепт, 2,52 из которых верны. Учитывая исходную вероятность того, что любой предсказанный ингредиент действительно соответствует рецепту (кроме пары лучших ингредиентов), это потрясающие результаты. В то время как модель боролась с гарнирами, такими как петрушка и кинза, она правильно идентифицирует почти все из 50 наиболее часто встречающихся ингредиентов с точностью не менее 10%.

Идентификация кухни

Часть идентификации кухни этого проекта приняла две формы: тип еды и этническая принадлежность. Набор данных Recipe1M+ не содержит меток для этих задач, поэтому модели пришлось разрабатывать неконтролируемыми методами. Таким образом, идентификация типа продуктов питания была выполнена с использованием модели латентного распределения Дирихле (LDA), а часть этнической принадлежности была выполнена с использованием модели Word2Vec.

Модель LDA
Главной задачей в этой части проекта было найти баланс между интерпретируемостью и описательностью тем, возвращаемых тематической моделью. Меньшее количество тем, скорее всего, создаст набор четко определенных тем, но им может не хватать описательных тем. Дополнительные темы могут создавать описательные темы, но, скорее всего, не будут интерпретироваться человеком. Поскольку набор данных не включает метки достоверности для каждого из рецептов, команда исследовала использование различных векторизаторов, моделей, гиперпараметров и методов оценки. В конечном итоге была выбрана модель LDA с 20 темами, поскольку она продемонстрировала наилучший баланс между интерпретируемостью и описательностью тем. Компромиссы для моделей LDA между количеством тем и рассчитанными показателями (логарифмическая вероятность, недоумение и согласованность тем) приведены в приложении. Интерпретируемость моделей оценивалась с использованием методики, описанной ниже.

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

Результатом модели LDA являются полные версии тематических векторов, показанных выше. Эти векторы тем сохраняются в нашем приложении, и мы вычисляем косинусное сходство между каждым вектором тем и прогнозируемым списком ингредиентов для классификации рецепта.

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

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

Когда у нас есть эти тематические векторы, мы можем нанести их на график t-распределенного стохастического встраивания соседей (t-SNE), чтобы визуализировать, как они связаны друг с другом. На приведенном ниже графике t-SNE показаны 10 лучших токенов для каждой этнической метки, приведенные к двумерному графику. Графики T-SNE — это способ визуализации многомерных данных в маломерном пространстве. Они пытаются удерживать похожие точки и кластеры ближе друг к другу и отделять непохожие. В результате мы можем видеть, что что-то вроде индийской кухни имеет плотный кластер, отделенный от большинства других кухонь, или что азиатские лейблы отделены вправо, но все еще близки друг к другу.

Полученные результаты

Команда Rec² в восторге от нашего приложения. Мы решили создать удобное и эффективное веб-приложение, которое позволит широкой аудитории использовать возможности наших моделей. Приложению требуется только один из двух входных данных для пользователя, чтобы начать работу, а время вывода для отображения результатов никогда не превышает ~ 5 секунд. Произвольная, но забавная метрика заключается в том, что я отправил это моему дедушке с технологическими проблемами, который смог использовать это приложение и наслаждаться им.

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

Основная слабость нашего проекта заключается в том, что сами модели несовершенны, но они по-прежнему полезны для ознакомления с возможностями машинного обучения для пищевых приложений. Модель прогнозирования ингредиентов в значительной степени создает логические, хотя и консервативные списки ингредиентов. Модель распознавания рецептов иногда дает разумный результат, но часто создает развлекательную концепцию нового блюда, которая явно не связана с входным изображением. И модели продуктов питания, и модели этнической принадлежности были созданы с использованием неконтролируемых методов, которые, хотя и не являются идеальными, дают представление (*подмигивание*) того, что мог бы сделать набор данных с метками достоверности. Эти модели не готовы сообщать какие-либо серьезные решения о еде. Тем не менее, они являются лишь отправной точкой и, безусловно, эффективны для исследования и обучения. Хотя модели являются слабым местом проекта, серверная часть нашего приложения позволяет легко обновлять эти модели. Если пользователь хочет внести свой вклад в наш проект, ему должно быть легко заменить наши модели на модели, которые они обучают сами.

Обсуждение

Приложение Rec² Recipe Exploration призвано помочь людям исследовать и узнавать больше о еде. Мы хотели создать платформу для гурманов и шеф-поваров, чтобы они могли изучать новые и любимые рецепты и ингредиенты. С помощью нашего приложения гурманы могут узнать, какие национальные кухни похожи друг на друга, и, возможно, попробовать что-то новое. В качестве альтернативы домашние повара могут быстро найти свои любимые рецепты, чтобы запомнить все необходимые ингредиенты, вместо того, чтобы просматривать 3 страницы текста и рекламы из онлайн-рецепта.

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

Если наше приложение или модели будут использоваться в коммерческом приложении, мы можем столкнуться с проблемами авторского права. Наборы данных Recipe1M+ и Epicurious были взяты с общедоступных веб-сайтов, но они по-прежнему могут содержать материалы или рецепты, защищенные авторским правом. Любые выводы или знания, извлеченные из приложения или моделей, могут нарушать интеллектуальную собственность автора рецепта, имеющего права на их контент. Наше приложение было разработано исключительно для академических целей, поэтому мы, вероятно, защищены как добросовестное использование (Walker, 2018).

Команда Rec² взволнована и гордится тем, где наше приложение сегодня, но хотела бы, чтобы оно шло намного дальше! Мы призываем всех увлеченных исследователей данных, гурманов или шеф-поваров помочь нам превратить это приложение в полезное и интересное пространство для изучения еды. Исходный код и модели приложения будут доступны в общедоступном репозитории GitHub, чтобы люди могли его улучшить или оставить нам отзыв.

Основным ограничением для веб-приложения является то, что файлы модели не могут превышать 75 МБ и должны оставаться меньше 50 МБ, поскольку приложение развертывается непосредственно из репозитория GitHub через Streamlit. Модели также должны соответствовать установленному списку ингредиентов с соответствующей обработкой и/или сопоставлением для извлечения ингредиентов из нативного рецепта. Хотя этот список ингредиентов можно редактировать, он должен совместно использоваться моделями прогнозирования ингредиентов и моделями идентификации кухни для обеспечения согласованности. Сами архитектуры моделей могут быть изменены, если они обеспечивают очевидный и достойный прирост производительности, или могут быть скорректированы веса и параметры.

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

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

Вот ссылки на веб-приложение и репозиторий.

Техническое задание

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

Рекомендации

Бос, Бишал. 2020. Caption-IT: Образ для последовательности модели глубокого обучения: от разработки до развертывания! Аналитика Видхья (Средняя). По состоянию на декабрь 2022 г. с сайта https://medium.com/analytics-vidhya/caption-it-image-to-sequence-deep-learning-model-development-to-deployment-7f9f04ab5fa0.

Подписи к изображениям с визуальным вниманием. 2022. ТензорФлоу. По состоянию на декабрь 2022 г. с https://www.tensorflow.org/tutorials/text/image_captioning.

Марин, Хавьер и др. 2019. Recipe1M+: набор данных для изучения кросс-модальных вложений для кулинарных рецептов и изображений еды. IEEE Transactions по анализу образов и машинному интеллекту. По состоянию на декабрь 2022 г. из tpami19.pdf (mit.edu)

Уокер, Адам. 2018. Добросовестное использование — необходимость определения закона для алгоритмов ИИ. DataDrivenInvestor (средний). По состоянию на декабрь 2022 г. с https://medium.datadriveninvestor.com/fair-use-and-ai-87f77721f1ea

Сюй, Кевин и др. 2015. Покажи, посети и расскажи: генерация нейронных подписей к изображениям с визуальным вниманием. По состоянию на декабрь 2022 г. с https://arxiv.org/pdf/1502.03044.pdf.

Приложение

A.1 Дополнительный отчет

Представленная работа является расширением проекта Milestone II для нашего магистра прикладных наук о данных в Мичиганском университете. Этот отчет связан здесь.

A.2 Разработка прогноза ингредиентов

В дополнение к дополнительным весам, включенным в функцию потерь, пороговое значение для положительных прогнозов было настроено на 0,02 для достижения наилучших результатов. Более низкий порог генерирует больше прогнозов, но более высокий порог ограничивает прогнозы наиболее достоверными. С улучшенным конвейером предварительной обработки порог 0,02 приводит к 2,52 истинным предсказаниям из 7,78 общих предсказаний в тестовом разделе Recipe1M+. Эти рецепты содержат в среднем 5,05 истинных ингредиентов, поэтому модель получает почти половину ингредиентов каждого рецепта с преимуществом на 50% больше предположений.

A.3 Метрики для модели LDA

На рисунке выше показаны показатели производительности пяти моделей LDA с разным количеством тем. Лучшие модели будут иметь самую низкую степень недоумения, самую высокую логарифмическую вероятность и согласованность тем. Графики показывают, что модель с 40 темами в целом работает лучше всего; однако мы можем видеть четкую точку перегиба (слева) и скачок (справа) на 20 темах. Это может означать, что при добавлении дополнительных тем в модель отдача уменьшается.