상세 컨텐츠

본문 제목

[토픽 모델링] 단어의 순서를 고려하는 모형들 - Topical N Gram

그냥 공부

by ∫2tdt=t²+c 2018. 2. 4. 01:52

본문

지금까지 연구된 수많은 토픽 모델링 기법들은 대게 단어 주머니(Bag of Words) 가설을 바탕에 두고 있습니다. 이는 문헌의 내용을 단어의 순서나 위치를 고려하지 않고, 주머니 안에 해당 단어가 들어있는지 없는지 (혹은 몇 개나 들어있는지) 만을 가지고 추론할 수 있다는 가설인데요, 당연히 우리가 사용하는 자연 언어와는 조금 맞지 않는 가설입니다.


예를 들어 

A: 나는 사과는 싫고 배가 좋다.

B: 나는 배는 싫고 사과가 좋다.

와 같이 두 문장을 생각해봅시다. 두 문장의 의미는 정 반대이지만, 단어 주머니 가설에서는 두 문장이 같은 것으로 간주됩니다. 단어의 순서는 다르지만 단어의 출현 빈도는 동일하게 때문에 해당 가설을 바탕으로 하면 그 차이를 발견할 수가 없는 것이지요.


이렇게 BoW 가설은 그 한계가 명확하지만, 문헌 전체를 단순하게 단어 빈도들의 벡터 형태로 표현할 수 있다는 강력한 장점 때문에 정보 검색이나 토픽 모델링 등의 연구 분야에 널리 쓰여온 것이지요. 하지만, 앞서 제시한 예시처럼, 이 가설은 우리가 결국 넘어서야 할 가설입니다. 단어의 순서, 위치에 따라서도 의미가 크게 달라지는 인간 언어의 본질 때문이죠. 


토픽 모델링에서도 BoW 가설의 한계를 넘어서고자 하는 시도가 있었습니다. 이번 포스팅에서는 다음 두 자료를 바탕으로 단어의 순서를 고려하는 모형에 대해서 살펴보도록 하겠습니다.

  • Wallach, H. M. (2006, June). Topic modeling: beyond bag-of-words. In Proceedings of the 23rd international conference on Machine learning (pp. 977-984). ACM.
  • Wang, X., McCallum, A., & Wei, X. (2007, October). Topical n-grams: Phrase and topic discovery, with an application to information retrieval. In Data Mining, 2007. ICDM 2007. Seventh IEEE International Conference on (pp. 697-702). IEEE.


N-gram Language Model

다른 게시글에서도 몇번 설명했지만, n-gram은 연속한 n개의 단어를 하나의 분석 단위로 두고 분석하는 개념이라고 이해하시면 쉽습니다. Bigram은 2-gram과 동의어로 연속한 두 단어를 한 단위로 보고 분석하는 개념이겠죠. Bigram은 예를 들어 다음과 같은 단어열이 있을때
They love each other.
이를 ^_They, They_love, love_each, each_other, other_$ 와 같이 두 단어씩 묶어서 분석을 실시하는 것이죠. 이렇게 두 단어가 한 분석 단위로 묶이면, 단어 단위로 분석했을때 보다 더 많은 맥락적 정보를 얻을 수 있죠.

근데 단어의 순서를 고려하기 위해서 애초에 LDA를 수행할 때 문헌의 단어들 대신에 N-gram으로 묶은 단어를 넣어서 분석하면 되지 않을까요? 되면 참 좋겠지만... 이럴 경우 어휘의 개수가 기하급수적으로 증가합니다. V개의 서로 다른 단어가 들어있는 문헌 집합을 n-gram으로 묶으면 최대 V^N개의 서로 다른 n-gram 단위가 생기겠죠. 이걸 그대로 분석에 사용하면, 문헌-용어 행렬이 희소(sparse)해지고 그 결과 통계적 성질을 기반으로 한 토픽 모형은 잘 들어맞지 않게 마련입니다. 이를 해결하기 위해서는 문헌-용어 행렬이 희소해진만큼 더 많은 문헌을 모아서 분석하는 수 밖에 없는데, 현실적으로 어렵죠... 그래서 단순히 N-gram으로 묶은 단위를 LDA에 입력으로 주는 방법은 분석에 현실성이 없습니다.


그 대신 n-gram을 언어 모형(language model)의 관점에서 살펴봅시다. 언어 모형은 쉽게 설명하자면, 특정 단어의 나열(곧, 문장이 되겠죠)이 어떤 확률적 과정으로 등장하게 되는지를 설계하는 모형입니다. 위에서 예를 들었던 They love each other. 라는 문장이 등장할 확률을 단순하게 계산해봅시다. 먼저 각 단어들이 완전히 독립적으로 출현한다고 가정하면, 전체 단어열이 등장할 확률은 각 단어가 등장할 확률을 곱한 값이 됩니다.

