Pyspark 如何从 word2vec 词嵌入计算 Doc2Vec?
How does Pyspark Calculate Doc2Vec from word2vec word embeddings?
我有一个 pyspark 数据框,其中包含约 30 万行的语料库,每行都有一个 "doc",每行包含几句文本。
处理后,我得到了每个 row/doc 的 200 维矢量化表示。我的 NLP 过程:
- 使用正则表达式 udf 删除标点符号
- 使用 nltk snowball udf 进行词干提取)
- Pyspark 分词器
- Word2Vec (ml.feature.Word2Vec, vectorSize=200, windowSize=5)
我了解此实现如何使用 skipgram 模型基于所用的完整语料库为每个单词创建嵌入。我的问题是:这个实现如何从语料库中每个单词的向量到每个 document/row 的向量?
它是否与 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
任何帮助或参考 material 非常感谢!
从词向量到文本范围的单个向量的一种简单方法是将向量平均在一起。而且,对于某些任务来说,这通常效果很好。
然而,gensim
中的 Doc2Vec
class 并不是这样做的。 class 实现了 'Paragraph Vectors' technique,其中单独的文档向量以类似于单词向量的方式进行训练。
doc-vectors参与训练有点像一个浮动的合成词,参与每一次滑动window/target-word-prediction。它们 不是 由预先存在的词向量组成或连接而成,尽管在某些模式下它们可能会与词向量同时训练。 (但是,在 gensim 中使用参数 dm=0
启用的快速且通常表现最佳的 PV-DBOW 模式根本不训练或使用输入词向量。它只训练良好的文档向量用于预测每个文本示例中的单词。)
由于您提到了多个库(包括 Spark MLib 和 gensim),但您没有显示您的代码,因此不确定 您的
现有流程正在做。
在Pyspark中,ml.feature.Word2Vec用于计算每个doc中word2vecs的平均值和词频(TF)的权重,从而得到调用的doc2vec。
你可以研究https://spark.apache.org/docs/2.2.0/api/python/_modules/pyspark/ml/feature.html#Word2Vec
中官方示例的结果
我有一个 pyspark 数据框,其中包含约 30 万行的语料库,每行都有一个 "doc",每行包含几句文本。
处理后,我得到了每个 row/doc 的 200 维矢量化表示。我的 NLP 过程:
- 使用正则表达式 udf 删除标点符号
- 使用 nltk snowball udf 进行词干提取)
- Pyspark 分词器
- Word2Vec (ml.feature.Word2Vec, vectorSize=200, windowSize=5)
我了解此实现如何使用 skipgram 模型基于所用的完整语料库为每个单词创建嵌入。我的问题是:这个实现如何从语料库中每个单词的向量到每个 document/row 的向量?
它是否与 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
任何帮助或参考 material 非常感谢!
从词向量到文本范围的单个向量的一种简单方法是将向量平均在一起。而且,对于某些任务来说,这通常效果很好。
然而,gensim
中的 Doc2Vec
class 并不是这样做的。 class 实现了 'Paragraph Vectors' technique,其中单独的文档向量以类似于单词向量的方式进行训练。
doc-vectors参与训练有点像一个浮动的合成词,参与每一次滑动window/target-word-prediction。它们 不是 由预先存在的词向量组成或连接而成,尽管在某些模式下它们可能会与词向量同时训练。 (但是,在 gensim 中使用参数 dm=0
启用的快速且通常表现最佳的 PV-DBOW 模式根本不训练或使用输入词向量。它只训练良好的文档向量用于预测每个文本示例中的单词。)
由于您提到了多个库(包括 Spark MLib 和 gensim),但您没有显示您的代码,因此不确定 您的 现有流程正在做。
在Pyspark中,ml.feature.Word2Vec用于计算每个doc中word2vecs的平均值和词频(TF)的权重,从而得到调用的doc2vec。 你可以研究https://spark.apache.org/docs/2.2.0/api/python/_modules/pyspark/ml/feature.html#Word2Vec
中官方示例的结果