gensim使用word2vec处理时序数据

tech2025-12-24  2

文章目录

简介处理流程数据预处理使用gensim生成w2vpickle存储读取w2v

简介

word2vec大多数人知道是NLP一种预处理编码技术,但是我个人通过数据竞赛和推荐系统方面的学习发现word2vec在竞赛和推荐等场景使用也非常多。

如果你想做NLP的w2v,其实我比较推荐使用sklearn中自带的库,因为使用gensim本身对输入有一些处理,比如:

gensim会自动去掉停用词,也就是说gensim不能得到停用词的embgensim也不对I这种单个字母的生成emb等等(我有点记不清了,但是确实存在一些不方便的情况)

不多对于sequence时序数据来说,用gensim是很方便的。 这篇我主要是介绍一下对于一般的推荐场景、crt比赛、数据竞赛如何使用gensim处理时序数据,生成w2v.

处理流程

如果没有时序数据,build sequence特征sentence预处理,因为gensim对于输入是有要求的使用gensim.models.Word2Vec生成emb一般处理的数据集都比较大,我们会利用pickle将得到的w2v进行存储然后使用的时候使用pickle.loac进行读取

数据

我们定义了几行数据用来进行演示:

这里假设就是用户点击广告id序列,根据时间排列,同时0表示[padding],就是为了对齐而使用的一个站位符号。

预处理

我比较习惯使用迭代器去做:

class MySeqence(object): def __init__(self, data_df, feat): self.data = data_df self.feat = feat def __iter__(self): for line in self.data[self.feat].values: yield line.split('|')

这里注意每一次返回的是一个record的sequence,如果是文档的话就是一个line对应一个文档。

测试一下,看一下输出的格式:

a = MySeqence(data,'click_sequence') for i in a: print(i)

使用gensim生成w2v

## sg=1_skip-gram sg=0_CBOW w2v = gensim.models.Word2Vec(a, size=4, window=2, min_count=1, sg=1, iter=5)

一定要注意几个参数,sg这里我选择的skip-gram,然后iter是迭代次数。

此时其实就已经完成了 ,但是我们往往处理的数据集有好几个g甚至几十个g,一定要学会使用pickle对w2v进行存储 。

pickle存储

pickle.dump(w2v, open(os.path.join('./', 'click_sequence' + '.{}d'.format(4)), 'wb'))

然后我们就会得到w2v已经被保存了

读取w2v

p_f = open('./click_sequence.4d', 'rb') new_w2v = pickle.load(p_f)

done.

大家共勉

最新回复(0)