当前位置: 首页 > news >正文

20250414| AI:RAG多路召回和融合重排序技术

好的!以下是对RAG(检索增强生成)中多路召回融合重排序技术的详细解释,结合解释学习的视角,帮助你更好地理解和学习。这些技术是RAG系统的核心组成部分,决定了检索阶段的效果和最终生成答案的质量。我会尽量清晰、结构化地讲解,并突出可解释性以便于学习。


1. RAG简介

RAG(Retrieval-Augmented Generation)是一种结合检索生成的框架,广泛用于问答、对话和知识密集型任务。其流程分为:

  • 检索阶段:根据用户查询,从知识库(如文档集合、数据库)召回相关信息。
  • 生成阶段:将召回的信息与查询一起输入生成模型(如LLM),生成最终答案。

多路召回和融合重排序主要发生在检索阶段,决定了召回文档的质量和相关性。下面详细讲解这两部分,并融入解释学习的思路。


2. 多路召回(Multi-Path Retrieval)

2.1 定义

多路召回是指在RAG的检索阶段,使用多种召回策略(如关键词匹配、语义嵌入、知识图谱等),从不同角度获取候选文档,生成一个多样化的候选集合。

2.2 工作原理

多路召回的核心是将查询分发给多个独立的召回模块,每模块基于不同算法或数据源返回一组候选文档。具体步骤如下:

  1. 输入查询:用户输入一个查询(如“什么是量子计算?”)。
  2. 多路并行召回
    • 路径1:关键词匹配(如BM25):基于查询和文档的词频、逆文档频率(TF-IDF)计算相似度,召回包含查询关键词的文档。
    • 路径2:语义嵌入(如Dense Retrieval, DPR):将查询和文档编码为向量(用BERT或Sentence-BERT),通过余弦相似度召回语义相似的文档。
    • 路径3:基于用户行为(如协同过滤):如果有用户历史数据,召回与用户偏好相关的文档。
    • 路径4:知识图谱(可选):基于查询实体,召回与知识图谱中相关节点关联的文档。
  3. 结果合并
    • 将各路径召回的文档集合并,去除重复文档,形成统一的候选池。
    • 通常为每条路径设置召回数量(如每路径召回10篇文档,最终合并为20-50篇候选文档)。

2.3 为什么需要多路召回?

  • 单一召回的局限性
    • 关键词匹配(如BM25)擅长精确匹配,但对语义理解不足(如“量子计算”和“量子力学”可能混淆)。
    • 语义嵌入擅长捕获深层语义,但可能忽略显式关键词。
    • 用户行为或知识图谱能补充个性化或结构化信息,但覆盖面有限。
  • 多路召回的优势
    • 多样性:不同路径捕获不同类型的相关性(如语法、语义、上下文),提高召回全面性。
    • 鲁棒性:当某条路径失效(如语义嵌入模型未见过新词),其他路径可弥补。
    • 灵活性:可根据任务(如搜索、推荐、问答)调整路径组合。

2.4 解释学习视角

为了让多路召回更易理解和可信,可以通过以下方式增强其可解释性

  • 召回来源标记:记录每篇候选文档来自哪条路径(如“此文档由BM25召回”)。
    • 示例输出:对于查询“量子计算”,返回“文档A(BM25,关键词‘量子’匹配),文档B(语义嵌入,相似度0.85)”。
  • 路径贡献分析:统计每条路径召回的文档数量和质量(如命中率)。
    • 示例:显示“BM25召回30%相关文档,语义嵌入召回50%”。
  • 可视化:用图表展示各路径召回的文档分布或重叠情况,帮助用户理解路径的互补性。
  • 用户反馈:允许用户查看召回文档并标记“有用/无用”,优化路径权重。

3. 融合重排序(Fusion Re-ranking)

3.1 定义

融合重排序是在多路召回生成候选池后,使用排序模型对候选文档重新排序,以优化文档与查询的相关性。目标是将最相关的文档排在前面,供RAG的生成阶段使用。

3.2 工作原理

