某中心通过缓存热门产品查询结果来提升在线购物体验。当众多用户搜索"X品牌鞋子"时,服务器会存储该查询结果并直接返回给后续相同查询的用户,无需重新执行产品检索算法。
然而,当存在"X品牌鞋子"、"X品牌鞋"、"鞋子品牌X"等多种语义相似但表述不同的查询时,服务器会在缓存中存储相同产品的不同描述方式,导致存储空间利用率低下。
在某中心最近举办的网络会议上,我们提出了一种基于局部敏感哈希(LSH)的高效缓存空间利用技术。该技术通过为每个产品只存储一个描述符,并将语法不同但语义相似的查询路由到同一描述符。
与传统哈希函数试图将字符串均匀分布到不同桶中不同,局部敏感哈希有意将相似字符串映射到同一哈希桶。传统哈希尽量减少碰撞,而局部敏感哈希则鼓励碰撞。
核心思想是将相关的产品查询映射到同一哈希桶,该桶存储关联结果的位置。但与传统哈希类似,局部敏感哈希函数有时也会将不同字符串映射到同一桶中。
解决方案是在每个桶中为每组相关查询存储一个规范查询。例如,对于关于X品牌鞋子的查询族,随机选择"X品牌鞋子"作为索引存储在关联桶中。
当查询映射到包含多个索引的桶时,系统会使用36个不同的局部敏感哈希函数对同一字符串进行多次哈希。通过统计所有映射中出现最频繁的索引,检索关联结果,将错误结果检索概率降低到接近零。
局部敏感哈希函数需要编码某种相似度概念。我们采用加权Jaccard相似度,即两个数据项共有元素数量与它们包含元素总数之比。
加权Jaccard相似度给予数据项间某些对应关系更高权重。通过训练命名实体识别机器学习模型来分配权重,使产品类别对应关系比品牌名称对应关系具有更高权重。所有这些加权都在线下完成并融入哈希函数设计中。
在第二篇网络会议论文中,我们描述了识别相关查询簇的过程。构建36个哈希函数族后,使用它们对所有热门产品查询列表进行哈希。
每次两个查询被哈希到同一桶时,在大型图中增加连接它们的边权重。完成最终哈希后,最大边权重为36,最小为1。
然后删除所有权重低于某个阈值的图边,结果得到多个相关术语子图。从每个子图中随机选择一个术语作为该查询族的索引。
通过选择6000万个热门产品查询并将它们按频率分为三组:普通查询、困难查询和长尾查询,在固定存储空间内使用四种不同技术缓存这些查询结果。
使用F1分数评估性能,该方法相比使用传统哈希的精确缓存,F1分数提升从普通查询的33%到长尾查询的250%不等。这些改进确实带来了检索时间的增加,从0.1毫秒增加到2.1毫秒,但在许多情况下,缓存容量的增加是值得的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。