[Python]Top2Vec 각 Document 별 Topic 찾기

배경

  • Top2Vec으로 토픽 모델링 이후 각 Document 별 해당되는 토픽을 알고자 할 때

해결책

  • Top2Vec의 Github 코드를 확인해보니, Single Underscore Function으로 있는 _calculate_documents_topic의 Return Value로 doc_top, doc_dist를 갖는데, doc_top은 각각 Document 별 Topic에 대한 List이다. 그리고 doc_dist는 Topic Vector와의 Distance 값이다.
  • "model.search_documents_by_topic(0, num_docs=1)" 형태로 Topic 0에 해당하는 Document 1개를 가지고 오라고 할 때 doc_top,doc_dist를 통해 가지고 온다.
  • 아직 모델이 개발중이라서 그런 것인지, 해당 변수에 대해서 model.doc_top, model.doc_list 형태로 바로 접근이 가능하다.
import numpy as np
import pandas as pd
from top2vec import Top2Vec
from sklearn.datasets import fetch_20newsgroups

np.random.seed(0)

# Data Loading
newsgroups = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))

# Modeling 
model = Top2Vec(newsgroups.data, workers=4, embedding_model='universal-sentence-encoder')

model.search_documents_by_topic(0, num_docs=1)

위에까지 실행하고 나면 아래와 같은 결과를 볼 수 있다.

#(array(['Well, the Patrick Division got a little more interesting last night. ...dtype=object), array([0.7826741], dtype=float32), array([17864]))

위 내용은 17864번 인덱스 Document가 Topic Vector로부터 가장 가까이 있고 거리 값은 0.7826741이라는 것이다. 위 Document는  model.doc_top[17684], model.doc_list[17684]에서 확인할 수 있다.

Topic Vector은 다음과 같이 동일한 Cluster를 가지고 있는 Document Vector의 평균 값을 이용해서 생성하는 듯하다.(자세히 보지는 않았음)

self.topic_vectors = self._l2_normalize(
            np.vstack([self.document_vectors[np.where(cluster_labels == label)[0]]
                      .mean(axis=0) for label in unique_labels]))

Read more

다중공선성은 잘못된 인과추론 결과를 만들어낼 수 있습니다.

다중공선성은 잘못된 인과추론 결과를 만들어낼 수 있습니다.

다중공선성(Multi Collinearity) * **Multi-Collinearity(다중공선성)**는 독립 변수들 간의 강한 상관관계가 존재할 때 발생합니다. 즉, 한 독립 변수가 다른 독립 변수에 의해 설명될 수 있을 정도로 상관관계가 높은 상황을 의미합니다. * 이 문제는 주로 회귀 분석에서 나타나며, 변수들 간의 관계를 해석하는 데 있어 큰 장애물이 될 수 있습니다. * 일반적인 회귀식을 $Y=

Bayesian P-Value는 불확실성을 감안하여 모델의 적합도를 평가합니다.

Bayesian P-Value는 불확실성을 감안하여 모델의 적합도를 평가합니다.

Bayesian P- Value * Bayesian P-Value는 **모델의 적합도(goodness-of-fit)**를 평가하는 데 사용됩니다. * 사후 분포(posterior distribution)를 이용하여 실제 데이터와 모델이 생성한 예상 데이터를 비교함으로써, 관측된 데이터가 모델에 의해 얼마나 잘 설명되는지를 평가합니다. * 빈도주의 p-값은 "관찰된 데이터보다 극단적인 데이터가 나올 확률"을 계산하지만, Bayesian P-Value는 "모델이 실제

Non-Identifiability는 Model Parameter를 고유하게 식별할 수 없는 현상입니다.

Non-Identifiability는 Model Parameter를 고유하게 식별할 수 없는 현상입니다.

Non Identifiability * Non-Identifiability는 주어진 데이터와 모델에 대해 특정 파라미터를 고유하게 식별할 수 없는 상황을 의미합니다. 즉, 여러 파라미터 값들이 동일한 데이터를 생성할 수 있으며, 이로 인해 특정 파라미터 값을 확정적으로 추정하기 어렵게 됩니다. * 베이지안 추론에서 Non-Identifiability는 사후 분포가 특정 파라미터 값에 대해 명확하게 수렴하지 않고, 여러 값들에 대해 비슷한 확률을

Rootgram은 큰 분산을 갖거나 비정규 형태의 데이터를 위한 히스토그램입니다.

Rootgram은 큰 분산을 갖거나 비정규 형태의 데이터를 위한 히스토그램입니다.

Rootgram * 히스토그램의 변형으로 데이터가 비정규적이거나 큰 분산을 가지는 경우, 정확한 분포를 파악하기 위해 사용됩니다. * 일반적으로 히스토그램은 데이터의 빈도를 직접적으로 나타내기 때문에, 큰 값이 빈번하게 발생하는 경우 상대적으로 작은 값을 잘 드러내지 못하는 경향이 있습니다. 반면, Rootgram은 빈도를 제곱근 형태로 변환하여, 데이터 분포의 차이를 더 잘 시각화할 수 있도록 돕습니다 * 여기서