전체 글

· Casimiro Ferreira· 9 분 읽기

감성 분석 모델로는 항의와 작별 인사를 구별할 수 없다

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

지원 큐에 메시지 두 개가 들어온다.

“앱 때문에 작업을 잃은 게 벌써 세 번째입니다. 고치세요.”

“제가 제대로 하고 있는지 모르겠고, 뭔가를 망쳐버린 것 같아서 무서워요.”

마음대로 고른 감성 분석 모델에 넣어보자. 둘 다 같은 결과가 나온다: 부정적, 각성도 높음. 화가 난 것처럼 보인다. 기분이 나빠 보인다.

그러면 둘을 같은 방식으로 대하게 되는데 — 여기서 실수가 벌어진다. 왜냐하면 이 사람들이 필요로 하는 것이 정반대이기 때문이다.

첫 번째 사람은 매우 화가 나 있다. 화가 난 사람은 집착한다. 자기가 문제를 해결할 수 있다고 믿고, 해결을 받을 때까지 계속 몰아붙일 것이다. 따뜻한 사과와 살펴보겠다는 약속을 보내면, 오히려 더 화나게 만들게 된다.

두 번째 사람은 두려워하고 있다. 뭔가를 고칠 수 있다고 생각하지 않는다. 잘못된 답변 하나면 탭을 닫고 절대 돌아오지 않을 것이다 — 조용히, 왜 떠나는지도 말하지 않은 채. 티켓 번호와 5일간의 개선 조치 기간을 보내면, 그 사람을 잃게 된다.

하나는 항의다. 다른 하나는 작별이다. 그리고 감정 AI 도구 상자에 거의 어떤 것도 어떤 것이 어떤 것인지 알려주지 못한다.

우리는 그 이유를 파악하는 데 꽤 시간을 쏟았다. 답은 예상보다 훨씬 흥미로웠고, 결국 10억 트위터에 훈련된 신경망이, 자신이 한 번도 읽어본 적 없는 1985년 심리학 논문에 동의하는 것으로 끝났다.

빠진 차원

화와 공포에 관해 말하자면: 일반적인 측정 방식으로는 거의 동일하다.

둘 다 기분이 나쁘다. 둘 다 각성도가 높다 — 어느 쪽이든 심장 박동수가 올라간다. “기분이 얼마나 좋은지/나쁜지”와 “얼마나 흥분했는지”라는 두 가지 특성은 거의 모든 감정 모델의 기반이다. 보통 *가[valence]*와 *각성[arousal]*이라고 부른다.

화와 공포는 그 공간에서 거의 같은 위치에 앉아 있다. 이 두 숫자만으로 만든 모델은 아무리 정교해도 이 둘을 분리할 수 없다. 정보 자체가 거기에 없기 때문이다.

실제로 이 둘을 구별하는 것은 세 번째 요소이다: 자기 주도로 뭔가를 할 수 있다고 느끼는가?

화는 무언가 잘못되었을 때 그리고 행동할 수 있을 때 느끼는 것이다. 공포는 무언가 잘못되었을 때 그리고 행동할 수 없을 때 느끼는 것이다. 그 통제감 — 심리학자들은 대처 잠재력[coping potential] 또는 *역량[potency]*이라 부른다 — 이 것이 모든 차이를 만든다. 이것만이 누군가가 싸울지 도망칠지, 에스컬레이션할지 사라질지를 알려준다.

엣지 아이디어가 아니다. 네 개의 독립적인 연구 프로그램이 20년에 걸쳐 각각 도달했고, 그중 하나(Lerner & Keltner, 2001)는 인과적으로 증명했다: 화난 사람들은 낙관적이고 위험 감수적인 판단을 내리는 반면, 두려운 사람들은 비관적이고 위험 회피적인 판단을 내린다 — 그리고 그 효과는 기분이 얼마나 나쁜지가 아니라, 통제감과 확신을 통해 작동한다.

가장 놀라운 발견을 곱씹어볼 가치가 있다. 화난 사람들의 판단은 행복한 사람들의 판단과 닮아 있다. 두려운 사람들의 것이 아니다. 화와 행복은 정반대의 가를 갖지만, 중요하지 않다. 일을 시키는 것이 가가 아니기 때문이다.

그런데 왜 이 축이 도구에 나타나지 않는 걸까?

왜 축이 사라졌는가

