【finetuning】嵌入模型微调案例分析
1. 案例目标本案例旨在展示如何对嵌入模型进行微调以提高在特定领域金融文档的检索效果。主要目标包括使用LlamaIndex框架加载和预处理金融PDF文档利用LLM生成合成查询-文档对作为微调数据使用SentenceTransformersFinetuneEngine对开源嵌入模型进行微调评估微调后的模型与原始模型和商业模型的性能差异2. 技术栈与核心依赖LlamaIndexSentenceTransformersOpenAI GPT-3.5-turboBAAI/bge-small-enPyTorchHugging Face Transformers核心依赖库llama-index-finetuning- 提供微调引擎和数据集生成功能llama-index-embeddings-huggingface- 集成Hugging Face嵌入模型llama-index-embeddings-openai- 集成OpenAI嵌入模型llama-index-llms-openai- 集成OpenAI语言模型llama-index-readers-file- 文件读取功能datasets- 数据集处理transformers[torch]- PyTorch版本的Transformers库3. 环境配置3.1 数据准备案例使用Lyft和Uber的2021年10K财务报告作为训练和验证数据TRAIN_FILES [./data/10k/lyft_2021.pdf] VAL_FILES [./data/10k/uber_2021.pdf]3.2 API配置需要配置OpenAI API密钥用于生成合成查询import os OPENAI_API_KEY sk- os.environ[OPENAI_API_KEY] OPENAI_API_KEY3.3 基础模型使用BAAI/bge-small-en作为基础嵌入模型进行微调model_idBAAI/bge-small-en4. 案例实现4.1 数据加载与预处理使用SimpleDirectoryReader加载PDF文档并通过SentenceSplitter将文档分割为文本节点def load_corpus(files, verboseFalse): if verbose: print(fLoading files {files}) reader SimpleDirectoryReader(input_filesfiles) docs reader.load_data() if verbose: print(fLoaded {len(docs)} docs) parser SentenceSplitter() nodes parser.get_nodes_from_documents(docs, show_progressverbose) if verbose: print(fParsed {len(nodes)} nodes) return nodes4.2 合成查询生成使用gpt-3.5-turbo为每个文本节点生成相关问题创建查询-文档对from llama_index.finetuning import generate_qa_embedding_pairs from llama_index.core.evaluation import EmbeddingQAFinetuneDataset from llama_index.llms.openai import OpenAI train_dataset generate_qa_embedding_pairs( llmOpenAI(modelgpt-3.5-turbo), nodestrain_nodes, output_pathtrain_dataset.json, ) val_dataset generate_qa_embedding_pairs( llmOpenAI(modelgpt-3.5-turbo), nodesval_nodes, output_pathval_dataset.json, )4.3 模型微调使用SentenceTransformersFinetuneEngine对基础模型进行微调from llama_index.finetuning import SentenceTransformersFinetuneEngine finetune_engine SentenceTransformersFinetuneEngine( train_dataset, model_idBAAI/bge-small-en, model_output_pathtest_model, val_datasetval_dataset, ) finetune_engine.finetune() embed_model finetune_engine.get_finetuned_model()4.4 模型评估案例使用两种评估方法4.4.1 命中率(Hit Rate)评估对于每个查询-文档对检索top-k文档检查相关文档是否在结果中def evaluate( dataset, embed_model, top_k5, verboseFalse, ): corpus dataset.corpus queries dataset.queries relevant_docs dataset.relevant_docs nodes [TextNode(id_id_, texttext) for id_, text in corpus.items()] index VectorStoreIndex( nodes, embed_modelembed_model, show_progressTrue ) retriever index.as_retriever(similarity_top_ktop_k) eval_results [] for query_id, query in tqdm(queries.items()): retrieved_nodes retriever.retrieve(query) retrieved_ids [node.node.node_id for node in retrieved_nodes] expected_id relevant_docs[query_id][0] is_hit expected_id in retrieved_ids # assume 1 relevant doc eval_result { is_hit: is_hit, retrieved: retrieved_ids, expected: expected_id, query: query_id, } eval_results.append(eval_result) return eval_results4.4.2 InformationRetrievalEvaluator评估使用sentence_transformers库的InformationRetrievalEvaluator进行更全面的评估from sentence_transformers.evaluation import InformationRetrievalEvaluator from sentence_transformers import SentenceTransformer def evaluate_st( dataset, model_id, name, ): corpus dataset.corpus queries dataset.queries relevant_docs dataset.relevant_docs evaluator InformationRetrievalEvaluator( queries, corpus, relevant_docs, namename ) model SentenceTransformer(model_id) return evaluator(model, output_pathresults/)5. 案例效果评估结果案例比较了三种嵌入模型的性能OpenAI嵌入模型- 商业闭源模型BAAI/bge-small-en- 开源基础模型微调后的模型- 基于bge-small-en微调的模型在命中率评估中BAAI/bge-small-en基础模型的命中率为0.793微调后的模型显示出更高的命中率具体值在代码中计算在InformationRetrievalEvaluator评估中微调后的模型在多个指标上均优于基础模型包括Mean Average Precision (MAP)Normalized Discounted Cumulative Gain (NDCG)Precision at k (Pk)Recall at k (Rk)6. 案例实现思路6.1 数据处理流程文档加载使用LlamaIndex的SimpleDirectoryReader加载PDF文档文本分割使用SentenceSplitter将文档分割为适合处理的文本块数据集划分将Lyft文档作为训练集Uber文档作为验证集6.2 微调数据生成合成查询生成使用gpt-3.5-turbo为每个文本块生成相关问题数据集构建将(查询, 相关文档)对构建为微调数据集数据持久化将生成的数据集保存为JSON文件便于后续使用6.3 模型微调流程基础模型加载加载BAAI/bge-small-en作为基础模型微调引擎初始化使用SentenceTransformersFinetuneEngine配置微调参数模型训练在合成数据集上训练模型模型保存保存微调后的模型到本地6.4 评估策略多模型对比同时评估商业模型、开源基础模型和微调模型多指标评估使用简单命中率和全面的信息检索指标跨领域验证使用不同公司的文档进行验证测试泛化能力7. 扩展建议7.1 数据扩展增加更多行业领域的文档提高模型的泛化能力尝试不同类型的文档如新闻、研究报告、法律文件等使用人工标注的查询-文档对替代或补充合成数据7.2 模型优化尝试不同的基础模型如bge-large、e5等作为微调起点调整微调超参数学习率、批大小、训练轮数等探索适配器微调(LoRA)等参数高效微调方法7.3 评估增强增加更多评估指标如MRR、Reciprocal Rank等进行人工评估验证检索结果的相关性测试模型在长文档检索和多跳问答任务中的表现7.4 应用扩展将微调后的模型集成到RAG系统中开发基于微调模型的语义搜索应用探索在特定领域如法律、医疗的应用潜力8. 总结本案例展示了使用LlamaIndex框架对嵌入模型进行领域特定微调的完整流程。通过使用LLM生成的合成数据对开源嵌入模型进行微调显著提高了在金融文档检索任务上的性能。这种方法具有以下优势成本效益相比使用商业API微调开源模型可以降低长期使用成本领域适应通过领域特定数据微调模型能更好地理解专业术语和上下文数据隐私本地部署微调模型可以保护敏感数据可控性完全控制模型训练和部署过程便于定制和优化该案例的方法可以扩展到各种专业领域为构建高效、准确的领域特定检索系统提供了实用方案。随着开源嵌入模型的不断进步结合领域特定微调有望在更多应用场景中达到甚至超越商业模型的性能。

