algorithm машинное - Алгоритм для определения того, как положительный или отрицательный оператор / текст




обучение методы (12)

В моей компании у нас есть продукт, который делает это, а также хорошо работает. Я сделал большую часть работы над этим. Я могу дать краткую мысль:

Вам нужно разделить абзац на предложения, а затем разделить каждое предложение на более мелкие субобъекты - расщепление на основе запятых, дефис, полу двоеточие, двоеточие, «и», «или» и т. Д. Каждое субпредложение будет демонстрировать совершенно индивидуальные чувства в некоторых случаях.

Некоторые предложения, даже если они разделены, должны быть объединены.

Например: продукт потрясающий, отличный и фантастический.

Мы разработали всеобъемлющий набор правил о типах предложений, которые должны быть разделены и которые не должны быть (на основе тегов POS слов)

На первом уровне вы можете использовать подход с мешком слов, то есть иметь список положительных и отрицательных слов / фраз и проверять каждое предложение. При этом также смотрите на слова отрицания типа «нет», «нет» и т. Д., Которые изменят полярность предложения.

Даже тогда, если вы не можете найти чувства, вы можете пойти на наивный подход к заливам . Этот подход не очень точен (около 60%). Но если вы применяете это только к предложению, которое не проходит через первый набор правил, вы можете легко получить точность до 80-85%.

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

Для любопытных людей мы реализовали все это python с NLTK и модулем Reverend Bayes.

Довольно просто и обрабатывает большинство предложений. Тем не менее, вы можете столкнуться с проблемами при попытке помечать контент из Интернета. Большинство людей не пишут правильные предложения в Интернете. Также очень трудно справиться с сарказмом.

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

Например:

Джейсон - худший пользователь SO, которого я когда-либо видел (-10)

Джейсон - пользователь SO (0)

Джейсон - лучший пользователь SO, которого я когда-либо видел (+10)

Джейсон лучше всего сосать SO (-10)

Хотя, хорошо в SO, Джейсон хуже всего делает плохо (+10)

Нелегко, да? :)

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

Благодарю.


Как отмечалось, это происходит под анализом чувств при обработке естественного языка.
Afaik GATE не имеет компонента, который анализирует настроения.
По моему опыту, я применил алгоритм, который является адаптацией к тому, который описан в статье «Признание контекстной полярности в анализе настроений на уровне фразы» Терезы Уилсон, Жаны Вибе, Пол Хоффманн ( this ) как плагин GATE, который дает разумные хорошие результаты. Это может помочь вам, если вы хотите выполнить загрузку.


Ах, я помню одну библиотеку java для этого под названием LingPipe (коммерческая лицензия), которую мы оценили. Это будет хорошо работать для примера corpus, который доступен на сайте, но для реальных данных он отстой очень плохо.


Это подпадает под сферу обработки естественного языка , и поэтому чтение об этом, вероятно, является хорошим местом для начала.

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

Один из ваших примеров потенциально мог бы быть отмечен положительным, когда он был фактически отрицательным с использованием этого подхода («Джейсон лучше всего сосать с помощью SO»), если только вам не повезет «сосать» больше, чем «лучший» ... Но также этот является небольшим текстовым образцом, если вы смотрите на абзацы или больше текста, тогда взвешивание становится более надежным, если у вас есть кто-то целенаправленно пытается обмануть ваш алгоритм.


Думаю, все дело в контексте. Если вы ищете людей, которые лучше всего сосать с SO. Сосать лучшее может быть положительным. Для определения, что плохо или хорошо, и сколько я мог бы порекомендовать в Fuzzy Logic.

Это немного похоже на рост. Кто-то, кто имеет 1,95 м, может считаться высоким. Если вы помещаете этого человека в группу с людьми со всего 2.10m, он выглядит коротким.


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

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

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

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

Байесовские фильтры, хотя и простые, на удивление эффективны.


Вы можете сделать так:

    Jason is the worst SO user I have ever witnessed (-10)

худшее (-), остальное - (+). так что это будет (-) + (+) = (-)

    Jason is an SO user (0)

() + () = ()

    Jason is the best SO user I have ever seen (+10)

best (+), остальное - (). так что это будет (+) + () = (+)

    Jason is the best at sucking with SO (-10)

best (+), сосание (-). так что (+) + (-) = (-)

    While, okay at SO, Jason is the worst at doing bad (+10)

худшее (-), плохое (-). так что (-) + (-) = (+)


Существует подполе обработки естественного языка, называемое анализом чувств, которое конкретно касается этой проблемной области. В этом районе проводится значительная коммерческая работа, потому что потребительские товары так сильно пересматриваются на онлайновых форумах пользователей (ugc или пользовательский контент). Существует также прототип платформы для текстовой аналитики GATE из университета Шеффилда и проекта python под названием nltk . Оба они считаются гибкими, но не очень высокими. Один или другой может быть полезен для разработки собственных идей.


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

алгоритмы классификации weka

  • SVM
  • наивный базовый
  • J48

    Только вы должны сделать это, чтобы обучить модель вашему контексту, добавить избранный вектор и настроить правило. В моем случае я получил некоторые (точность 61%). Итак, мы переходим к ядру stanford nlp (они обучили их модели для обзоров фильмов), и мы использовали их набор для обучения и добавили наш тренировочный набор. мы могли бы достичь 80-90% точности.


Может быть, программное обеспечение для оценки эссе можно использовать для оценки тона? WIRED статья.
Possible ссылка. (Я не мог его прочитать.)
This отчете сравнивается навык написания навыков с уровнем уровня Flesch-Kincaid, необходимым для его чтения!
Страница e-rator говорит, что они смотрят на неправильное обращение и тому подобное. (Может быть, плохой пост тоже написано неправильно)
Slashdot статья.

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


Как насчет сарказма:

  • Джейсон - лучший пользователь SO, которого я когда-либо видел, НЕ
  • Джейсон - лучший пользователь SO, которого я когда-либо видел,

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





algorithm nlp