推荐算法中的word2vec大牛直接用的该库源码,然后这个玩意目前我无法得到,所以有看到word2vec库,然而这个库不能直接在win下用pip安装,所以我先试试在服务器能不能行?
服务器是可以的,依赖环境Cython。不过有个警告,不知道会不会影响
>>> import word2vec
/./anaconda3/lib/python3.7/site-packages/sklearn/externals/joblib/__init__.py:15: FutureWarning: sklearn.externals.joblib is deprecated in 0.21 and will be removed in 0.23. Please import this functionality directly from joblib, which can be installed with: pip install joblib. If this warning is raised when loading pickled models, you may need to re-serialize those models with scikit-learn 0.21+.
warnings.warn(msg, category=FutureWarning)
>>> import sklearn
>>> sklearn.__version__
'0.22.1'
解释有点蒙蔽,没看懂啥意思。暂且不管。
然而似乎与大牛所讲的参数不同,不知道怎么对应上,于是考虑gensim的Word2Vec
Help on package word2vec:
NAME
word2vec
PACKAGE CONTENTS
_version
io
scripts_interface
tests (package)
utils
word2vec_noop
wordclusters
wordvectors
VERSION
0.10.2
FILE
/home/./lib/python3.7/site-packages/word2vec/__init__.py
服务器也可直接安装gensim,然而参数与大牛的还是有区别,有点蒙蔽,怎么显示训练后的输出。待我搜索下其他资料,发现绝大多数还是用的gensim的模块。
下面继续熟悉model的一些函数,来源help给出的官方用法示例:例子1
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
上面的sentences需要传入两次吗??需要创建vocabulary吗?我对比下不创建的结果是否一样,这里面还涉及到一个问题,也就是说同样的代码,不同次运行结果相同吗?结果是一样的,只要参数不变。这和深度学习不同,深度学习训练的模型,即便是参数都一样,网络参数也不同。
必须在训练前创建vocabulary,
RuntimeError: you must first build vocabulary before training the model
train不给sentence也不行。行吧,按照官方的来。
help model.train得到其参数:
train(sentences=None, corpus_file=None, total_examples=None, total_words=None,
epochs=None, start_alpha=None, end_alpha=None, word_count=0, queue_factor=2,
report_delay=1.0, compute_loss=False, callbacks=())
为了避免常见的错误,epoch必须显示给出,迭代的次数;
sentencs仍旧是列表迭代器,元素为str;corpus_file : str,语料文件地址两者只能有其一;
total_examples : int ,sentences的数量;total_words : int,sentences中词的个数;
start_alpha : float ,end_alpha : float,如果这俩提供了,将会替换Word2Vec初始化时给定的相应参数。
word_count : int,已经训练的词的个数,通常设置为0,因为训练了所有sentences中的词;
report_delay : float在报告过程之前等待的时间。
官方例子2:初始化模型,并保存模型的参数,此时并没有保存语料,我绝对似乎不需要给定语料,但在加载模型后必须再次创建vocabulary,否则出错。另外,语料似乎保存了,因为没有给common_texts时模型比较小。给定后加载不需再次创建vocabulary
model = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)
model.save("word2vec.model")
model2 = Word2Vec.load("./word2vec.model")
model2.train(common_texts,total_examples=model.corpus_count, epochs=model2.iter)
另外有个函数别瞎用,坑人的函数,其实就是个路径,不过这个路径是放在C盘的temp文件夹下,真是坑爹。
get_tmpfile
path = get_tmpfile("./wordvectors.kv")
>>> path
'C:\\Users\\ggca1\\AppData\\Local\\Temp\\./wordvectors.kv'
例子3:多词表达,没懂啥意思
bigram_transformer = Phrases(common_texts)
model = Word2Vec(bigram_transformer[common_texts], min_count=1)
另外有相关问题可以加入QQ群讨论,不设微信群
QQ群:868373192
语音图像视频深度-学习群
作者:ImageVideoKing