一、利用gensim做word2vec训练
涉及文件:generate_corpus.py和word2vec.py
1、generate_corpus.py
程序读取所有文本数据(训练集+测试集),每一条文本数据作为单独一行写入corpus.txt中,准备作为word2vec.py的输入。
import pandas as pd
train = pd.read_csv(r'../data/train.csv', delimiter='\t') # r代表反转义
test_a = pd.read_csv(r'../data/test_a.csv', delimiter='\t')
test_b = pd.read_csv(r'../data/test_b.csv', delimiter='\t')
all_data = pd.concat([train['text'], test_a['text'], test_b['text']], axis=0)
sentences = []
for document in all_data.tolist():
sentences.append(document)
with open("./corpus.txt", 'w') as f:
for line in sentences:
f.write(line)
f.write('\n')
f.close()
corpus.txt内容格式:
2967 6758 339 2021 1854 3731 4109 3792 4149 1519 2058 3912 2465 2410 1219 6654
7539 264 2456 4811 1292 2109 6905 5520 7058 6045 3634 6591 3530 6508 2465 7044
1519 3659 2073 3750 3731 4109 3792 6831
2614 3370 4269 3370 486 5770 4109 4125
3750 5445 2466 6831 6758 3743 3630 1726 2313 5906 826 4516 657
corpus.txt内容格式仅仅影响word2vec.py中的数据读取方式,因此并不重要。
2、word2vec.py
程序读取generate_corpus.py生成的corpus.txt文本。读取方式和corpus.txt写入的方式有关,准备喂入Word2Vec的sentences格式为[[“cat”, “say”, “meow”], [“dog”, “say”, “woof”]]。
from gensim.models import Word2Vec
sentences = []
load_path = r'../corpus/corpus.txt'
with open(load_path, 'r') as lines:
for line in lines:
line = line[:-1] # 去掉换行符\n
sentences.append(line.split(' ')[:])
# sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
model = Word2Vec(sentences=sentences,
size=200, # 词向量的维度
alpha=0.025, # 初始学习率
window=5, # 当前词与预测词的距离
min_count=2, # 忽略总频率低于此的所有单词
sample=0.001,
seed=2020, # 随机种子
workers=11,
min_alpha=0.0001,
sg=0, # cbow, 1是skip-gram
hs=0, # 0使用了负采样, 1使用了层级softmax
negative=5, # 负采样个数.
ns_exponent=0.75,
cbow_mean=1,
iter=20) # 迭代次数
model.save("./word2vec.model") # 保存模型
print("sucessful")
模型Word2Vec常用参数详见代码注释。
也可以自己在Pycharm中ctrl+鼠标左键进行查看。