Pyspark如何从word2vec单词嵌入中计算Doc2Vec?

问题描述 投票:5回答:2

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

在处理之后,我有每行/ doc的200维矢量化表示。我的NLP流程:

  1. 用正则表达式udf删除标点符号
  2. 用nltk雪球udf词干
  3. Pyspark Tokenizer
  4. Word2Vec(ml.feature.Word2Vec,vectorSize = 200,windowSize = 5)

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

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

我无法从源代码中找到信息:qazxsw poi

任何帮助或参考材料,超级赞赏!

apache-spark nlp pyspark word2vec doc2vec
2个回答
5
投票

从单词向量到单个向量的文本范围的一种简单方法是将向量平均在一起。并且,对于某些任务而言,这通常足够好。

然而,这不是https://spark.apache.org/docs/2.2.0/api/python/_modules/pyspark/ml/feature.html#Word2Vec中的Doc2Vec类如何做到的。该类实现了gensim,其中单独的文档向量以类似于单词向量的方式进行训练。

doc-vectors参与训练有点像浮动合成词,涉及每个滑动窗口/目标词预测。它们不是由先前存在的单词向量组成或连接的,尽管在某些模式中它们可以与单词向量同时训练。 (然而,使用参数'Paragraph Vectors' technique在gensim中启用的快速且通常最佳的PV-DBOW模式根本不训练或使用输入字向量。它只训练有助于预测单词的doc-vectors在每个文本示例中。)

既然您已经提到了多个库(Spark MLib和gensim),但是您没有显示您的代码,那么您不确定您的现有流程究竟在做什么。


0
投票

在Pyspark中,ml.feature.Word2Vec用于通过计算每个doc中术语频率(TF)权重的word2vecs的平均值来获得被调用的doc2vec。您可以在dm=0中学习官方示例的结果

© www.soinside.com 2019 - 2024. All rights reserved.