Embedding 模型领域微调实战

分享Embedding 模型微调的实现 1. 当前比较主流的Embedding开源模型有哪些?答:1. m3e(Moka Massive Mixed Embedding) 2. BAAI/bge-large-zh-v1.5。更多的开源模型评测榜单可见:\2. 模型的作用?答:通过词,句子或者上下文的向量生成,从而来实现更高效的语义检索,语言理解的相关任务。\3. 模型是如何捕获语义信息的?答:在训练的过程中,模型学习用来反映语义相似性的方式将向量分配给单词或序列。简言之,通过分析数据中的词共现模式来实现。 阅读详情
AI摘要

本文介绍了Embedding模型领域微调实战,包括原理、环境和数据集准备、基线评估、微调准备及全参数微调等步骤,指出有好的领域数据可提升模型效果,但数据合成需控制分布。还分享了大模型AI学习的四个阶段,涵盖初阶应用、高阶应用、模型训练和商业闭环。

Embedding 模型领域微调实战

在大模型 RAG 场景中,Embedding 模型多使用开源的 bge/gte 等 Embedding 模型。

这些模型一般在通用数据集上训练,并没有掌握较好的领域知识,从而导致模型在特定领域下的检索效果较差。

本文从代码级别,手把手展示如何对 Embedding 模型进行领域微调,从而提升在特定领域的效果。

0. Embedding 微调简单原理

Embedding 模型通过嵌入将文本转换为固定维度(比如 1024 维)的向量,向量之间的相似度则代表的文本之间的语义相似度。通过微调可以让语义接近的文本的向量相似度变高,语义不接近的文本的向量相似度变低。

其效果就如下图(图源[2]),可简单的理解为让文本簇内集中,簇外分散。

null

1. 准备环境

硬件环境:GTX 4090(可使用其他 NVIDIA 显卡)

软件环境:WSL2 + CUDA 12.4

conda create -n embedding python=3.10 -y
conda activate embedding

# install pytorch with cuda 12.4, see https://pytorch.org/get-started/locally/
# because this bug: https://github.com/huggingface/diffusers/issues/9704, we need to install pytorch-nightly or torch 2.4.
conda install pytorch==2.4.1 torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia

# install other dependencies
pip install -r requirements.txt

2. 准备数据集

使用标准的 RAG 评估数据集格式作为 Retrieval 评估数据集格式,其中 reference_answers 字段在评估检索效果时可以省略。

评估数据集由如下列组成:

{
    "queries":{
        "<query_id>":"<query>",
        ...
    },
    "corpus":{
        "<corpus_id>":"<corpus>",
        ...
    },
    "relevant_docs":{
        "<query_id>":["<corpus_id>", ...],//每个 Query 可能对应多个 corpus,但是在本案例中,只包含一个。
        ...
    },
    "negative_docs":{
        "<query_id>":["<corpus_id>", ...],
        ...
    },
    "reference_answers":{// 如果只检查检索效果,可以不需要 refrerence_answer 字段。
        "<query_id>":"<reference_answer>",
    }
}

使用 Huggingface 上的 infgrad/retrieval_data_llm 数据集用于训练和验证,其特点是具备挖掘良好的正例和负例,比较适合微调。如下是下载和格式转换命令:

# https://huggingface.co/datasets/infgrad/retrieval_data_llm
PYTHONPATH="." python utils/convert_infgrad_retrieval_data_llm_to_ragdataset.py \
    --dataset "infgrad/retrieval_data_llm" \
    --train_val_split 0.01 \
    --output_path ./data/infgrad_retrieval_data_llm.json
corpus: 369307, train_queries: 182979, val_queries: 1848, save to ./data/infgrad_retrieval_data_llm.json

第二个数据集使用 AirBench-QA-Healthcare-zh,他有 374 条验证集,但是没有训练集,正好可以实践数据合成。如下是下载和格式转换命令:

