我有大量相同大小的文件。对于这些文件中的每一个,我正在构建一个单词模型(BOW)。所有文档中可能的单词数量有限且大(例如2 ^ 16)。一般来说,我有N个大小为K的直方图,其中N是文档数,K是直方图宽度。我可以计算任意两个直方图之间的距离。
第一个优化机会。文档通常只使用一小部分单词(通常不到5%,大部分都不到0.5%)。
第二次优化机会使用过的单词的子集因文档而异,所以我可以使用位而不是字数。
查询也是一个文档。我需要找到k
个最相似的文档。
显然,应该使用一些数据结构来跟踪排名靠前的文档(例如优先队列)。
我需要某种索引来摆脱完整的数据库扫描。我想到了KD树,但数据集的维度和大小非常高。可以建议使用某些可能的单词子集作为功能,但我没有单独的训练阶段,也无法事先提取此功能。
我考虑过使用MinHash算法来修剪搜索空间,但我无法为此任务设计合适的哈希函数。
答案 0 :(得分:1)
k-d-tree和类似的索引用于密集和连续数据。
您的数据很可能很少。
用于在稀疏数据上查找最近邻居的良好索引是反向列表。与谷歌等搜索引擎的工作方式基本相同。