Gensim

7471 ワード

gensim-word 2 vec-簡書https://www.jianshu.com/p/0702495e21de
word 2 vec語ベクトル中国語語彙処理(python gensim word 2 vecまとめ)shuihupoのブログ-CSDNブログ_word2vec.linesentence https://blog.csdn.net/shuihupo/article/details/85162237
gensim初級チュートリアル

Gensimの概要


Gensimはオープンソースのサードパーティ製Pythonツールパッケージで、元の非構造化テキストから、テキストの暗黙層のトピックベクトル表現を監視せずに学習するために使用されます.TF−IDF,LSA,LDA,word 2 vecを含む複数のトピックモデルアルゴリズムをサポートし,フロートレーニングをサポートし,類似度計算,情報検索などの一般的なタスクのAPIインタフェースを提供する.
基本的な概念は次のとおりです.
  • 用語(Corpus)
  • ベクトル(Vector)
  • 疎ベクトル
  • モデル(Model)
  • トレーニングBOWモデル

    texts=[['A','a'],['B','b']]
    from gensim import corpora
    dictionary = corpora.Dictionary(texts)
    corpus = [dictionary.doc2bow(text) for text in texts]
    

    反復メモリ

    class MyCorpus(object):
        def __iter__(self):
            # assume there's one document per line, tokens separated by whitespace
        	with open('mycorpus.txt') as f:
                for line in f:
                    yield dictionary.doc2bow(line.lower().split())
    

    トレーニングTFIDFモデル


    テキストベクトルの変換はGensimのコアです.語彙に隠された意味構造の特徴を掘り起こすことで,最終的に簡潔で効率的なテキストベクトルを変換することができる.
    tfidf = models.TfidfModel(MyCorpus)
    #  ( bow  )  TFIDF  ( )
    tfidf[bow_corpus]
    

    きおく

    prepath='./'
    tfidf.save(prepath+"tfidf")
    tfidf = models.TfidfModel.load(prepath+"tfidf")
    

    ドキュメントの類似度


    LSIモデル

    #  LSI query LSI 
    #  corpus query BOW 
    lsi_model = models.LsiModel(corpus, id2word=dictionary, num_topics=2)
    documents = lsi_model[corpus]
    query_vec = lsi_model[query]
    

    計算#ケイサン#

    index = similarities.MatrixSimilarity(documents)
    #  
    index = similarities.Similarity(documents)
    #  
     # return: an iterator of tuple (idx, sim)
    sims = index[query_vec]
    

    きおく

    index.save(prepath+'lsi')
    index = similarities.MatrixSimilarity.load(prepath+'lsi')
    

    コマンドライン


    圧縮パケットを疎行列に保存する
    python -m gensim.scripts.make_wiki source_wiki.bz2 zhwiki
    #  5 
    -rw-r--r-- 1 chenbingjin data 172M  7   1 12:10 zhwiki_bow.mm
    -rw-r--r-- 1 chenbingjin data 1.3M  7   1 12:10 zhwiki_bow.mm.index
    -rw-r--r-- 1 chenbingjin data 333M  7   1 12:16 zhwiki_tfidf.mm
    -rw-r--r-- 1 chenbingjin data 1.3M  7   1 12:16 zhwiki_tfidf.mm.index
    -rw-r--r-- 1 chenbingjin data 1.9M  7   1 12:10 zhwiki_wordids.txt
    

    訓練LDAモデル

    from gensim import corpora, models
    
    #  
    id2word = corpora.Dictionary.load_from_text('zhwiki_wordids.txt')
    mm = corpora.MmCorpus('zhwiki_tfidf.mm')
    
    #  , 28m
    lda = models.ldamodel.LdaModel(corpus=mm, id2word=id2word, num_topics=100)
    

    語の分布の表示

    #  20 topic 
    lda.print_topics(20)
    #  id 20 topic 
    lda.print_topic(20)
    

    きおく

    lda.save('zhwiki_lda.model')
    lda = models.ldamodel.LdaModel.load('zhwiki_lda.model')
    

    統合word 2 vec


    Gensimステップアップ
    Gensimはword 2 vecツールの拡張をカプセル化し、word 2 vecパッケージを使用しません.

    コーパスの読み込み

    class MySentences(object):
        def __init__(self, dirname):
            self.dirname = dirname
    
        def __iter__(self):
            for fname in os.listdir(self.dirname):
                for line in open(os.path.join(self.dirname, fname)):
                    yield line.split()
    
    sentences = MySentences(prepath+'copas')
    

    トレーニング

    w2v = gensim.models.Word2Vec(sentences)
    # online training
    model = gensim.models.Word2Vec.load('/tmp/mymodel')
    model.train(more_sentences)
    

    パラメータの説明

    class gensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, size=100, alpha=0.025, window=5, min_count=5,  max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, hashfxn=, iter=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), max_final_vocab=None)
    
  • sentences(iterable of iterables,optional)-トレーニング用の文は、簡単なリストを使用できますが、大きなコーパスでは、ディスク/ネットワークストリームから直接文を反復的に転送することをお勧めします.word 2 vecモジュールのBrownCorpus、Text 8 CorpusまたはLineSentenceを参照してください.
  • corpus_file(str,optional)-LineSentence形式のライブラリファイルパス.
  • size(int,optional)-wordベクトルの次元.
  • window(int,optional)-現在の単語と予測される単語の最大距離.
  • min_count(int,optional)–頻度がこの値より小さい単語は無視されます.デフォルト5.
  • workers(int,optional)-モデルを訓練するときに使用されるスレッドの数.
  • sg({0,1},optional)-モデルの訓練アルゴリズム:1:skip-gram;0: CBOW.
  • hs({0,1},optional)-1:hierarchical softmaxトレーニングモデルを採用する;0:負のサンプリングを使用します.デフォルトです.
  • negative(int,optional)->0:負のサンプリングを使用して、複数の負のサンプリング(通常は5-20の間)を設定します.
  • ns_exponent(float,optional)-負のサンプリング分布指数.1.0サンプル値は周波数に比例し、0.0サンプルのすべての単語は均等で、負の値は低周波数語をより多くサンプリングします.
  • cbow_mean({0,1},optional)-0:コンテキスト単語ベクトルの合計を使用します.1:平均値を使用し、CBOWを使用するのに適しています.
  • alpha(float,optional)-初期学習率.
  • min_Alpha(float,optional)-訓練が進むにつれて学習率はin_に線形に低下した.alpha.
  • seed(int,optional)-乱数発生器シード.
  • max_vocab_size(int,optional)-語彙構築中のRAMの制限;もっとユニークな単語がある場合は、あまり見られない単語をトリミングします.1000万字あたり約1 GBのRAMが必要です.
  • max_final_vocab(int,optional)-一致するminを自動的に選択countは語彙をターゲット語彙サイズに制限します.
  • sample(float,optional)-高周波語をランダムにサンプリングする構成閾値.範囲は(0,1 e-5).
  • hashfxn(function,optional)-ハッシュ関数は、トレーニングの再現性を向上させるために、ウェイトをランダムに初期化するために使用される.
  • iter(int,optional)-反復回数.
  • trim_rule(function,optional)-語彙トリムルールで、一部の語彙が語彙表に保持されるかどうか、トリムまたはデフォルト値で処理されるかどうかを指定します.
  • sorted_vocab({0,1},optional)-1の場合、単語インデックスを割り当てる前に降順に語彙をソートします.
  • batch_words(int,optional)-batchごとにスレッドに渡される単語の数.
  • compute_loss(bool,optional)-Trueの場合、get_を使用して計算および格納latest_training_loss()が取得した損失値.
  • callbacks(iterable of CallbackAny 2 Vec,optional)-トレーニング中の特定のフェーズでコールバックシーケンスが実行されます.

  • 統合doc 2 vec


    Doc 2 vecもword 2 vecに継承されたサブクラスで、長いテキストベクトルを計算するために使用され、word 2 vecとの主な違いは入力データの前処理にある.
    Doc 2 vecは、LabeledSentenceオブジェクトからなる反復器をそのコンストラクション関数の入力パラメータとして受け入れます.ここで、LabeledSentenceはGensimに組み込まれたクラスであり、2つのListを初期化パラメータとして受け入れます.word listとlabel listです.
    from gensim.models.doc2vec import LabeledSentence
    sentence = LabeledSentence(words=[u'some', u'words', u'here'], tags=[u'SENT_1'])
    

    トレーニングテキストを変換

    class LabeledLineSentence(object):
        def __init__(self, filename):
            self.filename = filename
            
        def __iter__(self):
            for uid, line in enumerate(open(filename)):
                yield LabeledSentence(words=line.split(), labels=['SENT_%s' % uid])
    

    トレーニング


    wordとsentence labelの意味ベクトルを同時に訓練した.
    labelベクトルのみを訓練したい場合、パラメータtrain_words=Falseに入力して語ベクトルパラメータを固定することができる.APIドキュメント参照
    from gensim.models import Doc2Vec
    d2v = Doc2Vec(dm=1, size=100, window=5, negative=5, hs=0, min_count=2, workers=4)