基于Sentence Transformer微调向量模型

Sentence Transformer库升级到了V3,其中对模型训练部分做了优化,使得模型训练和微调更加简单了,跟着官方教程走了一遍,顺利完成向量模型的微调,以下是对官方教程的精炼和总结。

一 所需组件

使用Sentence Transformer库进行向量模型的微调需要如下的组件:

  1. 数据数据: 用于训练和评估的数据。
  2. 损失函数 : 一个量化模型性能并指导优化过程的函数。
  3. 训练参数 (可选): 影响训练性能和跟踪/调试的参数。
  4. 评估器 (可选): 一个在训练前、中或后评估模型的工具。
  5. 训练器 : 将模型、数据集、损失函数和其他组件整合在一起进行训练。

二 数据集

大部分微调用到的数据都是本地的数据集,因此这里只提供本地数据的处理方法。如用其他在线数据可参考相对应的API。

1 数据类型

常见的数据类型为json、csv、parquet,可以使用load_dataset进行加载:

from datasets import load_datasetcsv_dataset = load_dataset("csv", data_files="my_file.csv")
json_dataset = load_dataset("json", data_files="my_file.json")
parquet_dataset = load_dataset("parquet", data_files="my_file.parquet")

2 数据格式

数据格式需要与损失函数相匹配。如果损失函数需要计算三元组,则数据集的格式为['anchor', 'positive', 'negative'],且顺序不能颠倒。如果损失函数计算的是句子对的相似度或者标签类别,则数据集中需要包含['label']或者['score'],其余列都会作为损失函数的输入。常见的数据格式和损失函数选择见表1。

三 损失函数

从链接整理了一些常见的数据格式和匹配的损失函数

InputsLabelsAppropriate Loss Functions
(sentence_A, sentence_B) pairsclassSoftmaxLoss
(anchor, positive) pairsnoneMultipleNegativesRankingLoss
(anchor, positive/negative) pairs1 if positive, 0 if negativeContrastiveLoss / OnlineContrastiveLoss
(sentence_A, sentence_B) pairsfloat similarity scoreCoSENTLoss / AnglELoss / CosineSimilarityLoss
(anchor, positive, negative) tripletsnoneMultipleNegativesRankingLoss / TripletLoss

表1 常见的数据格式和损失函数

四 训练参数

配置训练参数主要是用于提升模型的训练效果,同时可以显示训练过程的进度或者其他参数信息,方便调试。

1 影响训练效果的参数

learning_ratelr_scheduler_typewarmup_rationum_train_epochs
max_stepsper_device_train_batch_sizeper_device_evak_batch_sizeauto_find_batch_size
fp16bf16gradient_accumulation_stepsgradient_checkpointing
eval_accmulation_stepsoptimbatch_samplermulti_dataset_batch_sampler

2 观察训练过程的参数

eval_strategyeval_stepssave_strategysave_steps
save_total_limitload_best_model_at_endreport_to log_evallog_eval
logging_stepspush_to_hubhub_model_idhub_strategy
hub_private_repo

五 评估器

评估器用于评估模型训练过程中的损失。同损失函数的选择一样,它也需要与数据格式相匹配,以下是评估器的选择依据。

EvaluatorRequired Data
BinaryClassificationEvaluatorPairs with class labels
EmbeddingSimilarityEvaluatorPairs with similarity scores
InformationRetrievalEvaluatorQueries (qid => question), Corpus (cid => document), and relevant documents (qid => set[cid])
MSEEvaluatorSource sentences to embed with a teacher model and target sentences to embed with the student model. Can be the same texts.
ParaphraseMiningEvaluatorMapping of IDs to sentences & pairs with IDs of duplicate sentences.
RerankingEvaluatorList of {‘query’: ‘…’, ‘positive’: […], ‘negative’: […]} dictionaries.
TranslationEvaluatorPairs of sentences in two separate languages.
TripletEvaluator(anchor, positive, negative) pairs.

六 训练器

训练器的作用是把先前的组件组合在一起使用。我们仅需要指定模型、训练数据、损失函数、训练参数(可选)、评估器(可选),就可以开始模型的训练。

