Как научить сценарий распознавать сарказм? [закрыто]

11

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

У меня уже есть встроенное обнаружение плохих слов, заглавных букв или обоих. В программе есть женское имя, и я постарался максимально приблизиться к тому, чтобы быть девчонкой, исходя из логики (например: всем известно, что большинству девчонок требуется 700 мс, чтобы ответить на вопрос, конечно же, шутя). Итак, вот небольшой пример:

Клиент: ЧТО ВАША ПРОБЛЕМА?
Кику: не используйте этот тон со мной!
Клиент: #### ты,
Кику: почему ты так жесток ко мне: /

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

Для меня более конкретно. Какие самые саркастические слова используются сегодня? Или как получить эту статистику? Как я могу заставить сценарий понять контекст данной фразы?

ОБНОВИТЬ

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

В настоящее время я сделал это так, что мой сценарий может обнаружить очень ограниченный сарказм. Я предопределил некоторые распространенные саркастические слова (однако, в одиночку они бесполезны.) Например: как, что угодно, да, правильно и здорово. И затем это сначала совпадает, простые вещи, такие как прописные и кавычки: THANKS you are so smartили oh you are so "SMART".

Поскольку основная функция сценариев состоит в том, чтобы выполнять задачи или извлекать информацию, и после слов она спросит, было ли это то, что вы имели в виду. Тогда я подумал, добавив «спасибо» в качестве специальной переменной. Так yeah thanksили whatever thanksвызовет возможный сарказм, и сценарий спросит вас: «Обнаружил ли я сарказм?» Лучше всего было бы сказать «извините», иначе он добавит предупреждающий знак, а если предел достигнут - он начнет игнорировать вас.

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

Калле Х. Варавас
источник
14
Пока ваш сценарий не сможет понять, о чем идет речь (вместо того, чтобы подбирать ключевые слова), я думаю, что невозможно поймать большинство сценариев сарказма
Роб
26
@Kalle Давайте будем здесь ясны. Сарказм является одним из самых тонких и совершенных приемов в разговорной речи. Даже если вы являетесь носителем английского языка и полностью способны уловить тонкости, например, тон голоса и любую соответствующую контекстную информацию, вы регулярно не сможете обнаружить сарказм. У не носителей языка почти нет шансов вообще. Отнесите это к тексту, и даже носители языка почти не имеют шансов. И вы хотите, чтобы компьютеры, которые пытаются смутно понять даже самые простые предложения, чтобы решить эту проблему? Оставьте это кому-то, кто всю жизнь занимался анализом речи и текста.
двойник
17
Сделать сценарий распознавания сарказма? Это действительно полезно;)
zenzelezz
12
Давай - даже Шелдон Купер не может обнаружить сарказм ...
Пол Р.
3
Я не думаю, что этот вопрос должен был быть закрыт, особенно не как "не конструктивный". Я бы сейчас проголосовал заново, если бы он не был обязательным, но я думаю, что этот вопрос заслуживает нескольких голосов, особенно после последнего редактирования.
Адам Лир

Ответы:

17

Если у вас была полная система обработки естественного языка и база данных фактов, в том числе система IBM Watson, вы можете пометить некоторые утверждения как возможный сарказм. Например: «Я слышал, у твоей матери рак, а тебя только что уволили!» "Да, жизнь не прекрасна!" может быть помечен, потому что он может признать, что заболеть раком и потерять работу, как правило, не описываются как положительный опыт.

Я предполагаю, что у вас нет ресурсов, чтобы собрать систему оценок Ватсона. Вы можете собрать базу данных часто используемых саркастических фраз, а затем использовать какой-то алгоритм сопоставления текста между оператором target и базой данных сарказма. Я должен предположить, что это не будет очень эффективно, потому что все фразы, которые используются с сарказмом, используются искренне чаще. Например, "Это хороший Икс". обычно используется искренне, но иногда используется с сарказмом.

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

Чарльз Э. Грант
источник
1
Спасибо за Ваш ответ. Это качество ответов определенно лучше, чем выше. Я думаю, что создание базы данных реальных фраз станет слишком большим. Тем не менее, база данных слов + некоторые другие методы могут фактически заставить ее работать (не 100%, но опять же не 0%). Я планирую добавить шаг проверки. Если сценарий обнаруживает небольшой уровень сарказма, он спросит: был ли это сарказм? Если вы отвечаете: «О, НЕТ», то это подтверждает сарказм и фактически злится и игнорирует вас в течение некоторого времени (время будет определяться уровнем сарказма).
Калле Х. Варавас
3
Я действительно думаю, что вы хотите придерживаться фраз, потому что сарказм связан с контекстом, и есть по крайней мере несколько фраз, которые с большей вероятностью будут использоваться сарказически. «Да» не саркастично, «Право» не саркастично, но «Да, верно!» вероятно используется чаще с сарказмом, чем искренне.
Чарльз Грант
6
Что касается качества ответов здесь, я должен сказать, что это частично ваша ответственность. Обработка естественного языка - это хорошо известная область, которая может предоставить вам несколько полезных методов, но вы не даете никаких указаний на то, что провели какое-либо исследование для поиска существующих методов. Это сложная проблема, и на нее вообще нельзя ответить в SO-посте. Много, много книг было заполнено на тему обработки естественного языка.
Чарльз Грант
43

