[토픽 모델링] Joint Sentiment Topic Model(JST)

Posted by 적분 ∫2tdt=t²+c
2017.11.21 02:27 그냥 공부

문헌 집합에서 유사한 단어들을 자동으로 묶어준다는 개념 덕분에 토픽 모델링을 감성분석에 이용하려는 시도는 줄곧 있어왔습니다. 결국 감성이라는 것이 어떻게 보면, 문헌 집합에서 "긍정" 주제, "부정" 주제, "중립" 주제에 대해서 찾아내고 그 비율을 계산하는 문제라고 볼 수도 있기 때문이죠. 

이를 위해서 한편으로는 지도학습 기반인 sLDA를 이용하여 문헌과 그 문헌의 감성 점수를 학습하여, 새로운 문헌의 감성 점수를 예측하는 것처럼 기존의 주제를 분석하는 LDA의 측면을 활용하는 연구들이 있고, 다른 한 편으로는 토픽 모델링이 주제 측면뿐만이 아니라 감성 측면까지 다루도록 토픽 모델링을 확장하는 연구들도 있었습니다. 후자 속하는 모형에는 TSM(Topic Sentiment Mixture)와 JST(Joint Sentiment Topic) 등이 있는데요, 이번 포스팅에서는 LDA에 감성 레이어를 추가하여 주제 차원과 감성 차원의 분석이 가능하게 LDA를 확장한 JST 모델에 대해서 살펴보도록 하겠습니다.


감성 분석이란

감성 분석은 Sentiment Analysis나 Opinion Mining 등의 표현으로 불리기도 하는데, 글쓴이가 특정 대상에 대해 어떤 주관적인 감정을 가지고 글을 썼는지를 분석하는 텍스트 마이닝의 하위 분야입니다. 쉽게 말해서 이 글이 중립적인지, 아니면 긍정적인지/부정적인지를 판별하는 작업이죠. 사람들을 대상에 대한 자신의 감정을 드러낼때 정형화된 표현보다는 다양한 비유와 돌려말하기, 반의법 등을 사용하기 때문에 이를 정확히 파악하는 것은 굉장히 어려운 작업입니다. 하지만 충분히 큰 양의 텍스트를 모으면, 대체로 감정을 표현하는 형태에도 경향성이 보이게 됩니다. (쉬운 예를 들자면, "짱 좋다, 최고다"라는 표현이 들어간 문장은 대상에 대해 긍정적이고, "구리다, 나쁘다"는 표현이 들어간 문장은 대상에 대해 부정적이겠죠.)

따라서 연구자들은 정확한 감성분석을 위해서 수작업을 통해 감성 사전을 구축하거나, 학습용 데이터셋을 만들기 위해 태깅을 하는 등 많은 노력을 기울이고 있습니다. 하지만 이렇게 수작업으로 구축된 데이터셋은 분야 한정적입니다. 다른 분야에 적용하고자 하면 기존의 데이터셋을 그대로 이용할 수 없고, 해당 분야에 맞게 또 다시 데이터셋을 구축해야하죠. (이렇게 수작업을 하고 있다보면 사람의 지도 없이 스스로 텍스트를 보고 감성 분포를 계산할 수 있으면 좋겠다는 간절한 소망이 생길겁니다.) 학습 데이터 없이도 학습을 수행하는 토픽 모델링이 감성 분석 분야에서 기대를 받는 것은 당연한 일입니다.


JST 모형

2009년에 C Lin과 Y He는 LDA에 감성 차원을 더해 감성-주제 분석이 가능한 JST 모델[각주:1]을 제시했습니다. 이 모델은 2007년에 제시되었던 Q Mei의 TSM(Topic Sentiment Mixture)[각주:2]를 더욱 개선한 버전이라고 할 수 있겠습니다. C Lin이 논문에서 표현하듯, TSMpLSI에 감성 차원을 더한 것이라면, JST는 LDA에 감성축을 더한 것입니다. pLSI가 불완전한 확률 모델을 가지는 것처럼 TSM도 마찬가지 한계를 가지고 있었고, JST는 pLSI의 이런 한계를 LDA를 통해 극복했다고 볼 수 있겠습니다. (또한 JST는 깁스 샘플링을 사용하기에 구현이 용이하고 간단하게 연산이 가능하죠)


그럼 저자들이 어떻게 감성 차원을 LDA에 더했는지 실제로 살펴보도록 하겠습니다.



LDA 모형


JST 모형Tying JST 모형


먼저 LDA 모형을 짚고 넘어가봅시다. LDA 모형에서 문헌은 다음과 같이 생성됩니다.

  1. Dir(α)에서 문헌의 주제 분포 θ를 뽑습니다.
  2. 주제 분포 θ에서 주제 z를 뽑습니다.
  3. 주제의 단어 분포인 φ_z에서 단어 w를 뽑아 문헌에 씁니다. 
  4. 2~3번 과정을 N번 반복하면 길이가 N인 문헌이 완성!


JST는 다음과 같이 모형을 생성합니다.

  1. Dir(α)에서 문헌의 주제 분포 θ를 감성별로 뽑습니다.
  2. Dir(γ)에서 문헌의 감성 분포 π를 뽑습니다.
  3. 감성 분포 π에서 감성 l을 뽑습니다.
  4. 뽑힌 감성에 해당하는 주제 분포 θ_l에서 주제 z를 뽑습니다.
  5. 뽑힌 감성과 주제의 단어 분포인 φ_z,l에서 단어 w를 뽑아 문헌에 씁니다. 
  6. 3~5번 과정을 N번 반복하면 길이가 N인 문헌이 완성!

즉 기존의 LDA에서는 문헌의 주제분포를 구하고, 주제의 단어분포를 구하여, 최종적으로 단어를 선택하는 과정을 거쳤다면

JST에서는 문헌의 감성분포를 먼저 구하고, 또 문헌의 감성별 주제분포를 구하고, 감성별 주제의 단어분포를 구하여, 최종적으로 단어를 선택하는 것이죠. LDA의 주제 분포가 JST에서는 감성*주제 분포로 늘어나고, 감성을 선택하는 과정이 추가된것이네요!


대게 감성의 개수는 3(긍정, 부정, 중립)으로 두고 주제의 개수는 분석하는 사람에 따라 5, 10, 20 등 다양한 값으로 줄 수 있습니다. 만약 주제 개수를 10, 감성 개수를 3이라고 하면, 사실 10*3 = 30가지의 주제를 가지고 LDA를 수행하는 것과 같은 학습 과정을 거칩니다. 달라진 것은 위에서도 설명했듯이, 감성 분포 π에 따라 30가지 중 10가지만 골라 단어를 뽑는데 사용한다는 거죠.


저자들은 또한 Tying JST라는 변형 모형도 제시했는데 이는 문헌마다 감성별 주제분포가 다를 수 있던 JST 모형에 제약을 추가하여 모든 문헌이 같은 감성별 주제분포를 갖게 한 것입니다. (논문에 제시된 실험결과에 따르면 대체로 Tying JST가 미미하게 성능이 떨어지는 모습을 보이지만, 계산이 간단하다는 이점이 있습니다.)


일단 이 모형이 가지는 장점을 설명하자면, 1) 비지도학습이기에 학습 데이터 없이도 충분한 크기의 문헌 집합만 있으면 감성 분석을 실시할 수 있고, 2) 감성과 동시에 주제를 추출해내므로, 특정 주제에 대한 감성을 알기 쉽다는 것입니다.


사전 확률을 조작하자!

앞서 장점으로 학습 데이터 없이도 스스로 감성 분석을 할 수 있다고 했지만, 이게 생각처럼 쉽지는 않습니다. 위에서 제시된 모형은 주제와 감성이 서로 독립적(직교)일 것을 가정하는데요, 실제로 우리가 사용하는 표현들은 그렇지 않습니다. 따라서 완전 비지도학습을 수행할 경우 파라미터에 편향이 생기면서 높은 성능이 나오지 않는다고 합니다. 그렇다고 해서 일일히 지도학습마냥 학습데이터를 넣어주면 토픽 모델링을 사용하는 장점을 잃는것이구요.


다행히도 약간의 힌트를 제공해주는 것만으로도 성능을 크게 향상시킬 수 있습니다. 예를 들면 "좋다"는 단어는 긍정적이고, "나쁘다"는 단어는 부정적이라고 미리 JST에게 귀띔해주는 것이죠. 그러면 JST는 학습 과정에서 "좋다"는 자동으로 긍정 감성에 넣고, "나쁘다"는 부정 감성에 넣을 것입니다. 그리고 학습하면서 "좋다"와 함께 등장하는 다른 긍정 어휘들도 "좋다"를 따라 긍정 감성에 분류되고, 부정 어휘들한테도 유사한 일이 일어나겠죠!


