火花项频率变换

spark term frequency transformation

我对句子中的一组词进行了标记化并应用了词频变换。

int numFeatures = 9000;
    hashingTF = new HashingTF().setInputCol("filtered").setOutputCol("features")
            .setNumFeatures(numFeatures);
    DataFrame rawFeaturizedData = hashingTF.transform(stopWordsRemoved);
    rawFeaturizedData.show();

当我打印数据框时,我看到 "features" 列的值如下所示

(9000,[2010,2113,2599,3807,5109,5849],[1.0,1.0,1.0,1.0,1.0,1.0])

9000 是为术语频率计算配置的特征数。我将其设置为 9000,因为在应用文本转换(停用词删除、词形还原等)后有 8000 个唯一单词

[2010,2113,2599,3807,5109,5849] - 我假设这些是分配给文本中每个单词的数字(特征)

什么是 [1.0,1.0,1.0,1.0,1.0,1.0]? - 根据定义,术语频率对单词进行哈希处理并计算每个单词的权重。这是权重?为什么它总是显示为 1.0?

以下:

(9000,[2010,2113,2599,3807,5109,5849],[1.0,1.0,1.0,1.0,1.0,1.0])

SparseVector 的 Spark 字符串表示,其中:

  • 前导数字是向量的大小(这里是特征数)。
  • 第一个数组是非零索引列表。
  • 第二个数组是值列表(此处为权重)。

如果满足以下条件,则索引等于 1:

  • 没有重复的标记。
  • 没有哈希冲突。

假设输入数据如下所示:

val df = Seq("orange orange apple", "apple orange kiwi").toDF("text")
  .withColumn("filtered", split($"text", "\s+"))

如果我们使用 11 个特征:

val hashingTF11 = new HashingTF()
  .setInputCol("filtered")
  .setOutputCol("features")
  .setNumFeatures(11)

并变换:

hashingTF11.transform(df).show(2, false)

我们将在第一行看到 2.0(橙色代表两次):

+-------------------+-----------------------+---------------------------+
|text               |filtered               |features                   |
+-------------------+-----------------------+---------------------------+
|orange orange apple|[orange, orange, apple]|(11,[9,10],[2.0,1.0])      |
|apple orange kiwi  |[apple, orange, kiwi]  |(11,[6,9,10],[1.0,1.0,1.0])|
+-------------------+-----------------------+---------------------------+

但如果我们将特征数量减少到 10 个:

val hashingTF10 = new HashingTF()
  .setInputCol("filtered")
  .setOutputCol("features")
  .setNumFeatures(10)

并变换:

hashingTF10.transform(df).show(2, false)

两行都将具有权重为 2.0 的特征:

+-------------------+-----------------------+--------------------+
|text               |filtered               |features            |
+-------------------+-----------------------+--------------------+
|orange orange apple|[orange, orange, apple]|(10,[1,3],[1.0,2.0])|
|apple orange kiwi  |[apple, orange, kiwi]  |(10,[1,3],[2.0,1.0])|
+-------------------+-----------------------+--------------------+

由于哈希冲突。