<Сарказм>

if(string.Contains("<Sarcasm>")) containsSarcasm = true;

</ Сарказм>

Честно говоря, я понятия не имею, как это сделать. Я думаю, что только около 30% людей в реальной жизни «испытывают» сарказм, поэтому заставить компьютер распознать его и понять, что это звучит как очень трудная задача.

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

Если вы не можете распознать письменный сарказм, то как вы собираетесь написать алгоритм, который распознает его?

О, и Анна, если кто-то включает термин «я думаю ...» в свое предложение, это обычно указывает на то, что высказывается мнение, а не обязательно исследуемый факт.

Дэйв Най
источник
3
-1 Извините, я не уверен, почему этот ответ вызывает голоса. Предоставленный код на 100% не имеет отношения к рассматриваемому вопросу, и во второй части ответа вы говорите: «Я понятия не имею». Ваш ответ на 30% по теме и на самом деле не помогает и не дает хорошего направления.
Калле Х. Варавас
18
За него проголосовали, потому что автор указал, что практического способа сделать это нет. Поскольку люди часто не могут обнаружить сарказм, вы не можете научить машину. Кроме того, сарказм часто передается тоном голоса, и, следовательно, часто неправильно понимается в онлайн-общении.
Энди Уэйт
1
@ Энди Уэйт Да, конечно, вы правы. Как я сказал, его ответ на 30% по теме (даже при том, что он начал получать голоса, когда не было дополнительного текста.) Тем не менее, я не приму этот ответ, потому что .. да, конечно, вы не можете получить 100% совпадение .. Но даже соответствует 50%? Этот ответ в основном говорит: «Я не понимаю ваш вопрос, я думаю, что это невозможно, звучит сложно, просто бросьте!» Я в основном получаю ответы такого типа только в «Программистах», рядом с «Почему вы это делаете? Используйте фреймворк!» ..
Калле Х. Варавас,
4
@ Калле Я согласен с тобой. Этот ответ - отчасти сарказм, отчасти «я не знаю» и отчасти догадки (30%? Правда? Можете ли вы подтвердить это?). Это совершенно бесполезно и в лучшем случае должно было быть комментарием.
Адам Лир
3
Интересная ветка комментариев - очевидно, даже люди не могут надежно обнаружить сарказм (или его отсутствие).
Писквор покинул здание
11

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

Цур и соавт. также сообщили о некоторых интересных результатах в обнаружении текстового сарказма только в прошлом году с их алгоритмом SASI . Они также сообщают о некоторых дополнительных результатах в другой статье.

В любом случае, это передовой край исследования вычислительного языка; не ожидайте, что кто-нибудь передаст вам libsarcasm на серебряном блюде. Вам понадобятся большие обучающие наборы данных и много свободного времени, чтобы настроить детектор сарказма - и даже в этом случае точность в 77% (как сообщается в статье SASI) недостаточна для отклонения сообщения, основанного исключительно на флаге сарказма.

bdonlan
источник
Хм, 77%? Кажется, это лучше, чем у большинства людей . (без сарказма)
Писквор покинул здание
@ Писквор, вполне возможно, но у меня нет статистики по этому вопросу. По крайней мере, это лучше, чем аудио.
Bdonlan
2

Я не думаю, что этот ответ является очень реалистичным методом подхода, но если бы у вас были ресурсы, чтобы сделать это, я считаю, что это было бы возможно. Рассмотрим проект Google reCaptcha, который использует людей для расшифровки слов, которые компьютеры не могут прочитать ( «Страница Recaptcha Подробнее» ). Я полагаю, что проблема схожа в том, что вы пытаетесь заставить машину выяснить, что люди, по крайней мере , уже делают лучше .

Представьте, что у вас есть ресурсы, чтобы попросить миллионы людей определить сарказм в типичном контексте разговора. Представьте, что вы могли бы попросить, чтобы многие люди представили вам точный момент в разговоре, когда сарказм был осознан, и как минимум часть разговора до осознания того, что нужно будет отметить это отождествление. Это может быть сохранено в базе данных, скажем, к которой у вашей программы был доступ. Затем, когда пользователь печатал разговор с вами, базу данных можно было фильтровать для «похожих» разговоров.

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

Мне также нравится ваша идея поставить вопрос "Был ли это сарказм?" пользователю, а затем использовать его ответ для принятия более точного решения.

Я надеюсь, что мой ответ не был полной тратой, и я желаю вам удачи в этом деле.

-Asaf

Асаф
источник
1

Выявление сарказма в компьютерной лингвистике (он же обработка естественного языка) само по себе является чрезвычайно сложной проблемой. Это в основном проблема классификации, когда модель должна быть обучена в первую очередь. Аналогичная проблема для нахождения двойных смыслов (PDF файл) недавно была исследована и опубликована. Методы для обеих проблем сопоставимы.

stackoverflowuser2010
источник
1

Мои 2 цента:

Спросите психолога о том, как распознать сарказм в выражениях, и сравните их с информацией.

Но это был бы действительно сложный проект, с приложенными усилиями вы наверняка могли бы сделать лучшую ОС в мире: P

dysoco
источник