Sogouのニュースデータセットは、共有のletみんなの迂回路に期待して、ピット上のステップに自分自身に多くの時間を行うには、中国語の単語ベクトル(Word2Vec)を訓練します。
この研究が完了した後、あなたはをクリックすることができウィキペディア単語ベクトルのトレーニング、さらにその単語ベクトルモデルを改善するために!
参考記事:Sogouのコーパスは単語ベクトル取得word2vec
自然言語処理スターター()------トレーニングSogouのニュースコーパス処理とword2vec単語ベクトル
word2vec使用概要
ダウンロードデータセット
検索犬のニュースのデータセットの使用ラボダウンロード
ミニバージョンから選択するフルバージョンがあります。私はフルバージョンのダウンロードのtar.gz形式を。
データ処理の設定
(A)の文書を抽出します
Windowsのコマンドプロンプト(CMD)、配置されている文書ファイルに移動を開き、次のコマンドを入力します。
tar -zvxf news_sohusite_xml.full.tar.gz
あなたは下のファイルをダウンロードすることができnews_sohusite_xml.full.tar.gz解凍であるnews_sohusite_xml.dat
(B)ドキュメントのエキス
(データが大きすぎるので、私はPycharmで開かれた、)私たちは、抽出の後にデータを見て
2見つかったキーポイント文書の保存形式である(2)は、問題をコードする(1)文書を、我々はトランスコードのためにそれを必要とする:UML、URLがありますページリンクは、contenttitleは、ページのタイトルで、コンテンツはページの内容で、あなたは自分のニーズに応じて情報を得ることができます。
使い方CMD「トランスコードしながら、プロセス、再抽出したコンテンツにコンテンツ」:
type news_sohusite_xml.dat | iconv -f gbk -t utf-8 -c | findstr "<content>" > corpus.txt
この時間が不足するとエラーが原因であってもよいiconv.exe、あなたがダウンロードする必要がありwin_iconv -変換ツールをコードする、解凍ダウンロード、コピーiconv.exeを Cに:\ WINDOWS \ System32に、使用することができます。
文書に格納されcorpus.txt、効果は、図3に示します。
(C)ワード文書
確立corpusSegDone.txt保存ファイルの単語の結果としてファイルを。次のコードワードを入力し、印刷プロセス100の行ごとに一度、あなたは進捗状況を見ることができます。
import jieba
import re
filePath = 'corpus.txt'
fileSegWordDonePath = 'corpusSegDone.txt'
# 将每一行文本依次存放到一个列表
fileTrainRead = []
with open(filePath, encoding='utf-8') as fileTrainRaw:
for line in fileTrainRaw:
fileTrainRead.append(line)
# 去除标点符号
fileTrainClean = []
remove_chars = '[·’!"#$%&\'()*+,-./:;<=>?@,。?★、…【】《》?“”‘’![\\]^_`{|}~]+'
for i in range(len(fileTrainRead)):
string = re.sub(remove_chars, "", fileTrainRead[i])
fileTrainClean.append(string)
# 用jieba进行分词
fileTrainSeg = []
file_userDict = 'dict.txt' # 自定义的词典
jieba.load_userdict(file_userDict)
for i in range(len(fileTrainClean)):
fileTrainSeg.append([' '.join(jieba.cut(fileTrainClean[i][7:-7], cut_all=False))]) # 7和-7作用是过滤掉<content>标签,可能要根据自己的做出调整
if i % 100 == 0: # 每处理100个就打印一次
print(i)
with open(fileSegWordDonePath, 'wb') as fW:
for i in range(len(fileTrainSeg)):
fW.write(fileTrainSeg[i][0].encode('utf-8'))
fW.write('\n'.encode("utf-8"))
セグメンテーション手順は、時間45分で、Iの合計は、行140W、以下に示します。
図の言葉に示された結果:
gensim訓練ベクトル語で
コメントのほとんどは、直接コードに取り付けた、作られました。
import logging
import sys
import gensim.models as word2vec
from gensim.models.word2vec import LineSentence, logger
def train_word2vec(dataset_path, out_vector):
# 设置输出日志
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
logger.info("running %s" % ' '.join(sys.argv))
# 把语料变成句子集合
sentences = LineSentence(dataset_path)
# 训练word2vec模型(size为向量维度,window为词向量上下文最大距离,min_count需要计算词向量的最小词频)
model = word2vec.Word2Vec(sentences, size=100, sg=1, window=5, min_count=5, workers=4, iter=5)
# (iter随机梯度下降法中迭代的最大次数,sg为1是Skip-Gram模型)
# 保存word2vec模型(创建临时文件以便以后增量训练)
model.save("word2vec.model")
model.wv.save_word2vec_format(out_vector, binary=False)
# 加载模型
def load_word2vec_model(w2v_path):
model = word2vec.KeyedVectors.load_word2vec_format(w2v_path, binary=True)
return model
# 计算词语的相似词
def calculate_most_similar(model, word):
similar_words = model.most_similar(word)
print(word)
for term in similar_words:
print(term[0], term[1])
if __name__ == '__main__':
dataset_path = "corpusSegDone.txt"
out_vector = 'corpusSegDone.vector'
train_word2vec(dataset_path, out_vector)
しかし、私はそれはそう単純ではありません知っています。私は、最初の警告をしました。
UserWarning:Cの拡張機能がロードされていない、トレーニングが遅くなります。
私は無駄に完全な10時間の訓練を受け、私は、始まりを見ていなかった結果が唯一EPOCH 160単語/秒の背面に扱うことができ、通常は数十万人!!!実際には非常にSLOW ::> _ <::
情報を確認した後、私はCの拡張機能の欠如ということを学びました、3つのソリューションがあります。
-
また、自分でインストール、あなたが必要Visual Studioが このブロガーを見ます
-
condaのインストール、自動的にCコンパイラが結合このブロガーを見ます
-
上位バージョンをアンインストールしgensimパッケージ、3.7.1バージョンをインストールし、私はより速く、これを使用しています。
# 首先打开cmd,卸载gensim
pip uninstall gensim
#接着安装3.7.1版本
pip install gensim==3.7.1
もう一度実行して、それがこの警告が、それを変更するには警告を表示しません!非常に強力なO__O」
UserWarning:この機能は廃止され、使用が代わりにsmart_open.open。詳細については、マイグレーション・ノートを参照してください: 点击这里
リンクを開く、それが見つかりました。smart_openストリーミング大きなファイルを転送するためのPythonツールを- 。我々はさておき、それについて話を、私たちは言葉の加工の現在のレートを見てみるかもしれませんが、今、プログラムが中に実行されている「、と言って外国進行猿で、彼の30ワット/秒に達し 、実行時間の大幅な変更を行っている秒。 「
ルックバックsmart_openそれを行うことができます行うには、オープン()、だけでなく、コードの書かれており、少ないエラーを生成を減らすことができます。smart_openインストールPIPあり、使用が大きなファイルを開くときに()することができsmart_open.open。
1時間30分を使用する場合は、だった「word2vec.model」モデル
トレーニングコードコメントし、コードがモデルをロードするために実行されています。
# 加载模型
def load_word2vec_model(w2v_path):
model = word2vec.Word2Vec.load(w2v_path)
return model
model = load_word2vec_model("word2vec.model") # 加载模型
次のコードは、「中国」と最も近い単語を算出し、使用します。
def calculate_most_similar(self, word):
similar_words = self.wv.most_similar(word)
print(word)
for term in similar_words:
print(term[0], term[1])
model = load_word2vec_model("word2vec.model")
calculate_most_similar(model, "中国")
結果は:(として、以下です)大丈夫と思われる
男のに似てO_O
ベクトルは、単語をプリントアウトすることができます:
print(model['男人'])
最もunsocial単語を識別します。
# 找出不合群的词
def find_word_dismatch(self, list):
print(self.wv.doesnt_match(list))
list = ["早饭", "吃饭", "恰饭", "嘻哈"]
find_word_dismatch(model, list)
完全なコード:
import logging
import sys
import gensim.models as word2vec
from gensim.models.word2vec import LineSentence, logger
# import smart_open
def train_word2vec(dataset_path, out_vector):
# 设置输出日志
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
logger.info("running %s" % ' '.join(sys.argv))
# 把语料变成句子集合
sentences = LineSentence(dataset_path)
# sentences = LineSentence(smart_open.open(dataset_path, encoding='utf-8')) # 或者用smart_open打开
# 训练word2vec模型(size为向量维度,window为词向量上下文最大距离,min_count需要计算词向量的最小词频)
model = word2vec.Word2Vec(sentences, size=100, sg=1, window=5, min_count=5, workers=4, iter=5)
# (iter随机梯度下降法中迭代的最大次数,sg为1是Skip-Gram模型)
# 保存word2vec模型
model.save("word2vec.model")
model.wv.save_word2vec_format(out_vector, binary=False)
# 加载模型
def load_word2vec_model(w2v_path):
model = word2vec.Word2Vec.load(w2v_path)
return model
# 计算词语最相似的词
def calculate_most_similar(self, word):
similar_words = self.wv.most_similar(word)
print(word)
for term in similar_words:
print(term[0], term[1])
# 计算两个词相似度
def calculate_words_similar(model, word1, word2):
print(model.similarity(word1, word2))
# 找出不合群的词
def find_word_dismatch(self, list):
print(self.wv.doesnt_match(list))
if __name__ == '__main__':
dataset_path = "corpusSegDone.txt"
out_vector = 'corpusSegDone.vector'
train_word2vec(dataset_path, out_vector) # 训练模型
model = load_word2vec_model("word2vec.model") # 加载模型
# calculate_most_similar(model, "吃饭") # 找相近词
# calculate_words_similar(model, "男人", "女人") # 两个词相似度
# print(model.wv.__getitem__('男人')) # 词向量
# list = ["早饭", "吃饭", "恰饭", "嘻哈"]
# find_word_dismatch(model, list)
\ ^ O ^ /最終的にそれを完成!メッセージを残すことができますどのような問題が、私は答えることを試みます!└(^ O ^)┘そこに何か間違っているが、また、展覧会を見て!
:ウェルカムバックは、次のいずれかを参照するにはWikipediaのコーパスのトレーニング中国語の単語ベクトルとを
参考記事
再び3件の記事を感謝したら、私はこの鶏料理を保存しました!
参考記事:Sogouのコーパスは単語ベクトル取得word2vec
自然言語処理スターター()------トレーニングSogouのニュースコーパス処理とword2vec単語ベクトル
word2vec使用概要