상세 컨텐츠

본문 제목

[토픽 모델링] Generalized DMR 토픽 모델

그냥 공부

by 적분 ∫2tdt=t²+c 2020. 6. 6. 16:31

본문

Dirichlet Multinomial Regression(DMR)이라는 토픽 모델이 있습니다. 예전 포스팅에서 간단하게 다뤘던 적이 있는데요, 간단하게 정리해보자면, 단순 LDA 모델의 경우 문헌별 주제 분포만을 살펴볼 수 있는 반면, DMR은 메타데이터별 주제 분포를 추정할 수 있는 강점이 있습니다. 여기서 메타데이터는 문헌이 가지는 실제 데이터를 제외한 부가적인 변수들을 가리킨다고 생각하시면 쉽습니다. 예를 들어 저자명이나 저널명, 작성 연도 같은 데이터가 있겠습니다. 즉, DMR을 이용하면 작성자별 주제분포나 작성 연도별 주제 분포 등을 계산하는게 가능해진다는 것이지요. 단순하게 문헌별 주제분포를 추정하는것보다 훨씬 유용하게 쓰일 수 있을 것이라고 짐작이 가지요?

그런데 DMR 모델에는 치명적인 약점이 하나 있습니다. 모델이 가질 수 있는 메타데이터 변수가 범주형(categorical variable)으로 한정된다는 것입니다. 범주형 변수는 값들 간의 순서도 없고 연속성도 없는 변수를 말합니다. 예를 들어 책의 장르이라는 변수는 '소설', '수필', '비문학' 등의 값을 가질 수 있지만, 각 값들 사이에는 어떠한 순서도 없고 서로 연산도 불가능합니다. 그리고 소설과 수필 사이의 어딘가를 나타내는 값을 찾을 수도 없지요. 즉 각각의 값들이 서로 완전 독립적인 범주인 경우라고 할 수 있습니다. 저자명이나 저널명, 주제 분야 등은 범주형 변수로 충분히 표현할 수 있는 메타데이터입니다. 반면 피인용수나 출판연도 같은 데이터는 순서가 있고 연속성이 있는 연속형 메타데이터이지요. 따라서 DMR 모델에서는 이런 메타데이터를 기준으로 주제 분포를 계산해내는 것이 불가능하고, 이는 이 모델의 약점 중 하나입니다.

이를 개선한 것이 Generalized DMR(g-DMR) 모델인데요, 본 포스팅에서는 이에 대해 간단하게 살펴보도록 하겠습니다. 

Lee, M., & Song, M. (2020). Incorporating citation impact into analysis of research trends. Scientometrics, 1-34.

DMR은 어떻게 메타데이터와 주제 분포를 연결했나

g-DMR의 원리를 살펴보기에 앞서 DMR의 원리를 살펴봅시다. 과연 DMR에서는 어떻게 메타데이터와 주제 분포를 연결하여 모델을 설계했을까요?

$\lambda_t ~ \sim ~ N(0, \sigma^2)$

$\alpha_{d,t} = \exp( \lambda_t \cdot x_d )$

$\theta_d ~ \sim ~ Dir(\alpha_d)$

위 식은 특정 문헌 d에 대해 문헌의 주제분포 $\theta_d$가 어떻게 산출되는지를 표현하고 있습니다. 여기서 $x_d$는 문헌의 메타데이터를 나타내는 변수입니다. 이 변수는 소위 말하는 One-hot으로 인코딩되어 입력됩니다. 즉, 메타데이터가 총 {소설, 수필, 비문학} 3가지 중 1개의 값을 가질 수 있다면, '소설'인 경우는 $[1, 0, 0]$, '수필'인 경우는 $[0, 1, 0]$, '비문학'인 경우는 $[0, 0, 1]$처럼 벡터로 표현하는 것입니다. N개의 성분 중에서 오직 1개만 1이되고 나머지는 다 0이 되며, 1인 성분의 위치에 따라 어떤 범주를 가리키는지 나타내는 것이죠.

$\lambda$는 메타데이터별 주제 분포를 결정하는 파라미터입니다. 이 값은 기본적으로 평균이 0, 표준편차가 $\sigma$인 분포에서 뽑아옵니다. $\lambda_t$는 주제 t에 대한 메타데이터 정보를 표현하는 벡터지요. 이 값은 문헌 d의 메타데이터인 $x_d$와 내적하여 $\alpha$를 결정하는 데에 쓰입니다.

