Module tomotopy.label
tomotopy.label
서브모듈은 자동 토픽 라벨링 기법을 제공합니다.
아래에 나온 코드처럼 간단한 작업을 통해 토픽 모델의 결과에 이름을 붙일 수 있습니다. 그 결과는 코드 하단에 첨부되어 있습니다.
::
import tomotopy as tp
corpus = tp.utils.Corpus(tokenizer=tp.utils.SimpleTokenizer(), stopwords=['.'])
# data_feeder yields a tuple of (raw string, user data) or a str (raw string)
corpus.process(open(input_file, encoding='utf-8'))
# make LDA model and train
mdl = tp.LDAModel(k=20, min_cf=10, min_df=5, corpus=corpus)
mdl.train(0)
print('Num docs:', len(mdl.docs), ', Vocab size:', len(mdl.used_vocabs), ', Num words:', mdl.num_words)
print('Removed top words:', mdl.removed_top_words)
for i in range(0, 1000, 10):
mdl.train(10)
print('Iteration: {}\tLog-likelihood: {}'.format(i, mdl.ll_per_word))
# extract candidates for auto topic labeling
extractor = tp.label.PMIExtractor(min_cf=10, min_df=5, max_len=5, max_cand=10000)
cands = extractor.extract(mdl)
# ranking the candidates of labels for a specific topic
labeler = tp.label.FoRelevance(mdl, cands, min_df=5, smoothing=1e-2, mu=0.25)
for k in range(mdl.k):
print("== Topic #{} ==".format(k))
print("Labels:", ', '.join(label for label, score in labeler.get_topic_labels(k, top_n=5)))
for word, prob in mdl.get_topic_words(k, top_n=10):
print(word, prob, sep='\t')
print()
# Example of Results
# -----------------
# == Topic #13 ==
# Labels: american basebal, american actress, lawyer politician, race car driver, brown american
# american 0.061747949570417404
# english 0.02476435713469982
# player 0.02357063814997673
# politician 0.020087148994207382
# footbal 0.016364915296435356
# author 0.014303036034107208
# actor 0.01202411763370037
# french 0.009745198301970959
# academ 0.009701790288090706
# produc 0.008822779171168804
#
# == Topic #16 ==
# Labels: lunar, saturn, orbit moon, nasa report, orbit around
# apollo 0.03052366152405739
# star 0.017564402893185616
# mission 0.015656694769859314
# earth 0.01532777864485979
# lunar 0.015130429528653622
# moon 0.013683202676475048
# orbit 0.011315013282001019
# crew 0.01092031504958868
# space 0.010821640491485596
# nasa 0.009999352507293224
Expand source code
"""
Submodule `tomotopy.label` provides automatic topic labeling techniques.
You can label topics automatically with simple code like below. The results are attached to the bottom of the code.
.. include:: ./auto_labeling_code.rst
"""
def _load():
import tomotopy
for k in dir(tomotopy.label):
if not k.startswith('_'): globals()[k] = getattr(tomotopy.label, k)
_load()
del _load
import os
if os.environ.get('TOMOTOPY_LANG') == 'kr':
__doc__ = """
`tomotopy.label` 서브모듈은 자동 토픽 라벨링 기법을 제공합니다.
아래에 나온 코드처럼 간단한 작업을 통해 토픽 모델의 결과에 이름을 붙일 수 있습니다. 그 결과는 코드 하단에 첨부되어 있습니다.
.. include:: ./auto_labeling_code.rst
"""
del os
Classes
class Candidate (...)
-
Candidate
인스턴스 변수
var name
-
토픽 레이블의 실제 이름
var score
-
후보의 점수(읽기전용)
var words
-
토픽 레이블의 후보 (읽기전용)
class FoRelevance (topic_model, cands, min_df=5, smoothing=0.01, mu=0.25, workers=0)
-
추가된 버전: 0.6.0
First-order Relevance를 이용한 토픽 라벨링 기법을 제공합니다. 이 구현체는 다음 논문에 기초하고 있습니다:
- Mei, Q., Shen, X., & Zhai, C. (2007, August). Automatic labeling of multinomial topic models. In Proceedings of the 13th ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 490-499).
파라미터
topic_model
- 토픽명을 붙일 토픽 모델의 인스턴스
cands
:Iterable[Candidate]
- 토픽명으로 사용될 후보들의 리스트
min_df
:int
- 사용하려는 후보의 최소 문헌 빈도. 연어가 등장하는 문헌 수가
min_df
보다 작은 경우 선택에서 제외됩니다. 분석하려는 코퍼스가 클 경우 이 값을 키우십시오. smoothing
:float
- 라플라스 평활화에 사용될 0보다 큰 작은 실수
mu
:float
- 변별성 계수. 특정 토픽에 대해서만 높은 점수를 가지고, 나머지 토픽에 대해서는 낮은 점수를 가진 후보는 이 계수가 클 때 더 높은 최종 점수를 받습니다.
workers
:int
- 깁스 샘플링을 수행하는 데에 사용할 스레드의 개수입니다. 만약 이 값을 0으로 설정할 경우 시스템 내의 가용한 모든 코어가 사용됩니다.
메소드
def get_topic_labels(self, k, top_n=10)
-
토픽
k
에 해당하는 레이블 후보 상위 n개를 반환합니다.Parameter
k : int 토픽을 지정하는 정수 top_n : int 토픽 레이블의 개수
class PMIExtractor (min_cf=10, min_df=5, max_len=5, max_cand=5000)
-
추가된 버전: 0.6.0
PMIExtractor
는 다변수 점별 상호정보량을 활용해 연어를 추출합니다. 이는 통계적으로 자주 함께 등장하는 단어열을 찾아줍니다.Parameter
min_cf : int 추출하려는 후보의 최소 장서 빈도. 문헌 내 등장하는 빈도수가
min_cf
보다 작은 연어는 후보에서 제외됩니다. 분석하려는 코퍼스가 클 경우 이 값을 키우십시오. min_df : int 추출하려는 후보의 최소 문헌 빈도. 연어가 등장하는 문헌 수가min_df
보다 작은 경우 후보에서 제외됩니다. 분석하려는 코퍼스가 클 경우 이 값을 키우십시오. max_len : int 분석하려는 연어의 최대 길이 max_cand : int 추출하려는 후보의 최대 개수메소드
def extract(self, topic_model)
-
topic_model
로부터 추출된 토픽 레이블 후보인Candidate
의 리스트를 반환합니다.파라미터
topic_model
- 후보를 추출할 문헌들을 가지고 있는 토픽 모델의 인스턴스