快速k-NN搜索词袋模型

时间:2015-07-07 13:10:26

标签: machine-learning computer-vision knn kdtree

我有大量相同大小的文件。对于这些文件中的每一个,我正在构建一个单词模型(BOW)。所有文档中可能的单词数量有限且大(例如2 ^ 16)。一般来说,我有N个大小为K的直方图,其中N是文档数,K是直方图宽度。我可以计算任意两个直方图之间的距离。

第一个优化机会。文档通常只使用一小部分单词(通常不到5%,大部分都不到0.5%)。

第二次优化机会使用过的单词的子集因文档而异,所以我可以使用位而不是字数。

按内容查询

查询也是一个文档。我需要找到k个最相似的文档。

天真的方法

  • 从查询中计算BOW模型。
  • 对于数据集中的每个文档:
    • 计算它的BOW模型。
    • 查找查询与文档之间的距离。

显然,应该使用一些数据结构来跟踪排名靠前的文档(例如优先队列)。

我需要某种索引来摆脱完整的数据库扫描。我想到了KD树,但数据集的维度和大小非常高。可以建议使用某些可能的单词子集作为功能,但我没有单独的训练阶段,也无法事先提取此功能。

我考虑过使用MinHash算法来修剪搜索空间,但我无法为此任务设计合适的哈希函数。

1 个答案:

答案 0 :(得分:1)

k-d-tree和类似的索引用于密集和连续数据。

您的数据很可能很少。

用于在稀疏数据上查找最近邻居的良好索引是反向列表。与谷歌等搜索引擎的工作方式基本相同。