关于搜索引擎链路

一、搜索引擎的的链路

简单流程如下,一般都包括query理解,召回,粗排,精排,重排。

二、query理解,查询词处理

对于进来的query需要有很多道工序做处理。才能让搜索引擎的效果更好、更智能。

2.1 分词

 分词是query理解中必不可少的环节。

 TODO : 这里待分享一些方法。

2.2 词权重

词权重,做的事情是,找到query中最关键的点,和非关键的点。从而能够在召回过程中,影响排序。

例如query为“冬季卫衣推荐”,其中重要的是“冬季” 和“卫衣”,其中不重要的是“推荐”。如果不做词权重这个事情,那么“推荐”这个词,和“冬季”“卫衣”,同等重要,很可能干扰排序的结果,召回不相关的内容。

词权重,特别对于长尾的query,特别是在根据关键词的召回过程中(例如:BM25),会特别有用。能够帮助我们找到更相关的结果。

做法:这里分享一个做法。也是利用NLP中的词性标注,然后根据词性来判别权重。

2.3  类目识别,分类

对内容有一个分类,这是非常重要的事情。就像平常生活中,我们把袜子,体恤,短裤都分开方,这样在用的时候可以很好的找。否则在一堆杂乱的的东西中,想要找到想要的,是南辕北辙的事情,费时费力。

做法:这里实际上是对应NLP中的分类任务

2.4 意图识别

时效性意图:例如,query中带有“今天”,“近一周”等等。在召回的过程中,需要考虑文档的年龄。

地域性意图。

我觉得意图识别是query理解中,很重要的一个步骤,做不好会让搜索引擎感觉很笨。做好了会让用户觉得它很聪明,很智能。

2.5 查询词改写 

这里其实包括了同义词。

2.6 query改写

关于把一个query改变成另外一个query的做法,这里有一些研究。

用十篇论文聊聊关于使用LLM做query Rewrite的问题_hyde+prf-CSDN博客

2.7 纠错

纠正query中的错误,可以给用户更好的体验。帮助用户找到想要的内容。

三、召回 

目前分为两种。在机器学习火热之前,基本上是用关键词做召回的(Bm25)。机器学习能力越来越强,可以做语义召回,例如DSSM双塔模型,做语义检索。

3.1 BM25召回

这里,对物料数据做预处理(入库),例如建立倒排索引。然后把query的关键词和倒排索引做匹配好计算,找到最匹配的文档。这里可以使用elasticsearch来做。

3.2  语义召回(向量召回)

双塔模型,一个模型把文档转为向量,一个模型把query转为向量。其中文档的向量是离线计算的(因为这是已知的)。而query是实时计算的(因为这是未知的)。

有很多现成的embedding模型,可以做这件事情。基本上不用自己训练或者微调。例如有BGE,m3e等等

 3.3 KV召回

对于一些特殊的场景。我们可以做一些缓存。例如微博中的热搜,又或者是抖音上的爆火视频。这些并不需要都去做计算,可以提前用query和内容做缓存。更快的做响应。

四、排序

在召回阶段,可能会有一个排序。但是它为了计算速度,通常会较弱。一般都要把召回的内容,重新做一个排序。通常的做法是,使用模型来计算查询词和文档的相关性。  

排序可能也有多层,分为粗排和精排(粗排和精排的区别是使用的特征量不同,粗排追求速度,特征维度更少。精排更关注效果,特征更多,耗时可能更长)。先计算各个维度的分数。然后把这些各个维度的分数做融合计算。针对不同的场景,侧重点不同。以后的关注相关性,有的关注个性化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu18.04 OpenSSH升级

升级前版本: rootecs-m2eqyb:/opt# ll total 20912 drwxr-xr-x 2 root root 4096 May 10 16:23 ./ drwxr-xr-x 24 root root 4096 May 10 14:38 ../ -rw-r--r-- 1 root root 1848766 May 10 16:23 openssh-9.7p1.tar.gz -rw-r--r-- 1 root root 18038…

离散数学--图论

目录 1.简单概念 2.握手定理 3.点割集 4.边割集 5.点连通度和边连通度 6.Dijstra算法&&最短路径 7.有向图的连通性 8.图的矩阵表示 9.欧拉图问题 10.哈密尔顿图 1.简单概念 (1)这个里面的完全图比较重要,完全图是例如k3,k5这…

使用小顶堆找出有序矩阵中第 K 小的元素

leetcode:378. 有序矩阵中第 K 小的元素 import heapqdef kthSmallest(matrix, k):heap []n len(matrix)for i in range(n): # 使用第一列数据构建小顶堆heapq.heappush(heap, (matrix[i][0], i, 0))# 弹出k-1次k1 1while k1 < k:num, i, j heapq.heappop(heap)if j &…

CEF框架:各种各样的Handle(三)——拦截Http的请求与响应

文章目录 CefClientCefRequestHandlerCefResourceRequestHandlerCefResponseFilterOnResourceLoadComplete输出结果前面有两篇提到了CEF框架中的各种各样的HANDLE,然后中间一段时间关注NodeJS去了,今天再补充一点CEF的东西:利用CEF框架中的各种Handle来拦截Http请求与其响应…

JMETER工具:以录制手机app为例

JMETER工具&#xff1a;以录制手机app为例子 JMETER安装和环境配置 pc需要安装jdk&#xff0c;并进行jdk的环境配置&#xff0c;安装好jdk并配置好后&#xff0c;通过命令行输入java –version出现以下界面就表示安装成功&#xff1a; &#xff08;对应的jdk版本不可太低&…

AI学习指南数学工具篇-核方法在Python中的实现

