项目复习

项目复习

Posted by Junvate on May 10, 2025

项目

速记

针对现有目标检测模型在处理工地场景中常见的小目标(如远距离工人)或因光照、遮挡导致的低对比度目标时,普遍存在关键特征提取不足、对目标区域聚焦不够精准的共性瓶颈,这直接影响了安全监控系统的实际检测精度与可靠性。为解决这一挑战,我独立开发并成功部署了一套基于YOLOv10的智慧工地安全监控系统,旨在通过实时智能监测工人安全帽和反光衣的佩戴情况,显著提升建筑工地的安全管理效率和主动预警水平。 在该项目中,我负责了从系统构思、前期工地特定场景下的大规模数据采集、精细化清洗与标注,到核心的YOLOv10目标检测模型的构建、训练以及关键的深度优化全过程。为有效攻克小目标检测难题并提升整体检测性能,我的核心优化工作包括: 引入EIoU损失函数,以提升对安全帽、反光衣等目标边界框的定位精度,减少漏检和误检。 通过在不同尺度的特征层上分别审慎部署SimAM无参数注意力模块,以增强模型对关键特征(尤其是在复杂背景或目标部分遮挡条件下)的提取与辨识能力。 这些深度优化与针对性改进措施,在自建的、包含大量真实工地复杂小目标场景的测试集上取得了显著成效:模型的mAP50指标从优化前的基线85.7%成功提升至91.4%。这一性能不仅验证了优化策略的有效性,也大幅超越了在该数据集上进行评估的YOLOv8(其mAP50为82.3%)和Fast R-CNN(其mAP50为84.6%)这两款代表性模型。 在系统实现层面,我还利用OpenCV高效完成了视频流的实时捕获、解码及图像预处理工作,并基于检测结果开发了与之联动的自动告警系统。最终,我负责将整套系统成功部署到生产环境,通过持续的监控与维护,确保了其7x24小时的稳定运行和及时有效的预警功能,为提升工地安全管理水平提供了坚实的技术保障。

这个项目旨在预测在特定提示(prompt)下,用户更偏好两个语言模型响应(response_a 或 response_b)中的哪一个,这是一个三分类问题(A赢、B赢或平局)。其核心技术是基于强大的预训练模型 DeBERTa V3 进行模型微调 (Model Fine-tuning)项目首先加载 CSV 数据,使用 eval 处理列表式字符串,填充缺失值,并通过 idxmax 在 winner_model_a, winner_model_b, winner_tie 列上确定优胜者,然后将其映射为数字标签 class_id(0, 1, 2)。关键的预处理步骤是将提示与每个响应按特定格式拼接(使用 f-string 如 f”{prompt}\n\nResponse A:\n{response_a}”),为每个样本生成一对包含上下文的响应文本。接着,使用 KerasNLP 提供的 deberta_v3 将这些文本对 tokenize 成包含 token_ids 和 padding_mask 的字典,其形状均为 [2, 512]。 模型构建阶段 (build_model 函数):模型接收这个字典输入,在内部分离处理两个序列(prompt+A 和 prompt+B),分别将它们送入 DebertaV3 模型。利用模型的自注意力机制,提取每个序列对应的 [CLS] 输出嵌入 。随后,将这两个 [CLS] 嵌入向量堆叠 (tf.stack) 起来,并通过 GlobalAveragePooling1D 层进行处理(这实际上是平均了两个 [CLS] 嵌入向量)。最后,将这个池化后的向量输入到一个包含3个神经元、使用 Softmax 激活函数的全连接(Dense)输出层,得到三分类的概率预测。训练过程中,模型使用分类交叉熵 (CategoricalCrossentropy) 作为损失函数进行编译,采用了自定义的带预热的余弦衰减学习率调度器 (WarmUpCosineDecay),并通过 ModelCheckpoint 回调函数监测验证集损失 (val_loss) 来保存性能最佳的模型权重。 从而将 DeBERTa V3的通用语言理解能力适配到这个特定的偏好预测任务上。

