【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/8/13 18:46:12 阅读更多 →
Spring Cloud Alibaba中Nacos的核心功能与实战配置

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

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

2026/8/13 12:31:41 阅读更多 →
BEV感知本质:三维空间重编码与工业落地五大陷阱

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

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

2026/8/13 16:35:35 阅读更多 →

最新新闻

从零构建本地AI邮件助手:基于LangChain与本地大模型的自动化实践

从零构建本地AI邮件助手:基于LangChain与本地大模型的自动化实践

1. 先搞清楚 Grok Bot 到底能帮你做什么看到“AI助手代管日程邮件”这个标题,很多人第一反应可能是“又一个AI自动回复邮件的工具”。但如果你真这么想,可能就错过了它最核心的价值。我花时间实测和梳理后发现,Grok Bot这类工具(或…

2026/8/14 6:23:03 阅读更多 →
数学建模竞赛实战复盘:从数据处理到模型优化的完整解题框架

数学建模竞赛实战复盘:从数据处理到模型优化的完整解题框架

1. 项目概述:一次经典的数学建模竞赛复盘2017年第七届APMCM亚太地区大学生数学建模竞赛的A组赛题,对于很多参加过数学建模竞赛的同学来说,可能是一个既熟悉又充满挑战的回忆。APMCM作为亚太地区颇具影响力的赛事,其题目往往紧扣现…

2026/8/14 6:23:03 阅读更多 →
斯坦福CS 229机器学习速查手册:7份PDF装下整门课的知识点

斯坦福CS 229机器学习速查手册:7份PDF装下整门课的知识点

斯坦福CS 229机器学习速查手册:7份PDF装下整门课的知识点 【免费下载链接】stanford-cs-229-machine-learning VIP cheatsheets for Stanfords CS 229 Machine Learning 项目地址: https://gitcode.com/GitHub_Trending/st/stanford-cs-229-machine-learning …

2026/8/14 6:23:03 阅读更多 →
告别“等汉化组“的日子,LunaTranslator零门槛搞定日文视觉小说翻译

告别“等汉化组“的日子,LunaTranslator零门槛搞定日文视觉小说翻译

告别"等汉化组"的日子,LunaTranslator零门槛搞定日文视觉小说翻译 【免费下载链接】LunaTranslator 视觉小说翻译器 / Visual Novel Translator 项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator 凌晨两点,屏幕里的角…

2026/8/14 6:23:03 阅读更多 →
解锁Sterraxcyl分析模式:如何识别目标用户的核心社交圈与兴趣账户

解锁Sterraxcyl分析模式:如何识别目标用户的核心社交圈与兴趣账户

解锁Sterraxcyl分析模式:如何识别目标用户的核心社交圈与兴趣账户 【免费下载链接】sterraxcyl Instagram OSINT tool to export and analyse followers | following with their details 项目地址: https://gitcode.com/gh_mirrors/st/sterraxcyl Sterraxcyl…

2026/8/14 6:23:03 阅读更多 →
fused-effects常见错误解决:Haskell代数效果调试技巧

fused-effects常见错误解决:Haskell代数效果调试技巧

fused-effects常见错误解决:Haskell代数效果调试技巧 【免费下载链接】fused-effects A fast, flexible, fused effect system for Haskell 项目地址: https://gitcode.com/gh_mirrors/fu/fused-effects fused-effects是Haskell中一个快速、灵活的融合效果系…

2026/8/14 6:22:03 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →