[토픽 모델링] MG-LDA를 이용해 네이버 영화 리뷰 분석해보기

Posted by 적분 ∫2tdt=t²+c
2018.01.15 11:55 그냥 공부

이전 글([토픽 모델링] MG-LDA : 전역 주제와 지역 주제를 함께 추출하기)에서 MG-LDA 모델의 개념과 이론에 대해 전반적으로 살펴보았는데요, 본 게시물에서는 깁스 샘플링을 이용하여 MG-LDA 추론과정을 구현한 것을 가지고 실제 한국어 텍스트를 분석해보았습니다.


MG-LDA와 깁스 샘플링

이전 글에서 모형에 대해서는 잘 설명해두었으니, 이번 글에서는 확률 식 및 깁스 샘플링 방법에 대해서 설명하도록 하겠습니다. 복습할 겸 MG-LDA[각주:1]의 문헌 생성 과정을 다시 짚어보자면


* 주제별 단어 분포 뽑기 과정

  1. 디리클레 분포(βG)에서 전역 주제별 단어 분포 φG를 뽑는다 (총 KG개)
  2. 디리클레 분포(βL)에서 지역 주제별 단어 분포 φL를 뽑는다 (총 KL개)

* 문헌 내의 단어 생성 과정(전체 문장 수를 S개라고 할 때)

  1. 먼저 문헌의 전역 주제 분포 θG를 디리클레 분포(αG)에서 뽑는다
  2. 문헌 내의 S + T - 1개의 윈도우별로
    • 전역/지역 분포 π를 디리클레 분포(αM)에서 뽑는다
    • 지역 주제 분포 θL를 디리클레 분포(αL)에서 뽑는다
  3. 문헌 내의 S개의 문장별로
    • 문장 내 단어들의 윈도우 분포 ψ를 디리클레 분포(Υ)에서 뽑는다
    • 해당 문장의 단어 개수에 따라
      • 먼저 ψ에서 해당 단어의 소속/li 윈도우를 뽑고
      • 해당 소속 윈도우의 π에서 이 단어가 전역/지역 중 어디에 속할지 뽑는다
      • 전역이 뽑혔다면, 해당 문헌의 θG에서 전역 주제를 뽑고, 그 전역 주제에 해당하는 단어 분포 φG에서 어휘 w를 뽑아 문장에 추가한다.
      • 지역이 뽑혔다면, 해당 윈도우의 θL에서 지역 주제를 뽑고, 그 지역 주제에 해당하는 단어 분포 φL에서 어휘 w를 뽑아 문장에 추가한다.

결합 확률을 따져봅시다. 여기서 나오는 확률을 모두 나열해보자면, 해당 단어가 특정 어휘일 확률 P(W), 해당 단어가 특정 주제일 확률 P(Z), 해당 단어가 전역/지역일 확률 P(R), 해당 단어가 특정 윈도우에 속할 확률 P(V)이 되겠습니다. 총 4가지의 결합확률 P(W, V, R, Z)를 구해야하는데, 이 4가지 요소들은 서로 얽혀있기에 어떤 요소가 다른 요소에 영향을 미치는지를 생각하며 확률을 전개해야겠습니다.

먼저 P(W)는 특정 어휘가 뽑힐 확률인데, 이 뽑히는 어휘는 해당 단어의 전역/지역 소속과 그 단어의 주제에 영향을 받으므로 P(W | R,Z)라고 쓸 수 있습니다. 그리고 P(R)은 해당 단어가 전역/지역 중 어디에 속하는가를 나타내는데, 이는 그 단어가 소속된 윈도우에 영향을 받으므로 P(R | V)라고 쓸 수 있겠죠. 그리고 P(Z)는 해당 단어가 특정 주제에 속할 확률인데, 이는 그 단어의 전역/지역 소속과 소속 윈도우에 영향을 받으므로 P(Z | R,V)라고 쓸 수 있습니다. 마지막으로 P(V)는 해당 단어가 특정 윈도우에 속할 확률인데 이는 다른 요소로부터 영향을 받지 않으므로 그냥 P(V)입니다.