AI学习指南数学工具篇-核方法在Python中的实现 在机器学习领域中&#xff0c;核方法是一种常用的技术&#xff0c;可以帮助我们处理非线性问题。通过将数据映射到高维特征空间&#xff0c;核方法可以将复杂的非线性关系转化为线性关系&#xff0c;从而方便我们使用线性模型进行…

selenium环境安装和web自动化基础

webUI自动化背景 因为web页面经常会变化&#xff0c;所以UI自动化测试的维护成本很高。不如接口的适用面广&#xff0c;所以大部分公司会做接口自动化测试&#xff0c;但是未必会做UI自动化测试&#xff1b; UI自动化测试要做也是覆盖冒烟测试&#xff0c;不会到很高的覆盖率&a…

Flink常见面试题总结

文章目录 1. 简单介绍一下Flink2. Flink 的运行必须依赖Hadoop组件吗?3. Flink 和 Spark Streaming 的区别&#xff1f;4. Flink集群角色5. Flink核心概念5.1 并行度5.2 算子链&#xff08;Operator Chain&#xff09;5.3 任务槽&#xff08;Task Slots&#xff09;5.4 任务槽…

掌握Go语言中的net/http包:编写高性能Web服务

掌握Go语言中的net/http包&#xff1a;编写高性能Web服务 引言HTTP服务器构建基础服务器设置路由与处理函数中间件使用高级配置&#xff08;如TLS/SSL&#xff09; HTTP客户端开发创建与使用HTTP客户端处理响应 高级客户端特性 处理JSON与表单数据接收与解析JSON接收与解析表单…

odoo16版本的render变更

今天在整理文件上传功能时&#xff0c;发现 odoo16的ir_ui_view.py中_render方法不见了&#xff0c;引用出错AttributeError: ir.ui.view object has no attribute _render def _render(self, valuesNone, engineir.qweb, minimal_qcontextFalse):assert isinstance(self.id, …

实现一个自定义 hook,用于强制刷新当前组件

写在前面 在 react 中&#xff0c;如果 state 数据发生变化&#xff0c;我们知道&#xff0c;会重新渲染该组件。 但是这个前提是我们需要依赖 state 数据的变化&#xff0c;那比如我们并不想定义 state&#xff0c;又或者说我们的操作不能引起 state 的变化&#xff0c;此时…

无人机行业招投标技术详解

一、招标流程与原则 无人机行业的招投标流程通常包括招标公告发布、招标文件购买与审查、投标单位资格预审、投标书编制与递交、开标评标、中标公示与合同签订等步骤。在此过程中&#xff0c;必须遵循公开、公平、公正的原则&#xff0c;确保所有符合要求的投标单位都能获得平…

【从C++到Java一周速成】章节11:异常的处理

章节12&#xff1a;异常的处理 【1】try-catch-finally【2】throw和throwsthrow用法 异常就是在程序的运行过程中所发生的不正常的事件&#xff0c;它会中断正在运行的程序。 常见异常&#xff0c;例如&#xff1a; 所需文件找不到 网络连接不通或中断 算术运算错&#xff08;除…

前端实现打印功能

1、引入打印相关的库 在您的Vue项目中,需要先安装一个用于打印的库,如print-js。您可以通过以下命令安装&#xff1a; npm install print-js --save2、在组件中引入并使用&#xff0c;在需要实现打印功能的组件中&#xff0c;先import print-js模块&#xff1a; import print…

SpringBoot Bean

配置优先级 Bean的管理 从IOC容器中获取Bean对象&#xff1a;注入IOC容器对象 bean的作用域 Bean对象默认在容器启动时实例化 Lazy在第一次使用时初始化 Bean的管理&#xff1a;第三方Bean 引入依赖&#xff0c;每次解析创建新对象&#xff0c;浪费资源 将第三方对象交给…

如何搭建springBoot项目中的全局异常处理和自定义异常处理

目录 1 什么是异常 2 异常的种类 3 解决异常的方式 4 全局异常处理器和自定义异常处理器 5 测试异常处理 1 什么是异常 异常&#xff08;Exception&#xff09;是在程序执行过程中出现的一种特殊情况或错误。它可以是由于程序逻辑错误、运行环境问题、用户输入错误等原因…

【AI基础】反向传播

文章目录 1. 先写出第一步2.将其封装成函数3. pytorch版 1. 先写出第一步 # 定义输入值和期望输出 x_1 40.0 x_2 80.0 expected_output 60.0 初始化# 定义权重 w_1_11 0.5 w_1_12 0.5 w_1_13 0.5 w_1_21 0.5 w_1_22 0.5 w_1_23 0.5w_2_11 1.0 w_2_21 1.0 w_2_31 1…

基于 vLLM 搭建 DeepSeek-V2 Chat 服务

直奔主题。 安装vLLM 官方实现的代码还没有 merge 到 vLLM 主分支&#xff0c;所以直接 git clone DeepSeek 的分支。 git clone https://github.com/zwd003/vllm.git cd vllm pip install -e .源码安装大概耗时 10 分钟。 OpenAI 接口规范启动 官方 Github 放的是单条推理…

useState和setState的用法和区别

setState是类组件中用来更新状态的方法&#xff0c; 而useState是函数组件中用来声明并初始化状态的Hook。 在使用useState时&#xff0c;可以直接在函数组件中声明并初始化一个状态变量&#xff0c;也可以使用数组结构来获取状态变量和更新函数。 而在类组件中&#xff0c;需…

物流单管理系统软件教程

佳易王物流单打印软件&#xff0c;物流快运单据模板格式&#xff0c;佳易王物流管理