Spark TF-IDF从哈希中获取单词

Qua*_*iks 4 java hash tf-idf apache-spark

我在Spark文档中关注此示例,用于计算一堆文档的TF-IDF.Spark使用散列技巧进行此计算,所以最后你得到一个包含散列词和相应权重的Vector但是......我如何从散列中取回单词?

我是否真的需要哈希所有单词并将它们保存在地图中以便以后迭代查找关键字?内置Spark没有更有效的方法吗?

提前致谢

Tim*_*key 5

HashingTF中将 String转换为hash 导致numFeatures使用org.apache.spark.util.Utils.nonNegativeMod(int,int)在0和(默认为2 ^ 20)之间的正整数.

原来的字符串丢失了; 无法将结果整数转换为输入字符串.

  • 加密哈希函数是单向哈希。标准哈希函数对单向属性不感兴趣。例如,对于(非常)短的字符串,标准的Java String哈希很容易反转。通常的目标是使输出空间中的冲突最小化。 (2认同)

mar*_*ita 5

如果您使用 CountVectorizer 而不是 HashingTF(TFIDF 基本上是 HashingTF 变换和 IDF 拟合的一套),那么它可能更适合您的需求,因为您可以恢复索引词汇表。

String[] vocabulary= countVectorizerModel.vocabulary();
Run Code Online (Sandbox Code Playgroud)

这样您就知道如何找到它们;

例如,得到一个类似 (11, [0,1,3] ,[1.0,... ,其中 [0,1,3] 表示在相应文本中遇到的词汇术语的索引的 SparseVector ,那么你可以得到术语参考:

vocabulary[index]
Run Code Online (Sandbox Code Playgroud)

如果您需要在 LDA 主题术语的上下文中进行此操作,解决方案是相同的。