대부분의 감정 도구는 소수의 이론적 모델로 거슬러 올라간다. 가장 영향력 있는 두 개는 Plutchik의 감정 바퀴(1980)와, 그 위에 만들어진 Cambria의 감정 모래시계(2012)이다. 후자는 SenticNet 뒤에 있는 모델이다.

Plutchik의 바퀴는 아름다운 물체다. 색상환처럼 생겼고, 색상환의 핵심 아이디어를 그대로 가져온다: 감정은 반대 쌍으로 존재한다. 기쁨은 슬픔에 대립한다. 신뢰는 혐오에 대립한다. 그리고 화는 공포에 대립한다.

마지막이 문제인데, 한 번 보면 다시는 못 본 척할 수 없다.

화와 공포가 한 축의 양 끝이라면, 서로 상쇄된다. 사람이 느낄 수 있는 가장 강렬한 분노를 가져와서 가장 강렬한 공포와 섞고, 모델한테 무엇이 나오는지 물어보자:

(rage + terror) / 2  ==  neutrality

차분함. 인간이 만들어낼 수 있는 가장 격렬한 부정적 상태 둘을 섞었더니, 모델은 아무것도 느끼지 않는다고 보고한다.

이것은 구현의 버그가 아니다. 기하학의 직접적인 결과이다 — 그리고 모델이 우리가 필요로 했던 정확한 양을 버렸다는 뜻이다. 화와 공포를 반대로 만듦으로써, 이 둘을 구별할 수 없게 보장한 것이다.

참고로, 바퀴는 이를 절반쯤 알고 있다. 모래시계에는 감정 점수를 매기는 공식이 있는데, 그 공식에서 화–공포 축은 절대값으로 감싸져 있다: 양 끝 모두 불쾌하다고 계산된다. 사실이기도 하다! 화와 공포는 둘 다 불쾌하다. 하지만 이것은 양극에 놓이게 된 기하학과 조용히 모순된다. 모델 자체의 산술이 자기 자신의 다이어그램과 다르다.

증거가 실제로 말하는 것

이 지점에서 우리는 코드 작성을 멈추고 문헌을 읽으러 갔고, 그 며칠은 편안하지 않았다.

Plutchik의 반대 쌍 구조는 검증되었다. 2009년에 Smith & Schneider는 이 구조를 2,000개가 넘는 통계 테스트에 통과시켰고, 감정 바퀴 이론은 “경험적 지지를 받지 못한다”고 결론지었다. 반대 쌍은 색채 이론에서 빌려온 우아한 은유다. 사람들에 관한 발견이 아니다.

한편 재현되는 것들 — Russell의 가-각성 원형 복합체, 그리고 화와 공포를 구별하는 통제 차원 — 은 실습 소프트웨어에 거의 반영되지 않는 바로 그 조각들이다.

여기서 2차 문제가 있는데, 실제로 우리를 괴롭힌 문제이기도 하다. 이 모든 모델은 사용 가능하다. 생생하고, 가르치기 쉽고, 슬라이드 하나에 들어간다. 그래서 반복 전달되고 — 모델이 출처를 확인하는 것이 귀찮음이 아니라 학문적 성실함처럼 느껴지기 시작할 정도로 반복되면. 은유가 조용히 기반이 되는 과정이다.

살아남은 것 위에 짓다

그래서 우리는 emotion-algebra를 만들었고, 빠진 축을 그 중심에 놓았다.

핵심에는 다섯 개의 숫자가 있다: 얼마나 좋은지, 얼마나 나쁜지 (맞다, 별도로 — 나중에 다시 얘기하겠다), 얼마나 통제력을 느끼는지, 얼마나 각성되었는지, 그리고 전체적으로 얼마나 예상 밖인지. 이것들은 Fontaine과 동료들(2007)에서 왔는데, 매력적인 다이어그램이 아니라 문화 전반에 걸쳐 측정된 144개 특성에서 도출했다.

이제 혼합물이 제대로 작동한다:

from emotion_algebra import prototype, dominant

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

“차분함”이 아니다. distress — 매우 불쾌하고, 각성도가 높고, 통제감이 상쇄된 상태. 그것이 분노와 공포의 혼합물이 실제로 느껴져야 할 모습이다.

그리고 지원 큐도 작동한다:

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'

숫자를 보자. 가[valence]가 거의 동일하다 — 두 메시지 모두 거의 같은 수준으로 불쾌한데, 이것이 기존 감성 분석 모델이 같은 것만 보는 이유다. *역량[potency]*는 반대다. 한 사람은 행동할 수 있다고 느끼고, 다른 한 사람은 아니다.