# https://github.com/AIR-Bench/AIR-Bench/blob/main/docs/available_tasks.md#air-bench_2405
PYTHONPATH="." python utils/convert_airbench_to_ragdataset.py \
    --dataset "qa_healthcare_zh" \
    --train_val_split 1.0 \
    --output_path ./data/airbench_qa_healthcare_zh.json
corpus: 360218, train_queries: 0, val_queries: 374, save to ./data/airbench_qa_healthcare_zh.json

3. 进行基线评估

使用 BAAI/bge-small-zh-v1.5[3] 作为基线模型进行评估。该模型足够小,且容易进行微调。

评估分为2步:

  1. 将所有的 corpus 转换为 embedding 向量,并构建 Faiss 索引
  2. 进行 eval,在 val 数据上进行评估。

为避免多次操作的时候重复加载模型,制定统一的 embedding cache 机制。请克隆本文对应的代码库后进行操作。

# 在 infgrad 上的指标
PYTHONPATH="." python eval/evaluate_basic.py \
    --dataset_path "./data/infgrad_retrieval_data_llm.json" \
    --encoder "BAAI/bge-small-zh-v1.5" \
    --query_instruction "为这个句子生成表示以用于检索相关文章:" \
    --split"val" \
    --search_top_k 10

{
    "ndcg_at_1": 0.5395,
    "ndcg_at_3": 0.63031,
    "ndcg_at_5": 0.65451,
    "ndcg_at_10": 0.67399,
    "map_at_1": 0.5395,
    "map_at_3": 0.60868,
    "map_at_5": 0.62218,
    "map_at_10": 0.63025,
    "recall_at_1": 0.5395,
    "recall_at_3": 0.69264,
    "recall_at_5": 0.75108,
    "recall_at_10": 0.81115
}

# 在 airbench 上的指标
PYTHONPATH="." python eval/evaluate_basic.py \
    --dataset_path "./data/airbench_qa_healthcare_zh.json" \
    --encoder "BAAI/bge-small-zh-v1.5" \
    --query_instruction "为这个句子生成表示以用于检索相关文章:" \
    --split"val" \
    --search_top_k 10
{
    "ndcg_at_1": 0.40107,
    "ndcg_at_3": 0.32827,
    "ndcg_at_5": 0.30947,
    "ndcg_at_10": 0.32522,
    "map_at_1": 0.0833,
    "map_at_3": 0.14634,
    "map_at_5": 0.18023,
    "map_at_10": 0.21772,
    "recall_at_1": 0.0833,
    "recall_at_3": 0.17145,
    "recall_at_5": 0.23619,
    "recall_at_10": 0.33766
}

这里的 recall、map、ndcg 等指标代表信息检索(IR)领域的指标。在 RAG 场景中,重点关注 recall@N TopN 召回率指标。

4. 微调准备

准备微调数据集和 Loss 函数。根据 sbert loss doc[4] 数据集有三种格式:

  1. 仅正样本: (anchor, positive) pairs,一般使用 MultipleNegativesRankingLoss 损失函数
  2. 正负样本:(anchor, positive, negative_1, …, negative_n),一般使用 MultipleNegativesRankingLoss[5] 损失函数
  3. 分数样本:(sentence_A, sentence_B, score),一般使用 CoSENTLoss 损失函数。

第 3 种比较适合做知识蒸馏,也就是用比较强的模型的相似度分数来训练小模型。目前基本使用第一种或第二种。

数据准备和合成可参考如下论文:

null

  1. Wu, T. et al. Towards Robust Text Retrieval with Progressive Learning. Preprint at http://arxiv.org/abs/2311.11691 (2023).

4.1 数据合成

对 airbench_qa_healthcare_zh 数据集实践数据挖掘,从 corpus 中挖掘出正样本(Query和Corpus 的关联关系)。实际生产环境下,corpus 可以通过对文档的识别和切割得到,本文从略。

使用 finetune/data_synthesis.ipynb 进行数据合成。合成后的数据集共有 9810 条QA对。