from datasets import load_dataset
from sentence_transformers import (
SentenceTransformer,
SentenceTransformerTrainer,
SentenceTransformerTrainingArguments,
SentenceTransformerModelCardData,
)
from sentence_transformers.losses import MultipleNegativesRankingLoss
from sentence_transformers.training_args import BatchSamplers
from sentence_transformers.evaluation import TripletEvaluator# 1. Load a model to finetune with 2. (Optional) model card data
model = SentenceTransformer("microsoft/mpnet-base",model_card_data=SentenceTransformerModelCardData(language="en",license="apache-2.0",model_name="MPNet base trained on AllNLI triplets",)
)# 3. Load a dataset to finetune on
dataset = load_dataset("sentence-transformers/all-nli", "triplet")
train_dataset = dataset["train"].select(range(100_000))
eval_dataset = dataset["dev"]
test_dataset = dataset["test"]# 4. Define a loss function
loss = MultipleNegativesRankingLoss(model)# 5. (Optional) Specify training arguments
args = SentenceTransformerTrainingArguments(# Required parameter:output_dir="models/mpnet-base-all-nli-triplet",# Optional training parameters:num_train_epochs=1,per_device_train_batch_size=16,per_device_eval_batch_size=16,learning_rate=2e-5,warmup_ratio=0.1,fp16=True,  # Set to False if you get an error that your GPU can't run on FP16bf16=False,  # Set to True if you have a GPU that supports BF16batch_sampler=BatchSamplers.NO_DUPLICATES,  # MultipleNegativesRankingLoss benefits from no duplicate samples in a batch# Optional tracking/debugging parameters:eval_strategy="steps",eval_steps=100,save_strategy="steps",save_steps=100,save_total_limit=2,logging_steps=100,run_name="mpnet-base-all-nli-triplet",  # Will be used in W&B if `wandb` is installed
)# 6. (Optional) Create an evaluator & evaluate the base model
dev_evaluator = TripletEvaluator(anchors=eval_dataset["anchor"],positives=eval_dataset["positive"],negatives=eval_dataset["negative"],name="all-nli-dev",
)
dev_evaluator(model)# 7. Create a trainer & train
trainer = SentenceTransformerTrainer(model=model,args=args,train_dataset=train_dataset,eval_dataset=eval_dataset,loss=loss,evaluator=dev_evaluator,
)
trainer.train()# (Optional) Evaluate the trained model on the test set
test_evaluator = TripletEvaluator(anchors=test_dataset["anchor"],positives=test_dataset["positive"],negatives=test_dataset["negative"],name="all-nli-test",
)
test_evaluator(model)# 8. Save the trained model
model.save_pretrained("models/mpnet-base-all-nli-triplet/final")

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

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

相关文章

原生Ajax技术的执行流程,用火山写作创作的,总感觉差点意思。

启动原生Ajax操作可遵循以下步骤: 首先,我们需要构建一个XMLHttpRequest对象以实现与服务器的有效互动。这个过程往往是借助于调用XMLHttpRequest对象的构造函数得以实现。 接下来,我们有必要对请求细节进行设定,包括明确请求方法…

叹为观止|四款让人赞不绝口的优质软件,越用越上瘾

不说闲话直接上狠货,下面神仙软件,都值得使用。 Smart Defrag 说起电脑运行慢或者抽风,磁盘碎片就是让电脑变得又卡又不稳定的元凶之一。 不过Smart Defrag就算是新手小白也能操作,它里面藏着一个超强的碎片整理引擎&#xff0…

一.2.(5)共射、共集、共基三种基本放大电路的静态及动态分析;

共什么的问题:共什么取决于输入输出,共剩下的那一极 1.基本共射放大电路 见前面章节,不做累述 2.基本共集放大电路 列KVL方程,求解 AU1,所以又叫射极跟随器 Ib是流入基极的电流,Ii是从输入交流信号源流出的…

SpringBoot源码阅读(1)——环境搭建

SpringBoot官网 官网 https://spring.io/projects/spring-boot 代码仓库 github:https://github.com/spring-projects/spring-boot gitee: https://gitee.com/mirrors/spring-boot 下载代码 git clone https://gitee.com/mirrors/spring-boot.git下载的代码中有些…

(广东省检测鉴定协会)常用金属材料检测模拟题

一、单选题 1.钢筋实测抗拉强度与实测屈服强度之比不小于( )? A.1.25 B.1.3 C.1.35 D.1.1 参考答案:A 2.钢筋实测屈服强度与标准规定的屈服强度特征值之比不大于( )。 A.1.05 B.1.25 C.1.3 D.1.35 参考答案:C 3.HRB400E钢筋最大力总延伸率要求应不小于( ) A.7…

CnosDB:深入理解时序数据修复函数

CnosDB是一个专注于时序数据处理的数据库。CnosDB针对时序数据的特点设计并实现了三个强大的数据修复函数: timestamp_repair – 对时间戳列进行有效修复,支持插入、删除、不变等操作。value_repair – 对值列进行智能修复,根据时间戳间隔和…

【源代码】srm供应商管理系统,招标管理系统,在线询价管理系统

前言: 随着互联网和数字技术的不断发展,企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式,能够提高采购效率、降低采购成本、优化供应商合作效率,已成为企业实现效益提升的关键手段。系统获取平台私…

