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

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

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

2026/10/17 19:27:32 阅读更多 →
BEV感知本质:三维空间重编码与工业落地五大陷阱

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

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

2026/10/17 19:43:49 阅读更多 →

最新新闻

如何用huggingface_hub一行代码安全加载engagement-predictor模型并做预测

如何用huggingface_hub一行代码安全加载engagement-predictor模型并做预测

【免费下载链接】engagement-predictor 项目地址: https://ai.gitcode.com/hf_mirrors/raviearjun/engagement-predictor 点击查看 免费下载 engagement-predictor 是一个基于 scikit-learn Ridge 回归的社交媒体互动预测模型,可通过 huggingface_hub 一…

2026/10/18 4:41:33 阅读更多 →
剪枝后还能打吗?Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-19B质量损失深度解析:KL 0.331与基准实测数据

剪枝后还能打吗?Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-19B质量损失深度解析:KL 0.331与基准实测数据

大模型人工智能模型压缩模型量化本地部署 【免费下载链接】Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-19B 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-19B 点击查看 免费下载 Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-…

2026/10/18 4:41:33 阅读更多 →
设备安全---IP防护

设备安全---IP防护

在工业电气设备、光电传感器、编码器、伺服电机、工业连接器、控制箱等产品的规格参数中,IP防护等级是出现频率最高的指标之一。 IP防护等级是一套外壳防护能力的编码体系,而非单一的强度指标。当前通用电气设备执行的标准为IEC 60529:2013(合…

2026/10/18 4:41:33 阅读更多 →
清理记事本:从信息筛选到知识管理的系统化实践

清理记事本:从信息筛选到知识管理的系统化实践

1. 从“清理记事本”这个动作说起:为什么一个看似简单的需求值得认真对待很多人第一次看到“清理记事本”这个标题,第一反应是:这有什么好讲的,不就是把记事本里的内容删掉、整理一下吗?但如果你真正长期使用记事本类工…

2026/10/18 4:41:33 阅读更多 →
Flutter引导页实战:PageView+Indicator实现动态指示器与状态持久化

Flutter引导页实战:PageView+Indicator实现动态指示器与状态持久化

我曾经和朋友讨论过一个问题:在 Flutter 里实现一个 App 首次启动的引导页,到底是不是只用 PageView 就能搞定?答案当然是否定的。真正把一个引导页做得完整、顺滑、可维护,背后其实还牵扯到页码监听、指示器动画、按钮状态管理、…

2026/10/18 4:41:33 阅读更多 →
主从博弈下综合能源微网需求响应优化调度模型全解析

主从博弈下综合能源微网需求响应优化调度模型全解析

第一次看到“基于主从博弈的综合能源微网需求响应优化调度模型”这个题目,很多人会把它当成一个普通的优化调度问题来读:目标函数、约束条件、求解器一跑,出结果就完事了。但我实际调过这类模型之后发现,真正难的不是数学工具&…

2026/10/18 4:40:33 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →