한국어 감정 단어 관계 시각화
한국어 감정 단어를 정리한 표가 트위터에서 인기를 얻었습니다. 자신의 감정을 표현하는데 적당한 단어가 잘 떠오르지 않는다는 트윗에 인용으로 한국어 감정단어의 목록 작성과 차원 탐색 논문에서 수집한 감정단어 434개 한국어 감정 단어 목록을 공유해 주셨습니다. 요즘 미쳤다라는 표현이 심지어 방송에서도 남용되어 우려하는 목소리가 많은데요. 감정 어휘의 부족이 소통을 피상적으로 만드는 것 같습니다. 감정 어휘가 늘어 날 수록 자신의 감정을 보다 적확하게 표현하는것 뿐 아니라 자기 감정을 정확하게 아는데도 도움이 된다고 합니다.
어피니티 버블
다만 가나다 순으로 나열된 이런 표 형태는 한눈에 잘 들어오지 않아 아쉬웠는데요. 우선 비슷한 의미끼리라도 묶어보면 좋을 것 같았습니다.어피니티 버블은 텍스트 임베딩을 이용해 유사한 의미 덩어리로 묶어 보로노이 트리맵으로 나타낸 것입니다. 트리맵은 계층적으로 묶을 수 있는데 여기에서는 가까운 단어를 우선 묶고 다시 한번 비슷한 단어 덩어리를 묶도록 했습니다. 그럴듯하게 단어들이 묶이는 걸 볼 수 있습니다. 원래의 단어 목록에 쾌-불쾌 점수가 있는데 점수에 따라 유쾌는 파랗게 불쾌한 쪽은 붉게 컬러 맵핑을 해 긍정과 부정 감정 단어들을 구분했습니다. 전체를 나열하는 것보다 큰 덩어리로 나눠 청크를 나누면 구조를 이해하기 수월해 집니다. 색으로 표시한 것처럼 긍정 단어과 부정 단위로 우선 크게 나눌 수도 있겠죠.
대부분 비슷한 색깔의 단어들이 덩어리로 묶여 있는데. 성취감, 자긍, 긍지, 자긍심 등 파란 덩어리에 붉은 계열의 자만심이 끼어 있는 걸 찾을 수 있습니다. 긍정적인 감정인 자긍심에 조만만 삐끗하면 자만심으로 빠지게 됩니다. 열광과 경탄도 잘못하면 경악하게 됩니다. 이런 의미 덩어리들을 찾아보는 것도 재밌습니다.
물론 텍스트 임베딩의 한계도 볼 수 있는데요. 복잡한 감정 클러스터는 알록달록해 보이는데. 이건 임베딩이 제대로 되지 못한 나머지 단어들이 묶인 것 같습니다.
잠재 공간 맵핑
비슷한 단어는 확인을 했으니 단어들 간의 관계가 궁금했습니다. 텍스트 임베딩을 하면 벡터로 된 위치값을 얻는데 이걸 이용해 공간에 펼쳐보여주여 줄 수 있습니다. 사용한 모델의 임베딩은 768차원 벡터라서 우리가 보기 쉬우려면 2차원에서 차원을 축소해야 합니다. 3차원인 사물도 바닥에 그림자가 드리우면 2차원으로 보이는 것 처럼 고차원을 작은 차원으로 변환하는 걸 차원 축소라고 합니다. 특징을 잘 보여주는(분산이 큰) 차원축을 찾는 주성분분석(PCA)이 많이 사용되었는데, 요즘은 원본의 유사성 관계를 보존하는 t-SNE와 UMAP이 데이터를 시각화하는데 주로 쓰입니다. 저는 UMAP을 이용해 2차원으로 축소해봤습니다. 표에 같이 있던 친숙성에 따라 많이 사용하는 단어는 크게 덜 친숙한 단어는 작게 표시하고 쾌-불쾌 점수로 색을 맵핑했습니다. 이렇게 양쪽으로 나뉘어 지는 경우에는 발산형 컬러맵을(Diverging Colormap) 사용하는 게 좋습니다.
Force Simulation 적용
그런데 차원을 낮추다보니 단어가 같은 위치에 겹치는 경우가 생겨 보기 어렵습니다. force-simulation을 적용해서 자리가 겹치면 조금씩 밀어내어 글자가 겹치지 않게 조정했습니다. 그리고 hull(점들을 감싸는 최소 볼록 다각형)을 추가해 비슷한 의미의 군집이 드러나게 했습니다.
행복은 불행의 부재
감정에 여러 차원축이 있는데 이렇게 2차원에 투영해서 보니 서로 반대되는 감정들은 대체로 멀리 떨어져 있는 것처럼 보입니다(비슷한 걸 가깝게 모았으니). 이걸 만들었을 당시 인사이드 아웃2가 개봉했었는데요. 감정 캐릭터를 맵핑해 그려보니 정말 반대되는 감정이 서로 멀리 떨어져 있는 것처럼 보입니다. 행복한 가정은 모두 비슷한 이유로 행복하지만 불행한 가정은 저마다의 이유로 불행하다처럼 좋은 감정은 좁게 모여있고 불쾌한 감정은 넓게 퍼져있는 것처럼 보입니다.
행복은 불행의 부재라는데. 파란색 긍정적 감정들에서 왼쪽 아래 기쁘다, 즐겁다, 재미있다는 그것 자체로 긍정적인 에너지를 가지는 감정들인 반면에. 오른쪽 윗 부분의 평온하다, 홀가분하다, 통쾌하다, 만족하다, 행복하다 같은 건 어떤 부정적인 감정이 사라졌을 때의 좋은 느낌인 것도 재밌습니다.
레이블링
마지막으로 클러스터를 설명하는 레이블을 추가했습니다. LLM에게 클러스터의 단어 목록을 주고 이런 감정을 대표하는 레이블을 뽑아달라고 했습니다. 클러스터 크기를 반영해서 많은 단어를 담은 클러스터를 크게 그렸습니다. 크기 위계가 생기면 큰 주요 덩어리에 우선 시선이 가게됩니다.
텍스트 임베딩의 cos유사도를 이용하면 같은 의미로 묶인다기 보다 같이 많이 사용되는 단어와 의미들이 묶이는 것인데요. 사랑과 슬픔도 같은 큰 덩어리로 묶이고 감탄과 절망과 실망이 같이 묶인 것도 재밌습니다. 사랑이 없으면 슬픔도 없고, 감탄할 기대가 없으면 실망할 일도 없으니까요.