Все статьи

· Casimiro Ferreira· 10 мин чтения

Ваша модель тональности не отличит жалобу от прощания

  • Affective Computing
  • Emotion
  • Machine Learning
  • LILACS
  • Open Source
  • Science

Два сообщения попадают в вашу очередь поддержки.

«Это третий раз, когда ваше приложение теряет мою работу. Исправьте.»

«Я не знаю, правильно ли я делаю, и боюсь, что сломал что-то.»

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

И вы обработаете их одинаково — и только что допустили ошибку, потому что эти два человека нуждаются в прямо противоположном.

Первый в ярости, а ярость — это вовлечённость. Он верит, что может добиться исправления, и будет давить, пока не добьётся. Отправьте ему тёплое извинение и обещание разобраться — и вы взбесите его ещё сильнее.

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

Один жалуется. другой прощается. И почти ничего в арсенале emotion-AI не поможет вам понять, кто есть кто.

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

Недостающее измерение

Вот в чём дело с гневом и страхом: они практически неразличимы, если измерять их привычным способом.

Оба чувствуются плохо. Оба Highly активированы — пульс учащается в обоих случаях. Эти два качества — «насколько хорошо/плохо это ощущается» и «насколько вы взвинчены» — это те самые две оси, на которых построена почти каждая модель эмоций. Обычно их называют валентностью и арузалностью.

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

На самом деле их разделяет третье: ** чувствуете ли вы, что способны что-то сделать?**

Гнев — это то, вы чувствуете, когда что-то не так и вы можете действовать. Страх — это то, вы чувствуете, когда что-то не так и вы не можете. Это ощущение контроля — психологи называют его potential совладания или potency — и есть вся разница. Именно оно подсказывает вам, будет ли человек сражаться или бежать, эскалировать или исчезнуть.

Это не маргинальная идея. Четыре независимых исследовательских группы пришли к ней независимо друг от друга на протяжении двух десятилетий, и одна из них (Lerner & Keltner, 2001) доказала это каузально: гневные люди делают оптимистичные, толерантные к риску суждения, в то время как напуганные люди делают пессимистичные, осторожные — и эффект проходит через контроль и уверенность, а не через то, насколько плохо им чувствуется.

Самый поразительный их вывод стоит обдумать. Суждения гневных людей похожи на суждения счастливых людей. Не на суждения напуганных. Гнев и счастье имеют противоположную валентность, и это не имеет значения, потому что валентность — это не то, что работает.

Так почему же эта ось не появляется в инструментах?

Почему ось потерялась

Большинство инструментов для работы с эмоциями восходит к небольшому числу теоретических моделей. Две самых влиятельных — Колесо эмоций Плучика (1980) и, построенная поверх него, Песочные часы эмоций Камбрии (2012), которая стоит за SenticNet.

Колесо Плучика — прекрасный объект. Оно похоже на цветовой круг и несёт в себе его центральную идею: эмоции приходят в парах противоположностей. Радость противостоит грусти. Доверие — отвращению. А гнев — страху.

Последняя пара — проблема, и как только вы её увидите, вы не сможете не видеть.

Если гнев и страх — противоположные концы одной оси, они взаимно уничтожаются. Возьмите самую интенсивную ярость, какую только может испытать человек, смешайте её с самым интенсивным ужасом, и спросите модель, что вы получите:

(rage + terror) / 2  ==  neutrality

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

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

Колесо, кстати, наполовину это осознает. У Песочных часов есть формула для подсчёта тональности, и в этой формуле ось гнев–страх обёрнута в модуль: оба конца считаются неприятными. Что верно! Гнев и страх — оба неприятные. Но это тихо противоречит геометрии, которая поставила их на противоположные полюса. Арифметика самой модели расходится с её собственной схемой.

Что говорит на самом деле evidence

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

Структура пар противоположностей Плучика была проверена. В 2009 году Smith и Schneider прогнали её через более чем две тысячи статистических тестов и пришли к выводу, что теория колеса эмоций «не получает эмпирической поддержки». Пары противоположностей — это элегантная метафора, заимствованная из теории цвета. Это не результат исследований людей.

Тем временем то, что воспроизводится — цирдискомплексвалентность–арузалность Рассела и размерность контроля, отделяющая гнев от страха, — это именно те компоненты, которые редко попадают в рабочее программное обеспечение.

Здесь есть проблема второго порядка, и именно она нас беспокоила. Каждая из этих моделей удобна. Они яркие, их легко преподавать, они помещаются на один слайд. Поэтому их повторяют — и когда модель повторена достаточно много раз, проверка её происхождения начинает казаться заносчивостью, а не добросовестностью. Вот так метафора тихо становится фундаментом.

Строим на том, что выживает

Поэтому мы создали emotion-algebra и поставили недостающую ось в её центр.

Ядро состоит из пяти чисел: насколько хорошо это ощущается, насколько плохо (да, отдельно — мы ещё вернёмся к этому), насколько вы чувствуете контроль, насколько вы активированы и насколько всё это неожиданно. Они взяты из работы Fontaine и коллег (2007), которые получили их из 144 измерённых признаков в разных культурах, а не из красивой схемы.

Теперь смешивание работает правильно:

from emotion_algebra import prototype, dominant

dominant(prototype("anger").blend(prototype("fear"), 0.5))
# 'distress'

Не «спокойствие». Distress — крайне неприятно, Highly активировано, ощущение контроля взаимно уничтожено. Что как раз и должно ощущаться от смеси ярости и ужаса.

