代码之家  ›  专栏  ›  技术社区  ›  whs2k

Pyspark如何从word2vec word嵌入计算Doc2Vec?

  •  7
  • whs2k  · 技术社区  · 6 年前

    我有一个pyspark数据框架,其中包含约300k个唯一行的语料库,每个行都有一个“doc”,其中包含几个句子的文本。

    处理后,我得到了每行/文档的200维矢量表示。我的NLP流程:

    1. 使用正则表达式udf删除标点符号
    2. 使用nltk snowball udf进行词干分析)
    3. Pyspark标记器
    4. Word2Vec(ml.feature.Word2Vec,vectorSize=200,windowSize=5)

    我理解这个实现如何使用skipgram模型根据使用的完整语料库为每个单词创建嵌入。我的问题是: 这个实现如何从语料库中每个单词的向量到每个文档/行的向量?

    它是否与gensim doc2vec实现中的过程相同,只是将每个文档中的单词向量连接在一起 How does gensim calculate doc2vec paragraph vectors . 如果是这样的话,它如何将向量缩减到指定的200字大小(是否只使用前200个单词?平均值?)?

    我无法从源代码中找到信息: https://spark.apache.org/docs/2.2.0/api/python/_modules/pyspark/ml/feature.html#Word2Vec

    非常感谢您的帮助或参考资料!

    2 回复  |  直到 6 年前
        1
  •  5
  •   gojomo    6 年前

    从单词向量到一系列文本的单个向量的一种简单方法是将向量平均在一起。而且,对于某些任务来说,这通常足够有效。

    然而,这并不是 Doc2Vec 中的类 gensim 确实如此。该类实现 'Paragraph Vectors' technique ,其中单独的文档向量以类似于单词向量的方式进行训练。

    文档向量参与训练有点像一个浮动合成词,参与每个滑动窗口/目标词预测。他们是 由先前存在的词向量组合或串联而成,但在某些模式下,它们可能会同时与词向量一起训练。(然而,在gensim中使用参数启用的快速且通常性能最好的PV-DBOW模式 dm=0 ,根本不训练或使用输入字向量。它只训练有利于预测每个文本示例中单词的文档向量。)

    由于您提到了多个库(Spark MLib和gensim),但您还没有显示代码,所以不确定具体是什么 你的 现有流程正在执行。

        2
  •  1
  •   Slyer    5 年前

    在Pyspark中,ml.feature。Word2Vec用于通过计算Word2Vec的平均值以及每个文档中的术语频率(TF)的权重来获得被调用的doc2vec。 您可以在中研究官方示例的结果 https://spark.apache.org/docs/2.2.0/api/python/_modules/pyspark/ml/feature.html#Word2Vec