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

Which Spark ML Feature Transformer should I use to convert a column of phrases to vectors of fixed length?

假设我有一个 Spark DataFrame,其中一列包含短短语。独特短语的总数太大,无法用于机器学习算法,但我正在考虑将短语分解为单词,然后将每个短语转换为固定长度 N 的向量,其中每个维度表示是否有一个N 个最常用的词在此短语中找到。

这是一个例子。

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

如果我让 N 为 3,那么我希望得到以下转换后的 DataFrame

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 有很多可用的转换器,但我没有看到一个(或一些简单的组合)可以满足我的需求。

我不想手动编写此函数的原因是因为我希望将转换器准备好放入管道中,以便我可以序列化此模型,因此当我评估新行时,顶部 N的话会是一样的。

使用 CountVectorizerHashingTF。如果你想要二进制特征,你应该使用第二个和 setBinary.

两者都需要首先进行标记化,并且可以选择 StopWordsRemover。总体:

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