深入解析 Transformers 框架(四):Qwen2.5/GPT 分词流程与 BPE 分词算法技术细节详解

前面我们已经通过三篇文章,详细介绍了 Qwen2.5 大语言模型在 Transformers 框架中的技术细节,包括包和对象加载、模型初始化和分词器技术细节:

  1. 深入解析 Transformers 框架(一):包和对象加载中的设计巧思与实用技巧
  2. 深入解析 Transformers 框架(二):AutoModel 初始化及 Qwen2.5 模型加载全流程
  3. 深入解析 Transformers 框架(三):Qwen2.5 大模型的 AutoTokenizer 技术细节

在第 3 篇文章中,我们简要介绍了 Qwen2.5 使用的 Byte Pair Encoding (BPE) 分词算法,并用英文序列 “Hello World.” 举例说明了分词过程。然而,这只是 BPE 分词的一部分内容。今天,我们将继续深入探讨 Qwen2.5 的分词流程,重点介绍 Qwen2.5 如何处理中英文混合的文本序列,并解析 BPE 分词算法的具体实现。
分词配置文件

一、中英文分词示例与初步分析

为深入理解 Qwen2.5 的分词过程,我们以一段中英文混合的文本序列“Transformers分词:台风又双叒叕来了!”为例进行剖析。以下是相关的代码示例:

import os

from transformers import AutoTokenizer

# 初始化分词器,从本地文件加载模型
model_dir = os.path.join('D:', os.path.sep, 'ModelSpace', 'Qwen2.5', 'Qwen2.5-1.5B-Instruct')
tokenizer = AutoTokenizer.from_pretrained(
    model_dir,
    local_files_only=True
<think>我们正在比较两个Hugging Face模型:Qwen/Qwen2.5-VL-7B-Instruct 和 Qwen/Qwen2.5-VL-7B。 主要区别在于模型的任务类型和训练目标。 1. **Qwen/Qwen2.5-VL-7B**:这是一个基础的多模态(Vision-Language)模型,通常用于通用的视觉语言任务,如图像描述、视觉问答等。它没有特别针对指令跟随进行微调。 2. **Qwen/Qwen2.5-VL-7B-Instruct**:这个模型是在基础模型上进行了指令微调(Instruction Tuning)的版本,使其更适合对话式交互和遵循人类指令。它能够更好地理解并执行用户给出的复杂指令。 因此,选择哪个模型取决于你的应用场景: - 如果你需要构建一个对话系统(如聊天机器人),能够根据用户的指令完成多模态任务(例如:根据图片回答问题,或者根据指令生成图像描述),那么Instruct版本更合适。 - 如果你只需要一个基础的多模态模型,用于非交互式的任务(例如:批量处理图像生成描述),那么基础版本可能就足够了。 示例代码(使用Instruct版本进行对话): ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_id = "Qwen/Qwen2.5-VL-7B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", torch_dtype=torch.float16) # 假设我们有一张图片,将其处理为模型可接受的格式 # 这里用伪代码表示图像处理,实际中需要使用模型对应的图像处理器 image_path = "example.jpg" # 实际中,使用类似这样的方式处理图像:image = Image.open(image_path).convert("RGB") # 然后使用tokenizer的图像处理器处理:image_tensor = tokenizer.image_processor(image) # 构建对话 query = "这张图片里有什么?" messages = [ {"role": "user", "content": [ {"image": image_path}, # 实际中应使用处理后的图像tensor {"text": query} ]} ] text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) model_inputs = tokenizer([text], return_tensors="pt").to(model.device) # 生成回复 generated_ids = model.generate(**model_inputs, max_new_tokens=512) response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] print(response) ``` 注意:上述代码需要根据实际图像处理部分进行调整,因为VL模型需要同时处理图像和文本。 §§相关问题§§ 1. 如何为Qwen多模态模型准备图像输入? 2. 在Hugging Face中,如何正确使用`apply_chat_template`处理多模态输入? 3. 指令微调(Instruction Tuning)对多模态模型性能有哪些具体提升? 4. Qwen2.5-VL系列模型支持哪些视觉语言任务? 5. 在使用Qwen多模态模型时,如何处理大图像以避免内存溢出?</think>### Qwen/Qwen2.5-VL-7B-Instruct Qwen/Qwen2.5-VL-7B 的区别 这两个模型都是通义千问(Qwen)团队开发的多模态大模型,核心区别在于**功能定位和训练目标**: #### 核心差异对比表 | 特性 | Qwen2.5-VL-7B | Qwen2.5-VL-7B-Instruct | |---------------------|----------------------------|--------------------------------| | **核心定位** | 基础视觉语言模型 | 指令优化对话模型 | | **最佳应用场景** | 多模态特征提取/图像理解 | 人机交互/指令执行 | | **训练目标** | 跨模态对齐(图-文匹配) | 遵循复杂指令生成响应 | | **输入处理能力** | 接受图像+文本 | 支持图像+文本+复杂指令 | | **输出特性** | 生成图像描述/标签 | 执行操作建议/分步推理 | | **对话优化** | 基础对话能力 | 针对聊天场景深度优化 | | **典型任务** | VQA/图像标注/跨模态检索 | 多轮对话/任务执行/推理决策 | --- #### 详细说明: 1. **Qwen2.5-VL-7B (基础版)** - 专注于**视觉-语言基础能力** - 擅长: ```python # 图像描述生成 model.generate("描述这张图片", image=img_tensor) # 视觉问答 model.generate("图中人物的动作是什么?", image=img_tensor) ``` - 适用场景:图像理解API、跨模态检索系统 2. **Qwen2.5-VL-7B-Instruct (指令优化版)** - 强化**复杂指令理解和执行能力** - 核心优势: ```python # 多模态指令响应 model.generate( "分析这张产品图,列出改进建议并生成营销文案", image=product_img ) # 多步骤推理 model.generate( "根据流程图解释注册流程,并用Markdown输出步骤", image=flowchart_img ) ``` - 适用场景:AI助手、智能客服、自动化工作流 --- ### 选择建议: - 选 **基础版** 如果: 需要图像特征提取、跨模态检索等基础能力 - 选 **Instruct版** 如果: 需要: 1. 执行复杂用户指令 2. 多轮对话交互 3. 结合图像的推理决策 4. 结构化输出(JSON/Markdown等)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值