따라서 P(W, V, R, Z) = P(V) * P(R | V) * P (Z | R,V) * P(W | R,Z) 가 됩니다. 이제 각 항을 전개해봅시다. 항별 전개는 LDA에서 했던것과 동일하게 디리클레 다항분포를 적분함으로써 얻을 수 있습니다.



따라서 깁스샘플링을 위한 확률식은 다음과 같이 되겠죠.

(n_r,z는 해당 소속 r 중 주제 z에 할당된 모든 단어 수, n_r,z,w는 해당 소속 r 중 주제 z에 할당된 어휘 w의 수,
n_d,s는 해당 문헌 d 중 문장 s에 속한 모든 단어 수, n_d,s,v는 해당 문헌 d의 문장 s에서 윈도우 v에 속한 단어 수,
n_d,v는 해당 문헌 d 중 윈도우 v에 속한 모든 단어 수, n_d,v,r은 해당 문헌 d의 윈도우 v에서 소속 r에 배정된 단어 수,
n_d,v,r은 해당 문헌 d 중 윈도우 v 중 소속 r에 속한 모든 단어 수, n_d,v,r,z,는 문헌 d의 윈도우 v의 소속 r에서 주제 z에 할당된 단어 수)

단 이때 마지막 항은 r = Global 인지 r = Local인지에 따라 달라집니다. r=Global일 경우, 이 주제는 윈도우와는 독립이므로 n_d,v,r => n_d,r이 되고, n_d,v,r,z => n_d,r,z가 됩니다.

분석에 사용한 텍스트 자료

