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

RAG评估指南:从检索到生成,全面解析LLM性能评估方法

前言

这一节我们将从时间线出发对RAG的评估方式进行对比,这些评估方式不仅限于RAG流程之中,其中基于LLM的评估方式更加适用于各行各业。

RAG常用评估方式

上一节我们讲了如何用ROUGE 这个方法评估摘要的相似度,由于篇幅限制,没有讲到图片与文本之间的评估,由于涉及图片与文本评估的场景多见于RAG流程中,包括检索评估方法生成评估方法,其中生成评估方法也就是通过对答案进行评估的方法,从而对LLM这个模型的生成能力进行间接的评估。也适用于我们的图片与上下文之间的评估。

此外本文还会对RAG中的其他重要内容的评估方式进行详尽的讲解。

检索评估指标

常用的检索评估方式有以下几种,包括文字和图片的检索评估,评估方式侧重点各不相同,没有好坏之分。

MetricExplanationRow level metric value
source recall@k% **这个指标表示在所有问答(Q&A)对中,至少有一个被标记为好的源(source)的文档在前k个块(chunks)中被找到的百分比。如果第一个source chunk index <k则为1,否则为0
all_img recall@k% **这个指标表示在所有问答对中,所有预期的图像都被成功检索出来的百分比。如果所有基本事实(ground-truth)的图像都被检索出来,则该指标的值为1,否则为0。
img_recall@k_mean这个指标表示图像召回的平均值即在前k个块中检索到的URL与基本事实的预期URL之间的召回率的平均值,其值在0到1之间。
img_recall@k_median这个指标表示图像召回的中位数即在前k个块中检索到的URL与基于事实的预期URL之间的召回率的中位数,其值在0到1之间。
img_precision@k_mean这个指标表示图像精确度的平均值即在前k个块中检索到的URL与基于事实的预期URL之间的精确度的平均值,其值在0到1之间。
img_precision@k_median这个指标表示图像精确度的中位数即在前k个块中检索到的URL与基于事实的预期URL之间的精确度的中位数,其值在0到1之间。
similarity_search_time_in_sec_mean这个指标表示平均的AI搜索块检索时间以秒为单位
similarity_search_time_in_sec_median这个指标表示中位数的AI搜索块检索时间以秒为单位
#_source_chunks_sum这个指标表示所有问答对中基于事实检索到的所有块的总数其值在0到k之间
#_img_chunks_sum这个指标表示所有问答对中基于事实检索到的所有图像块的总数其值在0到k之间

其中,**这里的 k 一般取10,5,3

生成评估指标

这些指标用于衡量一个系统在处理问答(Q&A)任务时的表现,特别是涉及到大型语言模型(LLM)和视觉增强服务时。下面是对表格中每个指标的解释:

MetricExplanationRow level metric value
all_cited_img recall%所有预期图像都被LLM引用的问答对的百分比如果LLM引用了所有基于事实的图像,则该指标的值为1,否则为0。
cited_img_recall_mean引用图像召回的平均值即生成答案中URL与基于事实的预期URL之间的召回率的平均值,其值在0到1之间。
cited_img_recall_median引用图像召回的中位数即生成答案中URL与基于事实的预期URL之间的召回率的中位数,其值在0到1之间。
cited_img_precision_mean引用图像精确度的平均值即生成答案中URL与基于事实的预期URL之间的精确度的平均值,其值在0到1之间。
cited_img_precision_median引用图像精确度的中位数即生成答案中URL与基于事实的预期URL之间的精确度的中位数,其值在0到1之间。
cited_img_f1_mean引用图像F1分数的平均值F1分数是召回率和精确度的调和平均数,计算公式为 F1=2∗cited_img_recall∗cited_img_precisioncited_img_recall+cited_img_precisionF1=2∗cited_img_recall+cited_img_precisioncited_img_recall∗cited_img_precision​。
cited_img_f1_median引用图像F1分数的中位数F1分数是召回率和精确度的调和平均数,计算公式为 F1=2∗cited_img_recall∗cited_img_precisioncited_img_recall+cited_img_precisionF1=2∗cited_img_recall+cited_img_precisioncited_img_recall∗cited_img_precision​。
chat_query_time_in_sec_mean端到端响应时间的平均值以秒为单位
chat_query_time_in_sec_median端到端响应时间的中位数以秒为单位
inference_prompt_tokens_sum输入到LLM的总token数
inference_completion_tokens_sumLLM用于回答的输出token数
vision_prompt_tokens_sum输入到视觉增强服务的总token数
vision_completion_tokens_sum视觉增强服务输出的token数。
gpt_correctness score>3%正确性得分高于3的问答对的百分比。
gpt_correctness_score_mean正确性得分的平均值得分范围是1到5。
gpt_correctness_score_median正确性得分的中位数得分范围是1到5。

