首页 文章

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

提问于
浏览
5

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

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

  • 使用正则表达式udf删除标点符号

  • 用nltk雪球udf词干

  • Pyspark Tokenizer

  • Word2Vec(ml.feature.Word2Vec,vectorSize = 200,windowSize = 5)

我理解这个实现如何使用skipgram模型根据使用的完整语料库为每个单词创建嵌入 . 我的问题是: How does this implementation go from a vector for each word in the corpus to a vector for each 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

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

2 回答

  • 0

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

    但是, gensim 中的 Doc2Vec 类不是这样的 . 该类实现'Paragraph Vectors' technique,其中单独的文档向量以类似于字向量的方式进行训练 .

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

    由于您没有显示您的代码,因此不确定您的现有流程究竟在做什么 .

  • 3

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

相关问题