【问题标题】:Convert PySpark ML Word2Vec model to Gensim Word2Vec model将 PySpark ML Word2Vec 模型转换为 Gensim Word2Vec 模型
【发布时间】:2019-05-26 14:04:57
【问题描述】:

我已经生成了一个 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 模型。我该怎么办?

【问题讨论】:

    标签: pyspark gensim word2vec


    【解决方案1】:

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

    如果您只需要词向量,也许 PySpark 的模型可以将它们导出为 gensim 可以使用 .load_word2vec_format() 加载的 word2vec.c 格式。

    移植模型的唯一原因是继续训练。这种增量训练虽然可能,但需要考虑许多权衡,以平衡旧训练和后来训练的影响以获得良好的结果。

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

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

    • 已知的词向量(model.wv.vectors in gensim)
    • 单词的已知词汇,包括关于单词频率和单个单词位置的统计数据(model.wv.vocab in gensim)
    • 模型的隐藏到输出权重(`model.trainables' 及其在 gensim 中的属性)
    • 描述模型模式和元参数的其他模型属性

    一种合理的交互方式可能是:

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

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

    • 当他们这样做时,请执行您手动执行的那些步骤并将它们组合成一个实用方法来进行转换。再次验证其操作,然后按照您的希望尝试使用转换后的模型 - 可能会发现被忽略的信息或发现过程中的其他错误,然后改进验证方法和转换方法。

    PySpark 模型可能会缺少 gensim 模型所期望的东西,这可能需要综合可行的替换值。

    祝你好运! (但如果您希望事情简单明了且有效,请从原始数据重新训练 gensim 模型。)

    【讨论】:

      猜你喜欢
      • 2018-06-09
      • 2014-04-02
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 2017-07-16
      相关资源
      最近更新 更多