Тем не менее, никто не знает, может ли машина создать что-то новое или она ограничена тем, что уже знает. Но даже сейчас искусственный интеллект может решать сложные задачи и анализировать неструктурированные наборы данных. Мы в «Додо» решили провести эксперимент. Организовать и структурно описать то, что считается хаотичным и субъективным — вкус. Мы решили использовать искусственный интеллект, чтобы найти самые дикие комбинации ингредиентов, которые, тем не менее, понравятся большинству людей.
В сотрудничестве со специалистами МФТИ и Сколтеха мы создали искусственный интеллект, который проанализировал более 300 000 рецептов и результаты исследований молекулярных сочетаний ингредиентов, проведенных Кембриджем и рядом других университетов США. Благодаря этому ИИ научился находить неочевидные связи между ингредиентами и понимать, как сочетать ингредиенты и как присутствие каждого влияет на сочетания всех остальных.
Для любой модели нужны данные. Поэтому для тренировки нашего ИИ мы собрали более 300 000 кулинарных рецептов.
Сложность заключалась не в том, чтобы их собрать, а в том, чтобы привести их в одинаковую форму. Например, перец чили в рецептах обозначается как «чили», «чили», «чили» или даже «чилис». Для нас очевидно, что все это означает «чили», но нейронная сеть рассматривает каждый из них как отдельную сущность.
Изначально у нас было более 100 000 уникальных ингредиентов, а после очистки данных осталось всего 1 000 уникальных позиций.
Получив набор данных, мы провели первоначальный анализ. Во-первых, у нас была количественная оценка того, сколько кухонь присутствовало в нашем наборе данных.
Для каждой кухни мы определили самые популярные ингредиенты.
Эти графики показывают различия во вкусовых предпочтениях людей по странам и различия в способах сочетания ингредиентов.
После этого мы решили проанализировать рецепты пиццы со всего мира, чтобы выявить закономерности. Вот какие выводы мы сделали.
Найти настоящие вкусовые комбинации — это не то же самое, что выяснить молекулярные комбинации. Все сыры имеют одинаковый молекулярный состав, но это не значит, что хорошие сочетания могут состоять только из самых близких ингредиентов.
Однако именно комбинации молекулярно схожих ингредиентов нам нужно видеть, когда мы преобразуем ингредиенты в математические вычисления. Потому что похожие объекты (те же сыры) должны оставаться похожими, как бы мы их ни описывали. Таким образом мы можем определить, правильно ли описаны объекты.
Чтобы представить рецепт в понятном нейросети виде, мы использовали Skip-Gram Negative Sampling (SGNS) — алгоритм word2vec, основанный на вхождении слов в контексте.
Мы решили не использовать предварительно обученные модели word2vec, поскольку семантическая структура рецепта отличается от простых текстов. А с этими моделями мы можем потерять важную информацию.
Оценить результат word2vec можно, посмотрев на ближайших семантических соседей. Например, вот что наша модель знает о сыре:
Чтобы проверить, в какой степени семантические модели могут отражать рецептурные взаимосвязи ингредиентов, мы применили тематическую модель. Другими словами, мы попытались разбить набор данных рецептов на кластеры в соответствии с математически определенными закономерностями.
Для всех рецептов мы знали определенные кластеры, которым они соответствовали. Что касается примеров рецептов, мы знали их связь с реальными кластерами. На основании этого мы обнаружили связь между этими двумя типами кластеров.
Наиболее очевидным оказался класс десертов, которые были включены в темы 0 и 1, сгенерированные тематической моделью. Кроме десертов, других занятий по этим темам почти нет, что говорит о том, что десерты легко отделяются от других классов блюд. Кроме того, у каждой темы есть класс, который лучше всего ее описывает. Это означает, что нашим моделям удалось математически определить неочевидное значение слова «вкус».
Мы использовали две повторяющиеся нейронные сети для создания новых рецептов. Для этого мы предположили, что во всем пространстве рецептов существует подпространство, соответствующее рецептам пиццы. И чтобы нейросеть научилась создавать новые рецепты пиццы, нам нужно было найти это подпространство.
Эта задача аналогична автокодированию изображения, в котором мы представляем изображение как низкоразмерный вектор. Такие векторы могут содержать много специфической информации об изображении.
Например, эти векторы могут хранить информацию о цвете волос человека в отдельной ячейке для распознавания лица на фотографии. Мы выбрали этот подход именно из-за уникальных свойств скрытого подпространства.
Чтобы идентифицировать подпространство пиццы, мы прогнали рецепты пиццы через две повторяющиеся нейронные сети. Первый получил рецепт пиццы и нашел его представление в виде скрытого вектора. Второй получил скрытый вектор от первой нейросети и на его основе создал рецепт. Рецепты на входе первой нейросети и на выходе второй должны были совпадать.
Таким образом две нейронные сети научились правильно преобразовывать рецепт скрытого вектора. И на основании этого нам удалось найти скрытое подпространство, соответствующее всему спектру рецептов пиццы.
Когда мы решали задачу создания рецепта пиццы, нам пришлось добавить в модель критерии молекулярного сочетания. Для этого мы использовали результаты совместного исследования ученых Кембриджа и нескольких университетов США.
Исследование показало, что ингредиенты с наиболее распространенными молекулярными парами образуют лучшие комбинации. Поэтому при создании рецепта нейросеть отдала предпочтение ингредиентам со схожей молекулярной структурой.
В результате наша нейросеть научилась создавать рецепты пиццы. Регулируя коэффициенты, нейронная сеть может выдавать как классические рецепты, такие как маргарита или пепперони, так и такие необычные рецепты, один из которых — сердце Opensource Pizza.
Нет | Рецепт |
---|---|
1 | шпинат, сыр, помидоры, черные оливки, оливки, чеснок, перец, базилик, цитрусовые, дыня, ростки, пахта, лимон, окунь, орехи, брюква |
2 | лук, помидоры, оливки, черный перец, хлеб, тесто |
3 | курица, лук, черные_оливки, сыр, соус, помидоры, оливковое_масло, сыр моцарелла |
4 | помидоры, сливочное масло, сливочный_сыр, перец, оливковое_масло, сыр, черный_перец, сыр моцарелла |
Open Source Pizza распространяется по лицензии MIT.
Голодяев Арсений, МФТИ, Сколтех, [email protected]
Егор Барышников, Сколтех, [email protected]