形式陈述
从一对对象的碰撞到一批记录的索引
输入是静态记录表 ,允许 。ID 必须唯一;两个 ID 可以携带完全相同的值,它们仍是两条应分别报告的记录。再给出基础随机函数族 、整数 ,以及用于最终核验的确定谓词 。
对每张表 ,抽取 个基础函数,形成长度为 的完整复合键
全部 次抽样相互独立理路独立性Statistical independence从概率表理解独立性,区分两两、相互和条件独立,并用可计算反例澄清零协方差与条件均值的限度。,而数据与查询在每个分量上使用同一函数。表 在键 下追加 ID,桶内保留输入顺序。键的相等是整个元组相等;用哈希表理路哈希表Hash table用哈希函数把键映射到桶并处理冲突的字典结构。存桶时,底层散列冲突仍由完整键比较处理,不能把底层散列值相等误当作相似性碰撞。
查询 依表号从小到大遍历 的桶。第一次见到某个 ID 才计算 ;后面同一 ID 再出现只记一次重复出现,不再核验或输出。输出由已核验且谓词为真的 ID 组成,按首次见到的次序排列。因此所有返回值都满足核验谓词,但没返回的记录可能没有命中任何桶。
公开参考支持两种基础族。超平面角度指纹理路随机超平面角度指纹Random hyperplane angular sketch · Random hyperplane fingerprint在共享超平面配置下把非零方向编码为规范位串,以失配比例估计归一化夹角,并区分固定对象保证与自适应重用。提供共享符号序列,连续切成 段、每段 位;核验整数向量的余弦是否至少为给定有理数 。MinHash理路MinHash集合指纹MinHash · Min-wise hashing用所有集合共享的随机排列挑出最小键,以碰撞概率估计集合Jaccard相似度,并区分独立副本、重复键与哈希族偏差。则为有限全集中的非空集合提供共享排列最小元素,核验 Jaccard 比是否至少为 。小全集参考保存完整排列,而不是用普通整数散列冒充严格 min-wise 抽样。给定函数表可以确定地执行索引;程序不能仅凭函数值检查调用者是否真的独立抽样。
AND 与 OR 分别使用哪一份独立性
对抽样前固定的 ,令基础碰撞概率为 。同一张表的 个独立分量全相等,才有键相等,所以
不同表也独立,一张表都未命中的概率为 。完整扫描的候选召回率因此是
这些等式对单个固定对象对成立;不同记录是否命中不必相互独立。若该记录还满足核验谓词,则无预算截断时,候选命中就等价于最终报告这条记录。
常见的距离型假设给定 与 :距离至多 的对象基础碰撞概率至少 ,距离大于 的对象至多 。那么每条固定近记录的遗漏率至多 ;对 条预先固定的近记录要求全部报告,可用并集界给出遗漏概率至多 。对于归一化角度距离,;对于 Jaccard 相似度, 就是 Jaccard 比。
令 是距离大于 的记录集合, 计它们在查询桶中的出现总次数,同一 ID 跨表重复也计入。期望线性性给出
不同远记录间的碰撞相关也不影响这个式子。它没有控制 与 之间的灰区,也没有控制大量真正的近记录。若所有记录和查询相同,每张表都包含全部 条记录,出现次数就是 。
遍历预算也是输出合同的一部分
参考允许非负整数预算 ,单位是读取的桶出现项,重复 ID 也消耗预算。先计算全部 个查询键,用各桶长度求出总出现数 ,然后只扫描串接列表的前 项。没有预算参数时扫描全部。返回值同时包含:总出现数、实际扫描数、首次核验 ID、重复出现数、通过核验 ID,以及
buckets_exhausted:本次选中的全部桶已读完,实际扫描数等于 ;
budget_exhausted:仍有出现项未读,不能将这次结果当作完整候选集。
预算正好等于 时属于前者。空记录表或空桶的 ,即使预算为零也已读完。buckets_exhausted 只说明命中的桶已尽,不代表整个数据库不存在漏掉的近记录。
截断后的报告概率通常不再等于 ,因为记录可能碰撞了却排在截断之后。一个保守分解是
当 为非负整数,由 和整数性可再界为 ,最后与 取最小值。若只知道远记录的期望而不知道总 ,不能把 偷换进这个式子。参考并不声称任意预算都有非平凡召回下界。
表不变量与成本核算
构建处理完前 条记录时,表 的桶 恰好按输入次序含有那些 且 的 ID。每条新记录在每张表恰好追加一次,归纳立即保持不变量。查询遍历前缀后,seen 恰为此前见过的不同 ID;核验列表是首次出现顺序,输出列表是其中谓词为真的子序列。逐项检查“新 ID / 旧 ID”两种情况,就证明了不重复输出、不错报与前缀预算语义。
设一次基础函数求值花 ,一次原值核验花 ,一次基础函数描述占 个机器字,原始记录及 ID 存储占 。在 ID、分量键为机器字且字典操作期望常数探测的模型下,复合键的计算、散列与比较还需要 ,因此建表期望时间为
其中 包括读取、校验、保存原值以及建立函数配置,空输入也支付配置成本。索引空间不能只说 :它包括 函数参数、 个 ID 引用、至多 个长度为 的元组键,以及表目录,合计
实际键数可能少于 ,这是上界。稠密超平面有 ;完整 MinHash 排列表需 ,集合大小为 时一次求值是 。这些参数成本不应藏进“每个 hash 常数时间”。
记本次实际读取的出现数为 ,不同核验 ID 数为 。查询期望时间为
其中 包含验证查询和阈值。另记规范查询值的副本大小为 ,单次核验的最大临时空间为 ;工作及返回空间是 ,与只读索引存储分开,不把桶列表重新复制出来。公开整数向量实现有 、,因为校验会形成元组副本;集合实现有 ,交并集临时对象使 ,无核验时该项取零。即使 ,参考也先计算全部查询键和桶长度,所以预算只限制出现项扫描与随后的核验。若 ID 是变长字符串、整数是任意精度,或字典遇到不利散列分布,对应位成本和探测退化需另计;上述期望界不是确定性的最坏保证。
例子与边界
两张表、六次出现、四次核验
取 ,四个基础符号依次用法向量 。查询 的两张表键都是 11。按下列次序插入记录:
| ID |
原向量 |
表 0 键 |
表 1 键 |
与 的余弦至少 ? |
| F |
|
11 |
10 |
否 |
| A |
|
11 |
11 |
是 |
| A2 |
|
11 |
11 |
是 |
| B |
|
10 |
11 |
否 |
| C |
|
01 |
00 |
否 |
命中桶依次是 [F,A,A2] 与 [A,A2,B]。完整扫描共有 次出现,首次核验顺序为 [F,A,A2,B],两次重复出现不再核验;输出 [A,A2]。A 与 A2 的方向相同,却各有自己的 ID,所以都保留。C 没有命中,不在核验列表里。
对整数向量,记 、、。当阈值 时,正确核验为
先检查符号,才能安全平方;否则负向量也可能被错报。A 的 ,有 ;F 的 ,却有 。阈值等号按“至少”接纳。
若 ,只读取 F,核验不通过,输出为空且状态为 budget_exhausted,明明后面还有 A 和 A2。若 ,读到 [F,A,A2,A],只核验三条记录,仍未读完。 或更大才得到完整扫描状态。改变插入次序可以改变预算内结果,但不会改变无预算时最终结果的集合。
能精确枚举的放大率
全集 有六种等概率排列。令 ,MinHash 基础碰撞概率是 。独立选择四份排列作为两张表的两个分量,共有 种等概率配置,完整命中数是 :
若一张表把同一个函数重复两次,单表碰撞率仍为 ,不是 。若两张表共享完全同一对函数,总命中率仍为 ,不是 。这些是依赖结构改变后的另一个算法,而不是独立配置恰好抽到重复函数;独立有放回抽样允许偶然相同,概率空间仍是全部 种。
固定查询与失败含义
上述概率对预先固定的数据和查询成立。重用索引回答事先列好的有限查询集,可以对各查询及目标记录做并集界;看见桶、指纹或过去结果后任意挑选新向量,不能直接把单次失败率照搬过去。有限潜在查询全集上的同时保证与任意实查询空间的自适应保证是不同条件。
返回空集只意味着当前扫描前缀中没有通过核验的记录。即便 buckets_exhausted,某条真正近记录仍可能没命中任何表。若业务必须证明不存在近记录,需要额外的完整搜索或别的确定性证书。若只要求返回任一近点,某些特定参数和截断规则可以另证成功率;它不是本页“报告扫描前缀内所有合格 ID”自动拥有的性质。