将PySpark ML Word2Vec模型转换为Gensim Word2Vec模型

时间:2018-12-28 20:02:25

标签: 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对象。)

现在,我需要将此模型转换为Gensim Word2Vec模型。我该怎么办?

1 个答案:

答案 0 :(得分:1)

如果您仍然有训练数据,那么重新训练gensim Word2Vec模型可能是最直接的方法。

如果只需要单词向量,也许PySpark的模型可以以word2vec.c可以加载gensim的{​​{1}}格式导出它们。

移植模型的唯一原因是继续训练。这种渐进式培训虽然可能,但需要考虑很多折衷办法,以平衡较早和较晚培训的影响,以获得良好的效果。

如果您实际上是想进行这种转换以便以这种方式进行更多的训练,那么这再次表明,使用原始训练来复制相似的模型可能是合理的。

但是,如果必须转换模型,通常的方法是研究两个模型的源代码和内部数据结构,以发现它们如何交替表示模型的每个关键方面:

  • 已知单词向量(gensim中的.load_word2vec_format()
  • 单词的已知词汇,包括有关单词频率和单个单词位置的统计信息(gensim中的model.wv.vectors
  • 模型的隐藏输出权重(gensim中的“ model.trainables”及其属性)
  • 其他描述模型模式和元参数的模型属性

合理的交互式方法可​​以是:

  • 编写一些接受测试,这些测试采用两种类型的模型,并测试它们是否真的与您的目的“等效”。 (这对于检查单个单词的向量是否存在且相同是相对容易的,但是几乎与转换本身一样困难,以验证其他易于训练的更多行为。)

  • 然后,在交互式笔记本中,加载源模型,并创建一个具有相同词汇量的虚拟gensim模型。查阅源代码,编写Python语句以将关键属性从源迭代复制/转换为目标,并反复测试它们是否等效。

  • 完成后,请执行您手动执行的步骤,并将它们合并为实用程序方法以进行转换。再次验证其操作,然后尝试使用您希望的转换后的模型-也许发现被忽略的信息或发现过程中的其他错误,然后改进验证方法和转换方法。

PySpark模型可能会丢失gensim模型期望的结果,这可能需要综合可行的替换值。

祝你好运! (但是,如果您想让事情简单明了并且可以工作,请从原始数据中重新训练gensim模型。)

相关问题