4.2 难负例挖掘

针对 airbench_qa_healthcare_zh 数据集,使用 finetune/hard_negative_mining.ipynb 进行难负例挖掘。可以控制挖掘的负例的数量,暂定每个 Query 挖掘 15 个负例。

5. 全参数微调

5.1 infgrad 数据集微调

使用 finetune/sft_infgrad.ipynb 进行全参数微调。微调结果保存在 checkpoint/bge-small-zh-v1.5-sft,使用 infgrad_retrieval_data_llm 数据集的正负例数据进行微调,并在 airbench_qa_healthcare_zh 数据集上验证 Held-out 效果。

# 检查在训练的 val 数据上的效果
PYTHONPATH="." python eval/evaluate_basic.py \
    --dataset_path "./data/infgrad_retrieval_data_llm.json" \
    --encoder "checkpoint/bge-small-zh-v1.5-sft" \
    --query_instruction "为这个句子生成表示以用于检索相关文章:" \
    --split"val" \
    --search_top_k 10
{
    "ndcg_at_1": 0.61472,
    "ndcg_at_3": 0.69546,
    "ndcg_at_5": 0.71485,
    "ndcg_at_10": 0.73301,
    "map_at_1": 0.61472,
    "map_at_3": 0.67551,
    "map_at_5": 0.68614,
    "map_at_10": 0.69371,
    "recall_at_1": 0.61472,
    "recall_at_3": 0.75325,
    "recall_at_5": 0.80087,
    "recall_at_10": 0.8566
}

# 检查在非训练数据上的效果
PYTHONPATH="." python eval/evaluate_basic.py \
    --dataset_path "./data/airbench_qa_healthcare_zh.json" \
    --encoder "checkpoint/bge-small-zh-v1.5-sft" \
    --query_instruction "为这个句子生成表示以用于检索相关文章:" \
    --split"val" \
    --search_top_k 10
{
    "ndcg_at_1": 0.37701,
    "ndcg_at_3": 0.31708,
    "ndcg_at_5": 0.29099,
    "ndcg_at_10": 0.30451,
    "map_at_1": 0.07493,
    "map_at_3": 0.14166,
    "map_at_5": 0.16724,
    "map_at_10": 0.19973,
    "recall_at_1": 0.07493,
    "recall_at_3": 0.16802,
    "recall_at_5": 0.22041,
    "recall_at_10": 0.31009
}

可以看到:

  1. 微调后的模型在测试集上 recall@3 从 0.63031 提升到 0.75325,提升 12pp。
  2. 但是在Held-out (领域外)数据集上 recall@3 从0.17145 降低到 0.16802,降低0.3pp,这就是灾难性遗忘的特点。

5.2 airbench 合成数据集微调

也测试下 sft_airbench.ipynb,使用 airbench_qa_healthcare_zh 我们自己合成的数据集进行微调,并在 infgrad_retrieval_data_llm 数据集上验证 Held-out 效果。 微调结果保存在 checkpoint/bge-small-zh-v1.5-sft-airbench

# 检查在训练的 val 数据上的效果
PYTHONPATH="." python eval/evaluate_basic.py \
    --dataset_path "./data/airbench_qa_healthcare_zh.json" \
    --encoder "checkpoint/bge-small-zh-v1.5-sft-airbench" \
    --query_instruction "为这个句子生成表示以用于检索相关文章:" \
    --split"val" \
    --search_top_k 10
{
    "ndcg_at_1": 0.32888,
    "ndcg_at_3": 0.27589,
    "ndcg_at_5": 0.25202,
    "ndcg_at_10": 0.26363,
    "map_at_1": 0.07424,
    "map_at_3": 0.12941,
    "map_at_5": 0.1511,
    "map_at_10": 0.17766,
    "recall_at_1": 0.07424,
    "recall_at_3": 0.14725,
    "recall_at_5": 0.18944,
    "recall_at_10": 0.26303
}

