Предложения по настроению

Давайте начнем с простой проблемы. Допустим, у меня есть предложение в 350 символов, и я хотел бы поместить это предложение в корзину "Хорошего настроения" или "Плохое настроение".

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

6 ответов

Вручную классифицировать кучу предложений по настроению. Затем накормите их в наивный байесовский классификатор. Используйте что-то вроде SpamBayes в качестве отправной точки.

В зависимости от области предложений и требуемой точности это может быть чрезвычайно сложной проблемой. Есть много научных работ по анализу настроений; хорошее начало может быть здесь - короткая и классическая газета.

Шаги, которые я бы посоветовал предпринять, постепенно приведут к более качественному классификатору:

  1. Руки классифицируют некоторые документы и используют их для обучения готового алгоритма. Я бы предложил использовать SVM (например, с помощью LibSVM в WEKA или SVMLight), но наивный байес или деревья решений, как предложено выше, также могут работать.

  2. Вручную классифицируйте еще несколько документов и перейдите от модели, основанной на униграмме, к более сложной, например, к биграмме или частям речи. Это можно сделать довольно легко с помощью инструментов TagHelper, которые возьмут ваши тексты и преобразуют их в файлы, готовые к WEKA, используя эти приемы. Это добавит некоторый контекст к настроению каждого термина (например, "не" и "плохо" против "не плохо").

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

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

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

Это называется анализ настроений, и статья в Википедии содержит хорошее описание доступных методов. Одним из простых способов было бы использовать Google Prediction API и обучить его набору положительных, отрицательных и нейтральных предложений.

Вы можете поиграть с инструментом Weka, чтобы обучить некоторый классификатор, который будет хорошо работать в вашем случае. Я бы порекомендовал попробовать алгоритм J48, который, по моему мнению, является реализацией алгоритма C4.5 для обучения деревьев решений.

Попробуйте машинное обучение из множества таких предложений. Используйте некоторые функции, например, смайлики в качестве индикаторов настроения. Наблюдайте за качеством и добавляйте / изменяйте свой набор функций.

Другие вопросы по тегам