将PySpark ML Word2Vec模型转换为Gensim Word2Vec模型
我生成了一个PySpark Word2Vec模型,如下所示:将PySpark ML Word2Vec模型转换为Gensim Word2Vec模型,pyspark,gensim,word2vec,Pyspark,Gensim,Word2vec,我生成了一个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对象。)
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模型。我该怎么做呢?如果您仍然有培训数据,重新培训
gensim
Word2Vec
模型可能是最简单的方法
如果您只需要单词向量,也许PySpark的模型可以将它们导出为word2vec.c
格式,而gensim
可以使用.load\u word2vec\u format()
加载
移植该模型的唯一原因是继续培训。这种增量培训虽然可能,但需要考虑很多权衡,以平衡旧培训和后期培训的影响,从而获得良好的效果
如果您实际上希望通过这种方式进行这种转换以进行更多的培训,那么它再次表明,使用原始培训来复制类似的模型可能是合理的
但是,如果必须转换模型,一般的方法是研究两个模型的源代码和内部数据结构,以发现它们如何交替表示模型的每个关键方面:
- 已知字向量(
gensim中)model.wv.vectors
- 已知词汇表,包括单词频率和单个单词位置的统计数据(
在gensim中)model.wv.vocab
- 模型的隐藏到输出权重(`model.trainables'及其在gensim中的属性)
- 描述模型模式和元参数的其他模型属性
- 编写一些验收测试,测试这两种类型的模型,并测试它们是否真的“等效”。(这对于检查单个单词的向量是否存在和相同来说相对容易,但对于验证其他准备训练的行为来说,这几乎与转换本身一样困难。)
- 然后,在交互式笔记本中,加载源模型,并创建具有相同词汇表大小的虚拟gensim模型。参考源代码,编写Python语句以迭代方式将密钥属性从源代码复制/转换到目标代码中,反复测试它们是否等效
- 当他们这样做时,采取您手动执行的步骤,并将它们合并到实用程序方法中以进行转换。再次验证其操作,然后尝试按照您希望的方式使用转换后的模型——可能会发现过程中忽略的信息或发现其他错误,然后改进验证方法和转换方法