该项目核心采用了检索增强生成(RAG)技术架构,旨在提升大型语言模型(LLM)在处理专业文档(如技术博客)问答时的准确性和时效性。其技术实现主要包括:利用嵌入模型(Embedding Models)将文档内容转化为向量表示(Vector Embeddings),并存储于向量数据库(Vector Database)中以实现高效索引;当用户提问时,通过语义搜索(Semantic Search)算法(如余弦相似度)在向量库中匹配并检索出最相关的文本片段。接着,关键的整合与生成步骤由 LangChain 框架进行流程编排(Orchestration),它负责将检索到的上下文信息与用户问题组合成有效的提示(Prompt),并调用大型语言模型(LLM,如 GPT-3.5-Turbo 或类似模型)生成回答。同时,LangChain 也被用来实现对话记忆(Memory)和状态管理。最后,项目使用 Ragas 评估框架对 RAG 系统的性能(如答案的忠实度和相关性)进行量化评估,验证了相比基础 LLM 精准度提升 40% 的技术效果。

yolo

通过引入EIoU损失函数提升边界框精度?

  • 回答:

之所以选择EIoU,是因为对于小目标,由于其本身尺寸极小,任何微小的绝对尺寸偏差都会被放大,对检测效果产生巨大影响。EIoU通过直接关注并惩罚这些绝对的宽度和高度差异,解耦了对这两个维度的优化,从而为模型提供了更敏感(对微小差异反应强烈)和更直接(梯度路径清晰)的指导信号。这使得模型能够更有效地学习如何将预测框的边界精确地对齐到小目标的少数几个像素上,从而显著提升小目标的定位精度和整体检测性能。相比之下,仅关注宽高比一致性的损失函数(如CIoU中的相应项)在面对小目标时,可能因为比例碰巧正确而忽略了关键的绝对尺寸差异,或者提供的梯度信号不够强劲和直接,导致模型在精细调整小目标边界时效果欠佳。

IoU通过其直接且解耦的宽高惩罚机制,使得模型在面对这种低容错、高精度需求的小目标时,能够获得更精细、更有效的梯度来优化边界框的每一个像素,从而显著提升定位精度。模型不再仅仅是学习一个“大致正确的宽高比”,而是在学习“精确的宽度值”和“精确的高度值”。

    1. 目标是什么?边界框回归 (Bounding Box Regression)

在目标检测任务中,模型需要为识别出的每个物体画一个紧密的框(即“边界框”)。“边界框回归”指的是精确调整这个预测框的位置(中心点的x, y坐标)和尺寸(宽度、高度),使其尽可能地与真实物体的位置和大小(即“真实框”或“Ground Truth Box”)相匹配。

    1. 什么是损失函数 (Loss Function)?

损失函数是训练机器学习模型时至关重要的一部分。它衡量模型预测结果与真实情况之间的“差距”或“错误程度”。在训练过程中,模型会不断尝试最小化这个损失值。通常,损失值越低,意味着模型的预测越准确。

作为损失函数 (IoU Loss): 可以直接将 IoU 用作损失函数(例如,L IoU=1−IoU)。目标是最大化 IoU,因此最小化 1−IoU 就能达到这个目的。

  • IoU Loss 的局限性: 无重叠框的梯度消失问题: 如果预测框与真实框完全没有重叠,IoU 值为 0。此时,IoU 损失为 1,但其梯度(用于更新模型的信号)会变为零。这意味着模型无法从损失中获取任何关于如何移动预测框以使其与真实框重叠的信息。这就像在黑暗中迷路,没有任何方向指引。 无法区分不同类型的未对齐: 如果两个预测框与真实框的 IoU 值相同,IoU 损失无法区分它们未对齐的具体方式。例如,一个预测框可能离真实框很远但形状相似,而另一个预测框可能离真实框较近但宽高比差异很大,IoU 损失会给予它们相似的惩罚。

  • EIoU (Enhanced/Efficient Intersection over Union) 损失函数

