基于Qdrant构建电商搜索的经验教训

基于Qdrant构建电商搜索的经验教训

💡 原文英文,约1600词,阅读约需6分钟。
📝

内容提要

构建电商搜索时,混合检索(密集向量+BM25)优于单一方法;过滤应在查询内进行,避免结果稀疏。嵌入文本比模型大小更关键,量化内存可省去重排序。个性化应作用于排序而非检索,商品运营用权重调整。评估需多指标互补,注意分片融合陷阱。

🔎

延伸解读

混合检索为何是起点

文章指出,商品搜索天然包含两类需求:精确匹配(如品牌、SKU)和意图匹配(如“适合徒步的保暖衣物”)。BM25擅长前者,密集向量擅长后者,单一方法都会顾此失彼。因此,作者建议在初版搜索中就采用混合检索,而不是等出现相关性投诉后再补救。这提醒我们,检索策略的架构决策应前置,而非事后修补。

过滤位置决定结果质量

过滤操作放在检索前还是检索后,直接影响结果集的完整性。文章用实例说明:先取向量再过滤,严格条件可能让页面只剩少量结果,而更优匹配被排除在候选窗口外。Qdrant在检索过程中应用过滤,确保只对匹配项打分。这提示开发者,过滤与检索的耦合方式需根据引擎能力设计,避免因实现顺序导致体验降级。

嵌入文本比模型大小更关键

一个看似需要更大模型才能解决的排序问题,实际通过调整嵌入输入文本就解决了——将产品类别加入嵌入文本,品牌漂移消失。作者对比了MiniLM和更大模型,后者仅提升2个精度点,却带来4.5倍延迟和3倍内存,甚至引发磁盘溢出。这提醒我们,在追求模型升级前,先检查输入数据的质量,往往成本更低、效果更显著。

评估指标需互补,警惕单一盲区

文章强调,任何评估指标都有盲区。黄金集可能锚定旧模型输出,LLM评判器只能测精度无法测召回。因此,作者构建了多指标组合:LLM评判器测精度、recall@10测召回、intrusion测个性化干扰、persona overlap测区分度。每个指标都弥补前一个的不足。这提醒我们,评估体系应动态演进,明确每个指标的局限,并补充覆盖盲区的指标。

Q&A

在Qdrant上构建电商搜索时,为什么推荐使用混合检索?

因为产品查询同时包含精确词(如品牌、型号)和意图(如“适合徒步的保暖衣物”)。BM25擅长精确匹配,而稠密向量能捕捉语义意图,两者结合(稠密向量+BM25)通过倒数排名融合,能同时满足两种需求,效果优于单一方法。

在Qdrant中,过滤操作应该放在查询内部还是之后?为什么?

过滤应放在查询内部,而不是检索后再过滤。因为如果先检索再过滤,严格的过滤条件可能导致结果稀疏,例如检索100个候选,90个缺货,最终只显示10个结果,而更好的匹配可能刚好在窗口之外。Qdrant在搜索过程中应用过滤,只对匹配的产品进行评分,确保结果完整。

在嵌入文本时,什么比模型大小更重要?

嵌入的文本内容比模型大小更重要。例如,仅使用标题嵌入会导致品牌词主导向量,而加入产品类别后,漂移问题在所有模型上都得到修复。更大的模型只带来微小的精度提升,但代价是更高的延迟和内存占用。

为什么在Qdrant中量化内存后可以跳过重排序?

因为量化(如int8)引入的误差在倒数排名融合中被抵消,重排序带来的收益很小(最多提升2%的召回率),但会显著增加查询时间(4.5到8倍)。因此,在量化内存后,可以跳过重排序以节省时间,而不影响最终结果。

在电商搜索中,个性化应该作用于检索还是排序?为什么?

个性化应作用于排序而非检索。如果作为检索分支,可能会引入与查询无关的结果(如搜索“牛仔裤”返回法兰绒衬衫)。将个性化权重放在排序阶段,可以保持查询意图,同时调整结果顺序,实验表明权重0.45能在保持召回率的同时减少离题项。

商品运营(Merchandising)在Qdrant中如何实现?

商品运营通过一组权重实现,这些权重应用于排名公式中,基于利润、热度、新鲜度、价格、评分和库存等业务信号。通过预设和滑块调整权重,无需部署即可重新调整活动,且服务器会限制权重范围,防止异常值影响管道。

评估搜索相关性时,为什么需要多个指标?

因为每个评估指标都有盲点。例如,黄金集可能锚定旧模型,LLM评判器只能衡量精度而忽略召回。因此,需要结合多个指标,如LLM评判器(精度)、召回率@10、入侵计数(个性化离题项)和人物重叠(个性化区分度),以全面评估搜索质量。

在Qdrant中,分片融合有什么陷阱?如何避免?

陷阱是:如果融合查询嵌套在预取或重排序阶段,每个分片会先本地融合,导致全局融合失效,结果准确性下降。避免方法:保持融合作为主查询,或使用单分片,或检索大量候选后单独应用重排序公式。

🏷️

标签

➡️

继续阅读