상세 컨텐츠

본문 제목

[토픽 모델링] DMR의 하이퍼 파라미터 추정

그냥 공부

by ∫2tdt=t²+c 2017. 10. 3. 13:29

본문

앞서 여러 글에서 밝혔듯이 LDA(Latent Dirichlet Allocation, 잠재 디리클레 할당)은 베이즈 추론을 아주아주 잘 확장해서 특정한 단어들이 한 문헌에 등장할때 문헌 집합 내의 각 단어들이 어떤 주제에 속했는지를 계산하는 생성 모형을 제공해줍니다. (이에 대한 자세한 설명은 [잠재 디리클레 할당 파헤치기] 2. 디리클레 분포와 LDA 게시물을 참조해주세요!) LDA에서는 모든 문헌을 동등하게 취급했는데요, 각각 문헌의 특성을 반영하지 못한다는 한계를 극복하기 위해 2012년 D Mimno는 DMR(Dirichlet Multinomial Regression) 토픽 모델링을 제안했습니다. DMR 토픽 모델링에 대한 개략적인 설명은 [토픽 모델링] 확장된 LDA 기법들 - ATM, DMR 게시물에 잘 나와있지만, 여기에서는 실제로 DMR의 추론 과정을 이해하지 못해서 다 날려먹고 대충대충 적었는데요, 드디어 조금 이해를 할 수 있게된 고로 글을 새로 파서 정리해보았습니다.


LDA의 추론

먼저 LDA의 추론 과정을 다시 살펴볼 필요가 있습니다. W는 단어의 종류(관측 가능합니다), Z는 그 단어가 배정된 주제의 번호입니다. 그래서 최종적으로 우리가 알고 싶은것은 단어들의 벡터인 W가 주어졌을때, 그 단어들에 대응하는 주제들의 벡터인 Z를 구하는 것이지요. 즉 P(Z|W)를 최대화하는 Z를 구하면 되겠습니다. 베이즈 정리를 통해 P(Z|W)는 다음과 같이 계산될 수 있구요,


앞선 글에서 밝혔듯이, 이 중 P(W|Z)는 주제 Z가 주어졌을 때 단어 W가 등장할 확률이므로 주제별 단어분포와 관련된 항이고, P(Z)는 주제가 등장할 확률이므로, 문헌별 주제분포와 관련된 항입니다. 문헌별 주제분포 θ는 하이퍼 파라미터 α를 따르는 디리클레 분포를 따르고, 주제별 단어분포 φ는 하이퍼 파라미터 β를 따르는 디리클레 분포를 따르죠. 따라서 다음과 같이 쓸수 있습니다.


이 식은 디리클레 다항분포로 잘 알려진 식입니다. 구체적인 전개는 수학자들에게 맡기고 이 디리클레 다항분포는 적분을 풀어내면 다음과 같이 전개될 수 있음이 익히 알려져 있다고 합니다. (... 전 모름. 자세한 건 수학 전공자들한테 물어보세요... )


(근데 이렇게 전개하기에 앞서...) LDA에서는 각각의 문헌이 모두 독립이라고 가정했으므로 먼저 문헌별로 위 식을 분리하는게 계산이 더 편리해질겁니다. 그래서 다음과 같이

먼저 문헌별로 분리해준다음, 디리클레 다항분포를 전개하면 다음과 같이 되겠죠.


일단 계산의 편의를 위해 디리클레 분포 θ가 대칭적이라고 가정을 합시다. (즉 α_1 = α_2 = ... = α_k인거죠). 주제 갯수가 K개이니깐


처럼 정리될 수 있습니다. 마지막으로 문헌에 독립적인 Γ(Kα)나 Γ(α)를 밖으로 빼면

위와 같이 정리가 되었습니다. 짜잔...!!

P(W|Z)도 같은 방법으로 정리할 수 있습니다. 아래처럼 되겠죠.

z_k는 해당 문헌에서 주제 k에 배정된 단어의 갯수, w_m은 해당 주제에서 단어 m의 등장 횟수입니다. 표현이 헷갈리니 좀 명확하게 z_k는 , w_m은 라고 쓸게요. (윗 첨자의 DT(Document-Topic), WT(Word-Topic)가 아래 첨자의 의미를 설명해줍니다.)


분모 P(W)는 Z와 독립인 항이므로 무시해도 됩니다. 즉 P(Z|W) ∝ P(W|Z) P(Z) 이므로 위의 두 식을 곱해주면 최종적은 LDA 공식이 완성되겠죠.



DMR의 추론

DMR에서는 문헌의 메타데이터에 따라 주제 분포의 하이퍼 파라미터 α가 달라질 수 있습니다. 메타데이터별로 주제 분포가 어떻게 달라지는지는 λ가 결정합니다. 그리고 λ는 다변량 정규분포를 따르구요. 즉


