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

我应该使用哪个Spark ML特征转换器将一列短语转换为固定长度的向量?

  •  0
  • under_the_sea_salad  · 技术社区  · 7 年前

    假设我有一个Spark数据框,其中一列有短句。唯一短语的总数太大,在机器学习算法中没有用处,但我正在考虑将短语分解为单词,然后将每个短语转换为固定长度的向量 N 其中每个维度表示 N 最常见的单词出现在这个短语中。

    val sentenceDataFrame = spark.createDataFrame(Seq(
      (0, "Foo bar dinosaur"),
      (1, "bar logistic"),
      (2, "foo bar logistic regression")
    )).toDF("id", "sentence")
    

    如果我让 N

    val sentenceDataFrameTransformed = spark.createDataFrame(Seq(
      (0, "Foo bar dinosaur", [1, 1, 0]),
      (1, "bar logistic", [0, 1, 0]),
      (2, "foo bar logistic regression", [1 1 1])
    )).toDF("id", "sentence", "sentenceTopWordsHotEncoded")
    

    在这种情况下,最热门的词是“foo”、“bar”和“logistic”(按流行程度)。

    Spark describes here ,但我没有看到一个(或一些简单的组合)可以给我想要的。

    我不想手动编写此函数的原因是,我希望transformer准备好放入管道中,以便可以序列化此模型,因此当我评估新行时,顶部 文字将是相同的。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alper t. Turker    7 年前

    使用其中一个 CountVectorizer HashingTF . 如果你想要二进制功能,你应该使用第二个和 setBinary

    两者都需要先标记化,也可以选择标记化 StopWordsRemover

     (RegexTokenizer|Tokenizer) ->  (CountVectorizer|HashingTF)