Очень простая классификация текста путем машинного обучения?

Возможный дубликат:
Текстовая классификация по категориям

В настоящее время я работаю над решением, чтобы получить тип продуктов, которые подаются в базе данных с 10k ресторанами, основываясь на их описании. Я использую списки ключевых слов, чтобы решить, какой из продуктов подается.

Я немного прочитал об машинах, но у меня нет практического опыта в этом. Может ли кто-нибудь объяснить мне, если/почему это было бы лучшим решением простой проблемы? Я считаю точность более важной, чем производительность!

упрощенный пример:

["China", "Chinese", "Rice", "Noodles", "Soybeans"]
["Belgium", "Belgian", "Fries", "Waffles", "Waterzooi"]

возможное описание может быть:

"Ресторан Hong Garden предлагает нашим клиентам сочные, недорогие китайские. Если вы обнаружите, что у вас внезапное стремление к рис, лапша или соевые бобы в 8 часов вечера в субботу вечером, не волнуйтесь! Были открыты семь дней в неделю и предлагали услуги по сопровождению. Вы можете получить фри здесь! "

Ответы

Ответ 1

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

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

Чтобы решить вашу проблему, выполните следующие действия:

  • Создайте экстрактор функций, который, учитывая описание ресторана, возвращает "функции" (в соответствии с моделью "Сумка слов", описанной выше) этого ресторана (как пример в литературе).
  • Вручную нарисуйте набор примеров, каждый из них будет помечен требуемым классом (китайский, бельгийский, нездоровая еда,...)
  • Подайте помеченные примеры в алгоритм обучения. Он будет генерировать классификатор. Из личного опыта SVM обычно дает наилучшие результаты, но есть и другие варианты, такие как Наивные байесов, Neural Networks и Деревья принятия решений (обычно используется C4.5), каждый из которых имеет свои преимущества.
  • Когда появляется новый (немеченный) пример (ресторан) - извлеките функции и подайте их в ваш классификатор - он скажет вам, что он думает (и обычно - какова вероятность того, что классификатор прав).

Оценка:
Оценка вашего алгоритма может быть выполнена с помощью cross-validation или разделения тестового набора из ваших помеченных примеров, которые будут использоваться только для оценивая, насколько точным является алгоритм.


Оптимизации:

Из личного опыта - вот некоторые оптимизации, которые я нашел полезными для извлечения функции:

  • Stemming и устранение stop words обычно помогает много.
  • Использование Bi-Grams имеет тенденцию повышать точность (хотя значительно увеличивает пространство возможностей).
  • Некоторые классификаторы подвержены большому пространству объектов (SVM не включен), есть некоторые способы его преодоления, такие как уменьшение размерности ваших функций. PCA - это одно, что может вам помочь. Генетические алгоритмы также (эмпирически) довольно хороши для выбора подмножества.

Библиотеки:

К сожалению, я недостаточно свободно владею python, но вот некоторые библиотеки, которые могут быть полезны:

  • Lucene может вам очень помочь в анализе текста, например: создание может быть выполнено с помощью EnglishAnalyzer. Существует версия python lucene, называемая PyLucene, которая, как я полагаю, может помочь вам.
  • Weka - это библиотека с открытым исходным кодом, которая реализует много полезных вещей для машинного обучения - включает в себя множество классификаторов и селекторов функций.
  • Libsvm - это библиотека, которая реализует алгоритм SVM.