예를 들어 $\lambda_t = [1, 2, 3]$이고 $x_d = [0, 0, 1]$이라면 $\lambda_t \cdot x_d = 3$이 됩니다. $\lambda_t \cdot x_d$값은 동일한 문헌 d에 대해서도 주제 t가 바뀌면 그 값이 달라집니다. 따라서 $\alpha_{d,t}$도 t값에 따라서 달라지겠지요. 이 $\alpha$값은 최종적으로 문헌 d의 주제분포인 $\theta_d$를 결정하는 사전 분포가 됩니다.  즉, $\alpha_d$의 값이 특정 주제 t1에 대해서 크고, t2에 대해서는 작다면 그 문헌은 기본적으로 t1 주제를 가질 확률이 t2 주제를 가질 확률보다 높게 책정되는 식이죠. 이렇게 $x_d$를 $\lambda_t$중 실제로 \exp에 들어갈 값을 고르는데 씀으로써 문헌d의 메타데이터가 주제 분포 $\theta_d$와 연결되게 하였습니다. 나쁘지 않은 방법이지요?

단, 여기서 $x_d$를 one-hot 인코딩된 벡터로 제한했기 때문에, 입력할 수 있는 메타데이터가 범주형으로 제한된 셈입니다. 이 제한을 풀면 연속형 데이터를 모델에 입력할 수 있습니다.

g-DMR의 아이디어

그래서 g-DMR에서는 위 식을 일반화하여 TDF(Topic Distribution Function, 주제 분포 함수)이라는 걸 제안했습니다.

$\alpha_{d,t} = \exp( f_t(x_d) )$

$\theta_d ~ \sim ~ Dir(\alpha_d)$

잘 보시면 exp 안에 f라는 함수가 들어가 있습니다. 이것이 TDF가 되구요, TDF를 상황에 따라 바꿔가면서 사용함으로써 다양한 메타데이터에 대응하겠다는게 g-DMR의 기본 요지입니다. 메타데이터가 범주형이라면 DMR에서처럼 $f_t(x_d) = \lambda_t \cdot x_d$로 두면 되겠습니다. 연속형이라면 어떻게 하면 좋을까요? 우리는 입력값 $x_d$에 따른 출력값이 어떤 모양이 될지 알 수 없습니다. 그렇다고 마음대로 $f(x) = ax + b$처럼 정할 수도 없습니다. 주제 분포의 모양을 특정 함수의 형태로 결정해버리면 입력데이터에 맞지 않는 주제 분포를 가정하게 되어버려 잘못된 모델을 산출할 수 있으니깐요.

즉, 최대한 다양한 모양을 나타낼 수 있는 범용적인 함수를 선택해야 입력데이터에 맞춰 유연하게 결과값을 계산해낼 수가 있습니다. 이럴때 수학자(및 공학자)들이 사용하는 방법을 찾아보니, 다항식 근사(Polynomial Approximation)라는게 있다고 합니다. 임의의 함수 f(x)를 차수가 충분히 큰 n차 다항식이라고 가정하고 n+1 개의 계수들을 최대한 정밀하게 추정하여 원본과의 오차가 최소가 되게하는 방법입니다. 

그 중에서도 유용한게 르장드르 다항식 근사(Legendre Polynomial Approximation)입니다. $f(x) \approx \sum_n a_n L_n(x)$ ($L_n(x)$는 르장드르 n차 다항식)로 가정하면 $-1 \le x \le 1$ 범위에서 $f(x)$를 아주 작은 오차로 근사할 수 있다고 합니다. 다음 그림은 르장드르 다항식으로 임의의 곡선을 근사할 때의 오차를 나타낸 그림입니다. 진한 검정선이 원본 함수이고 빨간 점선이 근사 결과인데, Legendre Polynomial의 결과가 원본과 거의 동일하다는 걸 알 수 있습니다.