# 检查在非训练数据上的效果
PYTHONPATH="." python eval/evaluate_basic.py \
    --dataset_path "./data/infgrad_retrieval_data_llm.json" \
    --encoder "checkpoint/bge-small-zh-v1.5-sft-airbench" \
    --query_instruction "为这个句子生成表示以用于检索相关文章:" \
    --split"val" \
    --search_top_k 10
{
    "ndcg_at_1": 0.50866,
    "ndcg_at_3": 0.5959,
    "ndcg_at_5": 0.62093,
    "ndcg_at_10": 0.64245,
    "map_at_1": 0.50866,
    "map_at_3": 0.57477,
    "map_at_5": 0.58856,
    "map_at_10": 0.59754,
    "recall_at_1": 0.50866,
    "recall_at_3": 0.65693,
    "recall_at_5": 0.71807,
    "recall_at_10": 0.78409
}

可以看到:

  1. 微调后的模型在测试集上 recall@3 从 0.17145 反而降低到 0.14725,降低 2.4pp。这是因为我们合成数据并没有和测试集保持相同的数据分布,反而导致效果下降。证明合成数据在实际生产实践中比较困难。在业界文章中一般用合成数据的测试集进行验证,效果会有提升。
  2. 在Held-out (领域外)数据集上 recall@3 从0.69264 降低到 0.65693,降低3.8pp,这也是灾难性遗忘的特点。

6. 结论

如果有较好的领域数据,通过对 Embedding 进行全参微调,可提升模型的领域效果。但是数据合成需要精细化的控制合成的数据分布,否则反而会导致微调后效果下降。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

关于Embedding模型微调 通过以上步骤,可显著提升Embedding模型在特定任务中的表现。实际操作中,建议结合业务需求灵活调整策略。1.什么是Embedding模型微调?2.模型选择与初始化。 阅读详情

相关推荐

Embedding 模型的选择和微调

评估机器生成摘要的质量。

kk的博客 3147

手工微调embedding模型RAG检索能力

本文是一篇关于如何微调embedding的文章,原作者是Wenqi Glantz。 主要内容: 微调big-large-en开源embedding模型; 具体实现代码细节; 评测最终的提升效果。

asd8705的专栏 3706

RAG系统Embedding模型微调实战:从原理到垂直领域优化

Embedding模型作为自然语言处理中的核心技术,通过将文本转换为稠密向量来捕捉语义信息。其核心原理基于对比学习,通过拉近语义相似文本的向量距离、推远不相关文本来学习有效的语义表示。这种技术在语义搜索、推荐系统等场景中具有重要价值,特别是在处理专业术语和领域特定表达时。在RAG(检索增强生成)系统中,Embedding模型的质量直接影响检索结果的相关性。针对垂直领域如金融、医疗等专业场景,通用Embedding模型往往难以准确理解领域术语,这时就需要通过微调来提升模型性能。微调Embedding模型涉及数

weixin_42530793的博客 309

大模型的 Embedding 模型该如何进行微调?

本文重点介绍了如何使用 Sentence Transformers 对开源的Embedding模型进行微调,并验证Embedding模型微调后的效果。Sentence Transformers 是一个宝库,它介绍了关于Embedding模型方方面面的内容,是了解、深入Embedding模型必不可少的工具。后续笔者将会介绍Embedding模型量化、俄罗斯套娃嵌入模型(Matryoshka Representation Learning, MRL)等相关方面的内容。

2201_75499313的博客 5014

100kHz手持LCR表设计:高频阻抗测量与校准实战解析

阻抗测量是电子元件测试的基础,LCR表通过施加正弦激励并分析电压电流的幅值与相位,即可获取电容、电感、电阻的等效参数。在开关电源、无线充电等高频应用场景中,元件在100kHz下的ESR和阻抗特性尤为关键,传统10kHz手持仪表难以满足需求。本文从自动平衡桥原理出发,探讨如何将台式电桥的核心能力浓缩至手持设备,重点剖析高频寄生参数抑制、模拟链路设计、数字相敏检波算法及开路短路校准方法。通过实测数据验证,在100kHz频率下基本精度可达0.5%以内,为维修现场、产线抽检及硬件调试提供了可携带的精密测量方案。全文

