MMR搜索和LangChain整合Milvus实战

article/2025/8/24 9:18:52

引言

        在现代信息检索系统的构建过程中,搜索策略的选择往往决定了用户体验的质量。相似度搜索与MMR最大边界相关搜索作为两种主流技术方案,各自承担着不同的使命:前者专注于精确匹配,后者致力于平衡相关性与多样性。

        本文将通过深入的技术原理剖析和实际应用案例,为您揭示这两种搜索方法的核心差异。您将了解到相似度搜索如何通过向量空间距离计算实现高精度匹配,以及MMR算法如何通过巧妙的权衡机制解决传统搜索中的信息冗余问题。

相似度搜索与MMR最大边界相关搜索原理

核心概念介绍

相似度搜索(Similarity Search)和MMR最大边界相关搜索(Maximal Marginal Relevance Search)是现代信息检索系统中的两种重要搜索策略。这两种方法在实际应用中各有优势,理解其差异对于构建高效的搜索系统至关重要。

行业应用场景对比

为了更好地理解两种搜索方法的差异,我们通过电商推荐系统的实际案例进行说明:

相似度搜索场景:当用户点击商品A时,系统推荐相似商品B、C等高度相关的产品。这种方法注重精确匹配,能够满足用户对特定类型产品的明确需求。

MMR搜索场景:当用户浏览历史呈现多样化特征时,系统推荐跨品类商品,帮助用户发现更多可能感兴趣的内容。这种方法平衡了相关性和多样性,避免推荐结果过于单一。

基础相似度搜索详解

工作原理

基础相似度搜索通过向量空间中的距离计算(如余弦相似度或L2距离)来识别最接近目标向量的结果。其基本流程为:

核心特点

相似度搜索具有以下显著特点:

纯向量驱动:算法完全依赖向量空间中的几何距离,主要使用余弦相似度和L2距离等度量方法。

结果同质化:由于算法特性,返回的结果往往集中在最相似的连续区域,可能导致结果多样性不足。

高性能表现:算法时间复杂度为O(n + klogk),在大规模数据集上仍能保持良好的响应速度。

参数配置方法

使用vector_store.similarity_search()方法时,可以通过以下配置实现精确控制:

