Можно ли угадать настроение пользователя по структуре текста? - PullRequest
55 голосов
/ 01 июня 2009

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

РЕДАКТИРОВАТЬ: Я ни в коем случае не эксперт по лингвистике или обработке естественного языка, поэтому я прошу прощения, если этот вопрос слишком общий или глупый.

Ответы [ 11 ]

65 голосов
/ 06 июня 2009

Это основа области обработки естественного языка, называемой анализ настроений . Хотя ваш вопрос носит общий характер, он, безусловно, не является глупым - например, Amazon проводит подобные исследования текста, например, в обзорах продуктов.

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

  1. Получить корпус позитивных / негативных настроений . Если бы это был профессиональный проект, вы могли бы потратить некоторое время и вручную аннотировать корпус, но если вы спешили или просто хотели сначала поэкспериментировать с этим, то я бы посоветовал взглянуть на корпус полярности настроений из исследований Бо Пана и Лилиан Ли. Проблема с использованием этого корпуса заключается в том, что он не предназначен для вашего домена (в частности, корпус использует обзоры фильмов), но он все равно должен применяться.

  2. Разделите ваш набор данных на предложения, положительные или отрицательные . Для корпуса полярности настроения вы можете разделить каждый отзыв на составные предложения и затем применить тег общей полярности настроения (положительный или отрицательный) ко всем этим предложениям. Разделите этот корпус на две части - 90% должны быть для обучения, 10% должны быть для теста. Если вы используете Weka, то он может справиться с расщеплением корпуса для вас.

  3. Применение алгоритма машинного обучения (например, SVM, Наивный Байес, Максимальная энтропия) к учебному корпусу на уровне слов. Эта модель называется мешком слов модели , который просто представляет предложение как слова, из которых оно состоит. Это та же модель, на которой работают многие спам-фильтры. Для хорошего ознакомления с алгоритмами машинного обучения есть приложение под названием Weka , которое реализует ряд этих алгоритмов и дает вам графический интерфейс для работы с ними. Затем вы можете проверить производительность модели с машинным обучением по ошибкам, сделанным при попытке классифицировать ваш тестовый корпус с этой моделью.

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

Так что да, если вы серьезно относитесь к этому, то это достижимо - даже без прошлого опыта в компьютерной лингвистике. Это будет изрядная работа, но даже с помощью текстовых моделей можно добиться хороших результатов.

Если вам нужна дополнительная помощь, не стесняйтесь обращаться ко мне - я всегда рад помочь другим, заинтересованным в НЛП =]


Маленькие заметки -

  1. Простое разбиение сегмента текста на предложения - это поле НЛП, которое называется обнаружение границы предложения . Для этого есть ряд инструментов, OSS или бесплатных, но для вашей задачи подойдет простое разделение на пробелы и знаки препинания.
  2. SVMlight также является еще одним учеником, изучающим машины, и фактически их индуктивный SVM выполняет задачу, аналогичную той, на которую мы смотрим - пытаясь классифицировать статьи Reuter о «корпоративных приобретениях» с 1000 положительные и 1000 отрицательных примеров.
  3. Превращение предложений в функции для классификации может потребовать некоторой работы. В этой модели каждое слово представляет собой особенность - для этого требуется токенизация предложения, что означает отделение слов и знаков препинания друг от друга. Еще один совет - строчные буквы всех отдельных токенов слов, чтобы слова «Я ненавижу тебя» и «Я ненавижу тебя» в конечном итоге считались одинаковыми. С большим количеством данных вы могли бы попытаться также указать, помогает ли использование заглавных букв в классификации, злится ли кто-то, но я считаю, что слов должно быть достаточно, по крайней мере, для первоначального усилия.

Редактировать

Я только что обнаружил LingPipe, у которого на самом деле есть учебник по анализу настроений с использованием Bo Pang и Lillian Lee Sentiment Polarity, о котором я говорил. Если вы используете Java, это может быть отличным инструментом для использования, и даже если это не так, он проходит через все шаги, которые я обсуждал выше.

12 голосов
/ 01 июня 2009

