在 LSH 中,您将文档的切片散列到存储桶中。这个想法是,落入相同存储桶的这些文档可能是相似的,因此可能是最近的邻居。
对于 40.000 个文档,存储桶的数量(几乎)是多少?
我有它:number_of_buckets = 40.000/4
现在,但我觉得它可以减少更多。
有什么想法吗?
在 LSH 中,您将文档的切片散列到存储桶中。这个想法是,落入相同存储桶的这些文档可能是相似的,因此可能是最近的邻居。
对于 40.000 个文档,存储桶的数量(几乎)是多少?
我有它:number_of_buckets = 40.000/4
现在,但我觉得它可以减少更多。
有什么想法吗?
一个常见的起点是使用sqrt(n)
存储桶存储n
文档。您可以尝试将其加倍和减半并运行一些分析以查看您获得了什么样的文档分布。自然也可以尝试任何其他指数,即使K * log(n)
您期望不同簇的数量“缓慢”增长。
我认为这还不是一门精确的科学,属于与k
为k-means clustering选择最优值类似的主题。
我认为至少应该是n
。如果小于这个值,假设n/2
您确保对于所有波段,由于冲突,每个文档平均至少有 1 个可能的相似文档。因此,计算相似性时的复杂性至少为 O(n)。
另一方面,您必须至少通过桶K次,即O(K*B),即 B 您的桶。我相信后者更快,因为它只是迭代您的数据结构(即某种字典)并计算散列到每个存储桶的文档数量。