실제 분석을 해보기 위해 쓸만한 자료를 뒤적거렸는데, 네이버 영화 리뷰(http://movie.naver.com/movie/board/review/list.nhn)가 나름 길이도 길고 문헌 수도 많아서 이를 사용해보기로 했습니다. 임의로 문장이 3개 미만인 리뷰는 버리고, 그 이상인 리뷰 5천건을 임의로 수집하여 (늘 그렇듯이) 형태소 분석 후, 불용어를 제거하였습니다. 문장 구분은 마침표, 물음표, 느낌표로 했고, 줄바꿈은 그냥 무시..! 파라미터는 K_G = 20, K_L = 10, T = 3, alpha_G = alpha_L = 0.1, alpha_MG = alpha_ML = 0.1, beta_G = beta_L = 0.01, gamma = 0.1로 두고 총 500번의 이터레이션을 거쳐서 모형 학습을 진행했습니다. 구현한 코드는 https://github.com/bab2min/tm-cpp 에서 살펴보실 수 있습니다.


분석 결과

이 모형은 전역 주제와 지역 주제를 함께 쏟아냅니다. 논문대로라면 전역 주제에서는 문헌 전반에 통하는 특수한 주제들이 잡힐 것이고, 지역 주제에서는 여러 문헌의 단락 단락에서 등장하는 일반적인 주제들이 잡혀야겠죠. 영화리뷰이니, 전역 주제에는 특정 영화군에 대한 주제들이 나오고, 지역 주제에서는 영화 리뷰의 단락마다 등장하는, 스토리 평이나 연기, 영상미와 같은 주제가 나오면 좋겠네요! 과연 그렇게 나왔는지 실제 결과를 보시죠.


전역 주제

#3: 노래, 뮤지컬, 부르다, 안톤, 소녀, 교도소, 원스, 무대, 하모니, 공연, 음악, 합창단, 우연, ...

#10: 사랑, 그녀, 남자, 없다, 자신, 여자, 알다, 마음, 이야기, 시작, 모습, 만나다, ...

#13: 뱀파이어, 침묵, 수도원, 공포, 인간, 맥스, 괴물, 좀비, 데이브, 메리, 세상, 시간, 감독, 혈액, ...

#16: 영웅, 아이언맨, 토니, 히어로, 만들다, 애니메이션, 개구리, 스타크, 디즈니, 무기, 스파이더맨, ...

#17: 한국, 일본, 문제, 국가, 정치, 우리나라, 국민, 나라, 쉽다, 실제, 지역, ...

...


큼지막한 주제들이 뽑혀나왔습니다. 대충 보면 전역 주제를 보고 어떤 영화인지도 맞출수 있을것 같네요. (한 번 맞춰들 보시라고 주제에 라벨링을 달지는 않았습니다.)


지역 주제

#0: 장면, 이야기, 마지막, 만들다, 내용, 대사, 생각, 원작, 소설, ...

#1: 사람, 없다, 생각, 알다, 모르다, 같다, 먹다, 시간, 들다, ...

#3: 감독, 작품, 출연, 개봉, 배우, 만들다, 미국, 제작, 원작, 연출, ...

#5: 이야기, 관객, 장면, 결말, 주인공, 생각, 만들다, 스토리, ...

#6: 생각, 없다, 내용, 조금, 스토리, 너무, 느낌, 아쉽다, 좋다, 재미있다, 지루, ...

#8: 연기, 배우, 정말, 좋다, 멋지다, 역할, 귀엽다, 캐릭터, 어울리다, ...

#9: 생각, 나다, 좋다, 정말, 기억, 마음, 장면, 눈물, 감동, 많다, 기분, ...


반면 지역 주제는 전역주제와는 달리 특정 영화에 대한 이야기보다는 영화 리뷰에 나오는 주요 항목들을 묶어놓은 느낌입니다. 어느 정도 논문대로 잘 나온것 같네요


그리고!!! 이게 전부가 아닙니다. 이렇게 주제별 단어분포를 구함과 동시에 문헌별 주제 분포 및 문장별 주제 분포를 구할 수 있다는게 MG-LDA의 강점이거든요.


리뷰1



문장전역지역
전체

#16(0.243)

#1(0.0242)

#15(0.0164)


1 심야 영화 너무너무 기다리다 아이언맨2 솔직히 조금 지루 영화 중간 자다 정도 개다
스파이더맨 좋아하다 이유 너무 고뇌 이번 아이언맨 조금 고뇌 인간 이유 이해 지겹다
어쩌다 없다 아이언맨 이유 토니 스파크 특유 천박 쇼맨쉽 히어로 너무나 모자라다
넘치다 모습 이번 그런 없다 조금 빈약 스토리 산만 진행 돋보이다 

#16(0.131)

#6(0.484)

2 영화 대충 보다 맥주 먹다 잠자다 마지막 전투 보다 나오다 느낌  .

#9(0.321)

#1(0.24)

#6(0.239)

3 알다 아이언맨 2 바로 마블코믹스 어벤져스 프로젝트 하나 오늘 오전 알다 어벤져스 

#16(0.313)

#0(0.223)

#1(0.146)

4 마블 코믹스 히어로즈 총출동 내용 실사영화 개봉 예정 이상 마지막 올라가다 사람 나가다 

#16(0.168)

#9(0.238)

#0(0.193)

5

나오다 장면 바로 어벤져스 암시 내용 샤무엘 잭슨 스칼렛 요한슨 어벤져스 출현
어벤져스 비밀 알다 모든 용서 영화 아이언맨 2 브라 이스 쉬다 마블코믹스 달리다 모르다
솔직히 크다 그림 퍼즐 아이언맨 2 만들다 치다 퍼즐 하나 영화 재미 어떻다 아쉬움 여전히

#16(0.42)

#0(0.246)

#1(0.194)



문장 전역 지역

전체

#3(0.337)
#10(0.213)
#6(0.036)
1 하모니 드라마 한국  #3(0.085) #3(0.746)
2

개봉 감독 강대 출연 김윤진 나문희 강예원 정수영 박준면 줄거리 아기 입양 보내다 정혜
김윤진 가족 돌리다 사형수 나문희 저마다 아프다 사연 가지다 살아가다
여자교도소 합창단 결성 사랑 가슴 찡하다 감동 무대 만들다 이야기
저마다 다른 사연 아픔 안다 창살 갖힌 그녀 그녀 노래 화음 서로 아픔 받다 달래다 

#3(0.483)
#10(0.306)

#3(0.098)
3 없이 맑다 아기 연기 모성애 물씬 자극 영화  #3(0.25)
#10(0.158)
#4(0.189)
#8(0.099)
4 엄마 함께 보다 좋다 영화 보다 울다 여자 없다 같다  . #9(0.614)
#7(0.21)
5 남자 몰래 울다  #3(0.511)
#10(0.323)

.

6 펑펑 울다 보다  . #9(0.652)
#7(0.222)
7 그녀 가장 크다 고통 갖다 혀다 현실 사랑 함께 아픔  #3(0.116) #2(0.475)
#4(0.242)
8 아픔 노래 토하다 다른 희망 갈구 사연 없다 사람 없다 절대  #3(0.533)
#10(0.337)
.
9 남친 착하다 경찰 경계 바람  #3(0.148) #8(0.377)
#2(0.133)
10 여자 보다 이쁘다  #3(0.14) #8(0.324)
#1(0.176)
11 게다가 이쁘다 착하다 함ㅋ 개봉 관람 #3(0.183) #8(0.249)
#7(0.124)
#5(0.124)


대체로 전역 주제는 해당 리뷰의 대상이 된 영화에 대한 내용과 관련하여서 잡혔고, 지역 주제는 리뷰라는 글의 특성상 여러 글들에서 반복적으로 나타나는 내용들이 잡혔습니다. 전체 문헌으로는 LDA처럼 문헌별 전역 주제분포를 계산할수 있고, 또한 각 문장별로 문장별 전역/지역 주제 분포도 계산할 수 있죠. 만약 문장별 전역/지역 주제 비율을 비교한다면, 해당 문장이 해당 영화에 대한 특수한 이야기를 하는 것인지, 아니면 일반적인 영화 평가를 하는 것인지 따져볼 수 있겠죠. 혹은 글 전체를 대상으로 해당 글이 일반론인지 아니면 특정 영화에 대한 사례가 집중된 이야기인지 비교해 볼 수도 있겠구요. (실제로 몇몇 리뷰들은 전역 주제는 거의 잡히지 않고 지역 주제만 잡힌경우도 있었어요. 이 경우 해당 영화에 대한 리뷰가 너무 흔하여 전역 주제로 가야할 내용들이 지역 주제로 잡혀버린 경우도 있지만, 실제로 해당 영화에 대한 내용보다는 단순 평가만 늘어놓은 경우도 있었습니다.)


주제를 전역과 지역으로 나누어 모형화한다는 MG-LDA의 아이디어는 확실히 흥미롭습니다. 권 > 장 > 단락 > 문장으로 나뉠수 있는 여러 문헌들의 집합이 있다면, 각각의 계층을 대상으로 토픽 모델링을 할 수 있겠죠. 이 경우 전역/지역 주제가 아니라 권별 주제, 장별 주제, 단락별 주제 등으로 나뉠겁니다. 이를 잘 활용하면 단락별 요약이라던지 장별 요약, 혹은 권별 요약도 해볼 수 있겠구요.


실제로 MG-LDA의 저자는 이를 발전시켜 리뷰 텍스트의 감성을 요약하는 작업에 응용하기도 했는데,[각주:2] 시간이 되면 이 부분도 좀더 파헤쳐 보려고 합니다.


혹은 지역 주제의 수는 고정해두고, 전역 주제의 수를 HDP와 같은 기법을 이용하여 데이터 셋에 최적으로 맞추는 개선도 해봄직 하구요, 또 문헌의 메타데이터를 통합하여 메타데이터에 따른 전역/지역 주제의 변화를 분석해보는 식으로 응용도 가능할듯 합니다.

  1. Titov, I., & McDonald, R. (2008, April). Modeling online reviews with multi-grain topic models. In Proceedings of the 17th international conference on World Wide Web (pp. 111-120). ACM. [본문으로]
  2. Titov, I., & McDonald, R. T. (2008, June). A Joint Model of Text and Aspect Ratings for Sentiment Summarization. In ACL (Vol. 8, pp. 308-316). [본문으로]
이 댓글을 비밀 댓글로