二、什么是Query改写 核心定义 Query 改写是指在 RAG 系统的检索阶段之前,对用户输入的原始查询(Query)进行一系列处理、扩展或重构的技术,旨在生成一个或多个对检索器(Retriever 五、怎么去做Query改写1. 补充细节:把模糊的话变具体。 如果问:“上次说的那个事?”(啥事?) 改写为:“关于上周三会议上讨论的预算增加方案。”(这下清楚了!)2. 改写为:“计算机响应缓慢故障排除的解决方案”(术语对齐,一找一个准)3. 多角度提问:怕一种问法搜不到,就换几种方式都问问。 如果问:“这个 error 是啥意思?” 所以,Query改写是确保RAG系统聪明好用的第一步,也是至关重要的一步。 六、Query改写的类型 以下改写类型都是结合 qwen-turbo-latest模型的Query改写演示:1.
mysql_query()插入不了数据解决方案 记录一下,mysql_query()在可查可改的情况下,出现插入不了的数据,我将sql语句复制在cmd下可以插入,但是使用mysql_query()就不行 解决方案就是在mysql_query(“插入语句”)前,写一行mysql_query(mysql, “SET CHARACTER SET GBK”); 方可解决问题。
有趣的大趋势是首先产生在 CV 领域的技术也不断用于 NLP,而深度学习解决方案的构建方式也随着时间在进化。AI 研习社编译把这篇文章如下。 ? 由于这些深度学习模型共用了许多底层的组件,基于深度学习的自然语言处理解决方案可以与计算机视觉和其它人工智能功能的解决方案共用软件和硬件。 对于深度学习的通用软件栈的优化也可以为深度学习自然语言处理解决方案的性能带来改善。英特尔的人工智能硬件和软件组合解决方案为这些在英特尔架构的系统上运行的深度学习进展提供了很好的示例。 其次,这些构建在英特尔的统一软硬件平台上的功能和解决方案可以持续不断地从英特尔未来的开发和改进中受益。 早前的一篇博客介绍了这种解决方案中涉及到的一些方法的概述。
有趣的大趋势是首先产生在 CV 领域的技术也不断用于 NLP,而深度学习解决方案的构建方式也随着时间在进化。AI 科技评论编译把这篇文章如下。 ? 由于这些深度学习模型共用了许多底层的组件,基于深度学习的自然语言处理解决方案可以与计算机视觉和其它人工智能功能的解决方案共用软件和硬件。 对于深度学习的通用软件栈的优化也可以为深度学习自然语言处理解决方案的性能带来改善。英特尔的人工智能硬件和软件组合解决方案为这些在英特尔架构的系统上运行的深度学习进展提供了很好的示例。 其次,这些构建在英特尔的统一软硬件平台上的功能和解决方案可以持续不断地从英特尔未来的开发和改进中受益。 早前的一篇博客介绍了这种解决方案中涉及到的一些方法的概述。
注:最近mysql一直提示如下错误 Packet for query is too large (1185 > 1024).
Query,有基于相同召回文档关联的相似Query,也有基于SMT的Query改写方案。 那和大模型时代更搭配的自然是改写方案,LLM的加持很大程度上降低了Query改写的难度,也为改写提供了更多的可能性。 Answering,清华(2023)比较早在16年yahoo就探索过query改写的方案,那时还是个seq2seq的LSTM。 Models,微软(2023)Query Expansion by Prompting Large Language Models, 谷歌(2023)除此之外还有一种另类Query的改写方案,就是Query2doc 分别对比了Query2Doc(Q2D), Query2Keyword(Q2E), Query2COT几种改写方案,以及使用zero-shot,few-shot,召回文档增强等不同prompt指令的效果。
❞ 六、方案四:LLM 查询改写(Query Rewriting)⭐ ❝这是当前「最主流」的方案,重点讲。 ↓ [LLM 查询改写] ↓ 改写结果: "Transformer架构与RNN循环神经网络的区别对比" 提示词设计(核心) 提示词是这个方案的灵魂。 ❞ 八、方案六:Multi-Query(多查询扩展) 原理 核心思路:「一个问题从不同角度生成多个查询变体」,分别检索后用排序融合算法合并结果。 ❞ 十、方案对比总结 全维度对比 维度 Passthrough 规则方法 小模型NER LLM改写 HyDE Multi-Query Step-Back 「延迟」 0ms <1ms 10-50ms 200 / Multi-Query 降级策略是必须的 任何使用外部模型的方案,都「必须」有降级处理。
三、解决办法: 方案1.在mysql配置文件[myslqd]下面添加一行设置skip-name-resolve.需要重启mysql服务. 方案2.在hosts文件内添加: ip与主机名的映射关系[这种方式不用重启] 如: 在hosts文件中添加: 127.0.0.1 localhost 其他网上的方法: 1. mysql_errno(), array(2006, 2013))){ mysql_close(); mysql_connect(...); mysql_query MySQL Error 2013: Lost connection to MySQL server during query 错误代码: 1153 - Got a packet bigger than
### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3396053 > 1048576). can change this value on the server by setting the max_allowed_packet' variable. ; SQL []; Packet for query max_allowed_packet' variable.; nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query 分析错误: 重要的提示: Packet for query is too large (3396053 > 1048576). 使用SET GLOBAL分配值 解决方案: SET GLOBAL max_allowed_packet=16*1024*1024 ? 成功了。 第一种办法不行,就用第二种。第二种不行就用第一种。
三、Query改写 在搜索引擎中,query改写是很重要的一环。 因此query改写是对原始query的有效补充,将改写query和原始query一起参与搜索可以改善搜索结果。 3.1.2 技术方案 业界和学界的技术方案主要可以分为pipeline和end2end两种类型 3.1.2.1 Pipeline方法 pipeline的方式将大任务分为多个子模块执行,中文纠错任务通常包含错误检测和错误纠正两个子任务 、针对商户搜索的向量化召回四种线上方案。 更多的方案公开总结已有很多,可参考: 丁香园:搜索中的Query扩展技术[5] 丁香园:搜索中的Query扩展技术(二)[6] Query 理解和语义召回在知乎搜索中的应用 美团搜索中查询改写技术的探索与实践
Interactive方案:对应当前的行为建模,每一步执行什么行为会由Action模型预测得到,同时以下query改写,摘要等模块,也会获得之前所有执行步骤已有的上文输出,进行条件文本生成任务pipeline 方案:整体行为链路固定依次是,query改写 -> 所有改写query搜索得到Top-K内容 -> 针对每个页面进行摘要抽取 -> 整合所有内容回答问题。 因此Pipeline方案并不需要Action模型,同时以下的摘要改写等模块,也会简化为不依赖上文的文本生成任务这么说有些抽象,让我们用Query改写来看下以上两种方案的差异,假设用户提问:网页布局都有哪种 Interactive:第一个改写query=网页布局种类, 然后搜索+摘要获得网页布局总结性的概述后,第二个query在已有摘要内容的基础上,改写query=网页布局最佳实践, 这样综合两个query 因此以下三个模块的介绍,我们都以pipeline方案来进行介绍Search:query改写query改写模型,是一个seq2seq的文本生成模型。
对于语义分割,在mask2former框架下,一对一匹配是不必要的,它允许目标匹配多个 Query 。在作者的方法中,根据类别频率分布,低频类别会匹配到多个 Query 以增强监督。 作者的方法提供了一个新视角,即从 Query Level 平衡每个类别不同频率的监督。大量实验表明,作者的方法优于 Baseline 。 作者讨论了将现有的长尾解决方案应用于LTSS的不足,并提出了一种针对性的基于匹配的LTSS解决方案。 如前所述, 作为控制匹配多个 Query 的类别比例的频率阈值,而 控制额外 Query 的程度。较高的 增加了应用于一对多匹配的类别数量。较高的 增加了所有类别匹配的 Query 数量。 在深入分析了在LTSS任务中经典长尾学习解决方案的瓶颈之后,作者提出了一个基于Transformer的目标方法FM,它通过一对多匹配解决了过抑制问题,并自动为每个类别确定匹配 Query 的数量。
对这类问题业界一般有两种方案:用户端拓展用户的查询词——即查询改写,或Document端拓展文档关键词——即Document标签。 本文主要介绍前一种解决漏召回的方案:查询改写(Query Rewriting,或称为查询扩展Query Expansion)。 美团查询改写线上有以下几种方案:(1)高精度的词典改写;(2)较高精度的模型改写(统计翻译模型+XGBoost排序模型);(3)覆盖长尾Query的语义NMT(神经网络翻译模型)端到端生成改写;(4)覆盖商户名搜索流量的在线向量化检索 解决的方案是引入XGBoost排序模型,使用的特征同时考虑语义相关性和改写词召回结果维度的业务统计效果。 在线模型方面结合垂直领域搜索的结构化检索特点,设计了高精度的词典改写、较高精度的模型改写(基于SMT统计翻译模型和XGBoost排序模型)、覆盖长尾Query的基于强化学习方法优化的NMT模型、针对商户搜索的向量化召回四种线上方案
我们通过10053,可以看到经过Oracle转换的SQL如下所示, Final query after transformations:******* UNPARSED QUERY IS ******* 针对这个场景,有三种解决方案。 如果半连接中主表属于n的关系,子表(子查询中的表)属于1的关系,改写内连接时,不需要去重,此时半连接和内连接性能相同。 3. 方案1和方案2,是将不带count(distinct ...)这种能很快返回结果集的放到with子句,作为单独的query block,再对临时表执行count(distinct ...)。 在这个场景中,原始SQL被改写为内连接的逻辑,在12c以上版本中得到了纠正,如下是在19c的环境,执行原始SQL,10053显示的执行计划,可以看到,已经转成了哈希半连接,因此不用改写,就可以很快得到结果集了
错误query形形色色,笔者曾经在《Query改写模块的设计和上线部署优化[2]》这篇文章中提到,由于手机输入方式的多样性,导致用户的query会出现千奇百怪的错别字,query塔侧严重依赖query信息的前提下 2.2 加入query改写 上面的问题中提到了,query输入混乱难以理解,但观察数据就不难发现其实大部分query是完全可以归一在一起的,只不过由于输入方式和输入习惯的不同,导致其衍生除了千奇百怪的query 针对这个问题,笔者在query塔侧加入了一个新特征:改写后的rewrite query,和原始query共享一个Bert。 具体的改写方式和算法选型,请移步笔者的这篇文章观看: Query改写模块的设计和上线部署优化[4] 2.3 降低热门效应 & 缓解SSB问题 Batch内负彩阳热门打压在业界其实很少有人做,因为batch [10] [1] Que2Search:FaceBook新一代query搜索召回模型分享: https://zhuanlan.zhihu.com/p/615284379 [2] Query改写模块的设计和上线部署优化
通过电商客服系统案例,我们将揭示传统向量搜索的三大瓶颈:语义鸿沟、上下文稀释和多模态割裂,并给出查询改写增强、上下文窗口优化和混合检索架构三大核心解决方案。 文档片段]D-->E[LLM生成回答]E-->F[错误答案]styleFfill:#ff9999,stroke:#ff0000图示说明:传统RAG流程存在两大致命断点(红色标注处):相似度计算未考虑语义改写 企业级性能对比我们在千亿token级知识库测试结果:策略召回率响应延迟GPU消耗适用场景全文档传入92%4.2s48GB❌不可行传统片段检索76%1.8s24GB⚠️勉强可用分层注意力89%0.9s12GB✅推荐方案动态压缩 六、企业级部署实战6.1成本控制方案针对GPU消耗痛点,我们采用LLM分片路由策略:展开代码语言:PythonAI代码解释#按问题复杂度路由到不同模型defmodel_router(query):complexity 图像与文本的语义鸿沟仍达32%行动建议:立即实施查询改写与混合检索在知识库超过50万文档时必须引入分层压缩监控仪表盘需包含幻觉率与知识覆盖率最终提醒:RAG不是银弹,但没有RAG的LLM如同没有地图的探险家
对此,可采用Query变换技术,包括Query改写以提高检索准确性、后退提示以获取背景信息及子查询分解以全面检索。这些方法常利用大模型生成新query,关键在于生成提示词的选择。 1. 面对这些问题,一般会采用Query 变换的技术,主要有3种解决方案: Query改写: 使查询更加具体和详细,提高检索最相关信息的可能性 后退提示: 生成更广泛、更一般的查询,以帮助检索相关的背景信息 Query改写 简单地说,Query改写意味着我们将用自己的语言改写用户的query,以便于我们的 RAG 应用程序将知道如何最好地回答。 我们将采用改写-检索-读取的方法,而不仅仅是检索-读取的模式。 ) print("\nRewritten query:", rewritten_query) 我们使用生成式人工智能模型来改写问题。
修改数据库实现兼容性, 这个方案已经排除了修改业务端代码, 最简单, 但本次情况特殊排除修改驱动, 可以在驱动发送SQL之前将其改写; 可行,但连代码都无法修改的情况就别指望能修改驱动了.加个中间件,由中间件去实现 SQL改写我们之前已经使用自定义中间件实现读写分离,脱敏等功能了, 来个SQL改写自然也不在话下! 实现原理原理比较简单, 就是加个中间件, 让业务连接中间件, 由中间件去转发业务数据报, 若遇到需要改写的SQL,顺便改写下即可.连接过程在此之前,我们先来简单回顾下mysql的连接过程:连接流程为建立 1+1;抓包结果如下:也就是设置之后,第一条SQL发送的包中会带有这个信息, 至于干啥的俺就不知道了.sql改写在我们能解析这个包之后, 我们就能将解析出来的SQL按照某个规则改写为我们需要的效果. , 本次是实现的SQL改写.
1.2.4 生成式改写 改写器: 利用人工标注数据预训练 利用线上未召回query进行强化学习训练 这里没有详细介绍。我理解改写器应该是一个GAN的框架。 数据增强方案: 一对相似问Q1、Q2。 首先意图判断:query是否包含世界之最支持实体类型,以及是否包含最大、最小、第一、第二等触发词。然后进行结构化解析: 问题1. 属性归一化 解决方案:同义词、词向量、句对相似度匹配 问题2. 无属性 解决方案:对量词(大、长)设置一些默认排序的属性 2.2 跨垂域粗粒度的语义解析方法 模型是用比较基础的: 槽填充:通过NER方式提取槽位 意图识别:按文本分类方式识别query意图
搜索算法全面拥抱 LLM 的变化 Query Planning Query Planning 通过拆解 query 和上下文补全,能够实现用户 prompt 到搜索 query 的规划。 时,planner 会自动将 query 改写补全为 “北京马拉松举办时间,北京马拉松日期安排” 等。 基于 LLM 的查询改写两阶段 Function Calling 为灵活接入外部优质 API,给元宝提供高质量高时效性输入,我们开发了插件系统。 插件系统的整体方案包括: 插件召排,基于用户输入改写后的 query,以向量方式召回 k 个插件,再基于 rank 模型简化召回插件列表,输出 top n,保证召回率 100%; 外部知识引入,为 Function Calling 模型提供节假日等外部知识,提升槽位抽取精度,降低模型幻觉; Function Calling,基于输入候选插件及外部知识,对用户改写 query 抽取出需要调用的 API 及槽位;