表格的描述强调了这些指标的重要性,它们提供了对系统每个部分有效性的宝贵见解。这些指标有助于分别衡量系统的搜索能力和生成部分,以便理解实验对每个组件的影响。

RAG常用实验改进流程

我们通过系统地测试不同的方法进行实验,一次调整一个配置设置并评估其对预定义基线的影响。使用下面概述的特定检索和生成指标来评估性能。对这些指标的详细分析有助于我们决定是否使用新配置更新基线或保留现有配置。

image.png

Q&A 评估数据集

为了在实验过程中进行准确评估,整理一组多样化的问答对至关重要。这些问答对应涵盖一系列文章,涵盖各种数据格式、长度和主题。这种多样性可确保全面的测试和评估,有助于提高结果和所获见解的可靠性。以下是可供参考的问答数据集示例。

image.png

 好的数据集应该确保问答数据集中的问题均衡,既有来自文本的问题,也有来自图像和文本的问题,还有一些问题仅来自图像。还确保问题分布在各种源文档中

当评估集相对较小时,可以通过纳入各种边缘情况来确保其多样性。可以从彻底的探索性数据分析 (EDA) 开始,图片中的例子提取了诸如文章长度、表格长度和文本表格数量以及图像类型、分辨率和图像数量等特征。然后,仔细地将评估集分布在这些特征上,以实现特征空间的全面表示和稳健覆盖。此外,该系统还支持同一问题的替代来源和图像。

评估图片实操

# 模拟的检索结果,即检索算法返回的结果
retrieved_images = ['img1.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg', 'img5.jpg']# 真实的标注结果,即与查询图像相关的所有图像
ground_truth_images = ['img1.jpg', 'img2.jpg', 'img3.jpg', 'img6.jpg', 'img7.jpg']# 计算召回率
def calculate_recall(retrieved, ground_truth):# 将列表转换为集合,以便使用集合操作retrieved_set = set(retrieved)ground_truth_set = set(ground_truth)# 计算召回率recall = len(retrieved_set.intersection(ground_truth_set)) / len(ground_truth_set)return recall# 调用函数计算召回率
recall = calculate_recall(retrieved_images, ground_truth_images)print(f"召回率: {recall:.2f}")

我们这里用比较简单的方式抽象一下,具体从markdown中提取图像的标签的细节就不罗嗦了,实际上是差不多的

image.png

各评估方式综述

评估方法衡量我们系统的表现。对每个摘要进行手动评估(人工审核)既耗时又费钱,而且不可扩展,因此通常用自动评估来补充。许多自动评估方法试图衡量人类评估者会考虑的文本质量。这些质量包括流畅性、连贯性、相关性、事实一致性和公平性。内容或风格与参考文本的相似性也是生成文本的重要质量。

下图包括用于评估 LLM 生成内容的许多指标及其分类方法。

image.png

Reference-based Metrics

基于参考的指标用于将生成的文本与参考(人工注释的地面实况文本)进行比较。许多此类指标是在 LLM 开发之前为传统 NLP 任务开发的,但仍然适用于 LLM 生成的文本。

N-gram based metrics

指标 BLEU (Bilingual Evaluation Understudy), ROUGE (Recall-Oriented Understudy for Gisting Evaluation), and JS divergence (JS2)https://arxiv.org/abs/2010.07100) 是基于重叠的指标,使用 n-gram 来衡量输出文本和参考文本的相似性。

BLEU Score

BLEU(双语评估测试)分数用于评估从一种自然语言到另一种自然语言的机器翻译文本的质量。因此,它通常用于机器翻译任务,但也用于其他任务,如文本生成、释义生成和文本摘要。其基本思想是计算精度,即参考翻译中候选词的比例。通过将单个翻译片段(通常是句子)与一组高质量的参考翻译进行比较,计算出分数。然后,将这些分数在整个语料库中取平均值,以估计翻译的整体质量。评分时不考虑标点符号或语法正确性。