融合重排序通常结合多种信号(如查询-文档相似度、上下文特征)进行排序,具体步骤如下:

  1. 特征提取
    • 查询-文档特征
      • 关键词匹配分数(如BM25分数)。
      • 语义相似度(嵌入向量余弦距离)。
      • 文档长度、词频等统计特征。
    • 上下文特征
      • 用户历史偏好(如点击过的类似文档)。
      • 查询的类别(问答、搜索、推荐)。
    • 文档质量特征
      • 文档权威性(如来源是维基百科还是博客)。
      • 文档新鲜度(如发布日期)。
  2. 排序模型
    • 使用机器学习模型对候选文档打分并排序。常见模型包括:
      • 传统模型:如GBDT(梯度提升决策树)、LambdaMART。
      • 神经网络:如BERT-based Ranker,将查询和文档编码后预测相关性分数。
    • 模型输出每个文档的分数(如0到1),按分数降序排列。
  3. 融合策略
    • 加权融合:结合多模型分数(如0.6×BERT分数 + 0.4×BM25分数)。
    • 规则调整:根据业务需求调整排序(如优先展示新文档)。
  4. 输出
    • 返回Top-K文档(通常K=5-10),供RAG生成阶段使用。

3.3 为什么需要融合重排序?

  • 多路召回的局限性
    • 召回的候选池可能包含噪声(不相关文档)。
    • 不同路径的召回分数不可直接比较(如BM25分数和嵌入相似度量纲不同)。
  • 融合重排序的优势
    • 综合信号:结合多种特征(如语义、关键词、用户偏好),提升排序精度。
    • 优化相关性:确保最相关的文档排在前面,减少生成模型的噪声输入。
    • 个性化:通过用户特征实现个性化排序。

3.4 解释学习视角

融合重排序的可解释性对用户信任和系统优化至关重要。以下是增强可解释性的方法:

  • 特征重要性分析
    • 使用SHAP或LIME计算每个特征对排序分数的贡献。
    • 示例输出:“文档A排名第一,因为语义相似度贡献70%,关键词匹配贡献20%。”
  • 排序依据展示
    • 向用户说明排序原因,如“此文档排名靠前,因为它来自权威来源且与查询语义高度匹配。”
  • 可视化
    • 显示Top-K文档的特征分布(如相似度分数柱状图)。
    • 用热力图展示查询与文档的匹配程度(如关键词高亮)。
  • 调试支持
    • 提供日志,记录排序模型的输入特征和输出分数,帮助开发者优化模型。

4. 在RAG中的角色与交互

4.1 多路召回与融合重排序的协作

  • 多路召回负责生成多样化的候选池,覆盖尽可能多的相关文档。
  • 融合重排序负责精炼候选池,将最相关的文档优先提供给生成模型。
  • 交互流程
    1. 用户输入查询 → 多路召回生成候选池(如50篇文档)。
    2. 融合重排序对候选池排序,返回Top-K文档(如5篇)。
    3. 生成模型(如LLM)基于Top-K文档和查询生成答案。

4.2 对RAG生成的影响

  • 多路召回
    • 如果召回文档不相关,生成模型可能输出错误或无关答案。
    • 多样化的召回路径可为生成模型提供更丰富的上下文。
  • 融合重排序
    • 排序质量直接影响生成模型输入的文档质量。
    • 高质量的Top-K文档可减少生成模型的幻觉(hallucination)问题。

5. 解释学习在RAG中的应用

为了帮助你学习RAG中多路召回和融合重排序,以下从解释学习角度总结关键点:

  • 透明性
    • 显示召回文档的来源(如“来自BM25”)和排序依据(如“因语义相似度高”)。
    • 示例:用户查询“量子计算”,系统返回“答案基于文档A(维基百科,语义相似度0.9)”。
  • 用户交互
    • 提供召回文档的摘要或高亮关键词,让用户验证相关性。
    • 允许用户调整排序偏好(如“优先新文档”)。
  • 开发者支持
    • 记录每条召回路径的命中率和排序模型的特征权重。
    • 用可视化工具(如特征重要性图)帮助开发者优化系统。
  • 方法示例
    • SHAP值:分析排序模型中哪些特征对文档排名影响最大。
    • 注意力可视化:在生成阶段展示模型如何关注检索到的文档片段。
    • 日志分析:记录召回和排序的中间结果,供调试使用。

6. 学习建议与示例

为了帮助你深入学习,我提供以下建议和一个简化的RAG多路召回+融合重排序的伪代码示例:

6.1 学习建议

  • 理论学习
    • 阅读RAG相关论文,如《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》(2020)。
    • 学习召回算法(BM25、DPR)和排序模型(LambdaMART、BERT Ranker)。
  • 实践练习
    • 使用开源工具(如Haystack、FAISS)实现RAG系统。
    • 尝试不同召回路径(如BM25+嵌入),比较召回效果。
  • 解释性探索
    • 使用SHAP或LIME分析排序模型。
    • 开发可视化界面,展示召回和排序过程。