weixin_33910191的博客 398

jemalloc实战:5分钟搞定C程序内存泄漏检测(附PDF报告生成技巧)

本文详细介绍了使用jemalloc的heap profiling功能快速检测C/C++程序内存泄漏的实战方法。通过预编译库和LD_PRELOAD注入,无需修改代码即可启动低开销剖析,并利用jeprof工具进行深度分析和生成可视化PDF报告,帮助开发者高效定位线上或开发环境中的内存问题。

i3j4k5的博客 225

Embedding模型微调实战:深入探索领域应用与优化策略!

本文详细介绍了Embedding模型在领域微调中的实战方法,针对通用Embedding模型在特定领域效果不佳的问题,从原理到实践逐步展示了微调流程。主要内容包括:1) 通过领域微调提升Embedding模型在特定任务中的检索效果;2) 使用Huggingface和AirBench-QA数据集进行实验,比较微调前后的性能变化;3) 探讨了数据合成、难负例挖掘等关键技术;4) 实践结果表明,在优质领域数据上进行全参数微调可显著提升模型效果,但需注意数据分布匹配问题以避免性能下降。文章还提供了完整的代码实现和数据

2401_85343303的博客 1341

Abaqus滞回问题求解—浆锚连接装配式剪力墙滞回模拟

当下土木工程研究生,多数都在从事装配式混凝土构件安全或装配式混凝土构件连接节点力学性能的研究。研究这类问题,几乎脱离不开对有限元软件的使用,Abaqus求解能力非常强大,但模型处理能力相对较弱。装配式混凝土结构的有限元计算与传统现浇结构相比,其节点处理起来相对复杂,计算结果往往需要凸显出连接节点力学特性,所以对建模精程度的要求较高。所以向大家介绍一款工具—HyperMesh软件(一下简称Hm),它是专业的有限元前处理工具,用于处理装配式混凝土构件或连接节点有限元模型比较合适。这篇文章主要介绍如何利用Hm处理

qq_31918049的博客 2902

垂直领域RAG效果提升:微调Embedding模型实战指南

在自然语言处理中,Embedding模型负责将文本转换为向量表示,是语义理解的基础。其核心原理是通过神经网络学习词语和句子的分布式表示,将语义相似的文本映射到向量空间中相近的位置。这项技术的价值在于为下游任务如信息检索、文本分类和问答系统提供高质量的语义特征。在检索增强生成(RAG)等应用场景中,Embedding模型的质量直接决定了检索的准确性和最终生成内容的相关性。特别是在涉及专业术语和行业知识的垂直领域,通用的预训练模型往往难以精准捕捉领域特有的语义关联,导致召回效果不佳。本文聚焦于通过微调技术,使用

weixin_29056145的博客 242

因果推断(二):因果推断涉及的ITE、ATE、CATE等效应

因果效应也称为**处理效应(Treatment effect)**是用于评判干预与否的结果差异的指标(处理变量对结果变量的影响)。比如在接受治疗组中,如果这些人不接受治疗,这组人接受治疗和不接受治疗的效应差异是多少。定义为实验组中每个个体的处理效应差异,比如一个个体在接收治疗和不接受治疗的两个处理方式的健康程度得分的差。但是一个人因为不可能。比如我们想探究接受治疗的男性用户和不接受治疗的男性用户的平均效果差异就是CATE。前面说ITE是无法观测的,是因为一个人不能同时接受治疗又不接受治疗,这里关键的就是。

Y1n的博客 3713

Qt 插件开发 plugin 超详细 有源码

