빅데이터 혁신융합대학

Bigdata University

Bigdata University

Contents Module

[알쓸빅잡]마음을 읽는 컴퓨터 '감성분석'

등록일 2022-07-19

[빅데이터 연재/기고 2]

마음을 읽는 컴퓨터


감성분석

 

야마다 아키히코

언어학 박사 자연어처리전공


 [감성분석이란?]

 예로부터 눈에 보이지 않는 것에 대한 인류의 욕구는 존재해왔다. 과학의 세계에서도 광학현미경과 전자현미경의 발명, 분자구조를 보는 X선 구조분석법과 핵자기공명분석법(NMR) 등의 분석화학기술의 발전, 형광단백질(GFP)을 사용하여 세포 중에서도 단백질을 관찰하는 생명공학기술의 발전, 그리고 2000년대에는 나노사이언스 기술의 발전까지 눈에 보이지 않는 것을 보려는 노력은 활발하게 발전해왔고 그 결과 과학도 크게 발전하게 되었다. 이렇게 과학이 발전해도 아직도 잘 보지 못하고 있는 것 중에 하나는 가장 비근한 예로 사람의 마음이 아닐까 생각된다.


 마음이란 눈으로 보이는 것도 아니고 각 사람마다 천차만별이며, 국가나 문화에 따라서도 다르다. 서로의 마음을 잘 파악하지 못해서 오해가 생기고, 다투거나 여러 가지 크고 작은 문제가 생기기도 한다. 또한 기업에서는 고객들이 브랜드를 어떻게 생각하고 있는지 사람들의 감정을 파악하는 것이 마케팅에 있어서도 매우 중요하다.


 이처럼 사람들의 감정을 이해하는 것은 정말 중요하지만, 사람도 완벽히 이해하기 어려운 사람의 감정을 컴퓨터가 이해한다는 것이 과연 가능할까? 이것은 아주 흥미로운 문제이고 이 문제에 대한 해결 방법을 주는 기술 중 하나가 이번에 소개할 감성분석(혹은 감정분석)(Sentiment Analysis)이다.


 우리는 감정을 어떻게 인지할까? 표정에서 알 수 있는 경우도 있겠지만, 대부분의 경우는 말을 통해 전달된다. 선물을 받았을 때 우리는 "고맙다"거나 "기쁘다"는 말로 감사한 마음을 전하며, 아기가 성장하는 과정에서 "싫어요"는 말을 사용하기 시작하는 것을 하나의 큰 성장 단계로 볼 정도로 감정은 언어라는 매개체를 통해 전달되는 것이 대부분이다. 그렇기때문에 인공지능 연구에서도 말, 특히 문장 속에 있는 감정을 읽어내는 기술이 발전해왔다.


 컴퓨터가 문장 속의 감정을 이해하기 위한 가장 단순한 방법이 무엇일까? 가장 쉬운 방법은 "좋다"는 단어와 "나쁘다"는 단어의 빈도를 비교하는 것이다. "좋다""나쁘다"보다 많이 나오면 그 문장은 긍정적(positive)이고 "나쁘다"가 많이 나오면 그 문장은 부정적(negative)이며 "좋다""나쁘다"가 같은 횟수로 나오면 중립(Neutral)으로 보는 것이다. 아주 간단하고 좋은 방법인 것 같지만 다음과 같은 문장에서는 문제가 발생한다.

 

"나는 이 수업이 정말 싫어요."

 

 이 문장에서는 좋다"나쁘다"도 나오지 않기 때문에 중립이라고 분석되겠지만, 사실은 누가 봐도 부정적인 문장이라고 할 수 있다. 이처럼 이 세상에는 긍정적인 감정과 부정적인 감정을 나타내는 단어가 엄청나게 많기 때문에 "좋다""나쁘다"만 사용하면 분석이 잘 되지 않는다. 이를 위해 연구자들은 긍정과 부정의 감정을 나타내는 단어들을 모아 단어 사전을 만들고 그 단어들이 몇 번 나타나느냐에 따라 감정분석을 하게 되었다. 이 사전을 감성사전(sentiment lexicon)이라 하고, 감성사전을 사용한 감정 분석을 사전기반 감성분석(Lexicon-Based Sentiment Analysis)이라고 한다.


 또한 단지 감성적인 단어를 모으는 것이 아니라 단어에 따라 나타나는 감정의 강도까지 고려하여 단어별로 감정 점수를 매겨, 보다 정확한 감정 분석을 하는 방법도 개발 되어왔다. 몇 가지 사전 기반 감성분석이 있는데, 그 중 하나로 ‘Valence Aware Dictionary and sEntiment Reasoner(VADER) Sentiment Analysis’가 있다. Python library 중 하나인 Natural Language Toolkit(NLTK)를 사용하면 아래 코드와 같이 비교적 쉽게 VADER를 사용한 감성분석을 할 수 있다. 


