1、Word2Vec()
Word2Vec(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))
2、说明
参数:
sentences:中文的或者英文的文章都可以,一般一篇文章就是一行,要经过预处理才能使用,将文本语料进行分词,以空格,tab隔开都可以。可以是读入数据以后为list的语料,一般是二维list,每一个子list是一篇文章切词后的形式。要么使用
模型的词向量调用:
model.wv.vocab:可以直接调用生成的词向量
模型的保存(二进制):
# 构建数据通道,进行数据加载,在此之前数据已经切分完毕,一行一篇切好词的文章(词与词之间用空格间隔开)
sentences = LineSentence('./test_w2c_qieci_wenben.txt')
# pdb.set_trace()
# 模型训练
model = Word2Vec(sentences , size=100, window=5, min_count=1, workers=4)
# 模型保存
model.save('./w2cmodel/word2vec_test.model')
# model = Word2Vec(qieci_str, size=100, window=5, min_count=1, workers=4)
print(model.wv.vocab)
模型的保存(txt文本形式):
# 构建数据通道,进行数据加载,在此之前数据已经切分完毕,一行一篇切好词的文章(词与词之间用空格间隔开)
sentences = LineSentence('./test_w2c_qieci_wenben.txt')
# 模型训练
model = Word2Vec(sentences , size=100, window=5, min_count=1, workers=4)
# 模型保存
model.wv.save_word2vec_format('./w2cmodel/word2vec_test.txt',binary=False)
模型的加载(二进制文本):
model = Word2Vec.load('./w2cmodel/word2vec_test.model')
print(model.wv.vocab)
模型的加载(txt文本):
# 加载txt词向量
model = gensim.models.KeyedVectors.load_word2vec_format('./w2cmodel/word2vec_test.txt')
print(model.wv.vocab)
模型数据传入说明:
这里就是对于参数sentences的传入结果说明:
sentences = LineSentence('./test_w2c_qieci_wenben.txt')
model = Word2Vec(sentences , size=100, window=5, min_count=1, workers=4)
print(model.wv.vocab)
"""
'熟悉': , '汉朝': , '历史': , '的': , '人': , '都': , '知道': , ',': , '卫青': , '是': , '西汉时期': , '名将': , '他': , '揭开': , '了': , '汉': , '匈': , '战争': , '反败为胜': , '序幕': , '曾': , '七': , '战七捷': , '收复': , '河朔': , '、': , '河套': , '地区': , '击破': , '单于': , '为': , '北部': , '疆域': , '开拓': , '做出': , '重大贡献': , '。': , '一生': , '十分': , '传奇': , '立下': , '战功': , '无数': , '汉武帝': , '在位': , '时卫': , '青官': , '至': , '大司马': , '大将军': , '封长平': , '侯': , '家族': , '也': ,
"""
# 这个就是直接传入列表
model = Word2Vec(qieci_str, size=100, window=5, min_count=1, workers=4)
print(model.wv.vocab)
"""
'熟': , '悉': , ' ': , '汉': , '朝': , '历': , '史': , '的': , '人': , '都': , '知': , '道': , ',': , '卫': , '青': , '是': , '西': , '时': , '期': , '名': , '将': , '他': , '揭': , '开': , '了': , '匈': , '战': , '争': , '反': , '败': , '为': , '胜': , '序': , '幕': , '曾': , '七': , '捷': , '收': , '复': , '河': , '朔': , '、': , '套': , '地': , '区': , '击': , '破': , '单': , '于': , '北': , '部': , '疆': , '域': , '拓': , '做':
"""
3、word2vec所有测试
from gensim.models.word2vec import Word2Vec,LineSentence
import jieba
import pandas as pd
import pdb
# from gensim.models.keyedvectors.Word2VecKeyedVectors import load_word2vec_format
import gensim
"""
1、将语料库预处理:一行一个文档或句子,将文档或句子分词(以空格分割,英文可以不用分词,英文单词之间已经由空格分割,
中文预料需要使用分词工具进行分词,常见的分词工具有StandNLP、ICTCLAS、Ansj、FudanNLP、HanLP、结巴分词等)
2、将原始的训练语料转化成一个sentence的迭代器,每一次迭代返回的sentence是一个word(utf8格式)的列表。
可以使用Gensim中word2vec.py中的LineSentence()方法实现
3、将上面处理的结果输入Gensim内建的word2vec对象进行训练即可
"""
# with open('./test_w2c.csv', "r",encoding='utf-8',errors='ignore') as f:
# # 原始短文本,每个文本切词存放为一个list
# qieci_list = []
# for data in f.readlines():
# qieci_list.append(jieba.lcut(data))
# # 切词后再次连接在一起
# qieci_str = []
# for wenben in qieci_list:
# qieci_str.append(' '.join(wenben))
# with open('./test_w2c_qieci_wenben.txt', 'w', encoding='utf-8') as f:
# for i in qieci_str:
# f.write(i)
# # print(qieci_str)
# # 构建数据通道,进行数据加载,在此之前数据已经切分完毕,一行一篇切好词的文章(词与词之间用空格间隔开)
# sentences = LineSentence('./test_w2c_qieci_wenben.txt')
# # pdb.set_trace()
# # 模型训练
# model = Word2Vec(sentences , size=100, window=5, min_count=1, workers=4)
# # 模型保存
# # model.save('./w2cmodel/word2vec_test.model')
# model.wv.save_word2vec_format('./w2cmodel/word2vec_test.txt',binary=False)
# # print(model.wv.vocab)
# 加载txt词向量
model = gensim.models.KeyedVectors.load_word2vec_format('./w2cmodel/word2vec_test.txt')
print(model.wv.vocab)
# model = Word2Vec(qieci_str, size=100, window=5, min_count=1, workers=4)
# 模型加载
# model = Word2Vec.load('./w2cmodel/word2vec_test.model')
# print(model.wv.vocab)