分享Embedding 模型微调的实现

写在前面

\1. 当前比较主流的Embedding开源模型有哪些?
答:1. m3e(Moka Massive Mixed Embedding) 2. BAAI/bge-large-zh-v1.5。更多的开源模型评测榜单可见:
https://huggingface.co/spaces/mteb/leaderboard

\2. 模型的作用?
答:通过词,句子或者上下文的向量生成,从而来实现更高效的语义检索,语言理解的相关任务。

\3. 模型是如何捕获语义信息的?
答:在训练的过程中,模型学习用来反映语义相似性的方式将向量分配给单词或序列。简言之,通过分析数据中的词共现模式来实现。

\4. 为什么需要对Embedding 模型进行微调?
答:因为稀疏性的问题,在垂类数据下微调,可以得到更好的效果。

领域微调实现

如何从0-1的训练一个Embedding model 可以参考智源的论文:
https://arxiv.org/pdf/2309.07597.pdf,从中我们可以看到如果需要一个特定的领域向量模型,那么就需要这个行业的相关文本,和特定任务的文本对。例如某一个医学问题及其对应的内容的文本对。

这篇文章将从文本对的构建和微调上进行展开。

数据构建:

在通常情况下,我们可以比较容易的获取到一些垂类相关的无监督文本,比如:垂类书籍,论文等来源。难的是获取文本对,以往这些数据都是依赖于开源或者人工标注,但现在有了另一种解决方案,LLM生成文本对。

具体的做法是:
\1. 解析垂类数据,比如:pdf,docx等格式
\2. 将数据进行chunk 切分。
\3. 用LLM对每一个chunk 生成N个问题(或者生成简要的摘要),从而组合成文本对。

接下来是代码实现:

# coding=utf-8
import json

from llama_index import SimpleDirectoryReader
from llama_index.node_parser import SimpleNodeParser
from llama_index.schema import MetadataMode

def load_corpus(files):
    reader = SimpleDirectoryReader(input_files=files)    
    docs = reader.load_data()       
     
    parser = SimpleNodeParser.from_defaults()    
    nodes = parser.get_nodes_from_documents(docs, show_progress=True)    
    
    corpus = {node.node_id: node.get_content(metadata_mode=MetadataMode.NONE) for node in nodes}   
虽然给定引用中未直接提及Qwen Embedding模型微调的具体方法和步骤,但可参考类似Embedding模型微调的通用方法。以对openai的text - embedding - ada - 002微调为例,其步骤如下: ```python from llama_index.finetuning import EmbeddingAdapterFinetuneEngine, generate_qa_embedding_pairs from llama_index.embeddings.openai import OpenAIEmbedding # 步骤1:准备数据集 train_dataset = generate_qa_embedding_pairs(train_nodes) val_dataset = generate_qa_embedding_pairs(val_nodes) # 步骤2:创建在线embedding实例 embed_model = OpenAIEmbedding(model_name="text-embedding-ada-002", api_key="sk-...") # 步骤3:初始化微调引擎 finetune_engine = EmbeddingAdapterFinetuneEngine( train_dataset, embed_model, model_output_path="adapter_output", epochs=4, verbose=True, ) # 步骤4:开始微调 finetune_engine.finetune() ``` 对于Qwen Embedding模型微调可能也需要类似的步骤,如准备数据集、创建模型实例、初始化微调引擎和开始微调。不过,具体的代码实现需要根据Qwen Embedding模型的特点和相关库进行调整。 在微调Qwen3 Reranker模型时,还需要注意一些常见坑和掌握进阶技巧。常见坑包括负样本过易导致模型学不到区分能力,可生成hard negatives;过拟合导致dev指标高但线上不稳,可提前停止或加大权重衰减;自定义指令模板可提升1 - 5 %精度(尤其垂类检索)。进阶技巧有挑选相应语料对多语言/代码库精调;先精调Embedding做粗排,再精调Reranker做精排以端到端提升Top - k命中率;用大模型批量“判分”作为teacher signal训练小尺寸Reranker;周期性增量微调保持对知识库新增文档的敏感度 [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值