对比学习与垂直领域微调

对比学习与垂直领域微调

对比学习是优化向量化模型的常用训练方法,目的是:优化向量化模型,使其向量化后的文本,相似的在向量空间距离近,不相似的在向量空间距离远。文档召回场景下,做对比学习(有监督)需要三元组(问题,文档正例,文档负例)。文档正例是和问题密切相关的文档片段,文档负例是和问题不相关的文档片段,可以是精挑细选的(难例挖掘出来的,下一小节介绍),也可以是随机出来的。如果是随机出来的话,完全可以**用同一个batch里,其他问题的文档正例当作某一个问题的文档负例,如果想要效果好还需要有比较大的batch size。**损失函数是基于批内负样本的交叉熵损失,如下公式所示,q、d分别表示问题和文档正例对应的向量, 𝜏 为温度系数,sim函数可以是cos相似度或者点积。向量化模型对比学习这块,其实非常值得完整的看看《SimCSE: Simple Contrastive Learning of Sentence Embeddings》这篇经典论文,实验充分,理论扎实。

ℓ𝑖=−log⁡𝑒sim(𝑞𝑖,𝑑𝑖+)/𝜏∑𝑗=1𝑁𝑒sim(𝑞𝑖,𝑑𝑗+)/𝜏

具体代码实现也非常简单,如下所示。分别将B1个问题,和B2个文档片段通过向量化模型变成向量形式,然后通过矩阵乘积计算每个问题和文档的相似度,最后通过交叉熵损失进行优化。如果文档负例仅来自于同一个batch的其他样本的文档正例,那么B1=B2;如果人工的给每个样本陪k个文档负例(比如可以通过难例挖掘得到),那么B2 =(k+1)*B1。

