word2vec大多数人知道是NLP一种预处理编码技术,但是我个人通过数据竞赛和推荐系统方面的学习发现word2vec在竞赛和推荐等场景使用也非常多。
如果你想做NLP的w2v,其实我比较推荐使用sklearn中自带的库,因为使用gensim本身对输入有一些处理,比如:
gensim会自动去掉停用词,也就是说gensim不能得到停用词的embgensim也不对I这种单个字母的生成emb等等(我有点记不清了,但是确实存在一些不方便的情况)不多对于sequence时序数据来说,用gensim是很方便的。 这篇我主要是介绍一下对于一般的推荐场景、crt比赛、数据竞赛如何使用gensim处理时序数据,生成w2v.
我们定义了几行数据用来进行演示:
这里假设就是用户点击广告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)一定要注意几个参数,sg这里我选择的skip-gram,然后iter是迭代次数。
此时其实就已经完成了 ,但是我们往往处理的数据集有好几个g甚至几十个g,一定要学会使用pickle对w2v进行存储 。
然后我们就会得到w2v已经被保存了
done.
大家共勉