很少有人工翻译能获得完美的 BLEU 分数,因为完美的分数表明候选译文与其中一个参考译文完全相同。因此,没有必要获得完美的分数。考虑到随着多个参考译文的增加,匹配的机会更多,我们鼓励提供一个或多个参考译文,这将有助于最大化 BLEU 分数。

P=mwtP=wt​m​ m:参考中的候选词数。*wt:候选中的单词总数。

通常,上述计算会考虑目标中出现的候选单词或单元词组。但是,为了更准确地评估匹配,可以计算二元词组甚至三元词组,并对从各种 n 元词组获得的分数取平均值,以计算总体 BLEU 分数。

ROUGE

与 BLEU 分数相反,面向召回率的摘要评估 (ROUGE) 评估指标衡量的是召回率。它通常用于评估生成文本的质量和机器翻译任务。但是,由于它衡量的是召回率,因此它用于摘要任务。在这些类型的任务中,评估模型可以召回的单词数量更为重要。

ROUGE 类中最流行的评估指标是 ROUGE-N 和 ROUGE-L:

Rouge-N:测量参考(a)和测试(b)字符串之间匹配的“n-gram”的数量。Precision=在 a 和 b 中发现的 n-gram 数量b 中的 n-gram 数量Precision=b 中的 n-gram 数量在 a 和 b 中发现的 n-gram 数量​ Recall=在 a 和 b 中发现的 n-gram 数量a 中的 n-gram 数量Recall=a 中的 n-gram 数量在 a 和 b 中发现的 n-gram 数量​ Rouge-L:测量参考(a)和测试(b)字符串之间的最长公共子序列 (LCS)。 Precision=LCS(a,b)b 中的单元词数量Precision=b 中的单元词数量LCS(a,b)​ Recall=LCS(a,b)a 中的单元词数量Recall=a 中的单元词数量LCS(a,b)​ 对于 Rouge-N 和 Rouge-L: F1=2×precisionrecallF1=recall2×precision​

Text Similarity metrics

文本相似度指标评估器专注于通过比较文本元素之间单词或单词序列的重叠来计算相似度。它们可用于为 LLM 和参考标准文本的预测输出生成相似度分数。这些指标还可以指示模型在各个任务中的表现如何。

Levenshtein Similarity Ratio

编辑相似度比率是用于衡量两个序列之间相似度的字符串指标。此度量基于编辑距离。通俗地说,两个字符串之间的编辑距离是将一个字符串更改为另一个字符串所需的最小单字符编辑(插入、删除或替换)次数。编辑相似度比率可以使用编辑距离值和两个序列的总长度来计算,定义如下:

编辑相似度比率(简单比率): Lev.ratio(a,b)=(∣a∣+∣b∣)−Lev.dist(a,b)∣a∣+∣b∣Lev.ratio(a,b)=∣a∣+∣b∣(∣a∣+∣b∣)−Lev.dist(a,b)​ 其中 |a| 和 |b| 分别是 a 和 b 的长度。

从简单编辑相似度比率中衍生出几种不同的方法:

部分比率:通过取最短字符串计算相似度,并将其与较长字符串中相同长度的子字符串进行比较。

标记排序比率:首先将字符串拆分为单个单词或标记,然后按字母顺序对标记进行排序,最后将它们重新组合成一个新字符串,以此计算相似度。然后使用简单比率方法比较这个新字符串。

Token-set Ratio:首先将字符串拆分成单个单词或者Token,然后计算两个字符串之间Token集的交集与并集,以此来计算相似度。

Semantic Similarity metrics

BERTScore, MoverScore 和 Sentence Mover Similarity (SMS) 这些指标都依赖于语境化嵌入来衡量两段文本之间的相似性。虽然与基于 LLM 的指标相比,这些指标相对简单、快速且计算成本低廉,但研究表明,它们与人类评估者的相关性较差、缺乏可解释性、固有偏见、对各种任务的适应性较差,并且无法捕捉语言中的细微差别。

两个句子之间的语义相似度是指它们的含义有多紧密相关。为此,首先将每个字符串表示为一个特征向量,以捕获其语义含义。一种常用的方法是生成字符串的嵌入(例如,使用 LLM),然后使用余弦相似度来测量两个嵌入向量之间的相似度。更具体地说,给定一个表示目标字符串的嵌入向量 (A) 和一个表示参考字符串的嵌入向量 (B),余弦相似度计算如下:

余弦相似度=A⋅B∣∣A∣∣∣∣B∣∣余弦相似度=∣∣A∣∣∣∣B∣∣A⋅B​

