不同的大模型(如Qwen和DeepSeek)在Embedding和模型数据上确实存在差异。
Embedding 的差异
- 不同模型,不同Embedding:
Qwen和DeepSeek的Embedding(文本的向量表示)是通过各自独立的训练过程生成的,受模型架构、训练数据、目标函数等因素影响。即使输入相同的文本,两者的Embedding向量也会不同。- 维度差异:模型的Embedding维度(如1024维、2048维)可能不同。
- 语义空间差异:不同模型的向量空间未对齐,直接比较它们的Embedding没有意义(需额外校准)。
- 是否可共用?
不能直接共用。例如:- 如果用Qwen的Embedding训练下游任务(如分类器),换到DeepSeek的Embedding时需重新训练。
- 跨模型的Embedding检索(如向量数据库)需确保所有向量来自同一模型。
模型数据的隔离
- 参数不共享:
Qwen和DeepSeek的模型权重(参数)是独立训练的,结构可能也不同(如层数、注意力机制设计),因此模型内部数据无法直接共用。- 例如:不能将Qwen的权重加载到DeepSeek中运行。
- 微调数据的兼容性:
如果对模型做微调(Fine-tuning),适配Qwen的数据(如LoRA适配器)通常不能直接用于DeepSeek,除非两者结构完全相同(但这种情况罕见)。
如何跨模型协作?
若需结合不同模型的能力,可通过以下方式:
- 统一接口调用:
将Qwen和DeepSeek作为独立服务,通过API协调它们的输入/输出(如用Qwen生成文本,用DeepSeek做向量化)。 - 数据格式转换:
对Embedding进行跨模型对齐(如通过线性投影[1]),但需要额外训练校准层。 - 标准化工具库:
使用Sentence-Transformers等库统一Embedding模型(例如都切换为text-embedding-3-large),但会失去原模型特性。
引出大模型分词器AutoTokenizer
AutoTokenizer.from_pretrained(pretrained_model_name_or_path, trust_remote_code=True) 是 Hugging Face transformers 库中用于加载大模型(如 Qwen、DeepSeek、LLaMA 等)的分词器(Tokenizer)的核心方法。
- 核心作用
- 自动选择并加载匹配的分词器
根据 model_id(模型名称或本地路径),自动下载或加载对应的分词器,无需手动指定分词器类。例如:- model_id=“Qwen/Qwen-7B” → 自动加载 Qwen 的分词器。
- model_id=“deepseek-ai/deepseek-llm-7b” → 加载 DeepSeek 的分词器。
- 处理模型特定的分词逻辑
不同模型的预处理(如特殊标记、分词规则)可能不同(例如 GPT 的 BPE、BERT 的 WordPiece)。该方法能正确适配这些差异。
from transformers import AutoTokenizer
# 加载分词器(从Hub下载或读取本地缓存)
tokenizer = AutoTokenizer.from_pretrained(
r"E:\soft\model\qwen\Qwen\Qwen2___5-0___5B-Instruct", #Qwen的分词器目前和deepseek是不一样的。
trust_remote_code=True # 允许运行远程代码以支持自定义分词器
)
# 使用分词器处理文本
text = "你好,DeepSeek!"
inputs = tokenizer(text, return_tensors="pt") # 返回PyTorch张量
print(inputs)
# 输出示例:{'input_ids': tensor([[ 101, 2345, 102]]), 'attention_mask': tensor([[1, 1, 1]])}
分词器作用:后面微调,训练数据集使用。
# 5. 训练
def train():
dataset = load_data()
tokenized_data = preprocess_data(tokenizer, dataset)
# 数据校对器(关键修改)
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=False,
pad_to_multiple_of=8
)