P(they love each other) = P(they) * P(love) * P(each) * P(other)
(그리고 각 단어가 등장할 확률은 전체 코퍼스에서 해당 단어가 등장하는 횟수로 계산할 수 있겠죠.)
만약 이 확률값이 높다면 해당 문장은 확률적으로 그럴싸한 문장이라고 생각할 수 있겠죠. 확률값이 낮다면 굉장히 이상하거나 잘 안 쓰이는 문장이라고 볼 수 있겠구요. 이렇게 언어 모형은 특정 문장이 얼마나 그럴싸한 문장인지를 확률적으로 계산해 줄 수 있습니다. 그런데 위 문장의 확률은 아래 문장의 확률과 정확하게 같습니다.

P(they love other each) = P(they) * P(love) * P(other) * P(each)
하지만 이 문장은 전혀 그럴듯하지 않거든요. (other each라는 표현은 아무도 안 쓸테니까요) 이 문장의 확률이나 앞의 문장의 확률이나 같다니 이상합니다. 이는 모든 단어가 독립이라고 가정했기 때문입니다. 이렇게 모든 단어가 독립이라고 가정하는 모형은 unigram(1-gram) 언어 모형이라고 볼 수 있습니다. 분석의 단위가 1단어였으니까요. 

우리는 이 문제를 해결하기 위해 뒤에 나오는 단어는 바로 직전의 단어에 영향을 받는다고 모형을 정교화할 수 있습니다. 이 경우 한 단어의 등장 확률은 바로 앞의 단어가 등장했을때 해당 단어가 등장할 확률, 즉 조건부 확률이 되게 됩니다. 이 경우 They love each other의 확률은 다음과 같겠죠.

P(they love each other) = P(they | ^) * P(love | they) * P(each | love) * P(other | each) * P($ | other)
P(they love other each) = P(they | ^) * P(love | they) * P(other | love) * P(each | other) * P($ | each)
(여기서 ^는 문장의 시작, $은 문장의 끝을 가리킵니다. 즉 P(they | ^)는 문장이 they로 시작될 확률, P($ | other)는 문장이 other로 끝날 확률이라는 뜻이에요)
이 조건부 확률은 조건부 확률의 정의에 따라 (두 단어가 연속으로 등장한 횟수) / (앞 단어가 등장한 횟수)로 계산할 수 있습니다. 이 경우는 두 단어를 분석의 단위로 두었으니 bigram이라고 볼 수 있겠죠. 즉 이 모형은 bigram 언어 모형입니다.
마찬가지로 trigram(3-gram) 이상의 언어모형도 생각해볼 수 있겠죠. 여기서는 더 이상 설명하도록 하지 않겠습니다.

n-gram 언어 모형은 n의 값에 따라 서로 다른 모형일것 같지만, 사실은 깊이 연관되어 있습니다. 최초에 어떤 단어도 관찰되지 않았을 경우에 등장하는 단어의 분포는 unigram 언어 모형을 따르겠죠. 하지만 여기서 특정 단어가 관찰된 경우 그 다음에 오는 단어의 분포는 bigram 언어 모형을 따릅니다. 즉 "단어의 관찰"이라는 사건이 unigram -> bigram으로 확률 분포를 바꾼 것이죠. 즉, 어떻게 보면 n-gram 언어 모형은 단어의 관찰에 따라 다음에 등장할 단어의 확률 분포가 어떻게 정교해지는지를 다루는 모형이라고 볼 수 있습니다. 이 언어모형에 대한 자세한 것은 Hierarchical Dirichlet Language Model을 참조하시길 바랍니다.


Bigram Topic Model

Bigram Topic Model은 2006년 Wallach, Hanna M.가 제안한 모형입니다. 그는 Bigram에 따라 문헌을 생성할 수 있도록 LDA를 확장했습니다. 기존의 LDA는 Unigram에 따라 문헌에 들어가는 단어를 생성했죠. 이 말은 즉, 주제별 어휘분포가 unigram이었다는 말입니다. (바로 이전 단어에 전혀 영향을 받지 않음.) Wallach는 주제별 어휘분포가 바로 이전 단어에 영향을 받을 수 있도록 다음과 같이 모형을 업그레이드했습니다.

LDA의 모형과 많이 달라보인다면, 그건 가운데의 단어별 반복 박스가 풀어써져있기 때문일겁니다. 사실 오른쪽의 주제별 어휘분포 φ가 주제*어휘별 어휘분포로 바뀌고, 이전 단어가 다음 단어에 영향을 주도록 바뀐것만 빼면 LDA와 같은 모형입니다.


이 모형의 문헌 생성과정은 다음과 같습니다.

  1. Dir(α)로부터 문헌별 주제 분포인 θ를 뽑는다
  2. 단어마다,
    먼저 θ로부터 단어의 주제인 z를 뽑는다.
    그리고 주제 z와 직전의 어휘 w_에 해당하는 주제*어휘별 어휘분포 φ에서 다음 단어 w를 뽑는다.

LDA와 유사하게 깁스샘플링을 실시하여, 모든 문헌의 단어들에게 적절한 주제가 부여된다면, 주제*어휘별 어휘 등장확률도 계산가능하고, bigram 파트는 무시하고, 주제별로 단어의 등장빈도만 따져서 주제별 단어분포도 계산 가능합니다. 이렇게 직전의 단어가 다음 단어의 생성에 관여를 하는 모형이 간단하게 완성되었습니다. 간단한만큼 한계도 명확합니다. 