Qt 插件化开发框架类似于前后端的微服务的场景,授权哪个微服务则前端可以使用哪个微服务,插件就行硬件插卡一样,可以被随时删除、插入和修改,所以结构很灵活,容易修改,方便软件的升级和维护;插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已;动态库需要访问.lib文件,而且在程序运行时必须保证.lib存在,否则无法正常启动;

q610098308的专栏 6546

金融领域专属Embedding?用ms-swift微调BGE模型实战分享

本文介绍了如何在星图GPU平台上自动化部署ms-swift镜像,以微调BGE模型,打造金融领域专属的Embedding模型。该方案能显著提升金融文本(如研报、公告)的语义理解精度,从而优化智能检索与问答系统的核心能力。

weixin_35973118的博客 65

【扫地机器人】详细介绍扫地机器人软硬件测试和场景化测试

本文提出2025版扫地机器人全生命周期测试方案,涵盖实验室仿真、硬件台架、客户实景等全流程验证。测试以"清洁率≥95%、覆盖率≥98%、MTBF≥1000h"为核心指标,采用数字孪生与120套真实场景结合的双V模型。重点包括:传感器精度(LDS误差<±10mm)、清洁系统性能(10g粉尘吸入率≥99%)、动力续航(800次循环容量保持≥80%)等硬件测试;以及SLAM重定位(误差<5cm)、AI识别(mAP>92%)等软件验证。方案特别针对宠物家庭(毛发缠绕率≤3%)、

2501_92897788的博客 2283

Embedding模型微调实战:提升领域语义理解效果

Embedding模型作为自然语言处理的核心组件,通过将文本映射到稠密向量空间实现语义理解。其核心原理是利用深度神经网络捕捉词汇间的分布式表征,在信息检索、智能问答等场景发挥关键作用。针对通用预训练模型在专业领域表现不佳的问题,领域自适应微调技术能显著提升模型效果。以金融、医疗等垂直场景为例,通过构造领域特定的正负样本对,配合对比学习等训练方法,可使专业术语的语义捕捉准确率提升30%以上。实战中需重点关注硬件资源配置、数据质量把控以及生产环境部署优化,典型方案包括使用LoRA微调降低计算开销、ONNX格式加

weixin_29035147的博客 290

12-RK平台U-Boot启动流程

先看概述,把这一章要回答的问题摆出来,带着问题听。RK 特有的 BootROM -> MiniLoader -> SPL -> U-Boot -> Kernel。这是因为 RK 平台使用闭源的 DDR 初始化固件,需要通过 MiniLoader 来加载和运行。为什么多一层?这是 RK 平台的特殊性决定的。RK 平台使用闭源的 DDR 初始化固件,这段代码 Rockchip 不开源,只能以二进制形式提供,它需要一个载体来加载和运行,这个载体就是 MiniLoader。

内核笔记 1147

反应动力学仿真软件:Kintecus_(12).高级功能与技巧

Kintecus允许用户自定义复杂的反应方程,包括非线性反应和多相反应。通过自定义反应方程,用户可以更准确地描述实际反应系统。多尺度仿真是指在同一模型中同时考虑不同时间和空间尺度的反应过程。Kintecus提供了工具来处理从微观分子动力学到宏观反应动力学的多尺度仿真。通过本节的学习,您已经掌握了Kintecus的高级功能与技巧,包括复杂反应网络的构建、参数优化与敏感性分析、自定义反应机制、多尺度仿真、并行计算与批处理,以及数据可视化与后处理。

kkchenjj的博客 1048

nlp_gte_sentence-embedding_chinese-large模型微调指南:领域自适应实战

本文介绍了如何在星图GPU平台自动化部署nlp_gte_sentence-embedding_chinese-large镜像,实现领域自适应的文本表示模型微调。该镜像通过对比学习优化中文文本向量化,可应用于法律文书相似度计算、专业术语匹配等场景,显著提升领域文本的理解准确率。

weixin_28235889的博客 79

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

垂直领域RAG效果不佳?微调Embedding模型是关键实战指南

