Алгоритмы, используемые для программной классификации рецептов - PullRequest
4 голосов
/ 13 февраля 2012

Я заинтересован в программной классификации рецептов на основе статистического анализа различных свойств рецепта. Другими словами, я хочу классифицировать рецепт как Breakfast, Lunch, Dinner или Dessert без какого-либо ввода пользователя.

Доступные мне свойства:

  1. Название рецепта (например, куриный салат )
  2. Описание рецепта (произвольный текст, описывающий рецепт)
  3. Способ приготовления (этапы приготовления этого рецепта)
  4. Время приготовления и приготовления
  5. Каждый ингредиент в рецепте и его количество

Хорошей новостью является то, что у меня есть набор образцов из примерно 10 000 рецептов, которые уже классифицированы, и я могу использовать эти данные для обучения моего алгоритма. Моя идея состоит в том, чтобы искать шаблоны, например, если слово сироп встречается статистически чаще в рецептах завтрак , или в любом рецепте, требующем более 1 чашка сахара вероятность 90% - десерт . Я полагаю, что если я проанализирую рецепт по нескольким измерениям, а затем подправлю веса соответствующим образом, я могу получить что-то, что прилично точно.

Какие были бы хорошие алгоритмы для исследования при подходе к этой проблеме? Будет ли полезно что-то вроде k-NN или есть подходящие для этой задачи?

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

Если бы я это сделал, я бы попытался сделать это так, как было предложено ЛиКао. Я бы сначала сосредоточился на ингредиентах. Я бы создал словарь слов, появляющихся в разделах «Рецепты ингредиентов», и очистил бы список под надзором, чтобы удалить термины, не являющиеся ингредиентами, такие как количества и единицы.

Тогда я бы прибегнул к теореме Байеса: ваша база данных позволяет вычислить вероятность наличия яиц на завтраке и на ужине ...; Вы заранее вычислите эти априорные вероятности. Затем, учитывая неизвестный рецепт, содержащий как яйца, так и мармелад, вы можете вычислить вероятность того, что еда будет завтраком, апостериори.

Позже вы можете обогатиться другими условиями и / или с учетом количества (количество яиц на человека) ...

1 голос
/ 14 февраля 2012

Я думаю, что NN, вероятно, является излишним для этого.Я попытался бы классифицировать, используя одну «сеть» персептрона для каждого типа еды (Завтрак, Ужин), и позволить ему пройти через вход и настроить вектор веса.каждое значимое слово, найденное в наборе данных, может быть входными данными сети. Я ожидаю, что этого будет достаточно для ваших нужд.Я успешно использовал этот метод для классификации текста.

1 голос
/ 13 февраля 2012

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

Основная проблема будет заключаться в выборе набора функций в качестве входных данных для вашего метода. Для этого вы должны посмотреть, какая информация является уникальной. Например, если у вас есть рецепт под названием «Куриный салат», «куриная» часть не будет особенно интересна, поскольку она также присутствует в ингредиентах и ​​ее проще собирать оттуда. Таким образом, вы должны попытаться найти набор ключевых слов, которые дают новую информацию (то есть часть салата). Попробуйте найти хороший набор ключевых слов для этого. Возможно, это можно каким-то образом автоматизировать, но, скорее всего, вам будет лучше, если вы сделаете это вручную, поскольку это нужно сделать только один раз.

То же самое относится и к описанию. Поиск правильного набора функций - всегда самая трудная часть для такой задачи.

Когда у вас есть набор функций, просто обучите их алгоритму и посмотрите, насколько хорошо он работает. Если у вас нет большого опыта работы с машинным обучением, взгляните на различные методы правильного тестирования алгоритма ML (например, оставьте без тестирования и т. Д.).

...