일단 모든 단어가 직전 단어에 영향을 받는다고 가정했죠. 실제로는 직전의 단어가 구두점이거나 의미없는 불용어였을 수도 있기에, 모든 경우를 bigram으로 처리하는 것은 확실히 이 모형의 한계점입니다.


제가 생각하는 또 다른 한계는, 주제*어휘별 어휘분포 φ가 서로 간에 독립이라는 것입니다. 즉 똑같이 주제1의 어휘 분포이지만, the 뒤에 등장하는 경우의 어휘분포와 you 뒤에 등장하는 어휘분포가 전혀 다를 수 있고, 이를 모형에서 허용하고 있습니다. 이 두 어휘분포가 의미적으로 같은 주제를 나타내는 것이라고 어떻게 단정할 수 있을까요? 제 생각에는 같은 주제에 속한다면, 먼저 주제1의 공통적인 어휘 분포를 디리클레 분포에서 추출하고, 앞에 등장하는 단어에 따라 이 분포가 조금씩 변동될 수 있게 하는 것이 의미적으로는 맞지 않나 싶습니다. (다만 이렇게 하기 위한 수학적 모형 구축이 쉽지가 않다는게...)


Topical N-gram

Wang, Xuerui 등의 연구자들은 앞서 BTM의 한계 중의 하나로 지적된, 모든 단어를 Bigram으로 가정한다는 것을 극복하기 위해 Topical N-gram이라는 모형을 2007년에 제시했습니다. 모형 그림은 굉장히 복잡해보이지만 차근차근 살펴보면 별거 아닙니다.


먼저 파라미터 설명을 간단히 하자면, φ는 주제별 어휘분포(unigram)입니다. σ는 주제*어휘별 어휘분포(bigram)입니다.  X는 이 단어가 앞단어로부터 영향을 받는지, 아니면 독립인지를 결정하는 변수입니다. X = 1이면 bigram으로 이 단어가 앞단어로부터 영향을 받도록 계산하고, X = 0이면 unigram으로 앞 단어로부터 영향을 받지 않습니다.

이 X들은 이전 단어의 주제와 어휘로부터 영향을 받습니다. 이는 ψ라는 베르누이 분포로 표현됩니다.


문헌 생성모형을 살펴보자면

  1. Dir(α)로부터 문헌별 주제 분포인 θ를 뽑는다
  2. 단어마다, 
    먼저 이전 단어의 주제 z_와 어휘 w_에 해당하는 주제*어휘별 베르누이 분포 ψ에서 이번 단어의 bigram 여부인 x를 뽑는다
    θ로부터 이번 단어의 주제인 z를 뽑는다.
    만약 x = 1이면 주제 z와 직전의 어휘 w_에 해당하는 주제*어휘별 어휘분포 σ에서 단어 w를 뽑고,
    x = 0이면 주제 z에 해당하는 주제별 어휘분포 φ에서 단어 w를 뽑는다.

이 모형의 제일 재밌는 부분은 누가 뭐래도 변수 X입니다. X에 따라서 다음 단어가 Bigram 모형에서 뽑힐수도 있고, Unigram 모형에서 뽑힐수도 있거든요! 그렇지만 BTM에서 지적한것과 마찬가지로 이번에도 bigram의 주제*어휘별 어휘분포가 서로 독립이고, 거기에 unigram의 주제별 어휘분포도 이와 또 독립입니다. 개인적으로는 조금 불안불안한 부분입니다만 아직 어떻게 개선하면 좋을지는 잘 모르겠네요.


Wang, Xuerui에 따르면 TNG의 성능은 기존의 LDA나 BTM보다 더 높은 성능을 보였다고 합니다. TREC 정보 검색 부분에 적용한 실험에서는 LDA보다 적게는 5%에서 많게는 100%넘게까지 평균 정확도 향상이 있었고 (물론 몇몇은 더 떨어진 경우도 있었다고 합니다.), 유사한 Bigram 모형인 BTM보다는 약 5% 정도의 성능차이를 내며 BTM을 앞선다고 하네요.


생각해볼거리

Bigram은 N-gram으로 가기위한 첫 걸음입니다. 여기서 제시된 기법들을 그대로 2보다 큰 N-gram에 사용할 수도 있겠지만, 현실적으로 Bigram이 가장 실용적이기에 이에 대한 연구가 진행된 것으로 보입니다. 하지만 한국어에 이것을 적용하는건 어떨까요..? 어순이 자유로운 한국어의 특성상 단순히 바로 앞의 단어가 뒤에 단어에 영향을 준다는 모형은 한국어 문장의 생성과정을 잘 반영할 수 없다고 생각됩니다. 개인적인 생각으로는 Bigram 모형을 어순이 자유로운 한국어에 적용하느니, MG-LDA에서 사용한 문장 단위로 묶어서 분석에 사용하는 기법을 개량하여 적용하는것이 낫지 않을까 합니다. 아직 한국어에 특화된 토픽 모형이 없는 만큼 고민해보면 재미날것 같네요.


관련글 더보기

댓글 영역