如上所示,该度量测量两个非零向量之间角度的余弦,范围从 -1 到 1。1 表示两个向量相同,-1 表示它们不相似。

Reference-free Metrics

无参考(基于上下文)指标会为生成的文本生成分数,并且不依赖于基本事实。评估基于上下文或源文档。许多此类指标都是为了应对创建基本事实数据的挑战而开发的。这些方法往往比基于参考的技术更新,反映了随着 PTM 变得越来越强大,对可扩展文本评估的需求日益增长。这些指标包括基于质量、基于蕴涵、基于事实、基于问答 (QA) 和基于问题生成 (QG) 的指标。

  • 基于质量的摘要指标。这些方法检测摘要是否包含相关信息。SUPERT质量衡量摘要与基于 BERT 的伪参考的相似性,而 BLANC质量衡量两个掩码标记重建的准确性差异。ROUGE-C是 ROUGE 的修改版,无需参考,并使用源文本作为比较的上下文。
  • 基于蕴涵的指标。基于蕴涵的指标基于自然语言推理 (NLI) 任务,对于给定的文本(前提),它确定输出文本(假设)是否蕴涵、与前提相矛盾或破坏前提 [24]。这有助于检测事实不一致。 SummaC (Summary Consistency) benchmark 、FactCC和 DAE (Dependency Arc Entailment)指标可用作检测与源文本的事实不一致的方法。基于蕴涵的指标被设计为带有“一致”或“不一致”标签的分类任务。
  • 基于事实性、QA 和 QG 的指标。基于事实性的指标(如 SRLScore (Semantic Role Labeling)和 QAFactEval)评估生成的文本是否包含与源文本不符的不正确信息。基于 QA(如 QuestEval)和基于 QG 的指标被用作另一种衡量事实一致性和相关性的方法。

与基于参考的指标相比,无参考指标与人类评估者的相关性有所提高,但使用无参考指标作为任务进度的单一衡量标准存在局限性。一些 limitations包括对其底层模型输出的偏见和对更高质量文本的偏见。

点击RAG评估指南:从检索到生成,全面解析LLM性能评估方法查看全文

相关文章:

RAG评估指南:从检索到生成,全面解析LLM性能评估方法

前言 这一节我们将从时间线出发对RAG的评估方式进行对比&#xff0c;这些评估方式不仅限于RAG流程之中&#xff0c;其中基于LLM的评估方式更加适用于各行各业。 RAG常用评估方式 上一节我们讲了如何用ROUGE 这个方法评估摘要的相似度&#xff0c;由于篇幅限制&#xff0c;没…...

极兔速递开放平台快递物流查询API对接流程

目录 极兔速递开放平台快递物流查询API对接流程API简介物流查询API 对接流程1. 注册用户2. 申请成为开发者3. 企业认证4. 联调测试5. 发布上线 签名机制详解1. 提交方式2. 签名规则3. 字段类型与解析约定 物流轨迹服务极兔快递单号查询的其他方案总结 极兔速递开放平台快递物流…...

FFmpeg:强大的音视频处理工具指南

FFmpeg&#xff1a;强大的音视频处理工具指南 1. FFmpeg简介2. 核心特性2.1 基础功能2.2 支持的格式和编解码器 3. 主要组件3.1 命令行工具3.2 开发库 4. 最新发展5. 安装指南5.1 Windows系统安装5.1.1 直接下载可执行文件5.1.2 使用包管理器安装 5.2 Linux系统安装5.2.1 Ubunt…...

项目集成篇:springboot集成redistemple实现自定义缓存,并且可以设置过期时间

在Spring Boot中集成Redis并使用RedisTemplate实现自定义缓存功能&#xff0c;同时能够设置缓存项的过期时间&#xff0c;可以通过以下步骤来完成。我们将创建一个服务层方法&#xff0c;该方法将使用RedisTemplate直接与Redis交互&#xff0c;并为每个缓存项设置特定的过期时间…...

ClickHouse守护进程

背景描述 维护CK过程中&#xff0c;有时候会有CK OOM&#xff0c;并且CK自己没有自动拉起的情况出现&#xff1b;那么这个时候就需要守护进程&#xff0c;最初我不说了Supervisor来做守护进程&#xff0c;但是当我手动kill的时候发现并没有自动拉起。 解决方案 于是乎自己写…...

【Vivado】xdc约束文件编写