Без сомнения, можно судить о настроении пользователя по тексту, который он вводит, но это не будет тривиальной вещью. Вещи, которые я могу придумать:

  • Столицы имеют тенденцию обозначать волнение, раздражение или разочарование и, безусловно, являются эмоциональным откликом, но опять же некоторые новички делают это, потому что они не осознают значение, поэтому вы не можете предположить это, не глядя на то, что они написали чтобы убедиться, что не все в заглавных буквах);
  • Столицы - это всего лишь одна из форм акцента. Другие - использование определенных агрессивных цветов (например, красного) или использование жирных или более крупных шрифтов;
  • Некоторые люди делают больше орфографических и грамматических ошибок и опечаток, когда они очень эмоциональны;
  • Сканирование на наличие смайликов может дать вам очень четкое представление о том, что чувствует пользователь, но опять же что-то вроде :) может быть истолковано как «счастливое», «я вам так сказал» или даже иметь саркастическое значение;
  • Использование ругательств имеет тенденцию иметь ясное значение, но, опять же, его не ясно. Разговорная речь многих людей будет обычно содержать определенные слова из четырех букв. Для некоторых других людей они могут даже не сказать «ад», а вместо этого сказать «черт», поэтому любое ругательное (даже «отстой») имеет значение;
  • Группы знаков препинания (например, @ # $ @ $ @), как правило, заменяются ругательствами в контексте, когда ругательства не всегда уместны, так что это менее вероятно, будет разговорным;
  • Восклицательные знаки могут указывать на удивление, шок или раздражение.

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

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

3 голосов
/ 24 августа 2009

Если вы поддерживаете шрифты, жирный красный текст, вероятно, раздражает пользователя. Зеленые тексты обычного размера с бабочкой - счастливый.

3 голосов
/ 01 июня 2009

Не могу поверить, что я отношусь к этому серьезно ... предполагая одномерное пространство настроения:

  • Если текст содержит ругательство, -10 настроение.
  • Я думаю, что восклицания имеют тенденцию быть отрицательными, поэтому -2 настроения.
  • Когда я расстраиваюсь, я набираю Очень. Короткий. Приговоры. -5 настроение.

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

2 голосов
/ 01 июня 2009

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

Редактировать : Я заметил, что первый ответивший имел существенно похожий пост. Могло быть действительно серьезное представление о более коротких предложениях.

1 голос
/ 03 июня 2009

Я думаю, мой алгоритм довольно прост, но почему бы не вычислить смайлики по тексту :) vs: (

Очевидно, что текст ":) :) :) :)" разрешается для счастливого пользователя, в то время как ":( :( :(" наверняка разрешит печальный. Наслаждайтесь!

1 голос
/ 01 июня 2009

Я согласен с ojblass, что это серьезный вопрос.

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

Ситуация не должна отличаться в веб-интерфейсах. Возвращаясь к комментариям Клита, интересны аналогии между обнаружением эмоций текста и речи. Если человек печатает ЗАГЛАВНЫЕ буквы, они, как говорят, «кричат», точно так же, как если бы его голос повысился в объеме и высоте, используя голосовой интерфейс. Обнаружение типизированных ненормативной лексики аналогично «определению ключевых слов» ненормативной лексики в речевых системах. Если человек расстроен, он будет делать больше ошибок, используя графический интерфейс или голосовой пользовательский интерфейс (VUI), и его можно направить человеку.

Здесь есть "мультимодальная" область исследования обнаружения эмоций. Представьте себе веб-интерфейс, с которым вы также можете общаться (в соответствии с реализацией прототипа IBM / Motorola / Opera XHTML + Voice Profile ). Обнаружение эмоций может быть основано на комбинации сигналов от речевого и визуального модальности ввода.

1 голос
/ 01 июня 2009

Анализ настроения и поведения очень серьезная наука. Несмотря на другие насмешливые ответы, правоохранительные органы годами занимались категоризацией настроения. Использование в компьютерах, о которых я слышал, как правило, имело больше контекста (информация о времени, шаблон голоса, скорость смены каналов). Я думаю, что вы могли бы - с некоторым успехом - определить, находится ли пользователь в определенном настроении, обучив нейронную сеть с образцами из двух известных групп: злой и не злой. Удачи вам в ваших усилиях.

0 голосов
/ 28 июля 2017

Если пользователь вводит следующих символов, то он очень зол, попытайтесь его успокоить ...

`K` 

`k`
0 голосов
/ 21 ноября 2009

Нечеткая логика, я думаю. В любом случае будет довольно легко начать с нескольких правил определения настроения пользователя, а затем расширить и объединить «движок» с более точными и сложными.

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