그것이 당신의 항의이고, 그것이 당신의 작별이다.

성공시킬 수 있었던 테스트

우리를 걱정시킨 것은 이것이었다. 위의 모든 것은 심리학 문헌에 기반하고 있고, 이 문헌은 거의 전적으로 설문지 위에 만들어졌다 — 사람들이 1~9점 척도로 단어를 평가하는 것. 설문지는 불쾌한 특성이 있다: 테스트하기보다는 이론을 조용히 암호화할 수 있다. 감정 설문지를 만드는 모든 사람이 같은 교과서를 배웠다면, 설문지는 교과서와 동의하게 되고, 모두가 매우 정당화된 느낌을 받게 된다.

우리는 이론적 훈련을 전혀 받지 않은 증인을 원했다.

DeepMoji12억 트위터로 훈련된 신경망으로, 메시지가 어떤 이모지로 끝나는지 맞추는 것이 그 전부인 일이다. Plutchik도, 평가 이론도, 대처 잠재력도 한 번도 들어본 적 없다. 감정에 대한 의견 자체가 없다 — 그저 사람들이 무언가를 느낄 때 실제로 어떻게 글을 쓰는지에 대한 매우 정확한 감각만 있을 뿐이다.

그래서 우리는 유일하게 중요한 질문을 물었다:

화와 공포를 구별할 수 있나요? 그렇다면 — 어떤 것을 사용해서 구별하나요?

할 수 있다. 실제 사람이 레이블을 붙인 실제 인간의 댓글을 주면, 기회 수준을 크게 웃돌아 화와 공포를 분리한다. (레이블을 셔플하면 능력이 완전히 사라지기 때문에, 우리 방법의 인위적 결과가 아니다.)

그다음 어떻게 하는지 살펴봤다. DeepMoji가 이 둘을 구별하는 데 사용하는 방향을 가져와서, 우리 다섯 축 각각과 얼마나 일치하는지 측정했다.

**역량[potency]**과 일치한다 — 다른 어떤 것보다 세 배 더 강하게. 가가 아니다. 각성도도 아니다.

10억 트위터로 훈련된 모델이, 화에는 통제감이 수반되고 공포에는 그 부재가 수반된다는 것을 한 번도 배운 적이 없는데, 선택을 강요받으면 바로 그 구별에 손을 뻗는다. 축을 스스로 발견한 것이다.

이것이 우리가 가진 가장 유력한 증거이고, 결과가 반대였을 수도 있다는 점을 분명히 하고 싶다. DeepMoji가 화와 공포를 가로 구별했거나, 전혀 구별하지 않았다면, 우리의 세 번째 축은 심리학 문헌의 인위적 결과가 되었을 것이고, 우리는 그 사실을 말했어야 했다.

씁쓸한 기쁨, 그리고 단 하나의 숫자로 담을 수 없는 것들

하나 더 결과가 있다. 꽤 좋은 것이니까.

우리는 “얼마나 좋은지”와 “얼마나 나쁜지”를 두 개의 별도 숫자로 유지한다. 하나의 점수가 음수에서 얻수로 가는 대신에. 이것은 사소한 기술적 차이처럼 들린다. 실제로 그렇지 않다.

사람들은 정말로 동시에 좋기도 하고 나쁘기도 하다. 고전적인 연구는 졸업식 당일을 사용한다: 학생들은 동시에 진짜 행복과 진짜 슬픔을 보고한다 — 둘의 미지근한 평균이 아니다. 단일 가 점수는 그것을 수학적으로 표현할 수 없다. “약간 행복함”이라고 보고할 수밖에 없는데, 거기에 있는 누구도 그렇게 느끼지 않는다.

두 채널은 그것을 담을 수 있다. 즉, 모델은 마지못한 승리, 다정한 작별, 안도하면서도 여전히 화가 난 고객을 표현할 수 있다. 그것들이 흥미로운 감정이고, 단 하나의 숫자가 평면화시키는 바로 그것들이다.

반대편을 위한 감정

지금까지의 모든 것은 인간을 읽는 것에 관한 것이다. 같은 장치를 거꾸로 돌리면, 캐릭터에게 자체적인 감정 생활을 부여할 수 있다.

