Apache spark Doc2Vec和PySpark:Gensim Doc2Vec在DeepDist上
我正在查看Apache spark Doc2Vec和PySpark:Gensim Doc2Vec在DeepDist上,apache-spark,pyspark,gensim,word2vec,Apache Spark,Pyspark,Gensim,Word2vec,我正在查看DeepDist()模块,并考虑将其与Gensim的Doc2VecAPI相结合,以便在PySpark上训练段落向量。该链接实际上提供了以下清晰示例,说明如何为Gensim的Word2Vec型号执行此操作: 从deepdist导入deepdist 从gensim.models.word2vec导入word2vec 从pyspark导入SparkContext sc=SparkContext() corpus=sc.textFile('enwiki').map(lambda s:s.spl
DeepDist
()模块,并考虑将其与Gensim
的Doc2Vec
API相结合,以便在PySpark
上训练段落向量。该链接实际上提供了以下清晰示例,说明如何为Gensim的Word2Vec
型号执行此操作:
从deepdist导入deepdist
从gensim.models.word2vec导入word2vec
从pyspark导入SparkContext
sc=SparkContext()
corpus=sc.textFile('enwiki').map(lambda s:s.split())
def梯度(模型,句子):#在工人身上执行
syn0,syn1=model.syn0.copy(),model.syn1.copy()#以前的权重
模型训练(句子)
返回{'syn0':model.syn0-syn0,'syn1':model.syn1-syn1}
def下降(模型,更新):#在主控计算机上执行
model.syn0+=更新['syn0']
model.syn1+=更新['syn1']
使用DeepDist(Word2Vec(corpus.collect())作为dd:
dd.列车(主体、坡度、下降)
打印dd.model.most_相似(正片=['woman','king'],负片=['man'])
据我所知,DeepDist
正在将梯度下降的工作分批分发到工作人员中,并在master上进行重组和更新。如果我将Word2Vec
替换为Doc2Vec
,则应该存在正在使用word向量进行训练的文档向量
因此,我查看了gensim.models.doc2vec
()的源代码。在doc2vec
模型实例中有以下字段:
model.syn0
model.syn0\u锁
model.docvecs.doctag\u syn0
model.docvecs.doctag\u syn0\u lock
gensim.models.word2vec
()的源代码相比,Doc2Vec
模型中缺少以下字段:
model.syn1
model.syn1neg
锁
向量,因为它们似乎是在训练完成后,当新的数据点出现时使用的。因此我的代码应该是
从deepdist导入deepdist
从gensim.models.doc2vec导入doc2vec,LabeledSentence
从pyspark导入SparkContext
sc=SparkContext()
#假设我的数据集格式为10字符id,后跟文档内容
#每个文件1行
语料库=sc.textFile('data_set').map(
lambda s:LabeledSentence(words=s[10:].split(),labels=s[:10])
)
def梯度(模型,句子):#在工人身上执行
syn0,doctag_syn0=model.syn0.copy(),model.docvecs.doctag_syn0.copy()#以前的权重
火车模型(句子)
返回{'syn0':model.syn0-syn0,'doctag_syn0':model.docvecs.doctag_syn0-doctag_syn0}
def下降(模型,更新):#在主控计算机上执行
model.syn0+=更新['syn0']
model.docvecs.doctag\u syn0+=更新['doctag\u syn0']
以DeepDist(Doc2Vec(corpus.collect())作为dd:
dd.列车(主体、坡度、下降)
打印dd.model.most_相似(正片=['woman','king'],负片=['man'])
我是否遗漏了任何重要信息?例如:
model..\u lock f
是训练后锁定的矩阵吗lambda s:LabeledSentence(words=s[10:]split(),labels=s[:10]
来解析我的数据集吗更新日期:2018年6月13日 很抱歉,我没有实现这一点。但是现在有更好的选择,而且
DeepDist
已经有一段时间没有维护了。请阅读下面的评论
如果你现在坚持尝试我的想法,请注意你是在冒险。另外,如果有人知道
DeepDist
仍然有效,请在评论中回复。这将有助于其他读者。为了避免这个问题继续显示为开放的,提问者是如何解决这个问题的:
我没有实现这一点,直到太迟了,我才认为它不会起作用。DeepDist在后端使用Flask应用程序与Spark web界面交互。由于它不再维护,Spark的更新很可能已经破坏了它。如果您正在Spark中寻找Doc2Vec培训,只需使用Deeplearning4J(Deeplearning4J.org/Doc2Vec#)
那篇博文是你写的吗?:)我真的很期待你的发现。你实现了这个吗?我也有兴趣在pyspark中培训doc2vec。对于阅读本文的人来说:我没有实现这个,直到太迟了,我才认为它不会起作用。DeepDist在后端使用Flask应用程序与Spark web界面交互。因为它没有维护任何此外,Spark的更新很可能已经破坏了它。如果您正在Spark中寻找Doc2Vec培训,只需使用Deeplearning4J()