근데 JST 모형에서 특정 단어가 긍정인지 부정인지 어떻게 귀띔해줄수 있을까요? 이는 문단 제목에서 쓰여있듯이 사전 확률을 조작함으로써 가능합니다. LDA에서 디리클레 분포 φ(주제별 단어분포)의 하이퍼 파라미터는 대게 대칭으로 줍니다. 이는 모든 단어가 등장할 확률을 동등하게 본다는 것입니다. 이 하이퍼 파라미터 값을 비대칭으로, 즉 다르게 준다면 어떤 주제에서는 특정 단어가 등장할 확률을 높게 할 수 있겠죠. 이렇게 하이퍼 파라미터 값을 조절함으로써 사전 확률을 조절하고, 최종적으로 특정 단어가 원하는 감성에 분류되도록 할 수 있습니다. JST에서 "귀띔"은 이렇게 구현됩니다.


자명하게도 귀띔은 많이해줄수록 성능이 높아지겠죠. 저자들은 실험에서 Paradigm word 목록, 상호정보량, 감성어 사전 등 다양한 범용 목적의 감성 분류 데이터를 활용했습니다.


구현

사실 LDA의 깁스 샘플링과 거의 차이가 없습니다. LDA 깁스샘플링을 이해하고 계시다면 https://github.com/linron84/JST 를 살펴보시길 추천드립니다. 


결과

긍정, 부정 태깅이 영화 리뷰 데이터를 바탕으로 성능 평가를 실시했다고 합니다. 앞서 모델에서는 긍정, 부정, 중립 3가지 감성을 모델링했지만, 평가에서는 중립은 빼고 긍정, 부정만 했네요. 제일 왼쪽의 Prior Information이 위에서 얘기한 "귀띔"을 얼만큼 해주었는지입니다. 


결론부터 얘기하자면, 감성분석 성능에서는 SVM을 이용한 분류기를 앞서지는 못했습니다. 위 표에서 볼 수 있듯이, SVM 분류기 최고 성능은 약 90%에 달하는 반면, JST는 약 84%입니다. 하지만 간과하지 말아야할 차이는 SVM 분류기를 이용한 방법은 지도학습이고, JST는 약간 "귀띔"을 해주긴 했어도 비지도학습이라는 거죠. 따라서 학습 데이터 없이 이 성능에 도달했다는 것은 꽤나 고무적이라고 저자들은 논문에서 자찬하고 있습니다.


그리고 성능평가에서 볼 수 있듯이 "귀띔"이 전혀 없는 경우 약 60%로 찍어서 반반 맞추는것을 겨우 웃도는 성적을 보였지만, "귀띔"이 늘어날수록 최대 84.6%까지 성능이 올랐습니다. "귀띔"이 굉장히 중요한 역할을 한다는 것을 알 수 있죠.


한계

비지도학습을 통해 높은 성능을 이끌어냈지만, 분명히 한계도 존재합니다. 일단 LDA를 확장한 모형이기에 LDA가 전재하고 있는 bag of word 가정 때문에 문헌 내 모든 단어의 순서가 무시됩니다. 즉 부정문이 있어도 그것을 제대로 처리할 수가 없는거죠. 감성 분석에서 부정 표현은 감성을 반대로 뒤집어버릴 수 있기에 무시할 수 없는 부분인 만큼 이를 다룰 수 있도록 모형을 확장하는 것이 필요하다고 저자들이 밝혔습니다. 또한 단순히 긍/부/중립 3단계로 나누는 것이 아니라 감성의 강도에 따라 여러 단계로 분류하는 것이 불가능하다는 것도 약점입니다. 

(이는 각각의 감성 분류를 명목(nomial)으로 보기 때문입니다. 즉 JST 모델에서는 긍정/중립/부정이 서로 독립된 카테고리일 뿐 순서나 크기가 있는 개념이 아닙니다. 따라서 "매우 좋음 > 좋음 > 보통 > 나쁨 > 매우 나쁨"과 같이 순서(order)가 부여된 감성 분석을 실시하는데는 부적절하죠.)


참고 자료

JST 논문에 대한 간략한 슬라이드: http://slideplayer.com/slide/4578434/


  1. Lin, C., & He, Y. (2009, November). Joint sentiment/topic model for sentiment analysis. In Proceedings of the 18th ACM conference on Information and knowledge management (pp. 375-384). ACM. [본문으로]
  2. Mei, Q., Ling, X., Wondra, M., Su, H., & Zhai, C. (2007, May). Topic sentiment mixture: modeling facets and opinions in weblogs. In Proceedings of the 16th international conference on World Wide Web (pp. 171-180). ACM. [본문으로]
이 댓글을 비밀 댓글로