w2v里样本是“句子”产生的,所以是有顺序的,i2v里的item其实是set,可以认为无序。
也就是说,一个用户的所有观看(举例而言的,其实有时候观看完成度太低是不算正样本的,而且会有长度限制、时效限制)构成set,set里item两两互为正样本。
懂了w2v,把w换成i就是i2v了。有点小区别就是,w2v里样本是“句子”产生的,所以是有顺序的,i2v里的item其实是set,可以认为无序。也就是说,一个用户的所有观看(举例而言的,其实有时候观看完成度太低是不算正样本的,而且会有长度限制、时效限制)构成set,set里item两两互为正样本。
链接:https://www.jianshu.com/p/0ecc53bba169
gensim输出
'w2v.model.wv.vectors.npy', 'w2v.model.trainables.syn1neg.npy', 'w2v.model', 'w2v.model.trainables.vectors_lockf.npy'
corpus.model是自己命名的模型名。注意:这 三个文件在一起才是模型。
corpus.model corpus.model.wv.vectors.npy corpus.model.trainables.syn1neg.npy
这里有个注意:腾讯开源的word2vec是没有以上三个文件组成的预训练模型的。他开源的一个个结果文件,也就是说每个词语对应的 向量的字典。
gensim输入
模型初始化
from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
model = Word2Vec(min_count=1)
model.build_vocab(sentences) # prepare the model vocabulary
model.train(sentences, total_examples=model.corpus_count, epochs=model.iter) # train word vectors
(1, 30)
更详细的参数解释
model = Word2Vec(sentence,
sg=1,
size=100,
window=5,
min_count=1,
negative=5,
sample=0.001,
hs=0,
workers=multiprocessing.cpu_count(),
iter=1
)
增量训练
model = Word2Vec.load(latest_ckpt) #模型三个文件都在不然报错
# 增量训练
model.build_vocab(sentence, update=True) # 更新词汇表
model.train(sentence, total_examples=len(sentence), epochs=model.iter)
# epoch=iter语料库的迭代次数;(默认为5) total_examples:句子数。
参考:
https://www.jianshu.com/p/0ecc53bba169 推荐系统入门实践(4)召回之item2vec