vector_store.as_retriever(search_type="similarity",search_kwargs={"k": 5,  # 返回结果数量"score_threshold": 0.65,  # 相似度阈值,仅返回相似度≥65%的结果"filter": "category == 'AI'",  # 基于元数据的过滤条件"param": {  # Milvus专属参数"nprobe": 32,  # 控制搜索时访问的聚类数量,数值越大搜索越精确但耗时更长"radius": 0.8  # 范围搜索半径,结合score_threshold限定结果范围}}
)

典型应用场景

相似度搜索在以下场景中表现优异:

精确语义匹配:适用于专利检索、学术论文查重等需要高精度匹配的场景,能够识别高度相关的内容。

基于内容的推荐:实现"更多类似内容"功能,为用户提供与当前浏览内容高度相关的推荐。

敏感信息过滤:通过设置高阈值实现精准匹配,有效过滤不相关或敏感信息。

最大边界相关搜索(MMR)深度解析

算法背景与目标

最大边界相关搜索(Maximal Marginal Relevance,MMR)是信息检索和推荐系统中的重要算法。其核心目标是在返回结果中平衡相关性与多样性,有效解决传统相似性搜索可能导致的信息冗余问题。

设计理念

MMR算法的设计初衷是解决传统相似性搜索(如余弦相似度)的局限性。在需要覆盖多角度信息或提供多样化内容推荐的场景中,MMR能够显著提升用户体验和信息获取效率。

算法工作流程

MMR算法的工作流程包括:

算法的核心逻辑可以通过以下流程图理解:

初始候选集 (fetch_k=20)↓
相似度排序 [1, 2, 3, …, 20]↓
多样性选择 (λ=0.5)↓
最终结果 (k=5) [1, 5, 12, 3, 18]  # 兼顾相似性与差异性

参数配置详解

使用vector_store.max_marginal_relevance_search()方法的标准配置如下:

mmr_retriever = vector_store.as_retriever(search_type="mmr",search_kwargs={"k": 3,  # 最终返回的结果数量"fetch_k": 20,  # 候选集大小,数值越大结果可能更多样但计算成本更高"lambda_mult": 0.6,  # 相关性与多样性权衡系数,范围[0,1]"params": {"nprobe": 64,  # Milvus IVF索引参数,控制搜索聚类数量"ef": 128  # Milvus HNSW索引参数,控制搜索深度}}
)

关键参数对比分析

参数影响效果对比

参数相似度搜索MMR搜索影响效果
k控制结果数量控制最终结果数量数值越大返回越多,但可能降低精度
lambda_mult不适用0-1之间的权衡系数值越大越偏向相关性,值越小越强调多样性
score_threshold过滤低质量结果通常不使用阈值设置需根据embedding模型特性调整
filter元数据过滤支持相同功能可结合业务维度进行精确筛选

MMR典型应用场景

MMR搜索在以下场景中具有显著优势:

多样化推荐系统:在电商环境中实现跨品类推荐,帮助用户发现更多潜在兴趣点。

知识发现平台:在科研文献探索中提供多角度观点,促进学术创新和知识交叉融合。

内容生成系统:为创作者提供多样化的素材和灵感,避免内容同质化。

综合对比与决策指南

性能与应用对比矩阵

维度相似度搜索MMR搜索
结果质量高相似度但可能存在重复多样性更佳,覆盖面更广
响应速度平均120毫秒平均200-300毫秒
内存消耗较低(仅存储TopK结果)较高(需缓存fetch_k候选集)
适用场景精确匹配、去重检测推荐系统、知识发现
可解释性直观的相似度排序综合评分需要二次解释

选择建议

在实际应用中,选择相似度搜索还是MMR搜索应该基于具体的业务需求和场景特点。当需要高精度匹配和快速响应时,相似度搜索是更好的选择。当需要提供多样化结果和避免信息冗余时,MMR搜索能够提供更好的用户体验。


http://www.hkcw.cn/article/pjXyIdlbbP.shtml

相关文章

C++容器进阶:深入解析unordered_map与unordered_set的前世今生

目录 🚀 引言:现代C容器的王者 🎯 学习路径 第一章:哈希表的数学魔法 1.1 哈希表的基本概念 哈希表的数学模型 1.2 哈希函数的设计艺术 第二章:unordered_map的深度解析 2.1 unordered_map的设计哲学 2.2 uno…

TDengine 运维——巡检工具(安装前检查)

简介 本文档旨在介绍 TDengine 安装部署前后配套的巡检工具。 相关工具的功能简介: 工具名称功能简介安装前检查部署前对 TDengine 安装部署的依赖要素进行安装前检查安装前预配置部署前对 TDengine 安装部署的依赖要素进行安装前预配置安装部署指定环境安装部署…

两个频率比较接近的简谐振动叠加后会产生拍形

两个频率比较接近的简谐振动叠加后会产生拍形。 import numpy as np import matplotlib.pyplot as plt# Parameters f1 10.0 # Frequency of the first vibration (Hz) f2 10.5 # Frequency of the second vibration (Hz) t_max 10 # Time range (seconds) t np.linsp…

安科瑞Acrelcloud-6200系统:智慧路灯安全用电监控平台架构解析

安科瑞顾强———Acrelgq 智慧路灯作为智慧城市与新基建的核心载体,集成了大量异元异构电子设备,其供电安全与能效管理面临电压多样、权属分散、扩展性不足等挑战。本文提出一种融合统一供电、分路计量、智能防护与远程监控的解决方案,通过构…

706万彩票大奖无人认领 兑奖期限已过

706万彩票大奖无人认领 兑奖期限已过!5月7日,广东东莞福彩官微发布了一篇寻找东莞706万大奖得主的文章。然而20多天过去了,大奖得主仍未现身兑奖。5月29日下午,东莞市福彩发行中心表示,如果当天未见得主前来领奖,将视为弃奖处理,奖金将用于扶老、助残等公益事业。据报道…

Scratch节日 | 拯救屈原 | 端午节

端午节快乐! 这款特别为端午节打造的Scratch游戏 《拯救屈原》,将带你走进古代中国,感受历史与文化的魅力! 🏮 游戏介绍 扮演勇敢的探险者,穿越时空回到古代,解锁谜题,完成任务&…

上海一款罕见肿瘤靶向药获批 填补治疗空白

上海一款罕见肿瘤靶向药获批 填补治疗空白。国家药品监督管理局通过优先审评审批程序批准了上海复星医药产业发展有限公司申报的1类创新药芦沃美替尼片(商品名:复迈宁)。这是上海今年第6款获批上市的国产1类创新药,也是近期又一款获批上市的罕见病用药。复迈宁本次获批的两…

【开发技巧指北】IDEA修改默认绑定Maven的仓库地址

【开发技巧指北】IDEA修改默认绑定Maven的仓库地址 Microsoft Windows 11 家庭中文版 IIntelliJ IDEA 2025.1.1.1 默认的IDEA是有自己捆绑的Maven的(这是修改完毕的截图) 修改默认的Maven配置,路径是IDEA安装路径下的plugins D:\Softwares\I…

小程序为什么要安装SSL安全证书

小程序需要部署SSL安全证书,这是小程序开发及运营的强制性要求,也是保障用户数据安全、提升用户体验和满足平台规范的必要措施。 一、平台强制要求 微信小程序官方规范 微信小程序明确要求所有网络请求必须通过HTTPS协议传输,服务器域名需配…

Nest全栈到失业(三):半小时图书管理系统-User

用户模块 创建用户 先使用nest g resource user --no-spec 创建一个用户的模块,并选择他的CRUD操作 写一个注册接口 import { Controller, Post, Body } from nestjs/common; import { UserService } from ./user.service; import { RegisterUserDto } from ./dto/register-us…

美创专家分享医疗数据安全分类分级实践与探索

医疗数据安全分类分级 近日,由浙江卫生信息学会主办的2025年卫生健康网络数据安全培训会(宁波站)顺利举办,美创科技专家许钰钢受邀分享《医疗数据安全分类分级实践与探索》,系统解析医疗行业数据安全分类分级的实施必…

Vision Transformer网络结构

0.前言 参考CSDN大佬(太阳花的小绿豆)的代码,梳理了一下vit的网络结构,代码地址如下: deep-learning-for-image-processing/pytorch_classification/vision_transformer at master WZMIAOMIAO/deep-learning-for-image-processing GitHub …

start-local:一键本地启动 Elasticsearch 和 Kibana

start-local:一键本地启动 Elasticsearch 和 Kibana start-local Try Elasticsearch and Kibana locally 项目地址: https://gitcode.com/gh_mirrors/st/start-local 项目介绍 start-local 是一个开源项目,它通过一个简单的 shell 脚本&#xff…

time-ghc-modules:快速定位Haskell编译性能瓶颈

time-ghc-modules:快速定位Haskell编译性能瓶颈 time-ghc-modules Analyze GHC .dump-timings files 项目地址: https://gitcode.com/gh_mirrors/ti/time-ghc-modules 项目介绍 在现代软件开发中,性能优化始终是一个核心话题。特别是对于使用Has…

【Cursor】配置全局 Rules:让 AI 生成的代码更符合你的开发风格

在现代软件开发中,AI 工具(如 Cursor AI)已经成为提升开发效率的重要助手。然而,为了让这些工具生成的代码更加贴合我们的开发习惯和项目需求,合理配置 全局 Rules 是至关重要的一步。本文将深入探讨如何通过全局 Rules 的配置,优化 AI 生成代码的质量、一致性和安全性。…

一文了解K8S(Kubernates)

K8S(Kubernates) 知识目录 一、K8S 1. 概述 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具…

手把手教你实现文档搜索引擎

🏠大家好,我是Yui_💬 🍑如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🚀如有不懂,可以随时向我提问,我会全力讲解~ &#x1f52…

使用 LangGraph 和 Elasticsearch 构建强大的 RAG 工作流

作者:来自 Elastic Neha Saini 在这篇博客中,我们将向你展示如何配置和自定义 LangGraph Retrieval Agent 模板与 Elasticsearch,以构建一个强大的 RAG 工作流,实现高效的数据检索和由 AI 驱动的响应。 Elasticsearch 原生集成了…

OpenEvidence AI临床决策支持工具平台研究报告

平台概述 OpenEvidence是一个专为医疗专业人士设计的临床决策支持工具,旨在通过整合各类临床计算器和先进的人工智能技术,提高医生的诊疗决策效率和准确性。作为一款综合性医疗平台,OpenEvidence将复杂的医学计算流程简化,同时提供个性化的临床建议,使医生能够更快、更准…

Python使用FastMCP开发MCP服务端

MCP简介 Model Context Protocol (MCP) 是一个专门为 LLM(大语言模型)应用设计的协议,它允许你构建服务器以安全、标准化的方式向 LLM 应用程序公开数据和功能。FastMCP 作为 Python 生态中的一款轻量级框架,利用装饰器来简化路由…