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

6
我正在遵循Spark文档中这个例子来计算一堆文档的TF-IDF。Spark使用哈希技巧进行计算,因此最终您将得到一个向量,其中包含哈希过的单词和相应的权重,但是...我该如何从哈希中获取回单词呢?
我是否真的需要对所有单词进行哈希,并将它们保存在映射中以便以后迭代查找关键字?在Spark内部没有更有效的方法吗?
提前致谢。
3个回答

6

原始字符串已经丢失,无法从生成的整数转换回输入字符串。请注意,对于任何良好的哈希函数都是如此:它们故意是单向的。 - Matt Ball
2
加密哈希函数是单向哈希函数。标准哈希函数不关心单向属性。例如,标准的Java字符串哈希对于(非常)短的字符串来说相当容易反转。目标通常是在输出空间中最小化冲突。 - David

5
如果您使用CountVectorizer而不是HashingTF(TFIDF基本上是HashingTF转换和IDF拟合的套件),那么它可能更适合您的需求,因为您可以恢复索引词汇表。
String[] vocabulary= countVectorizerModel.vocabulary();

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

例如,得到一个类似于 (11,[0,1,3],[1.0,... 的稀疏向量,其中 [0,1,3] 表示在相应文本中遇到的词汇项的索引,则可以通过参考以下内容来获取这些词汇项:

vocabulary[index]

如果您需要在LDA主题术语的背景下进行这样的操作,解决方案是相同的。

4

您需要创建一个字典,将数据集中的所有标记映射到哈希值。但是,由于您正在使用哈希技巧,可能会发生哈希冲突,因此映射不是完全可逆的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接