网站app软件大全免费网站做等级保护
2026/1/5 21:26:49 网站建设 项目流程
网站app软件大全免费,网站做等级保护,上海今天刚刚发生的新闻,宁波市网站建设本文详细介绍了使用LlamaIndex微调Embedding模型提升RAG系统检索效果的方法。通过三步走策略#xff1a;自动生成训练数据集、模型微调和效果评估#xff0c;实现了无需人工标注的微调流程。实验显示#xff0c;微调后的模型在专业领域的检索命中率从8.9%提升至23.5%#x…本文详细介绍了使用LlamaIndex微调Embedding模型提升RAG系统检索效果的方法。通过三步走策略自动生成训练数据集、模型微调和效果评估实现了无需人工标注的微调流程。实验显示微调后的模型在专业领域的检索命中率从8.9%提升至23.5%提升幅度达14.6%。文章提供了完整的代码实现和评估方法帮助开发者针对特定业务场景定制专属Embedding模型显著提高RAG系统的检索准确率。还在为RAG系统的检索效果不佳而苦恼通用Embedding模型无法理解你的业务场景今天我将带你从零开始用LlamaIndex微调一个专属的Embedding模型让检索准确率大幅提升一、为什么需要微调Embedding模型在RAG检索增强生成系统中Embedding模型的质量直接决定了检索效果。虽然市面上有很多优秀的通用Embedding模型如BGE、OpenAI的text-embedding-ada-002等但在特定领域它们往往表现不佳。举个例子通用模型可能无法理解证券发行和股票上市在你的业务场景中的关联性专业术语的语义理解可能不够准确领域特定的表达方式可能被误判解决方案通过微调让模型学习你的领域知识大幅提升检索准确率二、项目架构三步走策略我们的微调流程分为三个核心步骤步骤1生成训练数据集从PDF/Markdown等文档中提取文本使用大语言模型自动生成问答对作为训练数据。步骤2模型微调使用LlamaIndex的微调引擎基于生成的训练数据对Embedding模型进行微调。步骤3效果评估对比微调前后的模型性能验证微调效果。三、实战代码解析事先准备两份语料一份为训练的语料一份为验证的语料。为了测试方便这里我们使用一份语料分别作训练和验证用。下载地址https://www.modelscope.cn/datasets/muxueai/ai_ai_yu_llm_study_lib/resolve/master/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E8%AF%81%E5%88%B8%E6%B3%95(2019%E4%BF%AE%E8%AE%A2).pdf.env配置里OPENAI_API_KEYsk-xxxx OPENAI_API_BASEhttps://api.siliconflow.cn/v1 LLM_MODELdeepseek-ai/DeepSeek-V3 EMBEDDING_MODELQwen/Qwen3-Embedding-8B安装依赖包# pyproject.toml [project] name embedding-ft version 0.1.0 description Add your description here readme README.md requires-python 3.12,3.13 dependencies [ datasets4.4.1, llama-index-core0.14.8, llama-index-embeddings-huggingface0.6.1, llama-index-embeddings-openai-like0.2.2, llama-index-finetuning0.4.1, llama-index-llms-openai-like0.5.3, llama-index-readers-file0.5.4, python-dotenv1.2.1, transformers[torch]4.57.1, ]3.1 第一步生成训练数据集首先我们需要从需要训练的文档中提取文本并生成问答对。这里使用LlamaIndex的generate_qa_embedding_pairs函数它会自动调用大语言模型生成高质量的问答对。# 1-gen_train_dataset.py import json from llama_index.core import SimpleDirectoryReader from llama_index.core.node_parser import SentenceSplitter import os from llama_index.finetuning import generate_qa_embedding_pairs from llama_index.llms.openai_like import OpenAILike from dotenv import load_dotenv load_dotenv() BASE_DIR rD:\Test\embedding_ft\data # 训练集和验证集文件路径 TRAIN_FILES [os.path.join(BASE_DIR, 中华人民共和国证券法(2019修订).pdf)] VAL_FILES [os.path.join(BASE_DIR, 中华人民共和国证券法(2019修订).pdf)] # 训练集和验证集语料库文件路径 TRAIN_CORPUS_FPATH os.path.join(BASE_DIR, train_corpus.json) VAL_CORPUS_FPATH os.path.join(BASE_DIR, val_corpus.json) 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 nodes def mk_dataset(): train_nodes load_corpus(TRAIN_FILES, verboseTrue) val_nodes load_corpus(VAL_FILES, verboseTrue) # openai-like兼容大模型 llm OpenAILike( modelos.getenv(LLM_MODEL), api_baseos.getenv(OPENAI_API_BASE), api_keyos.getenv(OPENAI_API_KEY), temperature0.7, ) train_dataset generate_qa_embedding_pairs(llmllm, nodestrain_nodes) val_dataset generate_qa_embedding_pairs(llmllm, nodesval_nodes) train_dataset.save_json(TRAIN_CORPUS_FPATH) val_dataset.save_json(VAL_CORPUS_FPATH) mk_dataset()关键点SimpleDirectoryReader自动读取PDF文档SentenceSplitter将文档切分为合适的文本块generate_qa_embedding_pairs使用LLM自动生成问答对无需人工标注一共生成2个json,分别为微调所使用的训练集和 验证集。可以使用任意平台的大模型,为了生成高质量的数据集尽量选择能力强的大模型这里使用硅基平台的3.2 第二步模型微调有了训练数据接下来就是微调模型。LlamaIndex提供了SentenceTransformersFinetuneEngine封装了所有复杂的训练逻辑。# 2-fine_tune.py from llama_index.finetuning import SentenceTransformersFinetuneEngine from llama_index.core.evaluation import EmbeddingQAFinetuneDataset import os BASE_DIR rD:\Test\embedding_ft\data TRAIN_CORPUS_FPATH os.path.join(BASE_DIR, train_corpus.json) VAL_CORPUS_FPATH os.path.join(BASE_DIR, val_corpus.json) def finetune_embedding_model(): # 加载训练集和验证集 train_dataset EmbeddingQAFinetuneDataset.from_json(TRAIN_CORPUS_FPATH) val_dataset EmbeddingQAFinetuneDataset.from_json(VAL_CORPUS_FPATH) # 使用本地模型路径 model_path os.path.join(., model, BAAI, bge-small-en-v1___5) finetune_engine SentenceTransformersFinetuneEngine( train_dataset, # 训练集 model_idmodel_path, # 使用本地模型路径 #model_output_pathmodel_finetune/BAAI/bge-small-en-v1___5, # 微调后的模型保存路径默认exp_finetune val_datasetval_dataset, # 验证集 ) finetune_engine.finetune() # 直接微调 embed_model finetune_engine.get_finetuned_model() print(embed_model) finetune_embedding_model()关键点使用bge-small-en-v1.5作为基础模型你也可以选择其他模型可事先从魔塔社区或者Hugging face上下载模型文件保存到项目的model目录下项目的目录结构如下:微调后的模型默认保存在exp_finetune目录也可以指定到其他目录整个过程完全自动化无需手动配置训练参数3.3 第三步效果评估微调完成后我们需要评估模型效果。这里使用命中率Hit Rate作为评估指标。对于每一对查询relevant_doc我们通过查询检索 Top-K 文档如果结果包含 relevant_doc那就是命中。接下来我们使用在线Embedding模型本地原Embedding模型微调后的模型分别评估。代码如下# 3-eval_embedding.py from llama_index.core import VectorStoreIndex from llama_index.core.schema import TextNode from llama_index.core.evaluation import EmbeddingQAFinetuneDataset from llama_index.embeddings.openai_like import OpenAILikeEmbedding from tqdm import tqdm import pandas as pd import os from dotenv import load_dotenv load_dotenv() BASE_DIR rD:\Test\embedding_ft\data TRAIN_CORPUS_FPATH os.path.join(BASE_DIR, train_corpus.json) VAL_CORPUS_FPATH os.path.join(BASE_DIR, val_corpus.json) # 评估命中率 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_results if __name__ __main__: # 加载评估集 dataset EmbeddingQAFinetuneDataset.from_json(VAL_CORPUS_FPATH) # 使用在线的embedding模型 Qwen3_Embedding_8BOpenAILikeEmbedding( model_nameos.getenv(EMBEDDING_MODEL), api_baseos.getenv(OPENAI_API_BASE), api_keyos.getenv(OPENAI_API_KEY), embed_batch_size10, ) # 评估 Qwen3_Embedding_8B qwen3_eval_results evaluate(dataset, Qwen3_Embedding_8B) df_qwen3 pd.DataFrame(qwen3_eval_results) hit_rate_qwen3 df_qwen3[is_hit].mean() print(fQwen3_Embedding_8B 命中率为: {hit_rate_qwen3}) # 评估 orgin-bge bge rlocal:D:\Test\embedding_ft\model\BAAI\bge-small-en-v1___5 bge_eval_results evaluate(dataset, bge) df_bge pd.DataFrame(bge_eval_results) hit_rate_bge df_bge[is_hit].mean() print(forgin-bge 命中率为: {hit_rate_bge}) # 评估 finetune-bge bge rlocal:D:\Test\embedding_ft\exp_finetune bge_eval_results evaluate(dataset, bge) df_bge pd.DataFrame(bge_eval_results) hit_rate_bge df_bge[is_hit].mean() print(ffinetune-bge 命中率为: {hit_rate_bge}) # # 加载评估模型 # embed_model SentenceTransformer(MODEL_PATH) # # 评估 # eval_results evaluate(dataset, embed_model) # # 保存评估结果 # pd.DataFrame(eval_results).to_csv(eval_results.csv, indexFalse)结果如下Generating embeddings: 100%|██████████████████████████████████████████| 55/55 [00:0600:00, 8.89it/s] 100%|█████████████████████████████████████████████████████████████████| 89/89 [00:2800:00, 3.16it/s] Qwen3_Embedding_8B 命中率为: 0.25842696629213485 Generating embeddings: 100%|██████████████████████████████████████████| 55/55 [00:0400:00, 13.36it/s] 100%|█████████████████████████████████████████████████████████████████| 89/89 [00:0000:00, 90.79it/s] orgin-bge 命中率为: 0.0898876404494382 Generating embeddings: 100%|██████████████████████████████████████████| 55/55 [00:0400:00, 11.92it/s] 100%|█████████████████████████████████████████████████████████████████| 89/89 [00:0100:00, 86.91it/s] finetune-bge 命中率为: 0.23595505617977527命中率明显提升了从 0.08提升到0.23 。评估指标说明命中率Hit Rate在Top-K检索结果中正确答案出现的比例。这是RAG系统最核心的评估指标直接反映了检索质量四、实际效果展示在实际项目中我们使用《中华人民共和国证券法》作为训练数据微调后的模型在专业领域的检索效果显著提升模型命中率提升幅度原始BGE-small-en-v1.58.9%-微调后BGE模型23.5%14.6%关键发现微调后的模型对专业术语的理解更加准确领域相关的查询检索效果明显提升在特定业务场景下效果提升可达20%以上评估器也可以sentence_transformers的信息检索评估器它提供了更全面的指标套件我们只能用兼容句子变换器的模型开源和我们微调的模型 不能用 OpenAI 嵌入模型进行比较。from llama_index.core import VectorStoreIndex from llama_index.core.schema import TextNode from llama_index.core.evaluation import EmbeddingQAFinetuneDataset from llama_index.embeddings.openai_like import OpenAILikeEmbedding from sentence_transformers.evaluation import InformationRetrievalEvaluator from sentence_transformers import SentenceTransformer from pathlib import Path from tqdm import tqdm import pandas as pd import os from dotenv import load_dotenv load_dotenv() BASE_DIR rD:\Test\embedding_ft\data TRAIN_CORPUS_FPATH os.path.join(BASE_DIR, train_corpus.json) VAL_CORPUS_FPATH os.path.join(BASE_DIR, val_corpus.json) 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) output_path results/ Path(output_path).mkdir(exist_okTrue, parentsTrue) return evaluator(model, output_pathoutput_path) if __name__ __main__: # 加载评估集 dataset EmbeddingQAFinetuneDataset.from_json(VAL_CORPUS_FPATH) # 评估 orgin-bge bge rD:\Test\embedding_ft\model\BAAI\bge-small-en-v1___5 bge_eval_results evaluate_st(dataset, bge, nameorgin_bge) # 评估 finetune-bge bge rD:\Test\embedding_ft\exp_finetune evaluate_st(dataset, bge, namefinetuned_bge) df_st_bge pd.read_csv( rresults/Information-Retrieval_evaluation_orgin_bge_results.csv ) df_st_finetuned pd.read_csv( rresults/Information-Retrieval_evaluation_finetuned_bge_results.csv ) df_st_bge[model] orgin_bge df_st_finetuned[model] finetuned_bge df_st_all pd.concat([df_st_bge, df_st_finetuned]) df_st_all df_st_all.set_index(model) print(df_st_all)五、技术要点总结5.1 为什么选择LlamaIndex开箱即用封装了完整的微调流程无需手动实现训练循环自动生成训练数据使用LLM自动生成问答对大大降低数据准备成本灵活的模型支持支持多种Embedding模型BGE、OpenAI等完善的评估工具内置评估函数方便对比不同模型效果5.2 微调的关键技巧数据质量训练数据的质量直接影响微调效果建议使用领域相关的文档验证集使用验证集可以监控训练过程防止过拟合基础模型选择选择与你的领域相近的基础模型效果会更好评估指标根据实际业务场景选择合适的评估指标命中率、NDCG等5.3 常见问题**Q: 需要多少训练数据**A: 通常几百到几千条问答对就足够了LlamaIndex的自动生成功能可以快速创建大量数据。**Q: 微调需要多长时间**A: 取决于数据量和模型大小通常几小时到一天不等。**Q: 微调后的模型可以用于生产环境吗**A: 可以微调后的模型可以像普通Embedding模型一样使用支持本地部署。六、总结通过本文的实战教程我们完成了✅ 从PDF文档自动生成训练数据✅ 使用LlamaIndex微调BGE模型✅ 评估并对比微调前后的效果核心价值无需人工标注LLM自动生成训练数据三步完成微调代码简洁易懂效果显著提升检索准确率提升14%下一步建议尝试不同的基础模型如bge-large、multilingual模型优化训练数据质量使用更专业的文档探索其他评估指标NDCG、MRR等将微调后的模型集成到生产环境AI时代未来的就业机会在哪里答案就藏在大模型的浪潮里。从ChatGPT、DeepSeek等日常工具到自然语言处理、计算机视觉、多模态等核心领域技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。掌握大模型技能就是把握高薪未来。那么普通人如何抓住大模型风口AI技术的普及对个人能力提出了新的要求在AI时代持续学习和适应新技术变得尤为重要。无论是企业还是个人都需要不断更新知识体系提升与AI协作的能力以适应不断变化的工作环境。因此这里给大家整理了一份《2025最新大模型全套学习资源》包括2025最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题等带你从零基础入门到精通快速掌握大模型技术由于篇幅有限有需要的小伙伴可以扫码获取1. 成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。这里我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。2. 大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF3. 大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。4. 大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。5. 大模型行业报告行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。6. 大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。为什么大家都在学AI大模型随着AI技术的发展企业对人才的需求从“单一技术”转向 “AI行业”双背景。企业对人才的需求从“单一技术”转向 “AI行业”双背景。金融AI、制造AI、医疗AI等跨界岗位薪资涨幅达30%-50%。同时很多人面临优化裁员近期科技巨头英特尔裁员2万人传统岗位不断缩减因此转行AI势在必行这些资料有用吗这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。大模型全套学习资料已整理打包有需要的小伙伴可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询