AI

Gensim Functions

cdjiwon 2022. 9. 4. 17:20

Gensim Functions

  1. corpora.dictionary 단어 <-> id 매핑 구성

    • 이 모듈은 단어와 정수 ID 간의 사전 개념을 구현한다.
    1. gensim.corpora.dictionary.Dictionary

      1. 주요 인스턴스 속성

        • 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}
        • 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 공간을 제한하기 때문에 정확성이 보장되지 않는다.
        • add_documents : 문서 모음에서 사전 업데이트

          • parameters
            • documents(str's iterable) : [['cat', 'say', 'meow'], ['dog']]
            • prune_at(int, optional) = 200000
        • filter_extremes : 빈도별로 사전에서 토큰을 필터링한다.

          • parameters
            • no_below : 문서 미만 (절대 수)
            • no_above : 문서 이상 (절대 수가 아닌 전체 말뭉치 크기의 일부)
            • keep_n : no_below와 no_above 이후 가장 자주 나오는 토큰만 유지 (None이면 모두 유지)
            • 참고 : 간격 축소로 인해 함수 호출 전과 동일한 단어가 다른 단어 ID를 가질 수 있다.
        • 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) : 제거될 가장 빈번한 토큰의 수
        • filter_tokens : 선택한 bad_ids 토큰 제거 / 선택한 good_ids 그대로 유지하고 나머지 제거

          • parmeters
            • bad_ids(iterable of int, optional) : 제거할 단어 ID 모음
            • good_ids (int collection, 선택사항) : 선택한 단어 ID 컬렉션을 유지하고 나머지 제거
        • load(fname, mmap=없음)

          • parameters
            • fname(str) : 필요한 개체가 포함된 파일 경로
            • mmap(str, 선택사항) : 메모리 맵 옵션
        • 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 )
        • load_from_text(이름)

          • parameters
            • fname(str) : save_as_text()로 생성된 파일의 경로
        • 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)]
              

          transformer = dct_1.merge_with(dct_2)
          dct_1.doc2bow(corpus_2[0])
          [(0, 1), (3, 2)]
          ```

        • most_common(n : Optional[int] = None) -> List[튜플[str, int]] : n개의 가장 일반적인 단어의 목록과 가장 일반적인 것부터 가장 적은 것 까지의 개수 반환

          • parameters
            • n(int, None, optional) : 반환될 가장 일반적인 단어의 수, None은 모든 단어 반환, 기본값은 없음
        • 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}
  2. models.ldamodel : 잠재 디레클레 할당
    lda parameters tip
    참고 : gensim.models.ldamulticore 병렬 처리

    1. 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
          온라인 반복 학습 : 1

        • alph({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) : 행렬을 정규화해야 하는지 여부
      • do_mstep : 최대화 단계 : 기존 주제 사이에 선형 보간을 사용하고 주제를 업데이트 하기 위해 other에서 충분한 통계를 수집한다.

        • parameters
          • rho(float) : 학습률
          • other(LdaModel) : 주제를 업데이트하는데 충분한 통계가 사용되는 모델
          • extra_pass(bool, optional) : 이 단게에서 말뭉치에 대한 추가 전달이 필요한지 여부
      • 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인 경우 이 함수는 두 개의 추가목록도 반환한다.
      • get_term_topics : 주어진 단어와 가장 관련성이 높은 주제를 가져온다.

        • parameters
          • word_id(int) : 토픽 분포가 계산될 단어
          • minimum_probability(float, optional) : 이 임계값 미만으로 할당된 확률이 있는 주제는 삭제된다.
      • get_topic_terms : 단일 주제에 대한 표현을 가져온다. 단어 정수 ID와 대조적으로 show_topic() 실제 문자열로 단어를 나타낸다.

        • parameters
          • topicid(int) : 반환될 주제 ID
          • topn(int, optional) : 주제와 관련된 가장 중요한 단어의 수
      • 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로 설정하면 모델의 주제-단어 분포를 업데이트하는데 필요한 충분한 통계도 수집 및 반환한다.
      • 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'}) : 사이트 참조
      • 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) : 난해성 평가에 사용되는 문서 수
      • print_topic(topicno, topn=10) : 단일 주제를 형식이 지정된 문장열로 가져온다.

        • parameters
          • topicno(int) : 주제 ID
          • topn(int) : 사용할 주제 단어 수
            # Output
            '-0.340 * "category" + 0.298 * "$M$" + 0.183 * "algebra" + … '와 같은 주제의 문자열 표현.
      • print_topics(num_topics=20, num_words=10) : 가장 중요한 주제를 가져온다.(show_topics() 메서드의 별칭)

        • parameters
          • num_topics(int, optional) : 1인 경우 선택할 토픽의 수 - 모든 토픽이 결과에 표시된다.(중요도 순)
          • num_words(int, optional) : 주제 당 포함될 단어 수(중요도 순)
      • show_topic(topicid, topn=10) : 단일 주제에 대한 표현을 가져온다. get_topic_terms() 여기에 있는 단어는 어휘 ID로 단어를 나타내는 것과 대조적으로 실제 문자열이다.

        • parameters
          • topicid(int) : 반환 주제 ID
          • topn(int, optional) : 주제와 관련된 가장 중요한 단어 수
      • 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개의 튜플로 반환된다.
      • sync_state(current_Elogbeta=None) : 상태 주제 확률을 내부 개체의 속성에 전파한다.

        • parameters
          • current_Elogbeta(numpy.ndarray) : 각 주제에 대한 사후 확률(선택사항), 생락하면 상태에서 Elogbeta를 가져옴
      • 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 로 해석
    2. gensim.models.ldamodel.LdaState : LdaModel 개체의 분산 계산을 위한 정보를 캡슐화 한다.

      • blend : 충분한 통계를 위해 가중 평균을 사용하여 현재 상태를 다른 상태와 병합한다.
        이 절차 는 Hoffman et al.의 'Online Learning for LDA' 의 확률적 기울기 업데이트에 해당합니다
        • parameters
          • rhot(float) : 계산된 평균에서 다른 상태의 가중치. 값이 0.0이면 other는 완전히 무시된다.
          • other(LdaState) : 현재 상태 개체가 병합될 상태 개체
          • targetsize(int, optional) : 두 상ㅌ애를 모두 늘릴 문서의 수
      • blend2 : 충분한 통계를 위해 가중 합계를 사용하여 현재 상태를 다른 상태와 병합합니다. blend()와 대조적으로 충분한 통계는 집계 전에 확장되지 않습니다.
        • parameters
          • rhot(float) : 사용x
          • other(LdaState) : 현재 상태 개체가 병합될 상태 개체
          • targetsize(int, optional) : 두 상태를 모두 늘릴 문서의 수
      • get_Elogbeta() : 각 주제에 대한 로그(사후) 확률을 가져온다.
      • get_lambda() : "topic"이라고도 하는 주제에 대한 사후의 매개변수를 가져온다.
      • merge : 한 노드의 E 단계 결과를 다른 노드의 결과와 병합
        • parameters
          • other(LdaState) : 현재 상태 개체가 병합될 상태 개체
      • reset : 새로운 EM 반복을 위한 상태를 준비한다.
    3. gensim.models.ldamodel.update_dir_prior

      • parameters
        • dictionary(list of float) : 이전 밥ㄴ복에서 가능한 각 결과에 대한 사전
        • N(int) : 관측치의 수
        • logphat(list of float) : 현재 추정에 대한 로그 확률
        • rho(float) : 학습률

참고 : LDA Sequential Model === Dynamic Topic Model prod.David Blei

Dynmaic Topic Model

'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