Ответ 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.