随手记录一下项目中学到的约束文件编写技巧。 时序约束 创建生成时钟 参考链接&#xff1a; Vivado Design Suite Tcl Command Reference Guide (UG835) Vivado Design Suite User Guide: Using Constraints (UG903) 通过Clocking Wizard IP创建的时钟&#xff08;MMCM或…...

Nginx静态资源配置

基本配置原则 明确资源目录&#xff1a;为不同类型的静态资源指定不同的路径&#xff0c;这样可以避免路径冲突&#xff0c;并且便于管理。正确设置文件权限&#xff1a;确保 Nginx 具有读取静态资源的权限。缓存优化&#xff1a;为静态资源设置缓存头&#xff08;如 expires&…...

365天深度学习训练营-第P7周:马铃薯病害识别(VGG-16复现)

文为「365天深度学习训练营」内部文章 参考本文所写记录性文章&#xff0c;请在文章开头带上「&#x1f449;声明」 &#x1f37a; 要求&#xff1a; 自己搭建VGG-16网络框架【达成√】调用官方的VGG-16网络框架【达成√】如何查看模型的参数量以及相关指标【达成√】 &#…...

docker学习笔记(三)--容器数据卷

文章目录 一、数据卷的介绍二、简单用法--直接指定挂载路径三、具名挂载与匿名挂载具名挂载匿名挂载 一、数据卷的介绍 docker将应用和环境打包成一个镜像&#xff0c;形成一个容器运行。那么容器产生的数据&#xff0c;如果不通过docker commit命令提交生成新的镜像&#xff…...

联通光猫DT741-csf 完全po解 改桥接

1.管理员密码破解&#xff0c;把光猫的loid pppoe用户名密码&#xff0c;各个连接vlan id记下来 打开链接 http://192.168.1.1/hidden_version_switch.html version选择Default Version&#xff0c;点击submit&#xff0c;光猫默认重启。重启后ip地址变为192.168.1.1 并且dhcp…...

Java Web 2 JS Vue快速入门

一 JS快速入门 1.什么是JavaScript&#xff1f; 页面交互&#xff1a; 页面交互是指用户与网页之间的互动过程。例如&#xff0c;当用户点击一个按钮&#xff0c;网页会做出相应的反应&#xff0c;如弹出一个对话框、加载新的内容或者改变页面的样式等&#xff1b;当用户在表…...

【数据结构】动态规划-基础篇

针对动态规划问题&#xff0c;我总结了以下5步&#xff1a; 确定dp数组以及下标的含义&#xff1b; 递推公式&#xff1b; dp数组如何初始化&#xff1b; 遍历顺序&#xff1b; 打印dp数组&#xff08;用来debug&#xff09;&#xff1b; 以上5步适用于任何动态规划问题&#x…...

从watch、watchEffect、useEffect原理到vue、react响应原理

正文 1.核心原理 Vue中的watch、watchEffect是基于Vue的响应式系统&#xff08;Proxy&#xff09;&#xff0c;依赖于ref或reactive数据的变化。React中的useEffect基于状态驱动的重新渲染机制&#xff0c;通过依赖数组 [dependency]&#xff0c;手动声明需要追踪的状态或属性…...

Cursor+Devbox AI开发快速入门

1. 前言 今天无意间了解到 Cursor 和 Devbox 两大开发神器,初步尝试以后发现确实能够大幅度提升开发效率,特此想要整理成博客以供大家快速入门. 简单理解 Cursor 就是一款结合AI大模型的代码编辑器,你可以将自己的思路告诉AI,剩下的目录结构的搭建以及项目代码的实现均由AI帮…...

SpringBoot+MyBatis整合ClickHouse实践

整合Spring Boot、MyBatis和ClickHouse可以让你使用Java开发的应用程序高效地与ClickHouse数据库进行交互。以下是一个基本的步骤指南&#xff0c;帮助你完成这个整合过程&#xff1a; 1. 添加依赖 首先&#xff0c;在你的pom.xml文件中添加必要的Maven依赖。你需要引入Sprin…...

在数据库设计中同步冗余字段的思考与实践

目录 前言1. 冗余字段设计的背景与场景1.1 场景描述1.2 冗余字段的必要性 2. 冗余字段设计的优点2.1 提高查询效率2.2 简化应用逻辑 3. 冗余字段设计的缺点与挑战3.1 数据不一致问题3.2 更新开销增加3.3 数据冗余占用存储空间 4. 如何同步更新冗余字段4.1 手动更新方式4.2 使用…...