И очередь поддержки работает:

from emotion_algebra import affect_from_texts

angry, afraid = affect_from_texts([
    "This is the third time your app has lost my work. Fix it.",
    "I don't know if I'm doing this right and I'm scared I've broken something.",
])

angry.valence,  angry.potency    # -0.43, +0.16   -> 'disgust'
afraid.valence, afraid.potency   # -0.47, -0.43   -> 'apprehension'

Посмотрите на эти числа. Валентность практически одинаковая — оба сообщения примерно равно неприятны, и именно поэтому conventional модель тональности видит одно и то же. А potency противоположные. Один человек чувствует себя способным действовать, другой — нет.

Это ваша жалоба. И это ваше прощание.

Тест, который мог бы всё разрушить

Вот что нас беспокоило. Всё вышеперечисленное опирается на психологическую литературу, а эта литература построенаalmost entirely на анкетах — люди оценивают слова по шкале от 1 до 9. У анкет есть неприятное свойство: они могут тихо закодировать теорию вместо того, чтобы её проверить. Если все, кто пишет анкеты по эмоциям, учились по одному и тому же учебнику, анкеты будут согласны с учебником, и все будут чувствовать себя очень подтверждёнными.

Мы хотели свидетеля без какого-либо теоретического образования.

DeepMoji — это нейросеть, обученная на 1.2 миллиарде твитов угадывать, каким эмодзи заканчивалось сообщение. Это действительно всё, что она делает. Она никогда не слышала о Плучике, или об теории оценки, или о potential совладания. У неё вообще нет мнения об эмоциях — просто очень хорошо наработанное чувство того, как люди на самом деле пишут, когда что-то чувствуют.

Мы задали ей единственный важный вопрос:

Можешь ли ты отличить гнев от страха? И если да — что ты для этого используешь?

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

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

Оно совпадает с potency — в три раза сильнее, чем с чем-либо ещё. Не валентностью. Не арузалностью.

Модель, обученная на миллиарде твитов, которая никогда не слышала, что гнев связан с чувством контроля, а страх — с его отсутствием, обращается именно к этому различию, когда вы заставляете её выбирать. Она нашла ось самостоятельно.

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

Горько-сладкое и другое, что одно число вместить не может

Ещё одно следствие, потому что оно хорошее.

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

Люди действительно чувствуют хорошее и плохое одновременно. Каноническое исследование использует день выпускания: студенты报告ируют реальное счастье и реальную грусть одновременно, а не прохладное среднее между ними. Одна оценка валентности математически неспособна это представить. Она вынуждена сообщить «слегка счастлив», хотя так там никто не чувствует.

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

Эмоции для другой стороны

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

Эмоция здесь — это смещение: вас оттолкнули от того места, где вы обычно находитесь, и со временем вы возвращаетесь обратно. Место, куда вы возвращаетесь — это не ноль. Не существует такой вещи, как «отсутствие эмоций»; даже в покое вы находитесь где-то, и это где-то — слегка приятно, спокойно и слегка под контролем. (Лёгкий позитивный уклон — вот почему существо в покое идёт исследовать что-то, вместо того чтобы сидеть неподвижно. Это реальный, измеренный эффект.)

Поэтому охранник, который только что увидел что-то ужасающее, не возвращается к нейтрали по таймеру. Он спускается через стадии:

terror → fear → apprehension → pensiveness → acceptance

Страх, затем настороженность, затем какое-то тихое размышление, и в итоге он в норме. Мы не прописывали эту последовательность — она вытекает из геометрии.

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

А теперь полезная часть: что он делает? Это тоже идёт от оси контроля. Разъярённый охранник бросается на вас. Испуганный — бежит. «Негативная эмоция» не может выбирать между этими двумя, и никогда не могла.

Где мы говорим, что в этом не так

Каждая модель в библиотеке несёт оценку и ссылку — от ESTABLISHED (воспроизводится, кросс-культурно, мета-анализ) до METAPHOR (красивая схема, не выдержавшая проверки).

Колесо Плучика там, с оценкой METAPHOR, и оно всё ещё работает точно так, как описал Плучик: -anger всё ещё даёт fear, потому что так говорит его модель. Его арифметика реализована добросовестно, и его модель неправильно описывает людей. Оба утверждения верны, и мы предпочитаем сказать оба, чем выбрать одно.

Мы так же откровенно говорим о собственных пробелах:

Чтение арузалности из текста — нерешённая задача. Мы можем получить валентность, мы можем получить potency — мы не можем надёжно определить, насколько человек взвинчен по его словам. Наша лучшая оценка — плохая. Мы отдаём её с пометкой «плохая», а не тихо надеемся, что вы не проверите.

Один из наших собственных выводов — предварительный. «Чувство контроля», кое вызывает гнев, и «чувство контроля», которое люди *сообщают, будучи в ярости», оказываются не одним и тем же — вы чувствуете себя менее контролирующими в разгар ярости, чем предсказывает теория. Потерять самообладание — это всё-таки потерять контроль. Мы считаем, что это важно. Мы также считаем, что наши доказательства этому слабы, и пометили это соответствующе.

Зачем мы заморочились

Библиотека эмоций, которая тихо утверждает то, что evidence опровергает, хуже, чем бесполезна. Она уверенно бесполезна — и всё, что построено поверх неё, унаследует ошибку, молча, навсегда.

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

pip install emotion-algebra

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

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