我已经生成了一个PySpark Word2Vec模型,如下所示:
from pyspark.ml.feature import Word2Vec
w2v = Word2Vec(vectorSize=100, minCount=1, inputCol='words', outputCol = 'vector')
model = w2v.fit(df)
(我用来训练模型的数据无关紧要,重要的是它们的格式正确,并且可以成功生成pyspark.ml.feature.Word2VecModel
对象。)
现在,我需要将此模型转换为Gensim Word2Vec模型。我该怎么办?
答案 0 :(得分:1)
如果您仍然有训练数据,那么重新训练gensim
Word2Vec
模型可能是最直接的方法。
如果只需要单词向量,也许PySpark的模型可以以word2vec.c
可以加载gensim
的{{1}}格式导出它们。
移植模型的唯一原因是继续训练。这种渐进式培训虽然可能,但需要考虑很多折衷办法,以平衡较早和较晚培训的影响,以获得良好的效果。
如果您实际上是想进行这种转换以便以这种方式进行更多的训练,那么这再次表明,使用原始训练来复制相似的模型可能是合理的。
但是,如果必须转换模型,通常的方法是研究两个模型的源代码和内部数据结构,以发现它们如何交替表示模型的每个关键方面:
.load_word2vec_format()
)model.wv.vectors
)合理的交互式方法可以是:
编写一些接受测试,这些测试采用两种类型的模型,并测试它们是否真的与您的目的“等效”。 (这对于检查单个单词的向量是否存在且相同是相对容易的,但是几乎与转换本身一样困难,以验证其他易于训练的更多行为。)
然后,在交互式笔记本中,加载源模型,并创建一个具有相同词汇量的虚拟gensim模型。查阅源代码,编写Python语句以将关键属性从源迭代复制/转换为目标,并反复测试它们是否等效。
完成后,请执行您手动执行的步骤,并将它们合并为实用程序方法以进行转换。再次验证其操作,然后尝试使用您希望的转换后的模型-也许发现被忽略的信息或发现过程中的其他错误,然后改进验证方法和转换方法。
PySpark模型可能会丢失gensim模型期望的结果,这可能需要综合可行的替换值。
祝你好运! (但是,如果您想让事情简单明了并且可以工作,请从原始数据中重新训练gensim模型。)