自分の語彙を使ってword 2 vecモデルを訓練する

3635 ワード

一、環境と語彙を準備する:
  • ニュース20 w+編(フォーマット: . )
  • 【ニュースは自分で各ニュースサイトから入手したり、オープンソースのニュースデータセットをダウンロードしたりすることができます.
  • インターネットコーパス(SogouT)
  • 中国語テキスト分類データセットTHUCNews
  • 李栄陸英語テキスト分類語料
  • 譚松波中国語テキスト分類語料
  • 結巴分詞
  • word2vec

  • 二、分詞
    まずニューステキストを分詞し、後の使用に備えて、結巴分詞ツールを使用し、分詞後のテキストをseg201708.txtに保存します.
    jiebaキットのインストール:pip install jieba
    # -*- coding: utf-8 -*-
    import jieba
    import io
    #             
    jieba.load_userdict("financialWords.txt")
    
    def main():
        with io.open('news201708.txt','r',encoding='utf-8') as content:
            for line in content:
                seg_list = jieba.cut(line)
    #           print '/'.join(seg_list)
                with io.open('seg201708.txt', 'a', encoding='utf-8') as output:
                    output.write(' '.join(seg_list))
                
    if __name__ == '__main__':
        main()
    

    三、word 2 vecモデルを訓練する
    pythonのgensimパッケージを使用してトレーニングを行います.
    インストールgemsimパッケージ:pip install gemsim
    from gensim.models import word2vec
    
    def main():
    
        num_features = 300    # Word vector dimensionality
        min_word_count = 10   # Minimum word count
        num_workers = 16       # Number of threads to run in parallel
        context = 10          # Context window size
        downsampling = 1e-3   # Downsample setting for frequent words
        sentences = word2vec.Text8Corpus("seg201708.txt")
    
        model = word2vec.Word2Vec(sentences, workers=num_workers, \
                size=num_features, min_count = min_word_count, \
                window = context, sg = 1, sample = downsampling)
        model.init_sims(replace=True)
        #     ,     
        model.save("model201708")
        
        #                         
        # model = gensim.models.Word2Vec.load('/tmp/mymodel')
        # model.train(more_sentences)
    
    if __name__ == "__main__":
        main()
    
  • パラメータ説明
  • sentences:大語彙セットの場合は、BrownCorpus、Text 8 CorpusまたはineSentenceを使用して構築することを推奨します.
  • sg:トレーニングアルゴリズムを設定するために使用され、デフォルトは0であり、CBOWアルゴリズムに対応する;sg=1はskip-gramアルゴリズムを採用する.
  • size:フィーチャーベクトルの次元を指し、デフォルトは100です.大きなsizeはより多くのトレーニングデータが必要ですが、より効果的です.推奨値は数十~数百です.
  • window:現在の語と予測語の1つの文の中の最大距離を表す
  • alpha:学習速度
  • seed:乱数発生器に使用されます.初期化語ベクトルに関係します.
  • min_count:辞書をカットできます.min_countより少ない頻度の単語は破棄されます.デフォルト値は5
  • です.
  • max_vocab_size:ワードベクトル構築中のRAM制限を設定します.すべての独立した単語の個数がこれを超えると、その中で最も頻繁ではないものが消去されます.1千万個あたり約1 GBのRAMが必要です.Noneに設定すると制限はありません.
  • sample:高周波語彙のランダムダウンサンプリングの構成閾値、デフォルトは1 e-3、範囲は(0,1 e-5)
  • workersパラメータ制御トレーニングの並列数.
  • hs:1の場合はhierarchica・softmaxテクニックが使用されます.0(defau・t)に設定するとnegative samplingが使用されます.
  • negative:0未満の場合、noise words
  • を複数設定するためにnegativesamp・ingが使用されます.
  • cbow_mean:0の場合は文脈語ベクトルの和、1(defau・t)の場合は平均値をとる.CBOWを使用する場合のみ有効.
  • hashfxn:hash関数を使用して重みを初期化します.デフォルトではpythonのhash関数
  • が使用されます.
  • iter:反復回数、デフォルトは5
  • trim_rule:用語集の整理規則を設定し、それらの単語を残すか、削除するかを指定します.None(min_countが使用される)またはRU・E_DISCARD、uti・s.RU・E_KEEPまたはuti・s.RU・E_DEFAU・Tの
  • に設定できます.
  • sorted_vocab:1(defau・t)の場合、word indexを割り当てるときに単語を周波数降順にソートします.
  • batch_words:スレッドに渡される単語の数は、デフォルトでは10000
  • です.
    四、word 2 vec応用
    model = Word2Vec.load('model201708')      #      
    model.most_similar(positive=['woman', 'king'], negative=['man']) #            
    model.doesnt_match("breakfast cereal dinner lunch".split()) #     
    model.similarity('woman', 'man') #          
    model['computer'] #