相关新闻

你以为你调的是父类,其实 Python 悄悄绕了路——多重继承 MRO 的致命幻觉与保序法则

你以为你调的是父类,其实 Python 悄悄绕了路——多重继承 MRO 的致命幻觉与保序法则

你以为你调的是父类,其实 Python 悄悄绕了路——多重继承 MRO 的致命幻觉与保序法则 在 Python 中,多重继承就像一把双刃剑:它让我们可以组合多个类的功能,写出高度复用的代码,但同时也埋下了无数关于“方法到底调用自…

2026/7/23 8:16:09 阅读更多 →
Spring Cloud Alibaba中Nacos的核心功能与实战配置

Spring Cloud Alibaba中Nacos的核心功能与实战配置

1. Nacos在Spring Cloud Alibaba生态中的核心定位Nacos作为Spring Cloud Alibaba体系中的核心组件,本质上是一个集服务发现、配置管理和服务元数据管理于一体的动态服务基础设施。我在实际微服务架构落地过程中发现,相比传统的EurekaConfig组合方案&…

2026/7/23 12:45:16 阅读更多 →
BEV感知本质:三维空间重编码与工业落地五大陷阱

BEV感知本质:三维空间重编码与工业落地五大陷阱

1. 为什么BEV不是“把照片拍成俯视图”那么简单?很多人第一次听说BEV(Bird’s Eye View,鸟瞰图)感知,第一反应是:“不就是用无人机拍个俯拍照片?或者PS里拉个透视变形?”——这恰恰是…

2026/7/23 12:59:27 阅读更多 →

最新新闻

docker笔记2

docker笔记2

1.容器数据卷 用于容器内的数据在容器外(宿主机)的持久化和同步,相当于同一宿主机内的容器间的数据共享。(注意:新版用--mount) docker run -it -v [宿主机路径]:[容器内路径] [镜像名] docker ps 获取容…

2026/7/23 22:10:12 阅读更多 →
行业测评|2026 拼多多代运营公司推荐分析:新店起步别被低价套路,综合考察运营能力、ROI 及 GMV 增量

行业测评|2026 拼多多代运营公司推荐分析:新店起步别被低价套路,综合考察运营能力、ROI 及 GMV 增量

随着拼多多平台用户规模持续攀升、品类结构不断升级,越来越多品牌商家与源头工厂将其作为线上增长的核心阵地。与此同时,代运营行业门槛参差不齐,低价引流、承诺保底销量、虚假案例包装等套路屡见不鲜,不少新店商家因贪图低价服务…

2026/7/23 22:10:12 阅读更多 →
“一个公司最后可能只剩两个人”——蒋涛、吴甘沙、徐欣、张帆圆桌激辩:AI 如何重构产品、组织与商业

“一个公司最后可能只剩两个人”——蒋涛、吴甘沙、徐欣、张帆圆桌激辩:AI 如何重构产品、组织与商业

作者 | 唐小引 出品 | CSDN(ID:CSDNnews)Claude Code,12 个人,九个月,25 亿美金营收。同一赛道里,微软 VS Code 几千人团队,JetBrains 两千人。 这不是一个融资新闻,这是一个信号。当…

2026/7/23 22:10:12 阅读更多 →
修复产品口碑之选:这些品牌让你的肌肤焕然一新

修复产品口碑之选:这些品牌让你的肌肤焕然一新

做美业这五年,我见过太多被“修复”两个字折腾得够呛的姐妹。不是产品不好用,而是压根没搞懂自己到底需要什么修复。很多美容院老板,也不知道选什么品牌的产品,才能根治顾客的问题。行业深度观察:修复这件事&#xff0…

2026/7/23 22:10:12 阅读更多 →
从“人等硬件”到“结果自来”:揭秘汽车软件SIL测试的正确打开方式

从“人等硬件”到“结果自来”:揭秘汽车软件SIL测试的正确打开方式

“一周连发好几版软件,测试速度赶不上发布节奏,回归测试任务堆成山!”“软件代码越来越庞杂,硬件黑盒测试摸不清问题原因,问题定位让人头大!”“同时维护几十款车型测试,测试硬件资源需求各不相…

2026/7/23 22:10:12 阅读更多 →
ClineRule系统提示词

ClineRule系统提示词

零容错设计原则(Fail Fast)任何异常/失败/边界情况必须立即暴露,宁可崩溃不可静默。 参考:docs/KnowLedge/零容错设计原则.md(完整版)哲学基础 软件熵增定律错误被掩盖 系统熵增,错误被暴露 系…

2026/7/23 22:09:11 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