2グラムのpython + gensimトレーニングコーパスword2vecベクトルを使用して

0はじめに

「のWord2Vec数学的原則、およびソースコードの詳細なベクトルワード」良いが、単語ベクトルWord2Vecは、2つの方法があります原則とソースコードのいくつかの解釈を説明Word2Vec、一つは、Googleの大物が自分word2vecを書きであるだけでなく、多くの人がgensimライブラリを使用するので、ほとんどの人は、パイソンを使用するので一つは、gensimライブラリです。何の導入が含まれていないgensim word2vecモデル、他のモデルでは、この資料の意志の詳細gensim。

1つのgensimライブラリー

Gensim(http://pypi.python.org/pypi/gensim)は、元からの非構造化テキストのためのオープンソースのサードパーティのPythonツールキット、テキストベクトルテーマの隠された層に教師なし学習であります表現。モデリングプロセス及び文書の類似性のための主なテーマは、それが含むモデルアルゴリズムTF-IDF、LSA、LDA、およびword2vecを含むさまざまなトピックをサポートしています。Gensim便利な言葉は、次のような単語ベクトルおよび他のタスクを取得します。

1.1 gensim.models.word2vec APIの概要

使用する最初pip install gensimのインストールgensimライブラリを。
そして、word2vecモジュールを注ぎますfrom gensim.models.word2vecword2vecこの小文字注ぎ注.pyWord2Vecモデルは、このファイルの首都で実装文書は、あなたがモデルを使用した場合のステートメントを使用する必要があるword2vec.Word2Vec()モデルを作成します。

class Word2Vec(utils.SaveLoad):
    def __init__(
            self, sentences=None, size=100, alpha=0.025, window=5, min_count=5,
            max_vocab_size=None, sample=1e-3, seed=1, workers=3, min_alpha=0.0001,
            sg=0, hs=0, negative=5, cbow_mean=1, hashfxn=hash, iter=5, null_word=0,
            trim_rule=None, sorted_vocab=1, batch_words=MAX_WORDS_IN_BATCH):
  • 文は:リストであり、大規模コーパスのためには、ビルドにLneSentenceとPathLineSentenceを使用することをお勧めします。このパラメータなしのモデルを作成するときは、その後、トレーニングコーパスを渡すことができ、フォローアップ研修の時になしオブジェクトを渡します。
  • サイズは:単語ベクトルの次元を指し、デフォルトは100です。コーパスが小さい場合、この寸法値は、一般的に以下のテキストコーパスの100Mよりなど、私たちのコーパスのサイズに関連した、デフォルト値は、通常は大丈夫です。コーパスが大きい場合には、寸法が増加することをお勧めします。ラージサイズは、より多くのトレーニングデータを必要としますが、効果が良くなります。推奨値は100〜300です。
  • ウィンドウ:ウィンドウサイズ、すなわち最大距離文脈語ベクトル、すなわち、フロントウインドウ及びリアウインドウの単語見出し語を含む注目[1、ウィンドウ]、ウィンドウが固定されていない間word2vecランダム値でありますこれまでの単語、窓も大きく、一部はまた、単語のコンテキストを持っています。デフォルトは5です。実際の使用では、サイズは、動的に実際のニーズウィンドウに応じて調整することができます。それは小さなコーパスである場合、この値は小さく設定することができます。一般的なコーパスのために[5,10]の値をお勧めします。中央の単語であるべき個人理解を前後に複数の単語と関連付けられてもよく、いくつかの単語のみ文章内の単語の小さな量に関連付けることができる(このような短いテキストとしてのみその直接ワードが関連することができます)。
  • min_count:最小単語単語ベクトルを計算する必要があります。この値は、珍しい言葉の非常に低い周波数の一部を削除することができ、デフォルトは5です。コーパスが小さい場合は、この値を下げることができます。辞書遮断するように行うことができ、単語の頻度はmin_countが破棄されますワード数よりも少ないです。
  • 陰性:すなわち負のサンプリング数、デフォルト5を用いて、陰性サンプル。[3,10]の間にお薦め。
  • cbow_mean:投影を行うときCBOWのみ、アルゴリズムは、用語ベクトルコンテキストの平均と比較して、ベクトル和の単語と文脈で、0です。デフォルト値は、デフォルト値を変更することは推奨されません、1です。
  • ITER:確率的勾配降下法の反復の最大数は、デフォルト5。大規模コーパスのために、あなたは以下のコーパスで、この値を増やすことができ、私は効果は非常に良いトレーニングではありません、5回使用しました。
  • アルファは:直線訓練中min_alphaまでデクリメント初期学習率、です。初期学習率の反復確率的勾配降下法では、デフォルトは0.025です。
  • min_alphaは:アルゴリズムは学習率は、反復の過程で徐々に減少サポートしているので、min_alphaは最小学習率を与えます。反復手順の各ラウンドにおける確率的勾配降下法は、アルファ、ITERは一緒min_alphaに由来してもよいです。大規模コーパス、アルファの必要性、min_alpha、パラメータ調整とITER、適切な三つの値を選択します。
  • max_vocab_size:ベクター構築時に設定単語のRAMの制限、なしには制限は設定されていません。
  • サンプル:ランダムダウンサンプリング高周波ワード閾値設定は、デフォルトでは、1E-3、範囲(0,1e-5)です。
  • SEED:乱数ジェネレータ。初期化ベクトルに関連する単語。
  • 労働者:並列数を制御するためのトレーニング。
  • SG:すなわち、二つのモデルたちのword2vecを選択します。0の場合、それは、モデルがスキップ-グラムですCBOWモデルである、すなわち0がデフォルトCBOWモデルです。
  • HSは:それが0である場合、すなわち2はword2vecソリューションの私たちの選択は、それが負のサンプリングで、かつ負である場合、サンプルの負の数が0より大きい場合、それは階層的なソフトマックスです。デフォルトは0、つまり負のサンプリングです。
  • 陰性:ゼロよりも大きいが、それはnegativesamplingを使用する場合、ノイズワードの数(典型的には5~20)が設けられています。
  • hashfxn:重みを初期化するためのハッシュ関数は、デフォルトのpythonのハッシュ関数を使用します。
  • batch_words:スレッドの数は、各バッチの単語を渡すために、デフォルトは10000です。
  • trim_rule:削除しようとする、それらの単語を残すように指定して、語彙を設定するためのルールを仕上げ。Noneに設定することができます(min_countが使用されます)。
  • sorted_vocab:1(デフォルト)の場合、割当ワードインデックスは、単語の頻度に基づいて降順に初めてとなります。

1.2 gensimトレーニングword2vec単語ベクトルの手順

Gensimトレーニングを使用することは非常に便利Word2vec、次の手順を訓練:

  • 1)前処理コーパス:文書または文のための1つは、文書や文の単語(スペースで区切って、英語の単語は、英語の単語の間のスペースで区切られていないことができ、中国はワードツール・ワード、共通のセグメンテーションツールを使用する必要性に期待されていますそこStandNLP、ICTCLAS、Ansj、FudanNLP、HanLP、吃音ワード、等)。
  • 2)各反復によって返さトレーニング文イテレータに元のコーパスの変換は、文の単語(UTF8形式)のリストです。あなたはGensim word2vec.py LineSentence()メソッドの実装に使用することができます。
  • 3)word2vecトレーニングを組み込みオブジェクト上記プロセス入力Gensimの結果が必要。