입니다.  그리고 λ에서 α가 나오는데 다음과 같이 계산되지요.


문헌 d, 주제 k의 하이퍼 파라미터는 α_dk입니다. 


기본적은 모델은 LDA와 같으므로 같은 방식으로 식을 전개해나가면 되는데요, P(W|Z)는 α와는 독립된 부분이므로 LDA와 같은 모양을 유지할 것이라고 쉽게 생각할 수 있겠죠. 반면 P(Z)는 α와 관련된 부분이기에 식의 모양이 조금 바뀔겁니다. α가 대칭적이지 않으므로 그 부분이 바뀔겁니다. 


대략 이런 모양이겠죠.

그리고 λ 분포에 따른 확률 P(λ)는 다음과 같이 나오겠구요

(정규분포를 따르니깐 정규분포 공식대로...)


따라서 최종적인 식은 다음과 같이 되겠죠


λ값을 찾아보자

위 식을 그대로 계산하기에는 정말 어렵습니다. 깁스샘플링을 통해 λ를 구하기도 어렵구요. 그래서 임의의 λ값을 부여한뒤 깁스샘플링을 진행하고, 해당 분포에서 가장 적합한 λ를 찾고, 다시 깁스샘플링을 진행하고 또 λ를 찾는 식으로 반복하면서 최적의 λ값을 찾습니다. 최적의 λ값이란 위 식을 최대로하는 λ값이겠죠. 위 식을 그냥 계산하기는 어려우므로 위 식에 로그를 취해서 아래처럼 바꾸도록 하겠습니다.


위 식을 λ에 대한 함수로 볼수 있겠죠. f(λ)라고 쓰도록 하겠습니다. 로그는 단조증가하기 때문에 위 식에서 최대를 가지는 λ는 원래 식에서도 최대를 가질 겁니다. 로그를 취한 덕분에 곱셈이 덧셈으로 바뀌어 계산하기도 한결 편해졌죠. 그리고 어차피 λ와 관련 없는 항은 상수항으로 볼수있으므로 모두 C로 퉁쳐서 더 간단하게 쓸수도 있구요.


이 f(λ)를 최대화하는 벡터 λ값을 찾는게 우리의 목표입니다. 최적화를 위해서 위 함수의 그라디언트 ▽f(λ)를 구해봅시다. 미분에 앞서 

였다는 것을 기억해보면, α나 λ가 없는 항은 상수항이라고 할 수 있으므로, 미분 시 다 사라질거라는 걸 간단하게 알 수 있습니다.

따라서 그라디언트는

로 쓸수 있습니다. (이때 ψ는 디감마함수(Digamma function)로 log Γ 함수의 도함수입니다. )


자 이제 f와 f의 그라디언트를 알고있으므로 BFGS와 같은 알고리즘을 사용해서 최대값을 구할 수 있습니다. (보통 BFGS 알고리즘은 최소값을 찾도록 짜여있으므로 실제 알고리즘에 적용할때는 최종 값에 마이너스를 붙이면 됩니다.)


잡생각

메타데이터로부터 α값을 구할때 처럼 내적을 구하는데 이때 보통 x_d로는 one-hot encoding된 벡터가 들어갑니다. ( (1, 0, 0)이나 (0, 1, 0)이나 (0, 0, 1) 등이 들어가는거지요) 그래서 각각의 메타데이터는 서로 독립을 유지하면서 이산적인 α값을 산출하게 되죠. 그런데 시간정보처럼 연속적인 값이 필요할 경우는 one-hot 인코딩 대신에 (1, 0, 0), (0.8, 0.2, 0), (0.76, 0.24, 0) 처럼 둘 이상의 λ값을 선형보간해서 넣어도 되지 않을까요? 이렇게 할 경우 연속성을 확보해서 부드러운 주제분포 변화를 얻을 수 있고, one-hot 인코딩으로는 시간 범위를 잘게 쪼갤 수 없다는 한계도 극복할 수 있을것 같아요! (과연 그렇게 될지는 한번 코딩을 해서 실험해봐야할것같긴합니다만...)

참고

http://www.4four.us/article/2014/10/lda-parameter-estimation

Griffiths, T. L., & Steyvers, M. (2004). Finding scientific topics. Proceedings of the National academy of Sciences101(suppl 1), 5228-5235.

Mimno, D., & McCallum, A. (2012). Topic models conditioned on arbitrary features with dirichlet-multinomial regression. arXiv preprint arXiv:1206.3278.

https://github.com/mpkato/dmr (파이썬으로 짜여진 LDA, DMR 코드인데, 수식을 이해하는데 큰 도움을 주었습니다.)

관련글 더보기

댓글 영역