Author Topic Modeling, 저자 - 주제 관계를 포함한 토픽모델링

Author Topic Modeling, 저자 - 주제 관계를 포함한 토픽모델링
Photo by Darius Bashar / Unsplash

Author Topic Modeling

  • **Author Topic Model(ATM)**은 텍스트 데이터에서 주제와 저자 간의 관계를 동시에 모델링하는 기법입니다.
  • 이는 저자가 작성한 문서의 주제 분포를 추정하고, 각 주제에 대한 저자의 기여도를 파악하는 데 유용합니다.
  • 학술 문서 분석, 소셜 미디어 데이터 분석 등 다양한 텍스트 마이닝 분야에서 사용됩니다.

Motivation

  • 단순한 토픽 모델링 기법(LDA 등)으로는 저자와 주제 간의 복잡한 관계를 충분히 설명하기 어려웠습니다.
  • 이를 해결하기 위해 저자와 주제를 동시에 모델링하는 Author Topic Model이 등장했습니다.

Pros & Cons

장점

  1. 저자-주제 관계 파악: 저자와 주제 간의 관계를 명확히 파악할 수 있습니다.
  2. 다양한 응용 가능: 학술 문서, 소셜 미디어, 뉴스 기사 등 다양한 분야에서 활용할 수 있습니다.
  3. 주제 분포 추정: 각 저자가 주로 다루는 주제를 추정할 수 있어 저자의 연구 방향이나 관심사를 분석하는 데 유용합니다.

Cons

  1. 복잡한 모델링: 저자와 주제를 동시에 모델링하므로, 단순한 토픽 모델링에 비해 복잡합니다.
  2. 데이터 요구량: 저자와 주제 정보를 모두 포함하는 대규모 데이터셋이 필요합니다.
  3. 계산 비용: 모델 학습에 필요한 계산 비용이 높아질 수 있습니다.

Alternatives

  1. Latent Dirichlet Allocation (LDA): 단순한 토픽 모델링 기법으로, 저자 정보를 포함하지 않습니다.
  2. Author-Recipient-Topic Model (ARTM): 저자뿐만 아니라 수신자 정보를 포함하여 주제와 관계를 모델링합니다.
  3. Hierarchical Dirichlet Process (HDP): 비정규화 토픽 모델로, 주제의 수를 미리 지정할 필요 없이 데이터를 통해 주제를 학습합니다.
import gensim
from gensim import corpora
from gensim.models import AuthorTopicModel

# 샘플 데이터
documents = [
    ["human", "interface", "computer"],
    ["survey", "user", "computer", "system", "response", "time"],
    ["eps", "user", "interface", "system"],
    ["system", "human", "system", "eps"],
    ["user", "response", "time"],
    ["trees"],
    ["graph", "minors", "trees"],
    ["graph", "minors", "survey"]
]

# 저자 정보
author2doc = {
    'author_1': [0, 1, 2],
    'author_2': [3, 4, 5],
    'author_3': [6, 7]
}

# 사전 생성
dictionary = corpora.Dictionary(documents)
corpus = [dictionary.doc2bow(doc) for doc in documents]

# Author Topic Model 학습
model = AuthorTopicModel(corpus=corpus, num_topics=3, id2word=dictionary, author2doc=author2doc)

# 결과 출력
for author in model.id2author.values():
    print(f"Author: {author}")
    print(f"Topics: {model.get_author_topics(author)}")

Author: author_1
Topics: [(0, 0.031613979296316014), (1, 0.9380545191419738), (2, 0.03033150156171012)]
Author: author_2
Topics: [(0, 0.0977369409541409), (1, 0.27095486982704725), (2, 0.6313081892188119)]
Author: author_3
Topics: [(0, 0.06613595341346513), (1, 0.06264315585003843), (2, 0.8712208907364964)]