2つのトレーニングSogouのコーパス

コーパス:そごう研究所ニューストレーニングコーパスSogouの研究室のようにします。http://www.sogou.com/labs/resource/ca.php
私は以上1 G、缶を抽出した後、フルバージョン、600以上のMの合計をダウンロードデータの形式にホーム。
登録は、情報ノートをダウンロードする必要があり
データが解凍されnews_sohusite_xml.dat、UTF-8エンコーディング形式に変換するデータニーズのGBK形式で、コンテンツのみコンテンツを必要とし、他の人が私のシステムから、あなたが解決するには、Linuxのコマンドを使用する必要があり、現時点では、ない必要性を行いますwindows10である、あなたは、Linuxのコマンドを実行するWSLをダウンロードする必要があります。特定のは、私のブログを参照してください。
窓Linuxのコマンドの下で使用
内容物を取り出し、Linuxの中で次のコマンドを実行します
cat news_sohusite_xml.dat | iconv -f gbk -t utf-8 -c | grep "<content>" > corpus.txt
1.71 Gの取得corpus.txtファイルを、ファイルをメモ帳でこのファイルを開くことができない大きすぎます。
次のプログラムのすべてがjupyterノートブックで実行されている、jupyterノートブックのダウンロードはアナコンダによって行うことができることを注意、以下を参照してください。
アナコンダのWindowsの10インストールと使用の下で

2.1分詞

文書は、単語がjiebaワードの実装、インストールjieba語使用することができますword2vec単語を与えるために必要とされる
使用してpip install jieba、元のテキストの単語を:

file_path = './corpus.txt'
file_segment_path = './corpus_segment.txt'
train_file_read = []
with open(file_path, 'r', encoding='utf-8') as f:
    for line in f.readlines():
        train_file_read.append(line)
train_file_read

収量:
ここに画像を挿入説明
print(len(train_file_read))セグメント数、1411996の出力があるかどうか確認してください。

import jieba
# jieba分词后保存在列表中
train_file_seg = []
for i in range(len(train_file_read)):
    train_file_seg.append([' '.join(list(jieba.cut(train_file_read[i][9:-11], cut_all=False)))])
    if i % 100 == 0:
        print(i)
train_file_seg

Wordには、複数の時間を過ごすことになります

# 保存分词结果到文件中
with open(file_segment_path, 'w', encoding='utf-8') as f:
    for i in range(len(train_file_seg)):
        f.write(train_file_seg[i])
        f.write('\n')
# 加载分词
seg_sentences = []
with open(file_segment_path, 'r', encoding='utf-8') as f:
    seg_sentences = f.readlines()
seg_sentences

ここに画像を挿入説明
我々は、空白部が存在することを確認することができ
、ブランク区間除去する
ここに画像を挿入説明
1298156個の単語部を残り合計
ここに画像を挿入説明

ベクトル・ワードの2.2建設

ここに画像を挿入説明
トレーニングは一時間以上かかります

2.3保存して負荷モデル

ここに画像を挿入説明

単語を使用して2.4ベクトル

ここに画像を挿入説明
model.similarityまた、過去に使用され、新しいバージョンが必要ですmodel.wv.similarity

3-D表示の空間ベクトルワード

私を参照してくださいgithubのを

公開された21元の記事 ウォンの賞賛1 ビュー1108

おすすめ

転載: blog.csdn.net/Elenstone/article/details/105284890