在构建智能问答和知识库系统时,语义检索是核心基础技术,它通过将文本转换为高维向量来理解和匹配用户意图。其原理在于利用Embedding模型捕捉文本的深层语义信息,通过计算向量间的相似度实现精准召回。这项技术的价值在于能够突破传统关键词匹配的局限,实现基于语义的智能搜索。在垂直领域如医疗、法律、金融等场景中,通用Embedding模型常因无法理解专业术语和领域特定知识结构而失效,导致检索结果不准确,进而影响后续生成质量。针对此问题,对Embedding模型进行领域微调成为提升系统效果的关键路径。本文聚焦**R

weixin_30785593的博客 389

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Qwen3-Embedding-4B微调实战:领域适配模型部署教程

本文介绍了如何在星图GPU平台上自动化部署Qwen3-Embedding-4B镜像,实现高效文本向量化与语义检索。基于该平台,用户可快速搭建领域适配的嵌入模型,应用于智能客服、知识库匹配等场景,显著提升企业级AI内容处理的准确性和效率。

weixin_35677363的博客 556

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Embedding模型微调实战:提升领域语义搜索效果

Embedding模型作为自然语言处理中的核心技术,通过将文本映射到低维向量空间实现语义表示。其核心原理是基于深度神经网络学习词语和句子的分布式表示,从而捕捉语义相似性。在信息检索、推荐系统等场景中,高质量的Embedding能显著提升语义匹配准确率。针对预训练模型在特定领域表现不足的问题,微调(Fine-tuning)技术通过领域数据适配成为关键解决方案。实战中需重点关注三元组数据构建、困难样本挖掘和动态负采样等策略,结合sentence-transformers等框架,可在金融、医疗等领域实现检索准确率

weixin_32597009的博客 228

nlp_gte_sentence-embedding_chinese-large模型微调指南:领域适配实战

本文介绍了如何在星图GPU平台上自动化部署nlp_gte_sentence-embedding_chinese-large镜像,并指导用户对该模型进行领域适配微调。通过微调,模型能更精准地理解特定领域(如法律、医疗)的文本语义,从而显著提升在智能问答、语义检索等场景下的应用效果。

weixin_42607969的博客 298

nlp_gte_sentence-embedding_chinese-large模型微调实战:领域适配全流程

本文介绍了如何在星图GPU平台上自动化部署nlp_gte_sentence-embedding_chinese-large镜像,快速构建中文语义向量服务。该镜像支持法律文书检索、电商客服知识库等场景的文本相似度计算与精准匹配,显著提升领域内语义理解准确率。

weixin_42607969的博客 38

nlp_gte_sentence-embedding_chinese-large模型微调实战:领域自适应文本向量化

本文介绍了如何在星图GPU平台上自动化部署nlp_gte_sentence-embedding_chinese-large镜像,并对其进行领域自适应微调。通过该平台,用户可以便捷地利用该模型进行专业文本向量化,例如在医疗或法律领域构建高精度的语义检索系统,从而提升信息匹配的准确性与效率。

weixin_42518334的博客 93

Dify文档喂不饱模型?别慌!Embedding 微调就是你的救星!

在 AI 时代,Embedding 是 NLP 任务的基石,直接决定了你的模型是「聪明绝顶」还是「笨拙不堪」。你是否遇到过这些让人头疼的问题:

2401_85375186的博客 1274

LLM之RAG实战——微调Embedding模型:终极指南

假设您正在为医疗领域构建一个问答系统,并希望确保它可以在用户提出问题时准确检索相关的医学文章。但是,通用嵌入模型可能难以处理高度专业化的词汇和医学术语的细微差别。

2301_76168381的博客 1090
上一篇: 大模型微调系列:如何让大模型成为领域专家?
下一篇: DeepSeek+RAG本地知识库搭建实战
Python_金钱豹
博客等级 码龄5年 1万+粉丝 2832原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值