Анализ настроений по большому набору текста интерактивной беседы

В названии говорится все; У меня есть база данных SQL, разрывающаяся на швах с текстом онлайн-беседы. Я уже проделал большую часть этого проекта на Python, поэтому хотел бы сделать это, используя библиотеку Python NLTK (если не существует причины strong).

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

Итак, что я хотел бы знать:

1) Как я могу определить, к какому продукту относится каждый поток? Я читал об извлечении ключевых слов... это правильный метод?

2) Как определить определенное настроение пользователей на основе их сообщений? Из моего ограниченного понимания я должен сначала "обучить" NLTK распознаванию определенных показателей мнения, а затем просто определить контекст этих слов, когда они появляются в тексте?

Как вы уже догадались, у меня нет опыта работы с НЛП. Из моего чтения до сих пор, я думаю, что я могу справиться с его изучением. Даже простая базовая и грубая рабочая модель на данный момент будет отличной, если кто-то может указать мне в правильном направлении. Google не очень помог мне.

P.S. У меня есть разрешение на анализ этих данных (в случае, если это имеет значение)

Ответ 1

Для обучения любого классификатора требуется набор тренировок помеченных данных и экстрактор возможностей для получения наборов функций для каждого текста. После того, как у вас есть обученный классификатор, вы можете применить его к ранее невидимому тексту (без метки) и получить классификацию, основанную на используемом алгоритме машинного обучения. NLTK дает хорошее объяснение и некоторые примеры, чтобы поиграть с.

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

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

Я думаю, это исследование Go et al. является одним из самых простых для понимания. Вы также можете прочитать другие исследования для отдаленного наблюдения, анализ настроения удаленного наблюдения и анализ настроений.

В NLTK есть несколько встроенных классификаторов с методами обучения и классификации (Наивный Байес, MaxEnt и т.д.), но если вы заинтересованы в использовании поддерживающих векторных машин (SVM), вам следует искать в другом месте. Технически NLTK предоставляет вам класс SVM, но на самом деле это всего лишь оболочка для PySVMLight, который сам является оберткой для SVMLight, написанной на C. У меня были многочисленные проблемы с этим подходом, хотя и вместо этого рекомендует LIBSVM.

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

Ответ 2

Вы можете обучить любой классификатор с похожими наборами данных и посмотреть, какие результаты при применении к вашим данным. Например, NLTK содержит Movie Reviews Corpus, который содержит 1000 положительных и 1000 отрицательных отзывов. Ниже приведен пример того, как с ним можно обучать классификатора Наивного Байеса. Некоторые другие наборы данных обзора, такие как Amazon Product Review, доступны здесь.

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