[분석 및 결과 도출]


 위 문장(VADER is pretty nice at understanding the hidden sentiment of a text!)의 출력결과는 다음과 같다.

 


 출력 결과는 neg(부정), neu(중립), pos(긍정)의 확률을 나타내며, 종합점수(compound)(1에 가까울수록 긍정)가 표시되어 있다. 이번 경우는 중립 또는 긍정 확률이 높고 종합 점수는 1에 가깝기 때문에 비교적 긍정적인 문장이라고 할 수 있다. 이처럼 비교적 쉽게 감성분석을 경험할 수 있다.

 

 하지만 이 사전기반 감성분석에도 단점은 존재한다. 간단한 예는 아래와 같은 문장이다.

 

"나는 이 책이 정말 재미있고 도움이 되는 베스트셀러라는 사람들의 말을 믿을 수가 없다."

 

 이 문장에는 "재미있다", "도움이 된다", "베스트셀러" 처럼 긍정적인 단어들이 많이 등장하고 있으니 긍정적인 문장일까? 사실은 그렇지 않다. 문장의 마무리에서 "믿을 수 없다" 라는 표현을 통해 이 문장이 완전히 부정적인 감정을 드러내고 있다고 인식할 수 있다. 사전만으로 감성분석을 하면 이러한 세밀한 판단이 어렵다. 그 때문에, 사전 기반 감정분석에 가세해, 부정형 등 언어규칙을 추가하는 것으로 감정 분석 기술의 향상을 이뤘다. 위에서 소개한 VADER도 언어규칙을 고려하는 모델 중에 하나다. 이러한 감정 사전과 언어 규칙을 조합한 감정 분석 연구는 지속적으로 진행되고 있으며 성능도 향상되고 있다.


 한편으로 기계학습 기반의 감성분석(Machine Learning-Based Sentiment Analysis)도 진행되고 있다. 기계학습 기반 감성분석은 어떻게 실시하는가? 쉽게 말해 문장을 입력으로 받아 긍정이나 부정(또는 중립)을 맞추는 게임을 하는 기계라고 보면 된다. 이 감정을 맞추는 게임을 위해서는 정답 데이터가 필요하다. 즉 문장이 긍정인지 부정인지(또는 중립인지)를 레이블링한 데이터(레이블링은 사람이 직접 하거나 기계적으로도 할 수 있음)이다. 대표적인 정답 데이터로 Stanford Sentiment TreebankSentiment 140 등이 있다.


 이러한 데이터를 이용하여 Support Vector Machine, Random Forest, Deep Neural Network 등의 기계학습 모델을 학습시켜 완전히 새로운 문장에 대해서도 감성분석을 수행할 수 있도록 하는 것이 기계학습 기반의 감성분석이다. 물론 여기서 날카로운 독자는 숫자 처리만 하는 컴퓨터가 인간의 언어로 된 문장을 어떻게 입력 데이터로 이용하는가라는 의문을 가질지도 모른다. 이 때 필요한 기술이 인간의 언어를 컴퓨터가 이해할 수 있는 수치로 변환하는 기술(예를 들어 word embedding )인데, 이러한 기술에 관해서는 다음에 더 자세히 설명하기로 한다. 기계학습 기반의 감성분석 연구도 크게 발전해왔고 성능도 좋아지고 있다. 또한 감성분석 자체도 그저 긍정, 부정, 중립을 결정하는 단순한 모델만이 아니라 슬픔, 기쁨, 놀라움과 같은 다양한 감정을 분별하는 모델(Emotion Analysis) 등 흥미로운 연구도 진행되고 있다.

 

[한계점]

 인간에게도 어려운 감정을 기계에게 이해시키려는 매우 재미있는 연구인 감성분석이지만 아직도 어려운 과제가 남아있다. 대표적으로 반어(irony)의 문제이다. 필자도 한 수업에서 내용을 이해하지 못하고 시험 준비도 안 된 상태에서 갑자기 퀴즈를 푼 적이 있었다. 거의 못 풀고 망해버렸다. 다음 수업에서 선생님께서 내 답안을 돌려주면서 "참 잘~ 한다~" 라고 하며 답안을 주시던 것이 생각난다.

 
 여기서 "참 잘~한다~" 라는 문장은 표면적으로는 완전한 긍정이지만, 그 선생님 표정과 목소리의 억양, 점수가 나쁘다는 상황까지 고려하면 이것은 명백한 반어이고 "왜 이렇게 못하니?" 라는 부정적 감정을 전달한 것을 알 수 있다. 이러한 문장을 이해한다는 것은 컴퓨터에게 꽤 어려운 과제다. 현재 이러한 반어를 이해하는 감정분석 연구도 진행되고 있다. 

 

 새로운 단어에 바로바로 대응하는 것과, 다양하고 불규칙한 언어규칙과 문법적 예외 등 이 모든 경우를 고려해서 코딩을 하기란 거의 불가능한 일이다. 또한 기계학습 기반의 감정분석을 수행하기 위해서는 레이블링된 데이터가 필요(없어도 가능하긴 하지만)한데, 영어 이외의 언어로는 아직 레이블링된 데이터베이스가 부족한 상황이다. 향후에는 다양한 언어로 데이터베이스가 구축되어 국경과 문화를 초월하여 사람들의 다양한 마음을 이해하는 프로그램이 개발될 것으로 기대한다.