解释q_reps = self.encode(query) # 问题矩阵 维度(B1, d)
d_reps = self.encode(doc) # 文档矩阵 维度(B2, d)
score = torch.matmul(q_reps, d_reps.transpose(0, 1)) #计算相似度矩阵 维度:(B1, B2)
scores = scores / self.temperature 
target = torch.arange(scores.size(0), device=scores.device, dtype=torch.long) ## 得交叉熵损失函数的标签
# 考虑文档负例不仅来自于batch内其他样本的文档正例,也可能人工的给每个样本构造一些文档负例。
target = target * (p_reps.size(0) // d_reps.size(0))
loss = cross_entropy(scores, target) //交叉熵损失函数

bge2论文里,做基于批内负样本的对比学习时同时考虑了多任务问题。之前也介绍了,不同任务加的prompt是不同的,如果把不同任务的样本放到一个batch里,模型训练时候就容易出现偷懒的情况,有时候会根据pormpt的内容来区分正负例,降低任务难度,这是不利于对比学习效果的。因此,可以通过人为的规定,同一个batch里,只能出现同一种任务的样本缓解这个问题。(实际应用场景下,如果任务类别不是非常多的话,最好还是一个任务训练一个模型,毕竟向量化模型也不大,效果会好一些)

在垂直领域应用场景中,亲测构建几千条样本进行对比学习微调就能带来10%左右的召回率提升,性价比非常高。数据可以借助chatgpt进行构造,比如让他根据某段文本内容提出问题,bge项目就自带微调代码,在bge模型的基础上进行微调效果就比较不错了。

【大模型外挂知识库(RAG)优化】如何炼成强大的向量化召回模型 - 知乎 (zhihu.com)

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

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

相关文章

用栈实现队列-力扣

比较基础的一道题目,考察使用栈来实现队列,使用两个栈来模拟队列,栈的规则是后进先出,而队列是先进先出。 每次需要对栈进行操作时,将栈a的元素一次挪到栈b中,那么栈b中元素的出栈顺序,正好就是…

红酒:红酒保存的理想温度与湿度

对于云仓酒庄雷盛红酒,保存方法尤为重要。而保存红酒的关键在于控制温度与湿度这两个因素。以下是关于红酒保存的理想温度与湿度的详细解释。 首先,谈到雷盛红酒的保存温度,关键的是要避免不好温度。高温会加速化学反应,使红酒更快…

【二叉树】Leetcode 530. 二叉搜索树的最小绝对差【简单】

二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 1: 输入:root [4,2,6,1,3] 输出:1 解题思路 中序遍…

MDK5.10 安装手册

1.MDK5.10 安装 打开开发板光盘: 6 ,软件资料 \ 软件 \MDK5 ,双击 mdk_510.exe ,进行安装。这里我们 将其安装到 D 盘, MDK5.10 文件夹下,需要设置安装路径,如图 1.1 所示: …

(8)svelte 教程: Event Forwarding

(8)svelte 教程: Event Forwarding 什么是 Event Forwarding Event Forwarding 是 Svelte 框架中的一个概念,指的是将一个组件的事件(如点击、鼠标悬停等)转发给其父组件。这样,父组件可以监听…

JAVA流程控制--增强for循环

1.JAVA5引入了一种主要用于数组或集合的增强型for循环 2.JAVA增强for循环语法格式如下: for(声明语句:表达式) { //代码句子 } 3.声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循…

常见的多态面试题

多态的概念及其构成条件 多态概念:对不同的对象会有不同的实现方法,即为多种形态。 构成条件: 派生类要进行虚函数的重写(父子类虚函数需要三同,三同指函数名、参数、返回值)要用父类的指针或引用去调用虚…

Spring Boot自动配置原理和应用

我们知道,基于Spring Boot,我们只需要在类路径中引入一组第三方框架的starter组件,就能在Spring容器中使用这些框架所提供的各项功能。这在当下的开发过程中已经习以为常,但在Spring Boot还没有诞生之前却是不可想象的。如果我们使…

在电脑里养一只小猫,工作越忙它跑的越快

在电脑里养一只小猫,工作越忙它跑的越快 话说每个程序员都会比较关注自己电脑的运行状况吧?我也是这样,无论是编译代码还是浏览网页,都会实时监测 CPU 占用情况,看看有没有奇怪的进程占用过多的 CPU,影响我…

Monaco Editor系列(六)Range详解、Uri 自动匹配语言模型、缩略图 miniMap 配置

前情回顾: 一鼓作气,再鼓,再鼓!!哈哈哈。争取早日占领 Monaco 领地。 上一篇文章讲到的三个功能分别是 Position 类型、设置 markers、指定位置插入或替换内容 涉及到的知识点: ⛈️ 获取光标位置&#x…

从MLP到卷积

1.从MLP到卷积层 最近要做多通道的实验,所以重新将处理图像的基础模型回顾一下,什么是卷积?卷积本质是是一种特殊的全连接层。 1.1怎么w的权重从一个值变成了4维呢?可以这样理解,在此举一个例子: 其实本质可以看成&…

签名安全规范:解决【请求对象json序列化时,时间字段被强制转换成时间戳的问题】

文章目录 引言I 签名安全规范1.1 签名生成的通用步骤1.2 签名运算(加密规则)1.3 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)1.4 允许的请求头字段1.5 签名校验工具II 注解校验签名2.1 获取请求数据,并校验签名数据2.2 解决时间格式被强制转换成时间戳的问题…

6.5 比赛设备独家揭秘 | 2024高通边缘智能创新应用大赛公开课

2024高通边缘智能创新应用大赛系列公开课热度不减,第三期即将火爆开启,广翼智联FV01边缘智能物联网开发板迎来赛程期间首次公开亮相! 在这期的直播中,广翼智联高级产品市场经理伍理化将亲自担任主讲,为大家一一揭晓这…

探索大模型技术及其前沿应用——TextIn文档解析技术

前言 中国图象图形大会(CCIG 2024)于近期在西安召开,此次大会将面向开放创新、交叉融合的发展趋势,为图像图形相关领域的专家学者和产业界同仁,搭建一个展示创新成果、展望未来发展,集高度、深度、广度三位…

37、Flink 的 WindowAssigner之会话窗口示例

1、处理时间 无需设置水位线和时间间隔。 input.keyBy(e -> e).window(ProcessingTimeSessionWindows.withGap(Time.minutes(10))).apply(new WindowFunction<String, String, String, TimeWindow>() {Overridepublic void apply(String s, TimeWindow timeWindow, I…

探索气象数据的多维度三维可视化:PM2.5、风速与高度分析

探索气象数据的多维度可视化&#xff1a;PM2.5、风速与高度分析 摘要 在现代气象学中&#xff0c;数据可视化是理解复杂气象模式和趋势的关键工具。本文将介绍一种先进的数据可视化技术&#xff0c;它能够将PM2.5浓度、风速和高度等多维度数据以直观和动态的方式展现出来。 …

ChatTTS 如何安装可视化操作

可视化一键安装下载地址&#xff1a; 百度网盘 Download from GitHub 从 GitHub 下载代码。 git clone https://github.com/2noise/ChatTTS 下载地址 Install Dependencies 在开始之前&#xff0c;请确保已安装必要的软件包。如果您尚未安装它们&#xff0c;可以使用 pip …

Android百度人脸识别3.0配置

JDK 必须是16的版本 如果报错的错误是"opens java.io" org.gradle.jvmargs -Xmx2048M -Dkotlin.daemon.jvm.options\"-Xmx2048M" --add-exportsjava.base/sun.nio.chALL-UNNAMED --add-opensjava.base/java.langALL-UNNAMED --add-opensjava.base/java.…

智能售货机投资指南:从成本预算到市场策略的全方位解析

现代化智能设施的典范&#xff0c;智能售货机以其丰富的商品选项与无缝购物体验著称。然而&#xff0c;涉足此领域前&#xff0c;一番周密的投资考量不可或缺。 首要因素聚焦于售货机本身的购置费用&#xff0c;该费用弹性颇大&#xff0c;依据型号与功能差异而定。基础的小型…

Linux 36.3 + JetPack v6.0@jetson-inference之语义分割

Linux 36.3 JetPack v6.0jetson-inference之语义分割 1. 源由2. segNet2.1 命令选项2.2 下载模型2.2.1 Cityscapes2.2.2 DeepScene2.2.3 MHP2.2.4 VOC2.2.5 SUN 2.3 操作示例2.3.1 单张照片2.3.2 多张照片2.3.3 视频 3. 代码3.1 Python3.2 C 4. 参考资料 1. 源由 分类和目标识…