import torch from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM model_dir = r'D:\pyprojecgt\flaskProject\langchainstudy\modelscope\gpt2-chinese-cluecorpussmall' # 创建模型和分词器 model = AutoModelForCausalLM.from_pretrained(model_dir) tokenizer = AutoTokenizer.from_pretrained(model_dir) print(model)- 输入处理:文本首先通过分词器转化为数字索引(如"今天"→7911921)
- 向量化过程:数字索引通过embedding层转换为高维词向量
- 输出特性:模型输出的是概率分布而非具体文字,需要解码转换
- wte:词嵌入层(21128词汇表→768维向量)
- wpe:位置编码层(1024位置×768维)
- 维度意义:768维表示模型用768个特征描述每个词
- 类比说明:
- 二维空间:身高+头发长度(2个特征)
- 三维空间:增加肤色特征
- 768维:模型使用768个特征描述词语
- 扩展说明:更大模型可能使用1024维词向量
为什么不能用统一的编码
- 独特性:每个模型的词向量库都是独立训练的
- 原因分析:
- 模型功能特异性导致需要定制化词向量
- 目前不存在真正的通用模型(能处理所有任务的模型)
- 实践影响:不同模型需要使用配套的分词器和词表
主要现在造不出来通用模型
千问模型按任务与语料特性区分的原因
- 技术限制:
- 硬件瓶颈:当前设备不足以支撑真正的通用模型
- 性能权衡:单一模型难以在所有任务上都达到最优表现
- 设计哲学:
- 任务适配:根据编程、数学、聊天等不同任务需求定制模型
- 语料优化:各模型使用特定领域数据进行专项训练
- 实现差异:
- 词向量库:不同模型拥有独立的vocab编码和tokenizer
- embedding:词向量库根据领域语料进行针对性训练
- 参数量:从Qwen3-3B到235B参数,按需配置模型规模
输出层分析
- 基础组件:任何模型都包含词向量层和位置编码层,这是模型处理输入数据的第一阶段。
- 核心结构:真正的模型层次从ModuleList开始,该部分包含模型的主要计算模块。
- 层数要求:GPT2模型要求最低层数为12层,少于12层的模型将无法有效工作。
输出层维度为21128,与词汇表大小完全对应。
文本生成的本质:分类任务与概率输出
- 核心机制:文本生成模型的本质是一个分类任务,输出的是词汇表中每个词被选中的概率值。
- 输出形式:模型每次预测都会输出21128个概率值,对应词汇表中的21128个可能的词。
白 可以填什么 白色 白天
文本生成的逻辑:基于概率的填空题
- 工作原理:以"白"字为例,后续可能接"色"(概率0.4)、"天"(概率0.4)、"大"(概率0.1)、"下"(概率0.1)等词。
- 选择策略:模型会选择概率最高的词作为输出,如"白色"和"白天"都是合理选择,而"白大"则概率较低。
- 实现方式:通过不断选择当前概率最高的词进行拼接,完成整个文本的生成过程。
temperature参数作用:控制文本生成的随机性,值越低生成的文本越保守(倾向于选择概率较高的词),值越高生成的文本越多样(倾向于选择更多不同的词)。典型值为0.7。
- 随机性表现:每次生成内容不同是因为模型不是直接选择概率最大的词,而是通过temperature参数进行概率采样。
- 极端情况:当temperature=0时,模型会固定选择概率最大的词,导致提示词不变时输出完全相同。但当前API版本不允许temperature=0,需改用do_sample=False实现固定输出。
- top_k机制:限制模型每一步仅从概率最高的k个词中选择下一个词(如k=50表示只考虑前50个候选词),避免选择低概率词导致质量下降。
- 参数协同:temperature=0.7表示从前50个token中以0.7的随机性采样,既保证质量又避免重复。
- 重复问题:小模型即使使用参数控制仍可能出现"色色色..."这类重复,这是模型理解能力不足导致的固有缺陷。