6.2 伪代码示例

from typing import List, Dict
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from rank_bm25 import BM25Okapi# 假设文档库和嵌入
docs = ["Doc1: Quantum computing basics...", "Doc2: Advanced quantum algorithms...", ...]
doc_embeds = np.array([...])  # 文档的预计算嵌入
bm25 = BM25Okapi([doc.split() for doc in docs])def multi_path_retrieval(query: str, top_k: int = 10) -> List[Dict]:# 路径1:BM25召回query_tokens = query.split()bm25_scores = bm25.get_scores(query_tokens)bm25_top_k = np.argsort(bm25_scores)[::-1][:top_k]# 路径2:语义嵌入召回query_embed = encode_query(query)  # 假设有编码函数embed_scores = cosine_similarity(query_embed, doc_embeds)[0]embed_top_k = np.argsort(embed_scores)[::-1][:top_k]# 合并候选池candidates = set(bm25_top_k).union(embed_top_k)return [{"doc_id": i, "bm25_score": bm25_scores[i], "embed_score": embed_scores[i]} for i in candidates]def fusion_reranking(query: str, candidates: List[Dict], top_k: int = 5) -> List[int]:# 提取特征features = []for cand in candidates:feat = [cand["bm25_score"],  # 关键词匹配分数cand["embed_score"],  # 语义相似度len(docs[cand["doc_id"]]),  # 文档长度get_doc_quality(cand["doc_id"])  # 假设有质量评估函数]features.append(feat)# 排序模型(简化为加权融合)scores = [0.6 * f[1] + 0.3 * f[0] + 0.1 * f[3] for f in features]# 返回Top-K文档IDranked_ids = [cand["doc_id"] for _, cand in sorted(zip(scores, candidates), reverse=True)[:top_k]]return ranked_idsdef rag_pipeline(query: str) -> str:# 多路召回candidates = multi_path_retrieval(query)# 融合重排序ranked_doc_ids = fusion_reranking(query, candidates)# 生成阶段top_docs = [docs[i] for i in ranked_doc_ids]answer = generate_answer(query, top_docs)  # 假设有生成函数# 解释性输出explain = {"query": query,"top_docs": [{"id": i, "content": docs[i][:50], "source": "BM25+Embed"} for i in ranked_doc_ids]}return answer, explain# 示例运行
query = "What is quantum computing?"
answer, explanation = rag_pipeline(query)
print("Answer:", answer)
print("Explanation:", explanation)

7. 总结

  • 多路召回通过多种策略(如BM25、语义嵌入)生成多样化候选池,提升RAG检索的覆盖率。可解释性通过来源标记和贡献分析实现。
  • 融合重排序使用排序模型(如BERT、GBDT)优化候选文档顺序,提升相关性。可解释性通过特征重要性和排序依据展示。
  • 解释学习使RAG更透明,帮助用户信任结果,开发者优化系统。
  • 学习路径:结合理论(论文)、实践(代码)和解释性工具(SHAP、可视化),逐步掌握RAG技术。

如果有具体问题(比如想深入某部分、需要代码调试或更详细的解释),请告诉我,我会进一步帮助你!

相关文章:

20250414| AI:RAG多路召回和融合重排序技术

好的!以下是对RAG(检索增强生成)中多路召回和融合重排序技术的详细解释,结合解释学习的视角,帮助你更好地理解和学习。这些技术是RAG系统的核心组成部分,决定了检索阶段的效果和最终生成答案的质量。我会尽…...

基于时间序列分解与XGBoost的交通通行时间预测方法解析

