一种提高产品检索缓存效率的方法是通过将语义相似的查询映射到同一位置来实现。核心思路是只存储每个产品的一个描述符,并利用局部敏感哈希 (LSH) 将句法不同但语义相似的查询路由到该描述符。
与旨在将字符串均匀随机分布以最小化冲突的传统哈希不同,LSH 旨在将相似的字符串映射到同一个哈希桶中,主动利用碰撞。
该方案的具体实现如下:
-
规范查询存储:每个哈希桶中存储一个规范查询作为索引,指向一组相关的查询结果。例如,对于“X品牌鞋”这一系列查询,随机选择一个(如“X品牌鞋子”)作为该桶内的索引。
-
多重哈希投票:为了解决一个桶内可能包含多个不同规范查询索引的问题,算法使用36个不同的、稍作变化的LSH函数对同一查询字符串进行多次哈希。每个函数都会将查询映射到一个桶。在所有映射结果中,通过统计出现频率最高的索引来决定应返回哪一组结果,从而将错误检索的可能性降至接近零。
-
加权相似度:为了实现有效的相似性映射,LSH函数需要编码特定的相似性度量。在此场景中,使用了加权Jaccard相似度。权重由一个专门训练用于命名实体识别的机器学习模型分配,为产品类别匹配赋予比品牌名称匹配更高的权重。此过程离线完成,并内置于哈希函数的设计中。
-
概念聚类:为了构建规范的查询索引,该过程首先用所有36个哈希函数对流行查询列表进行哈希。每当两个查询被映射到同一桶中,就在连接它们的图边上增加权重。完成所有哈希后,边的权重范围在1到36之间。随后,删除所有权重低于特定阈值的边,剩余的连通子图便代表了相关的查询概念族。最后,从每个子图中随机选择一个查询作为该族的标准索引。
性能评估: 在固定存储空间下,对6千万个热门查询进行测试,按频率分为普通、困难和长尾三类。与使用传统哈希的精确缓存相比,该方法在F1分数(结合召回率与精确率)上的提升显著:
- 普通查询:提升33%
- 长尾查询:提升250%
性能提升的代价是检索时间从0.1毫秒增加到2.1毫秒,但在多数情况下,缓存容量的有效提升使这一代价是值得的。FINISHED