EIoU 损失在基础 IoU 的上,通过增加额外的惩罚项来解决普通 IoU 损失的局限性,旨在使边界框回归过程更高效、更准确。

什么是注意力模块 什么是无参数注意力模块 什么是simam 这里为什么要用这个 有什么用?

  • 什么是注意力模块 (Attention Module)? 注意力模块是深度学习(尤其是在计算机视觉和自然语言处理领域)中一种模仿人类认知注意力的组件或机制。

核心思想:并非输入数据的所有部分都同等重要。注意力模块允许神经网络在处理信息时,动态地、有选择性地关注输入数据中更相关的部分,同时抑制不太相关的部分。

  • 什么是无参数注意力模块 (Parameter-Free Attention Module)? 无参数注意力模块是一种特殊类型的注意力模块,它在计算注意力权重时不需要引入额外的可学习参数(例如,不需要额外的全连接层或卷积层来学习如何生成注意力)。

  • 什么是SimAM (Simple, Parameter-Free Attention Module)? SimAM 是一种新颖的、简单且无参数的注意力模块。它的设计灵感来源于神经科学中的一些发现,特别是关于神经元信息处理的理论。

核心思想:SimAM旨在通过评估每个神经元(或特征图中的每个激活值)与其周围神经元之间的线性和非线性可分性来衡量其重要性。它假设那些与其他神经元表现出不同激活模式的神经元(即信息量更丰富的神经元)应该被赋予更高的注意力。

SimAM的核心思想源于神经科学,即信息量丰富的神经元通常会表现出与周围神经元不同的激活模式,并且会抑制其他神经元的活动。为了在神经网络中模拟这一点,SimAM为特征图中的每一个神经元(或激活值)定义了一个能量函数 (Energy Function)。能量越低的神经元被认为越重要,因此会获得更高的注意力权重。

RAG

什么是RAG 讲一下工作原理?

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合了信息检索和生成式语言模型的混合框架,旨在提升大语言模型(LLM)在回答问题时的准确性、相关性和知识时效性。它通过从外部知识库检索相关信息并将其融入生成过程,有效解决LLM的幻觉问题(生成不准确或虚构内容)和知识局限性(无法获取最新或专业知识)。RAG特别适用于需要引用外部文档或处理专业领域知识的场景

RAG的工作原理:
RAG的核心思想是将信息检索与生成式模型结合,分为两个主要阶段:
检索阶段:从外部知识库中检索与用户查询最相关的文档或片段,作为生成阶段的上下文。
生成阶段:将检索到的文档与用户查询结合,输入到生成式语言模型中,生成最终的回答。

知识图谱

我们的工作主要分为以下四个步骤:

第一步:目标定义与图谱设计 (Why & What)

我们首先明确了为什么要引入知识图谱。单纯的语义检索(RAG)虽然能找到相关的文本片段,但对于需要多步推理、关系挖掘的复杂问题,它就显得力不从心了。比如,用户问‘开发了产品A的公司,它的主要竞争对手是谁?’,这个问题需要先找到‘开发产品A的公司’,再找到‘这家公司的竞争对手’,这在非结构化的文档中是很难直接检索到的。

因此,我们的目标是将文档中蕴含的非结构化知识,转化为结构化的实体和关系

基于这个目标,我们进行了图谱的Schema设计

  1. 定义实体(Entity)类型:根据我们的业务场景(用户提供的网页文档),我们确定了核心的实体类型,比如:公司 (Company)产品 (Product)人物 (Person)技术 (Technology)地点 (Location)等。
  2. 定义关系(Relationship)类型:我们定义了连接这些实体的关键关系,例如:开发了 (DEVELOPS)收购了 (ACQUIRES)位于 (LOCATED_IN)创始人是 (FOUNDED_BY)是...的竞争对手 (COMPETES_WITH) 等。
  3. 定义属性(Property):为每个实体和关系添加了重要的属性。比如公司实体有成立日期官网链接等属性,收购了关系可以有收购金额收购日期等属性。