干冰运输与存储中的温度监测:确保药品安全与合规性

在制药行业,干冰对于运输和储存对温度敏感的药品,如原料药API、疫苗、冻干物质和人体组织样本等至关重要。虹科ELPRO LIBERO系列干冰温度记录仪,能够为您提供专业的解决方案,定期监测和记录干冰运输和存储过程中的温度&#xff0c…

基于Java+SpringMvc+Vue技术的就医管理系统设计与实现系统(源码+LW+部署讲解)

目录 界面展示 第六章 部分代码实现 6.1 Spring boot 配置代码 6.2 用户管理及登录登出代码 6.3 Md5 加密算法代码 6.4 部分数据库代码 六、论文参考: 七、其他案例: 系统介绍: 就医管理系统,也称为医院管理系统&#…

14-21 剑和远方1 - AI历史及简单神经网络的工作原理

初始 “我们需要走得更深”这句台词出自电影《盗梦空间》。这是在讨论深入梦境更深层次时说的,暗示需要探索梦境的更深层次。虽然这似乎是不可能的,但它传达的理念是,要创造一个新的世界,就必须冒险进入更深的层次。 电影《盗梦空…

docker安装oracle 11g

最近把一些常用数据库都移到docker了,而且是windows下,很是方便。偶尔还是要用一下Oracle,今天就试一下安装oracle 11g 在docker上。 一、搜索并拉取镜像 docker search oracle_11gdocker pull ![在这里插入图片描述](https://i-blog.csdni…

Soul App Android一二三面凉经(2024)

Soul App Android一二三面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是SoulApp Android一二三面凉经。 面试职位: Android开发 技术一面 面试时长: …

CDGA|数据治理:突破“采集难、应用难”的困境

随着数字化时代的来临,数据已成为企业最宝贵的资产之一。然而,如何有效地采集和应用这些数据,却成为众多企业面临的一大挑战。数据治理作为一种全面的数据管理框架,为解决数据采集难、应用难等问题提供了有效途径。 数据采集难的挑…

FuTalk设计周刊-Vol.064

#AI漫谈 热点捕手 1.可灵视频模型Web 端功能上线 文生视频:画质升级、单次10s视频生成;图生视频:画质提升、支持自定义首尾帧;运镜控制:提供丰富的镜头控制选项,预设多种大师级镜头模式。在限免期间&…

在复杂的服务器环境中,如何优化 Shell 脚本的性能,以减少系统资源消耗并提高执行效率?

以下是一些优化 Shell 脚本性能的建议: 减少系统调用:尽量减少脚本中的系统调用次数,因为系统调用是比较耗时的操作。可以通过将多个命令放在一个子 shell 中或使用管道来减少系统调用次数。 避免过多的 IO 操作:尽量减少文件读写…

CUTS 多粒度分割 + 局部图像块对比学习: 无需大量标注数据 + 多尺度病变识别 + 解决医学图像不同仪器成像差异

CUTS 多粒度分割 局部图像块对比学习: 无需大量标注数据 多尺度病变识别 解决医学图像不同仪器成像差异 提出背景CUTS 框架(A) 总览(B) 像素中心的图像块嵌入(C) 图像内对比图像块选择(D) 扩散凝结粗粒化(E) 多粒度分割 解法拆解子解法1:多粒度分割子…

应用层协议原理——因特网提供的运输服务

我们已经考虑了计算机网络能够一般性地提供的运输服务。现在我们要更为具体地考察由因特网提供的运输服务类型。因特网(更一般的是TCP/IP网络)为应用程序提供两个运输层协议,即UDP和TCP。当软件开发者为因特网创建一个新的应用时,首先要做出的决定是&…

我是售前工程师转大模型了,不装了我摊牌了

有无售前工程师的朋友,心里的苦谁懂呀,售前工程师是项目开发人员与业务销售人员的桥梁,在业务销售人员眼中,他们是技术人员,在项目实施中的开发人员眼中,他们是专注技术的销售人员,在用户眼中&a…

本人瞎说--分形与混沌--中医为什么是准的

文章目录 序分形与混沌中医的来源我为什么更爱中医现代医学仍然落后与无知,很多病根本就治不好病由心生 序 本人不是中医专业,也不是医生,也不会看病,我的观点都是来自于网上学习及思考。不喜欢的随便,但是还请您多想…

【运算放大器学习】

运算放大器学习 运放的选型一般主要需要观察以下几个参数,下面一起来理解一下几个核心参数的意义;今天说 输入失调电压 、失调电压温漂 、 偏置电流 、 失调电流几个参数; 放大器的几个主要参数 输入失调电压失调电压温漂偏置电流失调电流…