(그림 출처: https://www.semanticscholar.org/paper/A-polynomial-approximation-for-arbitrary-functions-Cohen-Tan/f13c6ff1c5290a13f44393a69d95c76065118aa7)

갑자기 복잡한 수학 이야기가 나왔는데 정리해보자면, 정확한 모양을 예상할 수 없는 주제 분포 함수 $f_t(x_d)$를 르장드르 다항식이라 가정하면 작은 오차로 원본 모양을 잘 근사할 수 있다는 것입니다. 따라서 연속형 메타데이터에 대해서는 주제 분포 함수를 다음과 같이 설정하도록 하겠습니다.

$f_t(x_d) = \sum_n \lambda_{t,n} L_n(x_d)$

여기서 르장드르 다항식의 근사 차수를 설정하는게 중요합니다. 차수를 무한히 키우면 실제 원본 모양과 완전히 동일한 함수가 되겠지만 그러려면 무한한 연산력이 필요하겠죠. 따라서 적당히 큰 수를 설정하여 계산량이 너무 많아지지 않으면서도 표현할 수 있는 모양이 단순해지지 않도록 해야겠습니다.

또한 르장드르 다항식을 사용하면 입력 변수가 2개 이상인 경우에도 대응하기 용이하다는 장점도 있습니다. 변수가 2개인 경우에는 다음과 같은 주제 분포 함수를 사용하면 됩니다.

$f_t(x_d, y_d) = \sum_{n,m} \lambda_{t,n,m} L_n(x_d) L_m(y_d)$

이 경우에는 변수 x를 근사하는 차수와 y를 근사하는 차수를 모두 결정해줘야 합니다. 2개 이상으로도 쉽게 확장이 가능합니다.

g-DMR로는 어떤 결과를 얻을 수 있을까

g-DMR을 소개한 논문에서는 2변수 르장드르 다항식 근사를 사용하여 연속형 메타데이터가 2개인 경우의 토픽 모델링 결과를 보여주었습니다. x축으로는 논문의 작성연도, y축으로는 논문의 피인용수를 사용했습니다. 즉, 작성연도와 피인용수에 따른 주제분포의 변화를 살펴볼 수 있게 한 것이지요. 따라서 특정 연도에 인용이 많이된 주제, 특정 연도에 인용이 적게된 주제 등을 파악하는데에 유용하게 사용할 수 있겠습니다.

저자들은 텍스트 마이닝 분야의 논문들과 문헌정보학 주제의 논문들에 대해서 분석을 수행했다고 합니다. 피인용수의 경우 작성 연도에 따른 편차가 큰 편이기 때문에(오래된 논문일 수록 피인용수가 높은 경향이 있겠지요?) 피인용수를 그대로 사용하지 않고, 동일한 시기에 작성된 논문들과 비교하여 피인용수의 퍼센트 랭킹을 사용했다고 합니다. 즉, 동일한 시기에 작성된 논문들 중 피인용수 상위 10%에 들 경우 0.9, 상위 50%에 들 경우 0.5, 상위 90%에 들 경우 0.1을 부여하는 식으로요.

그래서 g-DMR에서 어떤 결과가 나왔는지 한 번 살펴볼까요? 다음은 텍스트 마이닝 분야 논문에 대해서 수행된 결과입니다. DMR은 LDA와는 다르게 주제별 단어분포에 추가적으로 범주형 메타데이터별 주제 분포도 계산할 수 있습니다. g-DMR에서는 단순히 범주형 메타데이터별 주제분포가 아니라 2개 이상의 연속형 메타데이터별 주제분포도 계산할 수 있습니다. 여기에서는 작성연도와 피인용수를 메타데이터로 사용했으니, x축에는 작성연도, y축에는 피인용수를 표현하여 지도를 그려보았습니다. X축의 르장드르 근사차수는 4차, Y축의 르장드르 근사차수는 3차로 하였다고 합니다.

먼저 sentiment analysis와 관련된 주제입니다. #22는 주제 번호구요, 그 아래의 단어는 해당 주제의 단어 분포의 top 5를 표시한 것입니다. X축은 작성연도이고, Y축은 상대적 피인용수로써 1이면 인용이 가장 많이 된 것이고, 0이면 인용이 가장 적게 된 것입니다. 붉은 부분이 해당 주제의 문헌들이 많이 모여있는, 비중이 높은 곳인데 주로 2015년 이후에 몰려 있는걸 확인할 수 있습니다. 그리고 이 부분은 평균보다 더 많이 인용되고 있네요. sentiment analysis는 인용도 많이 받고 최근 연구가 많이 수행되고 있는 텍스트 마이닝 분야의 최신 핫 토픽이라고 볼 수 있겠습니다.


이 주제는 상위 단어가 pattern, rule, association인걸로보아 패턴이나 룰 기반의 알고리즘에 대한 것 같습니다. 2000년대 초반에 주로 몰려있고, 피인용수 기준으로는 중하위권에 몰려 있네요. 상대적으로 한 물간 주제에 인용도 비교적 적게되는 비인기 분야라고 볼 수 있겠습니다.


이 주제는 SNS와 관련된 주제로 보이는데요, 2010년대 이후로 굉장히 빨간 빛을 보이고 있습니다. 즉, 2010년 이후부터 텍스트 마이닝 분야의 연구주제로 급부상했고, 인용수는 굉장히 고르게 퍼져있습니다. 인용을 많이 받기도 하고 적게 받기도 한다, 즉 SNS 관련 주제라고 다 인용을 많이 받는게 아니라는 걸 알 수 있지요. 대부분 피인용 상위권에 모여있던 sentiment analysis와는 사뭇 다르죠. 즉, SNS는 인용을 많이 받는 주제라기보다는 다들 관심을 가지고 논문을 많이 써내는, 일종의 유행과 가까운 주제라고 볼 수 있겠습니다.

본 포스팅에 포함된 결과들은 https://github.com/bab2min/g-dmr 에서 재현해볼 수 있습니다. (레포지토리의 run_using_tomotopy.py 코드를 실행하면 됩니다.) 친절하게도 저자분이 실험에 사용한 소스코드와 데이터를 공개했기 때문에 위 레포지토리에서 데이터와 코드를 받아서 실행만 하면 됩니다. 

g-DMR의 한계와 가능성

르장드르 다항식 근사를 사용하는 g-DMR은 결국 르장드르 근사의 차수를 결정하는게 전체 분석 결과를 좌지우지하는 제일 중요한 문제가 됩니다. 이론상 차수가 높을수록 정밀한 근사가 되지만, 현실은 차수가 높아지는 만큼 학습해야할 변수가 늘어나기 때문에 왜곡이 발생할 가능성도 커지죠. 그리고 우리의 목표는 노이즈한 입력 데이터를 그대로 근사하는게 아니라, 그 속에서 전체적인 경향성을 발견하는 것이기 때문에 꼭 높은 차수가 유용한 것도 아닙니다. 차수까지 스스로 결정할 수 있는 근사 모형이 있다면 완벽하겠지만, 아직까지는 뾰족한 방법이 없습니다.

따라서 g-DMR 분석을 수행할때는 토픽의 개수, 각 메타데이터별 르장드르 근사 차수를 잘 선택해야 합니다. 선택지가 많아진다는 것은 결국 수행해봐야하는 실험의 종류가 늘어난다는 것이기 때문에 마냥 반길 일이 아니죠. 이게 g-DMR이 가지는 근본적인 한계라고 할 수 있습니다.

이런 한계를 감안하더라도 g-DMR 모델 자체는 충분히 유용한 걸로 보입니다. 위와 같이 출판연도와 피인용수를 가지고 주제 분포를 추정하는 작업은 물론, 다양한 메타데이터가 붙은 문헌을 분석하는데에 유용할 것으로 보입니다. 예를 들어 텍스트와 함께 각 항목별로(맛, 서비스, 교통 등) 점수를 매겨놓은 음식점 리뷰 데이터를 분석한다던지, 좋아요/싫어요/화나요 개수가 달린 페이스북 글의 주제를 분석하는 작업 등에 쓰일 수 있겠습니다.

P.S.

만약 주제 분포 함수로 르장드르 근사 대신 신경망을 사용하면 어떨까요? 르장드르 근사 자체의 한계가 명확한지라 이를 극복하기가 쉽지 않은데, 신경망을 적당히 끼워넣고 잘 학습시키면 그 자체로 충분히 다양한 모양의 함수를 근사할 수 있으니깐요. 아마 여기서 소개한 g-DMR보다 더 정교한 근사가 가능한 모델이 나오지 않을까 싶습니다. (사실 토픽 모델링 자체가 워낙 클래식한 베이즈 통계 기반 모델이라 딥러닝이 대세인 요즘 트렌드와는 잘 안 맞죠... 주제 분포 함수로 신경망을 쓰느니 그냥 신경망 기반 토픽 모델링을 쓰는게 더 나을지도 모릅니다.)

사실 논문의 저자는 저입니다. 2018년에 DMR 토픽 모델링을 공부하면서 떠올렸던 아이디어를 가지고 대충 실험을 진행해서 논문을 써봤는데, 여러 번 탈락하면서 구천을 떠돌다가 2020년이 되어서 간신히 자기 자리를 찾았네요. 열심히 새 모델을 개발해보았지만, 사실 이 모델이 그렇게까지 범용적이지 않아서 "왜 굳이 이 방법을 사용하여 문헌 집합을 분석해야하는가"라는 근본적인 주제에 막혀 여러 번 좌절하다가, 가까스로 그 쓸모를 인정받았습니다. 유용하게, 또 편하게 널리 쓰였으면 하는 마음에 레포지토리를 파서 소스 코드도 공개하고 또한 tomotopy에 GDMRModel이라는 이름으로 모델도 추가하였습니다. 토픽 모델링을 이용해 학술 문헌의 트렌드를 분석하시려는 분들에게 도움이 되길 바랍니다. 감사합니다!

관련글 더보기

댓글 영역

  • 프로필 사진
    2020.06.10 10:10
    비밀댓글입니다
    • 프로필 사진
      2020.06.10 14:30 신고
      넵 좋아요가 많은 게시물들의 주제, 혹은 싫어요가 많은 게시물들의 주제 등을 분석해볼 수 있을 듯합니다. (데이터를 수집하는 과정이 까다롭겠지만요)
  • 프로필 사진
    2020.08.01 12:29
    안녕하세요 또 질문드리네요. 위 모델은 STM(구조적 토픽모델)에서 지원하는 연속변수와 어떤 차이가 있을까요? STM에서는 로지스틱 모델을 가정하더군요.
    ------
    아 이미 논문에 STM과의 비교를 적어두셨군요. STM은 선형모델을 가정하는 단점이 있다는 것.
    아 선생님께 뭐라도 후원을 드리고싶은 마음입니다.
    • 프로필 사진
      2020.08.01 12:33 신고
      네 정리해주신대로입니다. 다만 논문에서는 차별점을 강조하기 위해 그렇게 적었지만, 선형 모델을 가정하는게 꼭 한계가 되는건 아닙니다. 오히려 선형모델이기 때문에 연구자들이 결과를 해석하기가 용이한 경우도 많거든요. 일방적인 장점/단점보다는 둘이 목표로하는 부분이 다르다고 해석하시면 되겠습니다.
  • 프로필 사진
    2020.08.01 13:01
    답변 감사합니다. 선생님. GDMR을 제 박사논문에 적극적으로 한번 써보려합니다. 궁금한 것이 GDMR에 명목과 연속변수를 섞어서 쓸수는 없나요? 위 포스팅에서는 명목변수도 쓸수 있는걸로 서술하신거 같은데 tomotopy를 살펴보니 연속데이터만 넣더군요. 'add_doc' 함수에 그냥 명목변수를 넣어버리면(예컨대 2진분류 값으로 0과 1) 될까요?
    • 프로필 사진
      2020.08.01 17:22 신고
      앗, 명목 변수를 사용하는식으로 TDF를 확장할 수 있다는 의도에서 명목변수도 사용가능하다고 서술한건데요, 현재 패키지에서는 아직 여러 타입 변수를 섞어 쓸 수 있도록 구현이 되어있지는 않아서 연속 변수들만 받을 수 있어요..ㅎㅎ
      추후 업데이트로 여러 타입의 변수들을 받을수 있게 하도록 하겠습니다.
  • 프로필 사진
    2020.08.01 18:50
    답변 감사합니다! 아까 혼자 해보니 명목 변수는 역시 안되던데 이유가 있었군요. 지금으로도 매우 매우 좋습니다. 명목 변수까지 동시에 된다면야 더 좋겠네요. 늘 감사합니다. 논문 잘 읽고 있습니다.
  • 프로필 사진
    2020.09.03 16:02
    안녕하세요, tomotopy 정말 잘 사용하고 있습니다. 여러가지 클래스가 있어서 참으로 유용하네요 :D
    tomotopy의 GDMRModel 클래스에 관련해 여쭤보고 싶은 게 있어서 글을 남깁니다.
    저는 출간일에 따른 토픽 비중 변화를 보려고 하는데요. 그래서 한 종류의 메타데이터만 사용하고 있습니다.
    여기서 tdf_linspace의 반환값을 어떻게 이해하면 될까요?

    GitHub 코드를 보고 이해한 건 "[metadata_start, metadata_stop]의 범위에서 등간격으로 num만큼의 문서를 생성하고, 각 문서의 토픽 분포를 나타낸 리스트이다"고 해석했는데, 맞게 해석한 건가요?
    즉, 예를 들어 메타데이터 범위를 metadata_start=1891, metadata_stop=1900로 지정하고 num을 10으로 넣어준다면 r[0]은 91년 작성 문서의 토픽 분포, r[1]는 92년의 토픽 분포...로 볼 수 있을까요?

    감사합니다 :)
    • 프로필 사진
      2020.09.03 19:14 신고
      네 맞습니다. tdf_linspace([1891], [1900], [100])과 같은식으로 호출하시면 됩니다.
      혹은 그냥 tdf를 쓰셔도 되구요.

      for year in range(1891, 1901):
      print(mdl.tdf([year]))

      속도는 tdf_linspace가 좀 더 빠르겠지만, 사용하시기에는 tdf가 더 용이하므로, 마음에 드시는쪽으로 사용하시면 되겠습니다.
  • 프로필 사진
    2020.09.26 15:47
    비밀댓글입니다
    • 프로필 사진
      2020.09.27 16:44 신고
      1. 네 가능합니다.
      다만 DMR의 경우 각 시간 범주의 순서를 고려하지 않고 독립된 범주로만 가정하게 됩니다. 연구에 따라 이걸 가정해야하는 경우도 있을겁니다. 이 경우에는 DMR을 사용해도 무방하지요. 반면 각 시간 범주의 순서나 연속성을 고려해야하는 경우라면 DMR을 사용하면 잘못된 결과를 도출할 수 있습니다.

      2. 이것 역시 분석의 목표에 따라 달라집니다. 결국 데이터를 둘로 나누어 각각의 모델을 만들건지, 데이터를 하나로 합쳐서 한번의 모델을 만들건지의 차이거든요.
      하나의 모델을 만든다는 것은 전체 데이터를 하나의 확률 모델을 가지고 설명을 하겠다는겁니다. 즉, 그룹간의 차이와 시간 상의 변화를 한 모델의 변인(DMR에서는 메타데이터가 되겠지요)으로 설명하겠다는 것인데, 말씀하신것처럼 깔끔한 결과가 나오지는 않을 수 있습니다. (그룹, 시간)이라는 메타데이터만으로는 모든 차이를 설명하기 어려울 수 있기 때문이죠.
      반면 각 그룹별로 하나씩, 전체 여러 개의 모델을 만든다는 것은, 하나의 모델로 하나의 그룹만을 설명하겠다는 뜻이 됩니다. 즉, 한 그룹 내의 토픽 변화를 시간이라는 변인을 가지고 설명하겠다는 것이 되며, 이 설명은 다른 그룹의 변화를 설명하는것과는 하등 관계가 없게됩니다. 즉 각각의 그룹별로 토픽 변화를 설명할 수 있지만 (그리고 그 덕에 좀더 깔끔한 결과가 나올수도 있겠지만) 그룹 전체를 아우르는 설명은 시도할 수가 없습니다.
      연구하시는 목표에 따라서 전체 데이터를 설명하는 단일 모델을 사용하실지, 부분 데이터만을 설명하는 복수 모델을 사용하실지 선택하셔야겠습니다.
  • 프로필 사진
    2020.09.28 22:25
    비밀댓글입니다
    • 프로필 사진
      2020.09.29 16:32 신고
      LDA는 문헌별 토픽 분포를 계산할수 있으므로, 말씀하신것처럼 LDA를 이용하면 각 문헌별 토픽 분포를 구한뒤, 특정 메타데이터를 가진 문헌들을 모아서 메타데이터별 토픽 분포를 계산하는게 가능합니다.
      그러나 이는 확률 모델 바깥에서 추가적인 분석으로 이뤄지는것이구요, DMR의 경우 아예 메타데이터에 따라 문헌의 토픽 분포의 사전 분포가 영향을 받을 수 있다고 모델 차원에서 가정을 넣는것이죠.
      따라서 메타데이터가 문헌의 토픽분포에 영향을 미친다는 설계 덕분에 특정 메타데이터가 주어졌을때 임의의 문헌이 어떤 토픽 분포를 가질지 확률적으로계산가능하고, 또 반대로 특정 토픽 분포가 주어져있는 경우 어떤 그 문헌이 가질만한 메타데이터가 무엇인지를 확률적으로 계산도 가능합니다.
      정리하자면, 메타데이터 <-> 문헌의 토픽 분포 간의 관계를 확률 모델 내에서 명시하는지, 아니면 모델 밖에서 처리하는지의 차이가 있다고 볼 수 있겠습니다.
  • 프로필 사진
    2020.10.11 23:36
    비밀댓글입니다
    • 프로필 사진
      2020.10.16 22:27 신고
      답변이 늦어 죄송합니다.

      1. 시기별로 모델링을 하는 것과 특정 시기 전/후 binary로 나눠 모델링을 하는 것은 결과보다는 의도에 있어 큰 차이가 있어보입니다.

      특정 시기를 전/후로 잘라 모델링을 실시하는 것은 애초에 해당 시점 전에 속하는 문헌들과 후에 속하는 문헌들의 성질이 다르다고 가정하고 분석을 시작하는 셈입니다. 그리고 실제 분석 결과를 통해 이 가정이 적합하였는지를 확인할 수 있겠죠.
      반면 특정 시기를 기점으로 문헌들을 분할하는게 아니라, 시기에 따라 연속적으로(혹은 연속은 아니더라도 촘촘하게 여러 범주로) 나누는 경우는 이런 가정이 들어가지 않습니다. 다만 분석 결과를 시간 순서로 늘어놓았을때 토픽 결과가 달라지는 지점을 발견할수 있을지도 모릅니다.

      해당 시기 전후로 토픽의 질적인 차이가 있는지를 분석하고 싶으신거라면, 저는 후자가 좀더 엄밀한 방법이라고 생각합니다. 전자(특정 시기를 전후로 문헌을 분할하여 넣는 경우)의 경우 모델 가정에서 해당 시기 전/후의 비균질성을 깔아놓고 시작하는 것이기 때문에 당연히 토픽의 차이가 발생하도록 학습이 될 가능성이 높습니다. 따라서 어떤 시점을 기준으로 잘라도 차이가 발생하기 쉽고, 이는 해당 시기 전후로 토픽의 질적 차이가 발생했다는 논거를 뒷받침하기엔 매우 약한 증거가 됩니다.

      반면 후자의 경우 특정 시기를 기준으로 문헌을 나누는 것이 아니라 시기별로 연속적으로 문헌을 분할하였으므로, 위와 같은 문제에서 자유롭습니다. 어떤 시점도 가정하지 않은 이 실험에서 특정 시기 전후로 질적인 차이가 드러난다면 이는 실제로 해당 시기 전후로 토픽의 변화가 있었음을 보여주는 강한 증거가 될 수 있겠지요.

      2. DMR은 예제코드가 없었네요. github에 공유한뒤 알려드릴게요.
  • 프로필 사진
    2020.10.12 16:15
    비밀댓글입니다
    • 프로필 사진
      2020.10.16 22:42 신고
      네 두 종류 이상의 범주형 메타데이터를 사용할 경우, 둘을 합쳐서 사용할 수 있는데요, 이 경우 말씀하신것처럼 매우 많은 범주가 생길 수 있습니다.
      이 경우 각 범주에 속하는 문헌 숫자가 적어져 모델이 제대로 학습되지 못할 가능성이 있습니다. 그래서 범주 숫자가 매우 늘어날 경우(혹은 메타데이터가 2종류 이상일 경우)에 DMR을 사용하는건 추천되지 않습니다.

      각 산업범주별로 코로나 전후의 토픽 변화를 보고싶으신거 같은데, 차선책으로 산업범주별로 데이터를 나누고, 각 산업범주별로 토픽모델링을 실시하여, 산업범주 하나하나마다 토픽의 변화를 검증하시는게 어떨까 싶습니다.
  • 프로필 사진
    2020.10.18 12:32
    비밀댓글입니다
  • 프로필 사진
    2020.10.22 10:59
    비밀댓글입니다
    • 프로필 사진
      2020.10.23 19:18 신고
      아 DTM모델도 돌려보셨군요. 말씀하신것처럼 DTM은 결과가 생각처럼 잘 안나옵니다. 원 논문에 나온것처럼 하려면 파라미터들을 잘 잡아줘야하는데 이게 생각보다 어려워서요. 질문자님이 딱히 잘못하신게 아니라 모델 자체가 그런거라고 보시면 됩니다.

      그리고 저번에 말씀드렸던 DMR예제 코드를 작성하여 업데이트했습니다.

      https://github.com/bab2min/tomotopy/blob/main/examples/dmr_plot.py

      도움이 되기를 바랄게요.
  • 프로필 사진
    2020.11.01 14:13
    비밀댓글입니다
  • 프로필 사진
    2020.11.04 11:50
    비밀댓글입니다
    • 프로필 사진
      2020.11.04 14:45 신고
      1. 전자는 그냥 텍스트로 distribution을 출력하는 것이고, 후자는 bar chart로 출력하는 것입니다. 둘다 probs[:, f] (f번째 피처의 토픽 확률분포)를 출력한다는 점에 있어서는 차이가 없습니다.

      2. 토픽 분포를 그냥 선형적으로 plot하면 0에 가까운 값들은 거의 y축에 붙어서 나와서 알아보기가 어렵기 때문입니다. 로그 스케일로 출력하면 이런 문제를 피할수 있습니다. 선형과 로그 스케일의 차이를 보고싶으시면, 해당 라인을 주석처리하시고 실행해보시면 될것 같습니다.
  • 프로필 사진
    2020.11.16 21:31
    비밀댓글입니다
    • 프로필 사진
      2020.11.18 21:07 신고
      음... 토픽 변화를 정량적으로 판단하는 방법에 대해서는 저도 잘 모르겠네요. 제가 봐왔던 논문들에서도 말씀하신것처럼 그래프를 그려서 그 개형을 보고 대략적인 추세를 판단하는게 대부분이었습니다. 더 엄밀한 방법이 있으면 좋을텐데요, 무엇이 있는지는 아쉽게도 잘 모르겠습니다.
  • 프로필 사진
    2020.11.17 00:58
    선생님 저번에 coherence 관련 질문에 대한 답변 관련 글 빠르게 안내해주셔서 잘 넘겼습니다 gensim으로 수학적 지식이 충분하지 않아 토픽모델링 연구할 때도 많이 고생했는데 tomotopy의 여러 모델들은 더 어렵네요 ㅎㅎ 수학적 지식도 부족하고 공들여 쓰신 논문도 읽어봤는데 제가 못 찾는 건지 또 질문이 있어 이렇게 여쭤봅니다

    1. 르잔드르 차수가 4, 3을 설정한 게 dateset의 length에서 나온 건지 2. 이미 질문을 해주신 분과 비슷하게 저도 연도를 연속변수 하나만 넣고 메타데이터로 활용하고 싶은데 깃허브에 올려주신 부분에 르잔드르 차수가 들어가는 degrees에 그러면 int 하나만 들어가면 되는 것인지도 궁금하네요
    • 프로필 사진
      2020.11.18 21:09 신고
      1. 차수를 4, 3으로 설정한건 여러 조합에 대해서 실험해본 결과 저 값이 제일 perplexity가 낮게 나왔기 때문입니다. 아마 데이터셋의 분포와도 관련이 있을거 같은데 이에 대해서는 추가적인 연구가 필요해보입니다.

      2.연속변수 하나만 사용하신다면 degrees에 [n] 하나만 넣으시면 됩니다. 물론 n값은 여러 값을 변경해가시면서 최적의 값을 탐색하셔야하구요.
  • 프로필 사진
    2020.11.20 00:48 신고
    안녕하세요, 논문을 읽던 중 TDF에 대해 헷갈리는 부분이 있어 질문을 남깁니다 :)
    저는 출간연도에 따라 소설의 토픽 비중 변화를 보고 있는데요. 그래서 한 종류의 메타데이터(출간연도)만 사용하고 있습니다.

    우리가 가진 데이터셋 중에 1960년에 출간된 소설들이 N개 있다고 합시다. 그러면 각 문헌(소설) D_1, D_2, ..., D_N은 자기만의 주제 분포를 가지고 있을 텐데요. 이 때, 그 N개의 주제 분포와 tdf([1960])의 반환값은 어떤 관계를 가지게 될까요?

    D_1~D_N의 주제 분포를 평균내는 식으로 시대에 따른 주제 분포를 구해 비교해봤는데, TDF랑은 조금 차이가 있더라고요.
    TDF가 각 문헌의 주제 분포와 어떤 관계에 있는지, 직관적으로 이해가 잘 되지 않네요.

    좋은 연구 감사합니다 :D
    • 프로필 사진
      2020.11.20 22:45 신고
      TDF값은 문헌별 토픽 분포의 사전 분포를 결정하는 파라미터가 됩니다. 토픽 분포의 사전 분포와 실제 토픽 분포의 관계에 대해서는 LDA와 디리클레 분포에 관한 게시글을 보시면 좀더 이해가 쉬우실거 같은데요,
      (https://bab2min.tistory.com/568?category=673750)
      임의의 1960년대의 문헌이 가질 분포의 기본값 정도라고 생각하시면 되겠습니다.

      사실 정확한 사전 분포 파라미터를 보시려면 np.exp(tdf([1960], normalize=False))를 계산하셔야 합니다. 이 코드로 계산된 값이 위 포스팅에서 소개하는 디리클레 파라미터가 됩니다.
  • 프로필 사진
    2020.11.22 22:35 신고
    선생님, 답변 정말 감사합니다 :D
    TDF에서 얻는 주제 분포는 문헌-주제 분포의 사전 분포값이고, 관측(실제 문서에 있는 단어들을 관측)을 통해 사후 분포를 계산한 것이 각각의 문헌-주제 분포라고 생각하면 맞을까요?

    한가지 더, 위의 히트맵이 {exp(f(x))+epsilon}/Sum{exp(f(x))+epsilon}의 값을 계산해서 그린 것이고, tomotopy의 tdf 함수가 위 식의 f(x)인 것 맞나요? (논문을 보니 분모의 Sum에 t'가 붙어있던데, t'의 의미를 알려주실 수 있을까요? 위 식이 주제 분포라면 전부 더했을 때 1이 되어야 할텐데, 어떤 식으로 그렇게 되는지 잘 모르겠네요ㅠ)

    귀찮으실텐데 친절히 답변해주셔서 다시 한번 감사합니다 :)
    • 프로필 사진
      2020.11.24 00:30 신고
      네 첫번째 질문은 말씀하신것이 맞습니다.
      normalize=False로 준 경우에는 tdf 함수가 f(x)을 보여주고요, 만약 normalize=True라면 exp(f(x))+epsilon}/Sum{exp(f(x))+epsilon 식 전체의 값을 보여줍니다.

      그리고 마지막으로 t' 관려된 부분은 페이퍼에 typo로 보입니다. 분모의 sum뿐만 아니라 분모 f(x)에 있는 t까지도 t'라고 보시면 됩니다. 분자의 t는 특정 주제 하나에 대해서만 계산하는 것이고, 분모의 t'는 모든 주제에 대해서 계산되는 것이라 둘을 구분하기 위해 분모에 '을 붙인건데 분모 식에서 f_t'(x)부분의 '가 떨어졌네요... ㅎㅎ