这个Schema是我们后续所有工作的基础和蓝图。

第二步:知识抽取与图谱构建 (How to Build)

这是将蓝图变为现实的核心技术环节。我们的流程是:

  1. 数据预处理:首先对用户提供的网页文档进行清洗、分块,提取出纯文本内容。
  2. 知识抽取 (Information Extraction):我们采用以LLM为核心的混合抽取方法。
    • 实体识别 (NER): 我们设计了特定的Prompt,利用GPT-3.5/4的强大上下文理解能力,让它根据我们定义的Schema,从文本中识别出所有符合条件的实体,并返回结构化的JSON数据。相比传统NER模型,这种方法对新领域的实体类型适应性更强。
    • 关系抽取 (Relation Extraction): 这是最关键的一步。我们同样设计了非常精巧的Prompt,将一段文本和我们预设的实体与关系类型作为输入,要求LLM以(头实体, 关系, 尾实体)的三元组(Triple)形式,抽取出文本中包含的所有关系。例如,输入‘苹果公司在库比蒂诺发布了iPhone’,模型会输出 (iPhone, DEVELOPED_BY, 苹果公司)(苹果公司, LOCATED_IN, 库比蒂诺)
  3. 图谱存储:我们将抽取出的三元组和属性数据,存储在专业的图数据库中。我们当时选型的是 Neo4j,主要是看中它强大的Cypher查询语言和成熟的社区生态。我们会将抽取出的三元组转换为Cypher查询语句(如MERGE语句),批量写入数据库,从而动态地构建和更新知识图谱。

第三步:图谱与LLM的融合应用 (How to Use)