MacOS安装sshfs挂载远程电脑硬盘到本地

文章目录 sshfs简介sshfs安装下载安装macFUSE安装sshfs sshfs使用注意事项 sshfs简介 SSHFS&#xff08;SSH Filesystem&#xff09;是一种基于FUSE&#xff08;用户空间文件系统&#xff09;的文件系统&#xff0c;它允许你通过SSH协议挂载远程文件系统。使用SSHFS&#xff0…...

6.824/6.5840(2024)环境配置wsl2+vscode

本文是经过笔者实践得出的最速の环境配置 首先&#xff0c;安装wsl2和vscode 具体步骤参见Mit6.s081环境配置踩坑之旅WSL2VScode_mit6s081-CSDN博客 接下来开始为Ubuntu(笔者使用的版本依然是20.04)配置go的相关环境 1、更新Ubuntu的软件包 sudo apt-get install build-es…...

查询产品所涉及的表有(product、product_admin_mapping)

文章目录 1、ProductController2、AdminCommonService3、ProductApiService4、ProductCommonService5、ProductSqlService1. 完整SQL分析可选部分&#xff08;条件筛选&#xff09;&#xff1a; 2. 涉及的表3. 总结4. 功能概述 查询指定管理员下所有产品所涉及的表&#xff1f;…...

C# 冒泡的算法

C# 冒泡的算法 public void BubbleSort(int[] arr) {int temp;for (int j 0; j < arr.Length - 2; j){for (int i 0; i < arr.Length - 2; i){if (arr[i] > arr[i 1]){temp arr[i 1];arr[i 1] arr[i];arr[i] temp;}}} }使用方法 int[] array new int[] { 5,…...

前端上传后端接收参数为null

记录一下工作中的问题 前端明明把文件传到后台了&#xff0c;但是后台接收参数为null 原因&#xff1a; 前端上传文件的name和后端接收参数名称不匹配 前端 后端 把前端上传的name由upfile改为file即可 本来是很基本的小问题&#xff0c;但因为自己钻了牛角尖一直没搞定&…...

思考:如何把知识更轻松的传递给别人

为什么我会来思考这个问题呢&#xff0c;我想要把我学到的东西传递给其他人&#xff0c;也就是能够成为一个老师&#xff0c;我曾多次尝试解决问题&#xff0c;但是事情总是不如我所愿。现在我进行一定的总结&#xff0c;来复盘一下我的教授过程。 在学生面对新鲜事物的同时&am…...

BERT的中文问答系统50

我们将对BERT的中文问答系统48-1代码进行以下改进: 1.增加时间日期和日历功能:在GUI中增加显示当前时间和日期的功能,并提供一个日历组件。 2.增加更多模型类型:增加娱乐、电脑、军事、汽车、植物、科技、历史(朝代、皇帝)、名人、生活(出行、菜品、菜谱、居家),法律、…...

node.js实现分页,jwt鉴权机制,token,cookie和session的区别

文章目录 1. 分⻚功能2. jwt鉴权机制1.jwt是什么2.jwt的应用3.优缺点 3. cookie&#xff0c;token&#xff0c;session的对比 1. 分⻚功能 为什么要分页 如果数据量很⼤&#xff0c;⽐如⼏万条数据&#xff0c;放在⼀个⻚⾯显⽰的话显然不友好&#xff0c;这时候就需要采⽤分⻚…...

OpenHarmony-4.GPIO驱动

GPIO 1.功能简介 GPIO&#xff08;General-purpose input/output&#xff09;即通用型输入输出。GPIO又俗称为I/O口&#xff0c;I指的是输入(in&#xff09;&#xff0c;O指的是输出&#xff08;out&#xff09;。可以通过软件来控制其输入和输出&#xff0c;即I/O控制。通常&…...

static关键字在嵌入式C编程中的应用

目录 一、控制变量的存储周期和可见性 1.1. 局部静态变量 1.2. 全局静态变量 二、控制函数的可见性 2.1. 静态函数 2.2. 代码示例&#xff08;假设有两个文件&#xff1a;file1.c和file2.c&#xff09; 三、应用场景 3.1. 存储常用数据 3.2. 实现内部辅助函数 四、注…...

图形开发基础之在WinForms中使用OpenTK.GLControl进行图形绘制

前言 GLControl 是 OpenTK 库中一个重要的控件&#xff0c;专门用于在 Windows Forms 应用程序中集成 OpenGL 图形渲染。通过 GLControl&#xff0c;可以轻松地将 OpenGL 的高性能图形绘制功能嵌入到传统的桌面应用程序中。 1. GLControl 的核心功能 OpenGL 渲染上下文&…...

macOS sequoia 15.1中应用程序“程序坞”没有权限打开

在macOS sequoia 15.1版本中新安装的应用程序在访达中打开报错显示应用程序“程序坞”没有权限打开“(null)”。 解决办法 在启动台中找到终端&#xff0c;点击打开&#xff0c;切换到应用目录下&#xff0c;输入 cd /Applications/ 找到需要打开的应用程序目录&#xff0…...

汉诺塔递归问题(C++)

汉诺塔递归问题 汉诺塔是典型的递归问题&#xff0c;这个问题可以这样描述&#xff1a; 完成目标&#xff1a; 将n个盘子从A搬运到C&#xff0c;求需要移动多少次完成&#xff1f; **约束条件&#xff1a;**搬运的过程中每次只能移动一个盘子&#xff0c;且不能出现大的盘子…...

【开源】A060-基于Spring Boot的游戏交易系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

抖音SEO短视频矩阵源码私有化部署

为了开发一套高效的抖音短视频SEO矩阵系统&#xff0c;开发者需要掌握以下核心技术&#xff1a; 网络编程&#xff1a;具备使用Python、Java或其他编程语言进行网络编程的能力&#xff0c;能够利用爬虫技术从抖音平台获取数据。 数据处理&#xff1a;熟悉并能够应用数据处理工…...

深入浅出:Python 编程语言的学习之路

文章目录 1. Python 简介2. Python 的安装与环境配置2.1 安装 Python2.2 配置开发环境 3. Python 基础语法3.1 变量与数据类型示例代码&#xff1a;定义变量 3.2 控制结构示例代码&#xff1a;条件语句示例代码&#xff1a;循环语句 3.3 函数与模块示例代码&#xff1a;定义函数…...

R语言机器学习论文(三):特征提取

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据一、数据归一化二、离散型分类变量的编码三、筛选特征四、重要特征五、输出结果六、总结系统信息介绍 在数据分析和机器学习项目中,经常需要对数据进行预…...

【C#设计模式(17)——迭代器模式(Iterator Pattern)】

前言 迭代器模式可以使用统一的接口来遍历不同类型的集合对象&#xff0c;而不需要关心其内部的具体实现。 代码 //迭代器接口 public interface Iterator {bool HashNext();object Next(); } //集合接口 public interface Collection {Iterator CreateIterator(); } //元素迭…...

【云原生系列】云计算中的负载均衡是什么,有什么用

云计算里有一个非常重要的概念叫“负载均衡”&#xff0c;如果你经常听到这个词但还不太明白具体是怎么回事&#xff0c;这篇文章可以给你一些思路。负载均衡简单来说就是“分担压力”&#xff0c;确保访问量被合理地分配到各个服务器上&#xff0c;让系统高效且稳定地运行。 …...

笔记本电脑usb接口没反应怎么办?原因及解决方法

笔记本电脑的USB接口是我们日常使用中非常频繁的一个功能&#xff0c;无论是数据传输、充电还是外接设备&#xff0c;都离不开它。然而&#xff0c;当USB接口突然没有反应时&#xff0c;这无疑会给我们的工作和学习带来不小的困扰。下面&#xff0c;我们就来探讨一下笔记本USB接…...

容器运行应用及Docker命令

文章目录 一、使用容器运行Nginx应用1_使用docker run命令运行Nginx应用1 观察下载容器镜像过程2 观察容器运行情况 2_访问容器中运行的Nginx服务1 确认容器IP地址2 容器网络说明3 使用curl命令访问 二、Docker命令1_Docker命令获取帮助方法2_Docker官网提供的命令说明3_docker…...

PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

全文摘要 本文介绍了一种名为PETRv2的统一框架&#xff0c;用于从多视图图像中进行三维感知。该框架基于先前提出的PETR框架&#xff0c;并探索了时间建模的有效性&#xff0c;利用前一帧的时间信息来提高三维物体检测效果。作者在PETR的基础上扩展了三维位置嵌入&#xff08;…...

Python库常用函数-数据分析

Python库常用函数 1.pandas库 &#xff08;1&#xff09;数据读取与写入 读取 CSV 文件&#xff1a; data pd.read_csv(file.csv)读取 Excel 文件&#xff1a; data pd.read_excel(file.xlsx, sheet_nameSheet1)写入 CSV 文件&#xff1a; data.to_csv(new_file.csv, ind…...