一、问题背景与数据概览 在城市交通管理系统中,准确预测道路通行时间对于智能交通调度和路径规划具有重要意义。本文基于真实道路传感器数据,构建了一个结合时间序列分解与机器学习模型的预测框架。数据源包含三个核心部分: 道路通行数据(new_gy_contest_traveltime_train…...

论文精度:HeightFormer:基于Transformer的体素高度预测在路边3D目标检测中的应用

论文地址:https://arxiv.org/pdf/2503.10777 1. 背景与问题定义 1.1 路边视觉3D检测的重要性 在自动驾驶领域,车辆端的视觉感知系统面临视角局限性​(如遮挡、短距离感知)和安全挑战。相比之下,​路边摄像头通过高位安装,可覆盖更广的感知范围(如交叉路口、高速公路)…...

华为手机清理大数据的方法

清理手机最大的问题是,手动和自动清理了多次,花费了很长时间,但是只腾挪出来了一点点空间,还是有很大空间无法使用,这篇文章就告诉你怎样做,以花瓣剪辑为例,如下: 删除数据&#xff…...

tcp特点+TCP的状态转换图+time_wait详解

tcp特点TCP的状态转换图time wait详解 目录 一、tcp特点解释 1.1 面向连接 1.1.1 连接建立——三次握手 1.1.2 连接释放——四次挥手 1.2 可靠的 1.2.1 应答确认 1.2.2 超时重传 1.2.3 乱序重排 1.2.4 去重 1.2.5 滑动窗口进行流量控制 1.3 流失服务(字节…...

flutter 桌面应用之窗口自定义

在开发桌面软件的时候我们经常需要配置软件的窗口的大小以及位置 我们有两个框架选择:window_manager和bitsdojo_window 对比bitsdojo_window 特性bitsdojo_windowwindow_manager自定义标题栏✅ 支持❌ 不支持控制窗口行为(大小/位置)✅(基本…...

【C++】NAN相关研究

先说结论:NAN对比一切都是false INF 对INF 是true 正无穷与正无穷比较相等,正无穷与负无穷比较不相等 window linux环境下基本相同, debug release基本相同 NAN -NAN INF -INF 不做论述 // TestNan.cpp : 此文件包含 "main" 函数。…...

windows下Git安装及其IDEA配置

1.下载Git安装包 阿里镜像链接(建议从这里下载,速度很快) git-scm.com(官方网站,提供了各个平台(Windows、Mac、Linux)的安装程序) 选择版本号后,在选择此版本的不同包…...

迷你世界脚本脚本常见问题

脚本常见问题 彼得兔 更新时间: 2024-05-22 17:54:44 在查阅开发者学院中的脚本API时,若有任何问题或建议,欢迎通过问卷进行反馈!【点我填写问卷】 1.Block中的data在什么地方使用 data使用有具体需求,此处不建议开发者使用。开发者尽可能使…...

2025蓝桥杯C++ A组省赛 题解

昨天打完蓝桥杯本来想写个 p y t h o n python python A A A 组的题解,结果被队友截胡了。今天上课把 C A CA CA 组的题看了,感觉挺简单的,所以来水一篇题解。 这场 B B B 是一个爆搜, C C C 利用取余的性质比较好写&#…...

链接世界:计算机网络的核心与前沿

计算机网络引言 在数字化时代,计算机网络已经成为我们日常生活和工作中不可或缺的基础设施。从简单的局域网(LAN)到全球互联网,计算机网络将数以亿计的设备连接在一起,推动了信息交换、资源共享以及全球化的进程。 什…...

MySQL 常见存储引擎全解析:InnoDB、MyISAM、Memory 等对比与实战

一、什么是存储引擎? 存储引擎(Storage Engine)是 MySQL 中负责数据存储与管理的底层模块。不同的存储引擎负责处理表的读写、索引维护、事务支持、崩溃恢复等机制。 在创建表时可以指定使用的存储引擎: CREATE TABLE user (id…...

21天Python计划:零障碍学语法(更新完毕)

目录 序号标题链接day1Python下载和开发工具介绍https://blog.csdn.net/XiaoRungen/article/details/146583769?spm1001.2014.3001.5501day2数据类型、字符编码、文件处理https://blog.csdn.net/XiaoRungen/article/details/146603325?spm1011.2415.3001.5331day3基础语法与…...

Python中NumPy的统计运算

在数据分析和科学计算领域,Python凭借其丰富的库生态系统成为首选工具之一,而NumPy作为Python数值计算的核心库,凭借其高效的数组操作和强大的统计运算功能,广泛应用于机器学习、信号处理、统计分析等场景。本文将系统介绍NumPy在…...

SQL 解析 with as

sql的运行顺序 <select id"getTrendList" parameterType"java.util.HashMap" resultType"java.util.Map"><![CDATA[WITH-- 生成连续年份列表&#xff08;当前年前8年到前1年&#xff09;year_range AS (SELECT EXTRACT(YEAR FROM SYSD…...

07-算法打卡-链表-移除链表-leetcode(203)-第七天

1 题目地址 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09;203. 移除链表元素 - 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a;[https://assets.leetc…...

抓包神器,自研EtherCAT抓包工具

大家好&#xff0c;博主自研了一款以太网抓包神器&#xff0c;可以用于EtherCAT抓包。 把抓包工具接入以太网总线中&#xff0c;就能正常使用了。 上位机软件采用wireshark。 开启以下协议 抓包截图如下 时间戳的精度为5ns。...

五、adb常用命令

SDK路径下的 \Android\Sdk\platform-tools\adb.exe adb devices 查看连接的设备 adb shell getprop ro.build.version.release 查看系统版本 adb shell dumpsys window windows | findstr mFocusedApp 获取正在运行的app启动包名 结果为空&#xff0c;我不知道是不是Android…...

Java第四节:idea在debug模式夏改变变量的值

作者往期文章 Java第一节&#xff1a;debug如何调试程序&#xff08;附带源代码&#xff09;-CSDN博客 Java第二节&#xff1a;debug如何调试栈帧链&#xff08;附带源代码&#xff09;-CSDN博客 Java第三节&#xff1a;新手如何用idea创建java项目-CSDN博客 步骤一 在需要修改…...

Java学习手册:Java反射与注解

Java反射&#xff08;Reflection&#xff09;和注解&#xff08;Annotation&#xff09;是Java语言中两个强大的特性&#xff0c;它们在框架开发和复杂应用中扮演着重要角色。反射允许程序在运行时检查和操作类、对象、接口、字段和方法&#xff0c;而注解则提供了一种元数据形…...

21 天 Python 计划:MySQL事务四大隔离级别深度剖析

文章目录 一、事务1.1 什么是事务&#xff1f;1.2 事务的四大特性 二、事务并发存在的问题2.1 脏读&#xff08;dirty read&#xff09;2.2 不可重复读&#xff08;unrepeatable read&#xff09;2.3 幻读 三、事务的四大隔离级别实践3.1 读未提交&#xff08;Read Uncommitted…...

IO多路复用沉浸式体验

这篇文章主要讲解一下IO多路复用常见问题&#xff0c;包含常见面试题&#xff0c;对你有帮助的话可以留个赞和关注嘛&#xff1f;谢谢大家支持&#xff01; 1.epoll 相比于 select/poll 的优点有哪些&#xff1f; 高效的数据结构&#xff1a;epoll使用红黑树管理fd&#xff0…...

音视频学习(三十三):GOP详解

GOP 概念 GOP&#xff08;图像组&#xff09;是视频编码中一组帧的集合(按相关性分组)&#xff0c;它从一个关键帧&#xff08;I帧&#xff09;开始&#xff0c;后面跟随若干个参考帧&#xff08;P帧&#xff09;和预测帧&#xff08;B帧&#xff09;。其结构决定了视频帧的压…...

部署YUM仓库

目录 一.YUM 1.1yum概述 1.2yum的实现 1.3yum服务的组成 1.4yum服务实现过程 1.5yum配置文件位置 二.yum相关命令 三.搭建yum仓库的方式 3.1使用HTTP方式搭建yum仓库 准备工作&#xff08;服务端和客户端都需要做&#xff09; 服务端 客户端 3.2使用ftp方式搭建yu…...

中位数学习(低估它了)

-----------------------------------------------------------------中位数------------------------------------------------------- 中位数有一个很好的性质&#xff1a;假设有一批数据&#xff0c;你想找一个数&#xff0c;使得这批数据与它差的绝对值的和最小&#xff0…...

音视频转换器 AV 接口静电保护方案

方案简介 音视频转换器是将音视频&#xff08;AV&#xff09;信号转换成其他格式或信号类型的设备或软件。 它能够实现大多数视频、音频以及图像格式之间的转换&#xff0c;包括但不限于 RMVB、AVI、 MP4、MOV 等常见格式&#xff0c;同时也支持将不同采样率、位深度、声道数…...

蓝桥杯嵌入式第十二届省赛程序设计1(超简单版)

此程序只需要会C语言数组&#xff0c;结构体(struct)&#xff0c;for , if , switch(也可以用if)就能够实现。 引脚设置&#xff1a; 引脚配置&#xff08;参照笔记&#xff09;&#xff1a; 代码部分&#xff1a; /* USER CODE END Header */ /* Includes ------------------…...

CSS 链接样式学习笔记

在网页设计中&#xff0c;链接&#xff08;<a> 标签&#xff09;是不可或缺的元素&#xff0c;通过 CSS 可以对链接进行丰富的样式设置&#xff0c;从而提升用户体验和页面美观度。以下是关于 CSS 链接样式的详细学习笔记。 一、链接的四种状态 链接有四种不同的状态&a…...

有ts文件却无法ts出来解决办法

一开始报错是报这个&#xff0c;但是我其实完全看不懂为什么 原因是这个 打开某个test就行了...

javaSE.Lambda表达式

如果一个接口中有且只有一个待实现的抽象方法&#xff0c;那么我们可以将匿名内部类简写为Lambda表达式。 简写规则 标准格式&#xff1a; &#xff08;【参数类型 参数名称&#xff0c;】...&#xff09; -> {代码语句&#xff0c; 包括返回值} 只有一行花括号{}可以省略。…...

Web渗透之文件包含漏洞

文件包含漏洞原理 1、源代码 <?php$filename $_GET[filename]; include $filename; //或include_once,require,require_onceecho "欢迎来到PHP的世界.";?> 2、利用条件 php.ini中alllow_url_fopenOn(默认开启)和allow_url_includeOff(默认关闭)要开启…...

费马引理和罗尔定理

cheer 向……欢呼&#xff0c;使高兴&#xff0c;欢呼&#xff0c;欢呼&#xff0c;愉快 前言区间平均值费马引理罗尔三步万能构造原函数的方法什么时候用罗尔定理计划拉格朗日需要记忆的不等式柯西中值定理泰勒高阶导数判断极值最后 前言 继续学习。今天争取把讲义和作业题都…...

【合新通信】浸没式液冷中低成本冷媒开发的最新进展

浸没式液冷光模块是一种结合高效散热技术与光通信的新型解决方案&#xff0c;主要用于数据中心、超算中心等高密度计算场景。其核心特点是通过将光模块直接浸入绝缘冷却液中&#xff08;如矿物油、氟化液等&#xff09;&#xff0c;实现高效散热和节能降耗。低成本冷却液的研发…...

【开发记录】服务外包大赛记录

参加服务外包大赛的A07赛道中&#xff0c;最近因为频繁的DEBUG&#xff0c;心态爆炸 记录错误 以防止再次出现错误浪费时间。。。 2025.4.13 项目在上传图片之后 会自动刷新 没有等待后端返回 Network中的fetch /upload显示canceled. 然而这是使用了VS的live Server插件才这样&…...

智能指针之设计模式1

本文探讨一下智能指针和GOF设计模式的关系&#xff0c;如果按照设计模式的背后思想来分析&#xff0c;可以发现围绕智能指针的设计和实现有设计模式的一些思想体现。当然&#xff0c;它们也不是严格意义上面向对象的设计模式&#xff0c;毕竟它们没有那么分明的类层次体系&…...

Spring Boot 中应用的设计模式

Spring Boot 中应用的设计模式详解 Spring Boot 作为 Spring 框架的扩展&#xff0c;广泛使用了多种经典设计模式。以下是主要设计模式及其在 Spring Boot 中的具体应用&#xff1a; 一、创建型模式 1. 工厂模式 (Factory Pattern) 应用场景&#xff1a; BeanFactory 和 Ap…...

23种GoF设计模式

GoF&#xff08;Gang of Four&#xff09;设计模式是由四位计算机科学家 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的书籍《Design Patterns: Elements of Reusable Object-Oriented Software》中提出的设计模式 目录 一、创建型模式&#xff08;Cre…...

Python实例题:Python实现中文错别字高亮系统

目录 Python实例题 题目 安装依赖库 代码实现 代码解释 运行思路 注意事项 Python实例题 题目 Python实现中文错别字高亮系统 安装依赖库 在开始之前&#xff0c;你需要安装 pycorrector 和 rich 库。可以使用以下命令进行安装&#xff1a; pip install pycorrecto…...

【第三十一周】ViT 论文阅读笔记

ViT 摘要Abstract文章信息引言方法Patch EmbeddingPatch Position EmbeddingTransformer EncoderMLP Head整体架构CNN的归纳偏置 代码实现实验结果总结 摘要 本篇博客介绍了Vision Transformer&#xff08;ViT&#xff09;&#xff0c;这是一种突破性的图像分类模型&#xff…...

射频(RF)静电放电防护方案

方案简介 射频&#xff08;RF&#xff09;是 Radio Frequency 的缩写&#xff0c;表示可以辐射到空间的电磁频率&#xff0c;频率 范围从 300kHz&#xff5e;300GHz 之间。射频就是射频电流&#xff0c;简称 RF&#xff0c;它是一种高频交流变化 电磁波的简称。射频天线是一…...

【redis进阶三】分布式系统之主从复制结构(1)

目录 一 为什么要有分布式系统&#xff1f; 二 分布式系统涉及到的非常关键的问题&#xff1a;单点问题 三 学习部署主从结构的redis (1)创建一个目录 (2)进入目录拷贝两份原有redis (3)使用vim修改几个选项 (4)启动两个从节点服务器 (5)建立复制&#xff0c;要想配…...

排序(1)

排序&#xff08;1&#xff09; 日常生活中&#xff0c;有很多场景都会用到排序。比如你买东西&#xff0c;在购物软件就有几种展现方式&#xff0c;按照评论数量给你排序出来&#xff0c;让你选&#xff0c;还是说按照价钱高低排序出来让你选。 排序其实是一种为了更好解决问…...

NR 5G中的N5接口

N5接口的定义: Reference point between the PCF and an AF or TSN AF. 即N5 PCF和AF之间的参考点。 AF Application Function 应用功能&#xff0c;指应用层的各种服务&#xff0c;可以是运营商内部的应用如Volte AF(类似4G的Volte As&#xff09;、也可以是第三方的AF&…...

STM32自学进阶指南:从入门到精通的成长路径 | 零基础入门STM32第九十九步

主题内容教学目的/扩展视频自学指导通过数据手册和搜索引擎查找资料,独立解决问题以积累经验和提升能力。自学过程中应保持敬畏之心,不断总结未知领域,持续进步。师从洋桃电子,杜洋老师 📑文章目录 一、自学指导全景图1.1 学习路线对比1.2 关键学习策略二、待探索技术领域…...

利用 Python 进行股票数据可视化分析

在金融市场中&#xff0c;股票数据的可视化分析对于投资者和分析师来说至关重要。通过可视化&#xff0c;我们可以更直观地观察股票价格的走势、交易量的变化以及不同股票之间的相关性等。 Python 作为一种功能强大的编程语言&#xff0c;拥有丰富的数据处理和可视化库&#xf…...

用 Vue.js 构建基础购物车:从 0 到 1 的实战解析

在当今数字化购物的浪潮中&#xff0c;购物车功能已成为电商平台不可或缺的一部分。它不仅承担着记录用户所选商品的重任&#xff0c;还需提供流畅的交互体验和精准的计算逻辑。本文将深入探讨如何利用 Vue.js 这一强大的 JavaScript 框架&#xff0c;逐步搭建一个基础但功能完…...

MapSet常用的集合类(二叉搜索树,哈希表)

Set集合 Set的核心特点&#xff1a; Set继承了Collection。 保存的元素不会重复。 保存的元素不能修改。 保存的元素无序&#xff0c;和List不同&#xff0c;如果有两个&#xff1a;List {1&#xff0c;2&#xff0c;3}&#xff0c;List {2&#xff0c;1&#xff0c;3}&…...

五种IO模型

1、通信的本质&#xff1a; 通过网络通信的学习&#xff0c;我们能够理解网络通信的本质是进程间通信&#xff0c;而进程间通信的本质就是IO。 IO也就是input和output。当读取条件不满足的时候&#xff0c;recv会阻塞。write写入数据时&#xff0c;会将数据拷贝到缓冲区中&am…...

路由器开启QOS和UPNP的作用

QOS 的作用 保障关键业务带宽&#xff1a;可根据网络应用的重要性分配带宽。比如在家庭网络中&#xff0c;当多人同时使用网络时&#xff0c;将视频会议等实时性要求高的关键业务设置为高优先级&#xff0c;确保其能获得足够带宽&#xff0c;避免卡顿&#xff0c;而文件下载等…...

学习MySQL的第九天

纸上得来终觉浅 绝知此事要躬行 数据处理的增删查改 一、添加数据 添加数据有两种方式&#xff0c;一种是一条一条的添加数据&#xff0c;另一种是通过对其他表的查询&#xff0c;将查询的结果插入到表中&#xff1b;第一种方式又可以分为三种方式&#xff1a…...