图谱建好后,关键在于如何让它在对话系统中发挥作用。我们主要通过以下方式进行融合:

  1. 查询意图识别:当用户提问时,我们首先用LLM判断这个问题是一个简单的信息查询,还是一个需要推理的复杂问题。
  2. 查询路径规划:对于复杂问题,我们会让一个“规划器Agent”(基于LLM)将用户的自然语言问题,自动翻译成Cypher查询语句。例如,用户问‘LangChain框架的创始人的其他项目有哪些?’,Agent会将其分解为两步,并生成相应的Cypher查询。
  3. 混合信息检索:我们会同时执行两种检索:
    • 知识图谱检索:执行上一步生成的Cypher查询,从KG中获得结构化的、精确的实体和关系结果。
    • 语义向量检索:同时,在我们的向量数据库中检索相关的原始文本片段。
  4. 增强上下文生成:最后,也是最关键的一步。我们将从知识图谱中检索到的结构化知识(如[('Harrison Chase', 'FOUNDED', 'LangChain')]和从向量数据库中检索到的非结构化文本,一起注入到最终生成答案的Prompt模板中。

第四步:效果与反思 (Result & Reflection)

通过这种方式,我们取得了非常显著的效果:

  • 减少幻觉:最终的Prompt明确要求LLM‘请根据以下知识图谱信息和参考段落来回答问题’。由于有了知识图谱提供的“事实地基”,LLM进行推理时就被“锚定”了,无法天马行空地编造关系,这直接降低了幻觉。在我们的Ragas评测中,Faithfulness(忠实度)指标提升尤为明显。
  • 提升深度:模型能够回答以前无法回答的“多跳问题”(multi-hop questions),使得对话的逻辑性和深度大大增强。这也是我们整体分数能提升40%的重要原因。

当然,这个过程中我们也遇到了一些挑战,比如:

  • 知识抽取的准确率:LLM抽取并非100%准确,需要设计校验和清洗机制。
  • 实体对齐与消歧:如何判断不同文档中的“苹果”是同一家公司,这是一个经典难题。
  • 知识图谱的动态更新:如何高效地保持图谱与源文档的同步。

这些也是我们未来计划持续优化的方向。总而言之,知识图谱的引入,是我们系统从一个‘问答机器人’升级为‘具备初级推理能力的知识助理’的核心步骤。”

好的,这是一个针对该面试题,并且完全基于您提供的信息的回答范例:


设计并优化Prompt模板

第一步:确立模板设计原则

我们的Prompt设计不是天马行空的,而是遵循一套旨在减少幻觉的严格原则:

  1. 角色设定与任务定义:在Prompt的开头,我们明确告诉LLM它的角色是一个“基于给定信息的问答助手”,它的唯一任务是从我提供的上下文中提炼和组织答案。
  2. [cite_start]上下文注入:我们将通过语义搜索从文档中检索到的、与用户问题最相关的信息块,明确地标记为“上下文”或“已知信息”,并注入到Prompt中 [cite: 2]。
  3. 制定严格的生成规则:这是最关键的一步。我们设计了非常明确的指令,例如:
    • “你必须只使用下面提供的‘上下文’来回答问题。”
    • “如果‘上下文’中没有足够的信息来回答问题,你必须明确地回答‘根据所提供的信息,我无法回答这个问题’。”
    • “禁止使用任何‘上下文’之外的知识或进行任何形式的猜测。” [cite_start]这些指令有效引导LLM基于给定信息回答,从而直接减少了模型的幻觉问题 [cite: 5]。

第二步:迭代优化与量化评估

一个好的Prompt不是一次就能设计出来的,我们进行了一个持续迭代的优化过程。

  1. [cite_start]建立评估体系:我们引入了 Ragas评估框架,它能从答案的忠实度(Faithfulness)、相关性(Relevance)等多个维度,客观、量化地评估我们的系统生成的答案质量 [cite: 6]。这为我们的优化工作提供了明确的指导方向。
  2. 测试与分析:我们使用一批典型的问答对来测试初始模板的效果。通过Ragas的评分和人工审查,我们分析失败的案例,比如:模型是否仍在引用上下文之外的信息?是否未能理解复杂的指令?
  3. 迭代改进:根据分析结果,我们对Prompt进行微调。例如,调整指令的措辞使其更明确、无歧义,或者改变上下文信息呈现的格式,直到在Ragas框架下的各项指标(尤其是答案忠实度)达到我们的目标。

核心创新:内容感知型文档切分策略?

  • 技术文档,比如我们处理的技术博客、API文档或研究论文,通常具有非常清晰的结构层次。我们的策略会智能地识别这些结构元素,例如:一级、二级、三级标题,代码块,列表项,表格,甚至是图注等。 在切分时,它会优先尊重这些结构边界
  • 除了显式结构,文档内容本身也存在内在的语义流和主题连贯性。我们的策略会努力捕捉这种语义逻辑。 例如,它会分析段落之间或句子之间的主题连贯性,
  • 而我们的策略,通过上述对结构和语义的感知,能够生成在语义上更完整、上下文保留更完好、信息也更集中的知识块。

你的向量数据库 和 word2vec分别是什么模型?

  • text-embedding-3-large 是OpenAI 公司最新一代(截至目前信息)的文本嵌入模型中规模较大、性能较强的一款。
  • text-embedding-3-large 基于 Transformer 架构(与GPT系列模型类似的基础架构),经过大量文本数据的训练,学会了如何将输入的文本序列编码成一个固定维度3072的稠密向量。这个向量能够有效地表征原始文本的核心意义。

你这个评估框架Ragas是怎么进行评估的?

  • Ragas框架提供多个衡量评价RAG系统的指标包括
  • failfulness忠实度:是否是基于上下文进行回答的,这是衡量模型是否产生幻觉的一个标准
  • answer relevance相关度:回答的问题是否和问题相关,它会评估答案是否集中于解决问题的核心。
  • context precision上下文精准度:衡量所有检索到的上下文中,和答案真正有关系的比例
  • context recall上下文召回率:衡量所有与答案有关的上下文中,有多少被检索系统成功找回来

语义相似性从用户提供的网页文档中检索信息”,具体是如何实现的?使用了什么嵌入模型(Embedding Model)将文本转换为向量?为什么选择这款嵌入模型?

从用户提供的网页文档中通过语义相似性检索信息时, 其实现过程通常是:首先,系统会抓取并解析网页内容,提取出主要的文本信息,去除HTML标签、广告、导航栏等无关元素;接着,这些文本会被送入一个嵌入模型(Embedding Model)转换为高维向量。例如,我可能会选择使用像 text-embedding-3-small (来自OpenAI) 这样的先进模型, 或者一个强大的开源模型如 sentence-transformers/all-mpnet-base-v2。选择这类模型的原因在于它们在各类语义理解任务上表现出色,能够生成捕捉文本深层含义的向量,并且在性能、成本(对于API模型)和易用性之间取得了良好平衡,确保了后续相似性搜索的准确性。

检索时,你是如何定义和衡量“语义相似性”的?通常会检索多少个相关的文本块(top-k)?这个k值是如何确定的?

在检索时,“语义相似性”通常是通过计算查询文本向量与文档块向量之间的余弦相似度 (Cosine Similarity) 来定义和衡量的; 对于归一化后的向量,内积也可以达到同样的效果。 余弦相似度能够很好地捕捉向量方向上的一致性,即语义上的接近程度,而不受向量长度的影响。 通常会检索 top-k 个最相关的文本块,k 的值一般会根据经验和实验来确定,常见的范围是 3到5个。 这个k值的确定需要权衡多个因素:一方面要确保提供给LLM足够的信息以回答问题, 另一方面要避免引入过多不相关或冗余的信息,这会增加LLM的处理负担并可能降低答案质量。 通过在验证集上测试不同的k值,并评估最终问答的准确率、Ragas指标(如Faithfulness, Context Recall)等, 可以找到一个最优的k值。

如果让你继续优化这个系统,你有哪些改进的想法?

  • 引入更先进的检索策略: 最重要的一点是实现重排序 (Re-ranking)机制,即在初步向量检索后,使用更强大的交叉编码器(cross-encoder)对候选文档块进行二次排序,以大幅提升最终送入LLM的上下文的精准度。
  • 一个合适的开源LLM进行领域适配微调 (Domain-specific Fine-tuning),使其更好地理解专业术语,能更好的减少幻觉,但是不无法改进时效性
  • 优化Prompt工程: 最重要的一点是为LLM提供极其明确和针对性的指令 (Instruction Tuning for Prompts)
  • 支持更复杂的查询: 最重要的一点是实现查询分解 (Query Decomposition),即利用LLM将复杂的多意图或多子问题查询拆解成更简单、可独立检索的子查询

Yolo

什么是Yolo

  • YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,它通过将目标检测任务转化为单一的回归问题, 直接从输入图像预测边界框(bounding box)和类别概率,实现了端到端的检测。

网格划分:YOLO将输入图像划分为S×S的网格,每个网格负责检测其覆盖区域内的目标。
预测内容:每个网格预测多个边界框(包括坐标、宽高)、置信度(表示框内是否有目标)以及类别概率。
端到端训练:通过卷积神经网络(CNN)一次性处理整个图像,输出所有检测结果。
后处理:使用非极大值抑制(NMS)去除重叠框,保留最佳检测结果。

为什么你要选择yolo而不是其他算法

  • yolov10是一个基于深度学习的单阶段目标检测算法,在速度检测和效率上更有优势,对于这种实时处理的部署场景有更大的优势,
  • 相对于第八代和第九代,通过无NMS和架构优化优先考虑端到端的实时性能,更注重极致的效率
  • 相对于Faster R-CNN ,它是一种双阶段目标检测器,首先进行区域提议(region proposal),然后再对这些提议进行分类和边界框回归 Faster R-CNN以其较高的检测精度闻名,尤其是在处理小目标或复杂场景时,但是yolov10在速度和精度的平衡上会更好 YOLOv10的NMS-free特性进一步拉大了速度差距。
    介绍一下NMS

    在传统的目标检测中对一个物体的检测常常有多个候选框(bounding boxes),会有置信度分数,NMS的作用就是筛选最佳的候选框 抑制冗余的候选框,但是NMS是一个计算的开销增加推理时间

    介绍一下NMS-free
  • 核心思想是 改进的标签分配策略(Label Assignment)

你提到mAP50指标达到91.4%,请解释mAP50的计算方法及其在目标检测中的意义。

  • 它的全称是 “mean Average Precision at an IoU threshold of 0.5
  • mAP50是目标检测中的重要评估指标,表示在IoU(交并比)阈值为0.5时的平均精度。
  • 对每个类别,计算预测结果的精度-召回曲线(Precision-Recall Curve)。计算每条曲线的曲线下面积(AUC)对所有类别的AUC取平均值,得到mAP50。
  • mAP50的意义在于衡量模型在不同类别上的检测性能,91.4%表明模型在IoU≥0.5时具有较高的准确性。
  • precision精度 衡量的是所有被模型检测出来的有多少是正例
  • recall召回率 衡量得失有多少真正的正例被检测出来
  • Average Precision就是这条 P-R 曲线下的面积。高 Precision 低 Recall 意味着模型检测到的结果大多是正确的,但漏掉了很多物体。高 Recall 低 Precision 意味着模型检测出了大部分物体,但很多检测结果是错误的。
  • F1-score 是precision和recall的调和平均数 = (Precision×Recall)/(Precision+Recall) 它在两者都较高时才会取得高分。

你了解AI agent吗

  • 感知 (Perception):
  • 思考/决策 (Thinking/Decision Making):核心 目标理解: Agent 首先需要理解被赋予的目标或用户提出的请求。 知识与推理: Agent 可能会访问其内部知识库(训练数据中学习到的知识)或外部知识源(如通过API调用的数据库、搜索引擎等)。它利用这些知识进行推理、规划和决策。 规划 (Planning): 对于复杂任务,Agent 需要将其分解成一系列更小、可管理的步骤或子任务。它会规划出达成目标的路径,决定先做什么后做什么。例如,著名的 ReAct (Reason + Act) 框架就是让LLM先进行“思考”(生成推理步骤),然后再决定采取哪个“行动”。 工具选择 (Tool Selection): 现代 Agent 通常被赋予使用多种“工具”的能力。这些工具可以是调用外部API(如天气查询、股票信息、计算器、代码解释器、搜索引擎)、执行特定函数或与其他系统交互。Agent 需要根据当前任务和规划,智能地选择合适的工具。
  • 行动 (Action):
  • 记忆 (Memory):
一个基于LLM的Agent的工作流程可能是这样的:
用户给出指令/目标(例如:“帮我查一下明天北京的天气,并预订一家评价不错的意大利餐厅”)。
Agent (LLM核心) 理解目标,并将其分解为子任务:
获取北京明天的天气。
搜索评价好的意大利餐厅。
执行预订操作。
规划并选择工具:
对于天气,选择调用“天气查询API”。
对于餐厅,选择调用“餐厅搜索API”或“网页浏览工具”。
action执行动作 (调用工具):
调用天气API,输入“北京”、“明天”。
调用餐厅搜索API,输入“意大利菜”、“评价好”。
观察结果:
获取到天气信息。
获取到餐厅列表和评价。
进一步思考和行动:
如果需要预订,可能需要用户确认或提供更多信息,然后调用“预订API”。
整合所有信息。
生成回复: 将天气情况和餐厅信息(或预订结果)以自然语言形式回复给用户。

DeBERTa V3

Interview Answer: Why DeBERTaV3?

“我们选择 DeBERTaV3 作为我们LLM偏好预测模型框架的基础,主要基于以下几个关键考量,这些考量都指向了它在理解文本细微差异和捕捉上下文逻辑一致性方面的强大能力,这对于准确预测人类偏好至关重要:

卓越的语义理解和推理能力:

  • 数据对比:综合性的高难度基准测试集。SuperGLUE 上,DeBERTaV3-large 的分数(约90-91分)显著高于像 RoBERTa-large(约88-89分)和 BERT-large(约85-86分)等经典模型。这2-3个百分点的领先,在高难度推理任务上是巨大的优势。

  • 场景关联:对于我们的偏好预测任务,这种优势至关重要。比如,我们需要模型判断“回答A比回答B更具逻辑性”,这恰恰是SuperGLUE所测试的能力。我们评估过,如果使用BERT,它可能无法准确分辨出两个回答中微妙的因果谬误或逻辑跳跃,而DeBERTaV3捕捉这种细微差异的能力更强。

  • 对比轻量级模型:我们也考虑过更轻量的模型,比如BERT-base或DistilBERT。它们的训练和推理速度确实更快。但在我们的初步实验中,使用这类模型预测的相关性系数大概在0.65到0.70之间,这个精度无法满足我们项目的上线要求。

  • 对比超大规模模型:另一个极端是直接使用像GPT-3这样拥有数百亿甚至上千亿参数的生成式大模型。理论上它们性能天花板更高,但对于一个拥有10万对样本的判别式任务,动用如此庞大的模型进行微调,训练成本会高出至少一个数量级,并且推理延迟也无法满足我们对评估效率的要求。
  • PaLM (排名第6): 拥有 5400亿 参数,运行和微调它需要极其昂贵的计算资源(TPU Pods),绝大多数公司和项目都无法承担。
  • ST-MoE (排名第3): 这是一个混合专家模型 (Mixture-of-Experts)。虽然推理时可能只激活一部分参数,但它的总参数量巨大,且对训练和部署的基础设施有特殊要求,远比标准模型复杂。
  • DeBERTaV3: 它的large版本只有约4亿参数。与上面这些“巨无霸”相比,它的训练和推理成本要低好几个数量级,非常适合处理我们提到的10万量级数据集,实现了性能和成本的最佳平衡。
  • DeBERTaV3 的 90.3分 已经超越了人类的平均水平。这意味着它在处理这些复杂语言任务上已经具备了“超人”的能力。对于我们的偏好预测任务来说,这个能力绰绰有余,再往上提升一点点分数对我们最终应用效果的改善可能已经微乎其微了。
  • DeBERTaV3的甜点区:DeBERTaV3-large(约4亿参数)恰好处于这个“甜点区”。它以一个相对可控的计算成本(远低于GPT-3),提供了顶尖的理解能力,最终帮助我们实现了0.75的斯皮尔曼相关性。这个结果不仅远超轻量级模型,而且在我们看来,其投入产出比远高于直接使用超大模型。

DeBERTa V3是什么

  • DeBERTa V3 是由微软研究院开发的一种预训练自然语言处理(NLP)模型。

  • DeBERTa V3 是一个通过采用更高效的 ELECTRA 式预训练方法(RTD)显著提升了训练效率和性能的 Transformer 语言模型。它在自然语言理解任务上表现强大

DeBERTa V3 模型会对输入的 token IDs 和 padding mask 进行嵌入(embedding)、位置编码(positional encoding)和多层自注意力机制(self-attention)等操作,最终生成每个 token 的上下文感知的嵌入表示

backbone 的作用: DebertaV3Backbone 这样的模型通常用来将输入的 token ID 序列转换成上下文相关的词嵌入 (contextualized embeddings) 或称为隐藏状态 (hidden states)。简单来说,它为输入序列中的每个词元 (token) 生成一个高维度的向量表示,这个向量捕获了该词元在当前句子(或文本片段)中的语义信息。

知识