【机器学习】机器学习的基本分类-监督学习-随机森林(Random Forest)

随机森林是一种基于集成学习&#xff08;Ensemble Learning&#xff09;思想的算法&#xff0c;由多个决策树构成。它通过结合多棵决策树的预测结果来提升模型的泛化能力和准确性&#xff0c;同时减少过拟合的风险。 1. 随机森林的核心思想 多样性&#xff1a; 随机森林通过引…...

Java入门:22.集合的特点,List,Set和Map集合的使用

1 什么是集合 本质就是容器的封装&#xff0c;可以存储多个元素 数组一旦创建&#xff0c;长度就不能再改变了。 数组一旦创建&#xff0c;存储内容的类型不能改变。 数组可以存储基本类型&#xff0c;也可以存储引用类型。 数组可以通过length获得容量的大小&#xff0c;但…...

Web3与区块链如何通过智能合约实现自动化生态?

Web3和区块链正在重塑互联网的未来&#xff0c;其核心在于去中心化和用户数据自主权。而作为区块链技术的重要组成部分&#xff0c;智能合约通过自动执行预设规则&#xff0c;大大提升了效率和安全性。本文将探讨Web3与区块链如何通过智能合约实现生态的自动化。 什么是智能合约…...

排序算法入门:分类与基本概念详解

引言 排序是编程世界中最常见的操作之一&#xff0c;也是许多算法的基础。不管是从数据中找出最大值还是将一堆乱序的名字整理得井井有条&#xff0c;排序算法都在幕后默默工作。你可能会觉得排序很简单&#xff1a;从小到大排个序而已嘛。但当数据量大到上百万、上亿&#xf…...

【Spring Cloud 微服务的简单概述】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

稳定运行的以Azure Synapse Dedicated SQL Pool数据仓库为数据源和目标的ETL性能变差时提高性能方法和步骤

在Azure Synapse Dedicated SQL Pool&#xff08;以前称为SQL Data Warehouse&#xff09;的ETL性能变差时&#xff0c;可以通过以下方法和步骤来提高性能&#xff1a; 1. 分析和监控性能瓶颈 查看执行计划&#xff1a;使用SQL的SET STATISTICS IO ON和SET STATISTICS TIME O…...

可供参考的GitHub国内镜像

在配置了本地hosts文件和魔法后仍存在无法访问的问题 针对如上问题&#xff0c;可以使用国内的镜像地址做替换 例如: https://github.com/bubbliiiing/detr-pytorch改成 https://hub.nuaa.cf/bubbliiiing/detr-pytorch推荐使用的镜像 https://hub.yzuu.cf/ https://hub.nua…...

统计中间件稳定性指标

目前订单业务域涉及中间件&#xff1a;MySQL、Redis、TiDB、MQ、ES。&#xff08;遗漏项请补充&#xff09; 一、RDS 资源使用率 实例ID实例名称规格maxCPUavgCPUmaxDISKmaxIOPSavgIOPS活跃会话maxTPSavgTPSmaxQPSavgQPS实例风险 慢查询 慢查询会消耗大量的系统资源&#x…...

Qt Quick开发基础+实战(持续更新中…)

最近更新日期&#xff1a;2024/12/4 一、Qt Quick简介 写在前面&#xff1a; 本篇文章虽然只是作为我的学习笔记&#xff0c;但也作为我日后复习之用&#xff0c;所以会认真并详细记录&#xff0c;但会分重点。 1.3 新建Qt Quick Application工程 这节主要讲2个知识点&#x…...

FPGA Xilinx维特比译码器实现卷积码译码

FPGA Xilinx维特比译码器实现卷积码译码 文章目录 FPGA Xilinx维特比译码器实现卷积码译码1 Xilinx维特比译码器实现2 完整代码3 仿真结果 MATLAB &#xff08;n,k,m&#xff09;卷积码原理及仿真代码&#xff08;你值得拥有&#xff09;_matlab仿真后代码-CSDN博客 MATLAB 仿真…...

数据结构初阶1 时间复杂度和空间复杂度

本章重点 算法效率时间复杂度空间复杂度常见时间复杂度以及复杂度OJ练习 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的好坏呢&#xff1f;比如对于以下斐波那契数列&#xff1a; long long Fib(int N) { if(N < 3) return 1;return Fib(N-1) Fib(N-2); }斐…...