尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

4B小模型如何通过Castform后训练实现超越大模型的检索性能

4B小模型如何通过Castform后训练实现超越大模型的检索性能 在实际 AI 应用开发中尤其是在资源受限的边缘设备或追求极致性价比的场景下如何在有限的计算资源如 4B 参数规模下实现高质量的检索任务是一个极具挑战性的工程问题。传统的思路往往是在模型精度和推理成本之间做取舍但近期一些技术路径表明通过特定的后训练方法小模型也能在特定任务上展现出超越大模型的潜力。本文探讨的核心正是这样一种可能性一个经过Castform方法后训练的4B 参数开源模型在检索任务上的表现据称可以超越GPT-5.6 Sol同时将推理成本降低两个数量级。这并非空谈其背后涉及模型架构选择、高质量数据构建、高效的微调策略以及检索系统的工程化集成。对于开发者而言理解这套流程意味着能够以极低的硬件门槛例如在树莓派4B这类设备上部署高效的语义搜索、问答或文档召回系统。本文将从一个工程实践者的视角拆解实现这一目标可能涉及的关键步骤从理解为什么小模型能在特定任务上“越级挑战”开始到准备训练环境、构建或处理训练数据、实施 Castform 后训练最后完成检索系统的部署与性能验证。我们不仅会关注“怎么做”更会深入解释每个环节“为什么”要这样做以及在实际操作中可能遇到的“坑”和排查方法。1. 理解小模型后训练的潜力与 Castform 的核心思想在讨论具体操作之前必须厘清一个基本概念为什么一个参数量仅为 4B 的模型有可能在检索任务上挑战参数量可能高达数千亿甚至上万亿的 GPT-5.6 Sol 级别模型这并非魔法而是任务特性与模型优化方向高度对齐的结果。1.1 检索任务的特殊性表示能力重于生成能力检索Retrieval任务的核心目标是将查询Query和文档Document映射到同一个向量空间并通过计算向量相似度如余弦相似度来找到最相关的文档。这本质上是一个“表示学习”Representation Learning问题模型需要产出高质量的、富含语义信息的向量即 Embedding而不需要像生成式模型那样进行复杂的语言建模和序列生成。大模型的冗余像 GPT-5.6 Sol 这样的通用大语言模型LLM其能力是综合性的涵盖了理解、推理、创作、代码、数学等方方面面。当它被用于检索时我们通常只利用了其“理解并生成文本表示”这一小部分能力其余庞大的参数和计算资源在检索这个单一任务上存在巨大冗余。小模型的专注一个 4B 参数量的模型如果其架构设计如 BGE、E5 等系列本身就是为文本表示任务优化的并且经过海量、高质量的文本对数据Query-Doc Positive Pairs进行训练那么它完全可以在“文本表示”这个狭窄但关键的能力上达到甚至超越通用大模型。因为它所有的参数都专注于学习如何更好地压缩和表达文本语义。因此超越的关键不在于模型规模而在于“专业化”。Castform 后训练方法可以理解为一种高效的、针对检索任务的“专业化”改造流程。1.2 Castform 后训练一种针对性的模型调优策略“Castform”这个名字可能是一个特定项目或方法的代称灵感或许来源于某种“重塑”或“转型”的概念。在工程语境下我们可以将其理解为一种包含数据构建、损失函数设计和训练技巧的复合式后训练Post-training或微调Fine-tuning方案。其目标是将一个基础的开源文本表示模型例如BGE-M3、E5系列或Qwen2.5-Embedding的某个版本锤炼成在特定领域或通用检索任务上的“专家”。一个典型的 Castform 式后训练流程可能包含以下几个核心环节基础模型选择选择一个在通用语义表示上已有良好基础的开源 4B 级别模型作为起点。例如Qwen2.5-4B-Instruct虽然是指令模型但其经过指令调优的表示能力可能很强或者专门针对检索优化的bge-large-zh-v1.5约3亿参数此处4B是举例的某种扩展版本。高质量数据构建这是决定上限的关键。数据需要包含大量Query, Positive Document, Negative Document三元组。正例文档需要与查询高度相关负例则需要具有迷惑性难负例例如来自同一主题但内容不匹配的文档。数据来源可以是人工标注、使用大模型生成合成数据、或从点击日志、链接数据中挖掘。对比学习损失函数最常用的是 InfoNCE或称为交叉熵对比损失。其目标是拉近 Query 与其 Positive Document 的向量距离同时推远与所有 Negative Documents 的向量距离。公式的核心是使正例对的相似度得分远高于负例对。训练技巧与超参数包括使用大的批处理大小Batch Size以提供更多的负例in-batch negatives、合适的学习率调度如余弦退火、梯度裁剪、以及可能的知识蒸馏用更大模型的输出作为软标签来指导小模型等。通过这套组合拳模型能够学会区分极其细微的语义差异从而在检索任务上获得极高的精度。成本低的根本原因在于4B 模型的训练和推理所需的 GPU 显存、算力和能耗与千亿级模型相比有数量级的差异使得在消费级显卡甚至边缘设备上部署成为可能。2. 环境准备与基础模型选择在开始实践之前我们需要搭建一个可复现的训练和推理环境并选定一个合适的基础模型。2.1 硬件与软件环境要求为了处理 4B 参数模型的训练我们需要一定的 GPU 资源。但对于推理门槛则低得多。环境训练推荐推理最低说明GPUNVIDIA RTX 4090 (24GB) 或 A100 (40GB)NVIDIA GTX 1060 (6GB) 或树莓派4B (CPU)训练需要大显存存放模型、优化器状态和梯度。推理时可通过量化大幅降低需求。内存32 GB4 GB系统内存需充足用于数据加载和预处理。存储100 GB SSD10 GB用于存放模型权重、训练数据集和日志。Python3.9 - 3.113.9 - 3.11建议使用虚拟环境conda 或 venv。深度学习框架PyTorch 2.0PyTorch 2.0 或 ONNX RuntimePyTorch 是主流选择。推理可考虑转换为 ONNX 以提升效率。关键库transformers, datasets, accelerate, peft, bitsandbytes, sentence-transformerstransformers, sentence-transformers, fastapi (可选)accelerate用于分布式训练peft和bitsandbytes用于低精度训练/量化。环境搭建步骤# 1. 创建并激活 Python 虚拟环境 conda create -n castform_train python3.10 conda activate castform_train # 2. 安装 PyTorch (请根据 CUDA 版本到官网获取对应命令) # 例如对于 CUDA 11.8 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 3. 安装必要的库 pip install transformers datasets accelerate sentence-transformers # 用于高效训练和量化 pip install peft bitsandbytes trl scikit-learn # 用于 Web 服务如果需要 pip install fastapi uvicorn2.2 选择与下载基础开源模型我们不需要从零开始训练一个 4B 模型而是选择一个表现良好的预训练模型作为起点。考虑到检索任务和 4B 参数规模我们可以关注以下模型具体需以最新开源情况为准Qwen2.5-4B-Instruct通义千问的 4B 指令模型具备较强的理解和表示能力适合作为基座进行后续的表示学习调优。BGE-M3智源开源的领先检索模型虽然其bge-large-zh版本约 3 亿参数但可能存在更大的 4B 变体或可作为架构参考。E5-large-v2微软开源的文本表示模型在 MTEB 基准上表现优异同样有更大的版本可供选择。自定义架构也可以考虑使用 LLaMA 3.2 或 Gemma 2 的 4B 版本作为基座将其最后一层输出或平均池化后的隐藏状态作为句子向量然后进行检索优化训练。这里以使用Qwen2.5-4B-Instruct为例演示如何下载模型from transformers import AutoTokenizer, AutoModelForCausalLM import torch model_name Qwen/Qwen2.5-4B-Instruct # 下载模型和分词器 tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) # 以 bfloat16 精度加载节省显存 model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.bfloat16, device_mapauto, # 使用 accelerate 自动分配设备 trust_remote_codeTrue ) print(f模型 {model_name} 加载完成。)注意直接使用因果语言模型Causal LM进行检索任务需要调整。通常我们需要获取模型最后一个隐藏层的状态或所有隐藏层的平均作为句子向量并在此之上训练一个对比学习头Projection Head。或者更直接的方法是使用已经为表示学习设计好的AutoModelForSequenceClassification或sentence-transformers库的接口如果该模型提供了对应版本。一个更贴近检索任务的加载方式假设模型支持from sentence_transformers import SentenceTransformer # 如果存在对应的 sentence-transformers 版本 model SentenceTransformer(Qwen/Qwen2.5-4B-Instruct) # 或者使用 transformers 加载并手动添加池化层 from transformers import AutoModel model AutoModel.from_pretrained(model_name, torch_dtypetorch.bfloat16, device_mapauto) # 后续需要自己实现 mean_pooling 等操作来得到句子向量3. 构建高质量的检索训练数据数据是 Castform 后训练成功的基石。我们需要构建一个包含(query, positive_doc, negative_docs)形式的数据集。3.1 数据来源与构建方法公开检索数据集直接使用现有高质量数据集是最快的方式。MS MARCO大型的网页检索数据集包含真实的 Bing 搜索查询和人工标注的相关段落。Natural Questions (NQ)谷歌提出的开放域问答数据集问题来自真实搜索答案对应维基百科段落。HotpotQA多跳问答数据集需要聚合多个文档信息可用于训练复杂语义理解。中文数据集如T2-Ranking、DuReader、CMRC等。合成数据生成利用大语言模型如 GPT-4、Claude 3生成查询-文档对。可以给定一个种子文档让 LLM 生成可能的问题或者给定一个问题生成相关的答案段落。这种方法可以快速扩充领域特定数据。日志数据挖掘如果你有实际的搜索产品或问答系统用户点击日志query, clicked_doc是极佳的正例对。未点击的曝光文档可以作为负例但更好的负例需要采样“难负例”。3.2 数据预处理与难负例挖掘简单的随机负例效果有限。Castform 训练的关键之一是加入“难负例”Hard Negatives即那些与查询在主题上相关但并未直接回答问题的文档。这迫使模型学习更精细的语义区分。难负例挖掘方法BM25 负例使用传统检索器如 Elasticsearch BM25为每个查询召回 top K 个文档将其中未被标注为正例的文档作为难负例。交叉编码器筛选使用一个更强的、计算代价更高的模型如 cross-encoder对query, candidate_doc进行打分选择分数较高但不是最高的作为难负例。In-batch Negatives在训练时同一个批次Batch内的其他正例文档自然成为当前查询的负例。这是一种高效且强大的技术尤其当 Batch Size 很大时。下面是一个使用datasets库加载并处理 MS MARCO 数据集的示例框架from datasets import load_dataset import random # 加载 MS MARCO 段落检索数据集示例 dataset load_dataset(ms_marco, v2.1, splittrain) # 数据集通常包含query, positive_passage_ids, negative_passage_ids, passages 等字段 # 我们需要将其转换为 (query, positive_text, [negative_text1, negative_text2, ...]) 的格式 def process_example(example, passages_dict): query example[query] pos_pid example[positive_passage_ids][0] # 取第一个正例 pos_text passages_dict.get(pos_pid, ) # 获取难负例这里简化使用提供的负例 neg_pids example[negative_passage_ids][:3] # 取前3个负例 neg_texts [passages_dict.get(pid, ) for pid in neg_pids if pid in passages_dict] # 确保数据有效 if pos_text and len(neg_texts) 0: return {query: query, positive: pos_text, negatives: neg_texts} else: return None # 假设 passages_dict 是一个从 passage_id 到文本的映射 # processed_data [process_example(e, passages_dict) for e in dataset if process_example(e, passages_dict) is not None]4. 实施 Castform 后训练对比学习微调有了模型和数据接下来是核心的训练环节。我们将使用对比学习损失如 InfoNCE来微调模型。4.1 模型改造添加投影头原始的预训练模型输出的是每个 token 的表示或整个序列的聚合表示如 [CLS] token。为了优化对比学习我们通常在模型顶部添加一个小的“投影头”Projection Head通常是一个简单的多层感知机MLP将高维句子向量映射到一个更低维、更适用于余弦相似度计算的空间。import torch.nn as nn from transformers import AutoModel class CastformModelWithProjection(nn.Module): def __init__(self, model_name, projection_dim256): super().__init__() # 加载基础编码器 self.encoder AutoModel.from_pretrained(model_name) hidden_size self.encoder.config.hidden_size # 添加投影头 self.projection nn.Sequential( nn.Linear(hidden_size, hidden_size), nn.GELU(), nn.Linear(hidden_size, projection_dim), nn.LayerNorm(projection_dim) ) # 损失函数温度参数可学习 self.temperature nn.Parameter(torch.ones([]) * 0.07) def forward(self, input_ids, attention_mask): # 获取句子表示 outputs self.encoder(input_idsinput_ids, attention_maskattention_mask) # 使用 mean pooling 得到句子向量 token_embeddings outputs.last_hidden_state # [batch, seq_len, hidden] input_mask_expanded attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float() sentence_embeddings torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min1e-9) # 投影到对比空间 projected_embeddings self.projection(sentence_embeddings) # 归一化用于计算余弦相似度 projected_embeddings nn.functional.normalize(projected_embeddings, p2, dim1) return projected_embeddings4.2 实现对比损失函数InfoNCENT-Xent损失函数是标准选择。对于批次中的每个查询q_i其正例文档为d_i^批次内其他所有文档包括其他查询的正例都作为负例d_j^-。def contrastive_loss(query_emb, doc_emb, temperature): query_emb: [batch_size, dim] doc_emb: [batch_size, dim] (对应 positive doc) 使用 in-batch negatives # 计算相似度矩阵 [batch_size, batch_size] sim_matrix torch.matmul(query_emb, doc_emb.T) / temperature # [batch, batch] # 对角线是正例对 (q_i, d_i^) labels torch.arange(sim_matrix.size(0)).to(sim_matrix.device) # 计算交叉熵损失 loss nn.functional.cross_entropy(sim_matrix, labels) return loss4.3 训练循环与关键技巧训练时我们需要精心组织数据确保每个批次包含足够多的样本来提供丰富的 in-batch negatives。from torch.utils.data import DataLoader from transformers import AdamW, get_cosine_schedule_with_warmup # 假设我们有一个 dataset每个样本是 {query: q, positive: p, negatives: [n1, n2]} # 在 collate_fn 中我们将 query 和 positive 配对negatives 可以单独处理或作为 in-batch negs 的一部分。 def train_epoch(model, dataloader, optimizer, scheduler, device): model.train() total_loss 0 for batch in dataloader: queries batch[query] # 假设已 tokenize positives batch[positive] # 将查询和正例文档输入模型 q_emb model(input_idsqueries[input_ids].to(device), attention_maskqueries[attention_mask].to(device)) p_emb model(input_idspositives[input_ids].to(device), attention_maskpositives[attention_mask].to(device)) loss contrastive_loss(q_emb, p_emb, model.temperature) optimizer.zero_grad() loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm1.0) # 梯度裁剪 optimizer.step() scheduler.step() total_loss loss.item() return total_loss / len(dataloader) # 关键训练技巧 # 1. 大 Batch Size: 使用梯度累积gradient accumulation来模拟大批次。 # 2. 学习率: 使用较小的学习率如 1e-5 到 5e-5和 warmup。 # 3. 温度参数: 让模型学习温度参数有助于缩放相似度分布。 # 4. 混合精度训练: 使用 torch.cuda.amp 节省显存并加速。 # 5. 难负例挖掘: 定期如每 N 个 epoch用当前模型为训练数据挖掘新的难负例进行迭代训练。5. 模型评估、量化与部署训练完成后我们需要评估模型在检索任务上的性能并将其优化以便于低成本部署。5.1 检索任务评估指标评估通常在标准测试集如 BEIR、MTEB 的中文子集上进行。核心指标包括Recallk (Rk)在前 k 个检索结果中至少找到一个相关文档的查询比例。常用 R1, R5, R10, R100。Mean Reciprocal Rank (MRR)相关文档排名的倒数的平均值衡量第一个相关文档出现的位置。Normalized Discounted Cumulative Gain (nDCGk)考虑相关度分数的排序质量指标。使用sentence-transformers库可以方便地进行评估from sentence_transformers import evaluation from datasets import load_dataset # 加载测试集格式为 (query, relevant_docs) # queries: dict[qid] query_text # corpus: dict[doc_id] doc_text # relevant_docs: dict[qid] set([relevant_doc_id1, ...]) # 创建评估器 evaluator evaluation.InformationRetrievalEvaluator( queriesqueries, corpuscorpus, relevant_docsrelevant_docs, show_progress_barTrue, score_functions{cos_sim: evaluation.models.Util.cos_sim} ) # 评估模型 model SentenceTransformer(path_to_our_trained_model) results evaluator(model) print(f评估结果: {results})5.2 模型量化与加速为了在树莓派 4B 或低端 GPU 上运行 4B 模型量化是必不可少的步骤。量化将模型权重从高精度如 FP32转换为低精度如 INT8、INT4大幅减少内存占用和加速推理。使用 bitsandbytes 进行动态量化推理时from transformers import AutoModelForCausalLM, BitsAndBytesConfig import torch bnb_config BitsAndBytesConfig( load_in_4bitTrue, # 加载为 4-bit 量化 bnb_4bit_quant_typenf4, # 使用 NF4 量化类型 bnb_4bit_use_double_quantTrue, # 双重量化进一步压缩 bnb_4bit_compute_dtypetorch.bfloat16 # 计算时使用 bfloat16 ) model AutoModelForCausalLM.from_pretrained( path_to_our_trained_model, quantization_configbnb_config, device_mapauto, trust_remote_codeTrue ) # 注意量化可能会轻微影响精度需在评估集上验证。使用 ONNX Runtime 进行推理优化可以将 PyTorch 模型导出为 ONNX 格式并利用 ONNX Runtime 进行 CPU/GPU 上的优化推理尤其适合边缘部署。# 示例导出编码器部分为 ONNX import torch.onnx model.eval() dummy_input torch.randint(0, 1000, (1, 128)).to(device) # 示例输入 torch.onnx.export( model.encoder, # 只导出编码器 (dummy_input, torch.ones_like(dummy_input)), # (input_ids, attention_mask) castform_encoder.onnx, input_names[input_ids, attention_mask], output_names[last_hidden_state], dynamic_axes{input_ids: {0: batch, 1: seq}, ...}, opset_version14 )5.3 部署为检索服务最终我们需要将模型封装成一个可用的服务。这里使用 FastAPI 创建一个简单的 HTTP 向量化服务。from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List import torch from sentence_transformers import SentenceTransformer import numpy as np app FastAPI(titleCastform 4B Embedding Service) # 加载量化后的模型 model None def load_model(): global model # 这里加载量化模型或 ONNX 模型 model SentenceTransformer(path_to_quantized_model, devicecpu) # 或 cuda load_model() class EmbeddingRequest(BaseModel): texts: List[str] batch_size: int 32 class EmbeddingResponse(BaseModel): embeddings: List[List[float]] model: str app.post(/embed, response_modelEmbeddingResponse) async def get_embeddings(request: EmbeddingRequest): try: # 分批处理避免内存溢出 all_embeddings [] for i in range(0, len(request.texts), request.batch_size): batch request.texts[i:irequest.batch_size] with torch.no_grad(): batch_embeddings model.encode(batch, convert_to_tensorFalse, normalize_embeddingsTrue) all_embeddings.extend(batch_embeddings.tolist()) return EmbeddingResponse(embeddingsall_embeddings, modelcastform-4b) except Exception as e: raise HTTPException(status_code500, detailstr(e)) if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)部署后客户端可以通过调用/embed接口将文本转换为向量然后使用向量数据库如 Milvus, Qdrant, FAISS进行高效的相似度检索。6. 常见问题与排查路径在实际操作中你可能会遇到以下典型问题。问题现象可能原因检查与排查步骤解决方案训练 Loss 不下降或震荡学习率过高/过低数据噪声大Batch Size 太小难负例太简单或太硬。1. 绘制 Loss 曲线。2. 检查梯度范数是否爆炸或消失。3. 手动检查几个样本的相似度分数。1. 调整学习率加入 warmup。2. 清洗数据确保正例质量。3. 增大 Batch Size 或使用梯度累积。4. 调整难负例挖掘策略。模型检索效果差R1 低投影头维度不合适温度参数初始化不当训练数据与测试数据分布差异大模型容量不足或过拟合。1. 在验证集上评估。2. 检查训练集和测试集的查询/文档长度分布。3. 尝试不同的投影维度如 256, 512, 768。1. 调整投影头结构和维度。2. 让温度参数可学习。3. 增加数据增强或使用领域适配数据。4. 尝试更复杂的基础模型或增加模型容量如果可能。GPU 显存不足OOM模型太大Batch Size 太大序列长度太长。1. 使用nvidia-smi监控显存。2. 计算模型参数量和激活值内存。1. 启用梯度累积。2. 使用混合精度训练 (torch.cuda.amp)。3. 使用bitsandbytes进行 8-bit 或 4-bit 量化训练。4. 缩短文本最大长度。推理速度慢未使用量化未启用 GPU向量化未批处理使用了低效的相似度计算。1. 使用 profiling 工具如 PyTorch Profiler分析瓶颈。2. 检查是否在 CPU 上运行。1. 部署量化模型INT8/INT4。2. 确保使用 GPU 推理。3. 对输入文本进行批处理。4. 使用 FAISS 等库的 GPU 加速索引进行相似度搜索。服务接口返回错误输入文本编码问题模型未正确加载依赖库版本冲突。1. 查看服务日志。2. 单独测试模型加载和编码函数。3. 检查输入文本是否包含特殊字符或为空。1. 在 API 中添加输入验证和清理。2. 使用 try-catch 包装模型调用。3. 固定关键依赖库版本。7. 最佳实践与扩展方向要让一个 4B 模型在检索任务上稳定发挥并接近理论潜力需要关注以下工程细节。7.1 训练阶段最佳实践数据质量高于数量1000 个高质量、标注准确的三元组远胜于 100 万个噪声数据。在构建数据时务必进行人工抽样检查。迭代式难负例挖掘不要只使用初始的静态负例。每训练 1-2 个 epoch 后用当前模型为训练数据重新挖掘难负例能持续提升模型区分能力。监控嵌入空间定期在验证集上计算并可视化嵌入的分布如使用 t-SNE 或 UMAP确保不同类别的样本能较好分离且没有明显的模式崩溃。使用交叉验证将数据分成多份进行交叉验证训练和评估以获得更稳健的性能估计并防止过拟合到某个特定的测试集。7.2 推理与部署最佳实践标准化嵌入向量在存储和计算相似度前务必对生成的句子向量进行 L2 归一化。这样余弦相似度计算简化为点积且结果范围在 [-1, 1]。建立高效的检索流水线索引阶段将文档库中的所有文档预先通过模型向量化并构建向量索引如 HNSW 图索引。查询阶段将用户查询向量化在索引中进行近似最近邻搜索ANN Search。使用专业的向量数据库如 Milvus, Qdrant, Weaviate来管理这一流程它们内置了索引构建、增量更新和批量查询优化。实施缓存策略对于高频或重复的查询将其向量和检索结果缓存起来可以极大降低模型调用开销和延迟。设计降级方案当 4B 模型服务不可用时应有备选方案如基于关键词的 BM25 检索来保证服务的基本可用性。7.3 扩展方向多模态检索将 Castform 方法扩展到图像-文本、视频-文本的跨模态检索。可以使用 Vision Transformer (ViT) 与文本编码器进行联合训练。多语言检索使用多语言预训练模型如paraphrase-multilingual-MiniLM-L12-v2的更大版本作为基座构建支持多语言查询和文档的通用检索系统。指令微调让模型能够理解复杂的检索指令例如“找出与以下概念相似但表达不同的文档”或“优先考虑最近三年的资料”。这需要在训练数据中加入指令模板。与 RAG 系统集成将训练好的高效检索模型作为检索增强生成RAG系统的核心组件为大语言模型提供精准、低成本的上下文信息构建高性能的问答或内容生成应用。通过以上步骤我们系统地走完了一个 4B 开源模型经过 Castform 式后训练最终部署为高效检索服务的全流程。这条路径的核心思想是“专注”与“优化”让小型模型在特定任务上通过高质量数据和针对性训练发挥极致性能从而在成本与效果的权衡中找到一个极具竞争力的甜蜜点。在实际项目中你需要根据自身的数据和算力资源灵活调整数据构建策略、模型架构和训练参数并通过严格的评估来迭代优化最终实现低成本、高性能的检索能力。
返回列表