여기서 감정이란 변위이다 — 보통 위치에서 밀려나고, 시간이 지나면 원래 위치로 떠내려간다. 돌아가는 곳은 영(0)이 아니다. “감정 없는 상태”라는 것은 존재하지 않는다; 휴식 상태에서도 어딘가에 있고, 그 어딘가는 가볍게 기분 좋고, 차분하며, 약간의 통제력을 느끼는 곳이다. (그 약간의 긍정적 경향이 휴식 중인 생물이 가만히 앉아 있기보다 탐험하러 가는 이유이다. 실제로 측정된 효과이다.)

그러므로 무언가 무서운 것을 본 경비원이 타이머가 끝나면 중립으로 돌아오지 않는다. 점진적으로 내려온다:

terror → fear → apprehension → pensiveness → acceptance

공포, 그다음 경계, 그다음 조용한 응시, 그리고 결국 괜찮아진다. 우리는 그 순서를 만들어내지 않았다; 기하학에서 자연스럽게 나온 것이다.

그리고 두 경비원은 서로 다른 휴식 지점으로 안정되기 때문에 달라질 수 있다. 한 명에게 약간 낮은 기본 통제감과 나쁜 소식을 두 배로 크게 받아들이는 습관을 주면, 그는 알아보기 쉬운 불안한 사람이 된다 — 더 놀라고, 회복이 느리고, 더 오래 응시한다. 그것이 캐릭터이고, 행동 트리 대신 네 개의 숫자로 만든 것이다.

그리고 유용한 부분: 그는 무엇을 하는가? 그것도 통제 축에서 나온다. 화난 경비원은 당신에게 돌진한다. 두려운 경비원은 도망친다. “부정적 감정”은 그 둘 사이를 선택할 수 없고, 한 적도 없다.

뭐가 잘못되었는지 말하는 부분

라이브러리의 모든 모델에는 등급과 인용이 있다 — ESTABLISHED(재현되고, 문화 간 검증되고, 메타분석된)에서 METAPHOR(테스트를 통과하지 못한 아름다운 다이어그램)까지.

Plutchik의 바퀴도 거기에 있고, METAPHOR로 등급이 매겨져 있으며, Plutchik이 지정한 대로 정확히 작동한다 — -anger는 여전히 fear를 반환한다. 왜냐하면 그것이 그의 모델이 말하는 것이기 때문이다. 그의 산술은 충실하게 구현되었고, 그리고 그의 모델은 사람들에 대해 옳지 않다. 둘 다 사실이고, 우리는 하나를 고르기보다 둘 다 말하는 것을 선호한다.

우리 자신의 공백에 대해서도 똑같이 솔직하다:

텍스트에서 각성도를 읽는 것은 미해결 문제이다. 가는 얻을 수 있고, 역량은 얻을 수 있다 — 하지만 텍스트만으로 사람이 얼마나 흥분했는지 믿을 수 있게 알아내는 것은 불가능하다. 우리의 최선의 숫자는 좋지 않다. 우리는 그것이 좋지 않다는 것을 레이블을 달아서 출시한다 — 여러분이 확인하지 않기를 조용히 바라면서 숨기지 않는다.

우리 자신의 발견 중 하나는 잠정적이다. 화를 일으키는 “통제감”과 화를 느끼면서 보고하는 “통제감”이 사실은 같은 것이 아닌 것으로 판명되었다 — 격앙된 중간에는 이론이 예측하는 것만큼 통제력을 느끼지 못한다. 결국 화를 내는 것은 통제력을 잃는 것이다. 우리는 이것이 중요하다고 생각한다. 또한 그에 대한 증거가 빈약하다고 생각하며, 그에 맞춰 표시해 놓았다.

왜 우리가 신경 썼는가

증거와 모순되는 것을 조용히 주장하는 감정 라이브러리는 쓸모없는 것보다 나쁘다. 자신감 있게 쓸모없는 것이고 — 그것 위에 만들어진 모든 것은 그 실수를 조용히, 영원히 상속한다.

우리는 각 부분이 얼마나 신뢰할 수 있는지 알려주는 것을 출시하는 것을 선호한다.

pip install emotion-algebra

문서에는 5분 퀵스타트, 에이전트에게 감정 생활을 부여하는 가이드, 그리고 모든 인용이 포함된 전체 증거 표가 있다. 우리의 등급 중 하나가 잘못되었다고 생각한다면, 소스가 거기에 있어서 반론할 수 있다 — 그리고 우리는 정말로 그것을 듣고 싶다.

한편: 당신의 지원 큐 어딘가에서, 누군가가 조용히 작별을 쓰고 있다. 어떤 종류의 작별인지 아는 것이 좋을 것이다.