Gensim Functions
corpora.dictionary 단어 <-> id 매핑 구성
- 이 모듈은 단어와 정수 ID 간의 사전 개념을 구현한다.
gensim.corpora.dictionary.Dictionary
주요 인스턴스 속성
token2id(토큰) : self[word] / Type : dict of (str, int)
- 토큰 -> token_id
token2id {'computer': 0, 'human': 1, 'interface': 2, 'response': 3, 'survey': 4, 'system': 5, 'time': 6, 'user': 7, 'eps': 8, 'trees': 9, 'graph': 10, 'minors': 11}
- 토큰 -> token_id
cfs(수집 빈도) : self[doc_num] / Type : dict of (int, int)
- 문서에 포함된 이 토큰의 인스턴스 수
cfs {1: 2, 2: 2, 0: 2, 4: 2, 7: 3, 5: 4, 3: 2, 6: 2, 8: 2, 9: 3, 10: 3, 11: 2}
- 문서에 포함된 이 토큰의 인스턴스 수
dfs(문서 빈도) : self[token_id] / Type : dict of (int, int)
- 이 토큰이 포함된 문서 수
dfs {1: 2, 2: 2, 0: 2, 4: 2, 7: 3, 5: 3, 3: 2, 6: 2, 8: 2, 9: 3, 10: 3, 11: 2}
- 이 토큰이 포함된 문서 수
num_docs : 처리된 문서 수 / Type : int
num_pos : 총 말뭉치 위치 수(처리된 단어 수) / Type : int
num_nnz : BOW(Bag-of-Words) 행렬의 0이 아닌 총 수 / Type : int
- parameters
- documents(str's iterable) : 매핑을 초기화하고 말뭉치 통계 수집하는데 사용할 문서
- prune_at(int, optional) : 사전은 매핑에서 prune_at 단어 이상을 유지하지 않으려고 시도 하며 RAM 공간을 제한하기 때문에 정확성이 보장되지 않는다.
- parameters
add_documents : 문서 모음에서 사전 업데이트
- parameters
- documents(str's iterable) : [['cat', 'say', 'meow'], ['dog']]
- prune_at(int, optional) = 200000
- parameters
filter_extremes : 빈도별로 사전에서 토큰을 필터링한다.
- parameters
- no_below : 문서 미만 (절대 수)
- no_above : 문서 이상 (절대 수가 아닌 전체 말뭉치 크기의 일부)
- keep_n : no_below와 no_above 이후 가장 자주 나오는 토큰만 유지 (None이면 모두 유지)
- 참고 : 간격 축소로 인해 함수 호출 전과 동일한 단어가 다른 단어 ID를 가질 수 있다.
- parameters
compactify() : 모든 단어에 새 단어 ID를 할당하여 간격을 줄인다.
doc2bow : 문서를 BOW형식 튜플 목록으로 변환
parameters
documents(str list) : 문서 입력
allow_update(bool, 선택사항) : 문서에 새 토큰을 추가하고 내부 말뭉치 통계를 업데이트하여 자체 업데이트
return_missing(bool, optional) : 빈도가 있는 누락된 토큰을 반환(문서에는 있지만 사전에는 없는 토큰)
dct.doc2bow(["this", "is", "máma"], return_missing=True) # Output ([(2, 1)], {u'this': 1, u'is': 1})
doc2idx : 문서를 인덱스 목록으로 변환
parameters
documents(str list) : 문서 입력
unknown_word_index(int, optional) : 사전에 없는 단어에 사용할 인덱스
dct.doc2idx(["a", "a", "c", "not_in_dictionary", "c"]) # Output [0, 0, 2, -1, 2]
filter_n_most_frequent : 문서에 나타나는 가장 빈번한 토큰 제거
- parameters
-remove_n(int) : 제거될 가장 빈번한 토큰의 수
- parameters
filter_tokens : 선택한 bad_ids 토큰 제거 / 선택한 good_ids 그대로 유지하고 나머지 제거
- parmeters
- bad_ids(iterable of int, optional) : 제거할 단어 ID 모음
- good_ids (int collection, 선택사항) : 선택한 단어 ID 컬렉션을 유지하고 나머지 제거
- parmeters
load(fname, mmap=없음)
- parameters
- fname(str) : 필요한 개체가 포함된 파일 경로
- mmap(str, 선택사항) : 메모리 맵 옵션
- parameters
save() : 파일에 개체를 저장
- parameters
- fname_or_handle(str / file-like) : 출력 파일의 경로 또는 이미 열린 파일류 객체. 개체가 파일 핸들이면 특별한 배열 처리가 수행되지 않고 모든 속성이 동일한 파일에 저장됩니다.
- separately(str / None, 선택사항) : None이면 저장 중인 객체에서 큰 numpy/scipy.sparse 배열을 자동으로 감지하여 별도의 파일에 저장합니다. 이것은 큰 개체에 대한 메모리 오류를 방지하고 여러 프로세스 간에 RAM의 큰 배열을 효율적으로 로드하고 공유하기 위해 큰 배열의 메모리 매핑 을 허용합니다.
- sep_limit(int, optional) : 이보다 작은 배열을 별도로 저장 x (byte)
- ignore(frozenset of str, optional) : 저장해서는 안되는 속성
- pickle_protocol(int, optional) : pickle의 프로토콜 번호
save( fname_or_handle , separately=None , sep_limit=10485760 , ignore=frozenset({}) , pickle_protocol=4 )
- parameters
load_from_text(이름)
- parameters
- fname(str) : save_as_text()로 생성된 파일의 경로
- parameters
save_as_text(dict) : dictionary 텍스트 파일에 저장
from gensim.corpora import Dictionary from gensim.test.utils import get_tmpfile tmp_fname = get_tmpfile("dictionary") corpus = [["máma", "mele", "maso"], ["ema", "má", "máma"]] dct = Dictionary(corpus) dct.save_as_text(tmp_fname) loaded_dct = Dictionary.load_from_text(tmp_fname) assert dct.token2id == loaded_dct.token2id
merge_with(기타) : 다른 사전을 이 사전에 병합하여 동일한 토큰을 동일한 ID에 매핑하고 새 토큰을 새 ID에 매핑
- parameters
- other({dict, Dictionary}) - 기타사전
from gensim.corpora import Dictionary corpus_1, corpus_2 = [["a", "b", "c"]], [["a", "f", "f"]] dct_1, dct_2 = Dictionary(corpus_1), Dictionary(corpus_2) dct_1.doc2bow(corpus_2[0]) [(0, 1)]
- other({dict, Dictionary}) - 기타사전
transformer = dct_1.merge_with(dct_2)
dct_1.doc2bow(corpus_2[0])
[(0, 1), (3, 2)]
```- parameters
most_common(n : Optional[int] = None) -> List[튜플[str, int]] : n개의 가장 일반적인 단어의 목록과 가장 일반적인 것부터 가장 적은 것 까지의 개수 반환
- parameters
- n(int, None, optional) : 반환될 가장 일반적인 단어의 수, None은 모든 단어 반환, 기본값은 없음
- parameters
patch_with_special_tokens(special_token_dict) : 특수 토큰 사전을 사용하여 token2id 및 id2token 패치
parameters
special_token_dict(dict of (str, int)) : 특수 토큰을 키로 포함하고 원하는 인덱스를 값으로 포함하는 dict
from gensim.corpora import Dictionary corpus = [["máma", "mele", "maso"], ["ema", "má", "máma"]] dct = Dictionary(corpus) special_tokens = {'pad': 0, 'space': 1} print(dct.token2id) {'maso': 0, 'mele': 1, 'máma': 2, 'ema': 3, 'má': 4} dct.patch_with_special_tokens(special_tokens) print(dct.token2id) {'maso': 6, 'mele': 7, 'máma': 2, 'ema': 3, 'má': 4, 'pad': 0, 'space': 1}
models.ldamodel : 잠재 디레클레 할당
lda parameters tip
참고 : gensim.models.ldamulticore 병렬 처리gensim.models.ldamodel.LdaModel : Online Latent Dirichlet Allocation 모델을 훈련하고 사용한다.
parameters
corpus((int, float), 선택사항) : 문서 벡터의 스트림 또는 모양의 희소 행렬 (num_documents, num_terms)
num_topics(int, optional) : 훈련 코퍼스에서 추출할 요청된 잠재 주제의 수
id2word({dict of (int, str), gensim.corpora.dictionary.Dictionary}) : 단어 ID에서 단어로 매핑. 디버깅 및 주제 인쇄뿐만 아니라 어휘 크기를 결정하는데 사용된다.
distribution(bool, 선택사항) : 교육을 가속화하기 위해 분산 컴퓨팅을 사용할지 여부
chunksize(int, optional) : 한번에 메모리에 로드하여 EM의 E 단계를 처리할 문서의 수.
pass(int, optional) : 훈련 중 말뭉치를 통과하는 패스 수(알고리즘이 전체 코퍼스를 통과해야 하는 횟수)
update_everey(int, optional) : EM의 M 단계로 이동하기 전에 처리할 청크 수.
일괄 학습 : 0
온라인 반복 학습 : 1alph({float, float의 numpy.ndarray, float의 목록, str}, 선택사항) : 문서를 인용하기 위해
'asymmetric' : 고정된 정규화된 비대칭 1.0/topicno 사전을 사용한다.
'auto' : 데이터에서 직접 비대칭 사전을 학습한다.LDA 교육 매개변수 몇가지 예
chunksize = 100k, update_every=1, corpus = 1M 문서, 패스 =1 : 총 10개의 업데이트 chunksize = 50k, update_every=2, 말뭉치 = 1M 문서, 패스 =1 : 총 10개의 업데이트 chunksize = 100k, update_every=1, 말뭉치 = 1M 문서, 패스 =2 : 총 20개의 업데이트 chunksize = 100k, update_every=1, 말뭉치 = 1M 문서, 패스 =4 : 총 40개 업데이트
eta({float, float의 nupmy.ndarray, float의 목록, str}, 선택사항) : 디레클레 분포의 감마함수에 대한 파라미터이다. 단어 확률에 대한 사전 신뢰도
'symmetric' : (default) 고정된 정규화된 비대칭 1.0/topicno 사전을 사용한다.
'auto' : 말뭉치에서 직접 비대칭 사전을 학습한다.Deacy(flaot, optional) : 새로운 문서가 조사될 때 망각하는 람다의 퍼센티지
Hoffman et al.의 'Online Learning for LDA' K에 해당한다.offset(float, optional) : 처음 몇 번 반복시행의 속도 감소를 통제한다.
Hoffman et al.의 'LDA를 위한 온라인 학습'에 T0 해당 합니다 .eval_every(int, optional) : 로그 복잡도는 업데이트가 많을 때 마다 추정된다. 이것을 1로 설정하면 훈련 속도가 2배 느려진다. 로그 퍼플렉시티의 추정 빈도수(비용이 든다)
iteartions(int, optional) : 말뭉치의 토픽 분포를 추론할 때 말뭉치의 최대 반복 횟수 / 말뭉치를 읽는 반복 시행의 최대 수
gamma_threshold(float, optional) : 반복을 계속하기 위한 감마 매개변수 값의 최소 변경
minimum_probability(float, optional) : 이 임계값보다 낮은 확률을 가진 주제는 필터링 된다.
random_state({np.random.RandomState, int}, optional) : randomState 객체 또는 생성을 위한 시드. 재현성에 유용하다.
ns_conf(dict of (str, objet), 선택샇아 gensim.utils.getNS()) : Pyro4 네임 서버를 얻기 위해 전파되는 키워드 매개변수
minimum_phi_value(float, optional) : per_word_topics가 True인 경우 용어 확률의 하한을 나타낸다.
per_word_topics(bool) : 가장 큰 단어 - 토픽 확률을 계산
True인 경우 모델은 각 단어에 대해 가장 가능성이 높은 주제의 내림차순으로 정렬된 주제 목록을 계산하고 phi 값에 특징 길이(예: 단어 수)를 곱합니다.callbacks(list of callback) : 훈련 중 모델의 평가 지표를 기록하고 시각화하기 위한 지표 콜백
dtype({numpy.float16, numpy.float32, numpy.float64}, optional) : 모델 내에서 계산하는 동안 사용할 데이터 유형이다. 모든 입력도 변환됨.
diff(other) : self와 other의 두 모델 간 주제 분포 차이 계산
- parmeters
- other(LdaModel) : 현재 객체와 비교할 모델
- distance({'kullback_leibler', 'hellinger', 'jaccard', 'jensen_shannon'}) : 차이를 계산할 거리 매트릭
- num_words(int, optional) : distance == 'jaccard'인 경우 가장 관련성이 높은 단어의 수
- n_ann_terms(int, optional) : 주제 간 교차/대칭 차이의 최대 단어 수
- diagonal(bool, optioanl) : 동일한 주제 간 차이(차이 행렬의 대각선)가 필요한지 여부
- annotation(bool, optional) : 두 주제 간 단어의 교집합 또는 차이를 반환해야 하는지 여부
- normoed(bool, optional) : 행렬을 정규화해야 하는지 여부
- parmeters
do_mstep : 최대화 단계 : 기존 주제 사이에 선형 보간을 사용하고 주제를 업데이트 하기 위해 other에서 충분한 통계를 수집한다.
- parameters
- rho(float) : 학습률
- other(LdaModel) : 주제를 업데이트하는데 충분한 통계가 사용되는 모델
- extra_pass(bool, optional) : 이 단게에서 말뭉치에 대한 추가 전달이 필요한지 여부
- parameters
get_document_topics : 주어진 문서에 대한 주제 분포를 가져온다.
- parameters
- bow(corpus : list of (int, float)) : bow형식의 문서
- minimun_probability(float) : 할당된 확률이 이 임계값보다 낮은 주제는 삭제된다.
- minimum_phi_value(float) : per_word_topics가 Ture 이면 포함된 용어 확률이 하한을 나타낸다.
None으로 설정하면 0을 방지하기 위해 1e-8 값이 사용됨. - per_word_topics(bool) : True인 경우 이 함수는 두 개의 추가목록도 반환한다.
- parameters
get_term_topics : 주어진 단어와 가장 관련성이 높은 주제를 가져온다.
- parameters
- word_id(int) : 토픽 분포가 계산될 단어
- minimum_probability(float, optional) : 이 임계값 미만으로 할당된 확률이 있는 주제는 삭제된다.
- parameters
get_topic_terms : 단일 주제에 대한 표현을 가져온다. 단어 정수 ID와 대조적으로 show_topic() 실제 문자열로 단어를 나타낸다.
- parameters
- topicid(int) : 반환될 주제 ID
- topn(int, optional) : 주제와 관련된 가장 중요한 단어의 수
- parameters
get_topics() : 추론하는 동안 학습된 용어-주제 행렬을 가져온다.
inference : 희소 문서 벡터의 청크가 주어지면 청크의 각 문서에 대한 감마(토픽 가중치를 제어하는 매개변수)를 추정한다.
이 기능은 모델을 수정하지 않는다. Lee, Seung: Algorithms for non-negative matrix factorization" 에서 제시된 최적화를 사용하여 phi 변형 매개변수를 직접 계산하는 것을 피한다.- parameters
- chunk(list of (int, float)) : 추론 단계가 수행될 corpus chunk
- collect_sstats(bool, optional) : True로 설정하면 모델의 주제-단어 분포를 업데이트하는데 필요한 충분한 통계도 수집 및 반환한다.
- parameters
init_dir_prior : 디레클레 분포에 대한 사전을 초기화한다.
- parameters
- prior({float, numpy.ndarray of float, list of float, str}) :
'symmetric': (기본값) 1.0 / num_topics 이전의 고정 대칭을 사용합니다.
'asymmetric': 1.0 / (topic_index + sqrt(num_topics)) 이전의 고정된 정규화된 비대칭을 사용합니다.
'auto': 말뭉치에서 비대칭 사전을 학습합니다( distributed==True 인 경우 사용할 수 없음 ). - name({'alpha', 'eta'}) : 사이트 참조
- prior({float, numpy.ndarray of float, list of float, str}) :
- parameters
load(fname, args, *kwargs)
from gensim.test.utils import datapath fname = datapath("lda_3_0_1_model") lda = LdaModel.load(fname, mmap='r')
save(fname, ignore=('state', 'dispatcher'), separately=None, args, *kwargs)
log_perplexity(chunk, total_docs=None) : 문서 청크를 평가 말뭉치로 사용하여 단어 당 가능성 경계를 게산하고 반환한다.
각 단어에 대해 계산된 변형 경계 점수입니다.- parameters
- chunk(list of (int, float)) : 추론 단계가 수행될 corpus chunk
- total_docs(int, optional) : 난해성 평가에 사용되는 문서 수
- parameters
print_topic(topicno, topn=10) : 단일 주제를 형식이 지정된 문장열로 가져온다.
- parameters
- topicno(int) : 주제 ID
- topn(int) : 사용할 주제 단어 수
# Output '-0.340 * "category" + 0.298 * "$M$" + 0.183 * "algebra" + … '와 같은 주제의 문자열 표현.
- parameters
print_topics(num_topics=20, num_words=10) : 가장 중요한 주제를 가져온다.(show_topics() 메서드의 별칭)
- parameters
- num_topics(int, optional) : 1인 경우 선택할 토픽의 수 - 모든 토픽이 결과에 표시된다.(중요도 순)
- num_words(int, optional) : 주제 당 포함될 단어 수(중요도 순)
- parameters
show_topic(topicid, topn=10) : 단일 주제에 대한 표현을 가져온다. get_topic_terms() 여기에 있는 단어는 어휘 ID로 단어를 나타내는 것과 대조적으로 실제 문자열이다.
- parameters
- topicid(int) : 반환 주제 ID
- topn(int, optional) : 주제와 관련된 가장 중요한 단어 수
- parameters
show_topics(num_topics=10, num_words=10, log=False, formatted=True) : 선택한 주제에 대한 표현을 얻는다.
- parameters
- num_topics(int, optional) : 반환될 주제의 수이다. LSA와 달리 LDA에서는 토픽 사이에 자연스러운 순서가 없다. 따라서 모든 주제의 반환된 주제 하위 집합은 임의적이며 두 LDA 교육 실행 간에 변경될 수 있다.
- num_words(int, optional) : 각 주제에 대해 표시할 단어 수. 가장 관련성이 높은 단어가 된다.
- log(bool, optional) : 출력이 반환되는 것 외에도 기록되는지 여부
- formatted(bool, optional) : 주제 표현을 문자열로 형식화해야 하는지 여부. False면 (단어, 확률)의 2개의 튜플로 반환된다.
- parameters
sync_state(current_Elogbeta=None) : 상태 주제 확률을 내부 개체의 속성에 전파한다.
- parameters
- current_Elogbeta(numpy.ndarray) : 각 주제에 대한 사후 확률(선택사항), 생락하면 상태에서 Elogbeta를 가져옴
- parameters
top_topics : 각 주제에 대한 일관성 점수가 가장 높은 주제를 가져온다.
- parameters
- corpus(list of (int, float), optional) : Bow형식의 Corpus
- texts(list of str, optional) : 슬라이딩 윈도우 기반, 확률 추정기를 사용하는 일관성 모델에 필요한 토큰화된 텍스트
- dictionary(Dictionary, optional) : 말뭉치를 생성하기 위한 id 단어의 Gensim 사전 매핑, model.id2word가 있으면 필요없음
- window_size(int, optional) : 부울 슬라이딩 창을 확률 추정기로 사용하여 일관성 측정에 사용할 창 크기이다. 'u_mass'의 경우 이것은 중요하지 않다.
- coherenec({'u_mass', 'c_v', c_uci', 'c_npmi'}, optional) : 사용할 일관성 측정, 가장 빠른 방법
'u_mass'의 경우 corpus를 제공해야 하며, 텍스트가 제공되면 사전을 이용하여 corpus로 변환한다.
'c_v'의 경우 'c_uci' 및 'c_npmi' 텍스트를 제공해야 한다.(말뭉치 필요x) - topn(int, optional) : 각 주제에서 추출할 상위 단어 수에 해당하는 정수
- process(int, optional) : 확률 추정 단계에서 사용할 프로세스 수, 1보다 작은 값은 num_cpus -1 로 해석
- parameters
gensim.models.ldamodel.LdaState : LdaModel 개체의 분산 계산을 위한 정보를 캡슐화 한다.
- blend : 충분한 통계를 위해 가중 평균을 사용하여 현재 상태를 다른 상태와 병합한다.
이 절차 는 Hoffman et al.의 'Online Learning for LDA' 의 확률적 기울기 업데이트에 해당합니다- parameters
- rhot(float) : 계산된 평균에서 다른 상태의 가중치. 값이 0.0이면 other는 완전히 무시된다.
- other(LdaState) : 현재 상태 개체가 병합될 상태 개체
- targetsize(int, optional) : 두 상ㅌ애를 모두 늘릴 문서의 수
- parameters
- blend2 : 충분한 통계를 위해 가중 합계를 사용하여 현재 상태를 다른 상태와 병합합니다. blend()와 대조적으로 충분한 통계는 집계 전에 확장되지 않습니다.
- parameters
- rhot(float) : 사용x
- other(LdaState) : 현재 상태 개체가 병합될 상태 개체
- targetsize(int, optional) : 두 상태를 모두 늘릴 문서의 수
- parameters
- get_Elogbeta() : 각 주제에 대한 로그(사후) 확률을 가져온다.
- get_lambda() : "topic"이라고도 하는 주제에 대한 사후의 매개변수를 가져온다.
- merge : 한 노드의 E 단계 결과를 다른 노드의 결과와 병합
- parameters
- other(LdaState) : 현재 상태 개체가 병합될 상태 개체
- parameters
- reset : 새로운 EM 반복을 위한 상태를 준비한다.
- blend : 충분한 통계를 위해 가중 평균을 사용하여 현재 상태를 다른 상태와 병합한다.
gensim.models.ldamodel.update_dir_prior
- parameters
- dictionary(list of float) : 이전 밥ㄴ복에서 가능한 각 결과에 대한 사전
- N(int) : 관측치의 수
- logphat(list of float) : 현재 추정에 대한 로그 확률
- rho(float) : 학습률
- parameters
참고 : LDA Sequential Model === Dynamic Topic Model prod.David Blei
'AI' 카테고리의 다른 글
Gensim 사용법[정리] (0) | 2022.09.04 |
---|---|
Gensim 활용 LDA 모델 학습 (0) | 2022.08.04 |
Yolov5 Window Environment (0) | 2022.08.04 |
Tensorflow 공부 (2차) (0) | 2022.02.22 |
Tensorflow 공부 (1차) (0) | 2022.02.22 |