07阶段:大模型

发布时间:2026/7/9 8:33:24

07阶段:大模型 第一章 大模型通识1.1 大模型基础课程目标了解大模型发展的几个重要阶段知道什么是语言模型知道语言模型的评估指标知道国内外主流大模型的差异知道通用大语言模型的评估任务1.语言模型语言模型Language Model旨在建模词汇序列的生成概率通俗理解: 用来计算一个句子的概率的模型也就是判断一句话是否是人话的概率标准定义对于某个句子序列, 如, 语言模型就是计算该序列发生的概率, 即P(S).如果给定的词序列符合语用习惯, 则给出高概率, 否则给出低概率.例如计算$$P(中国的首都是北京) P(中国的首都是深圳)$$很明显中国的首都是北京要比中国的首都是深圳概率大很多那么中国的首都是北京这个句子就更符合人的习惯。根据概率的链式法则于是我们把上面的概率公式或者称为语言模型简单来说语言模型就是计算一个句子的概率大小概率越大越符合自然语言“越像人话”。通俗理解计算一个句子的概率的模型或者预测下一个“词”的模型都是语言模型。2.语言模型的发展历程语言模型发展本质上就是围绕如何计算上面的语言模型的概率公式先后出现了很多重要计算方法这里总结为四个阶段统计语言模型使用统计学方法建模语言模型神经语言模型使用简单浅层的神经网络来计算语言模型预训练语言模型使用深层神经网络加上大量非监督数据训练大语言模型使用更大更深的网络加上海量数据预训练加多种后训练的方式2.1 统计语言模型由人工设计特征并使用统计方法对固定长度的文本窗口序列进行建模分析这种建模方式也被称为N-gram语言模型。N-gram语言模型的特点就是依据前面N个词来预测下一个词N的不同取值对应了不同的语言模型计算方法。N常见的取值有1、2、3分别对应了1-gram、2-gram、3-gram。引入马尔科夫假设随意一个词出现的概率只与它前面出现的有限的一个或者几个词有关。1-gram 一元语言模型如果一个词的出现与它周围的词是独立的那么我们就称之为unigram也就是一元语言模型.计算相对简单只要统计每个词出现的概率就行。很明显这种一元语言模型假设过于简单词出现的概率往往是跟上下文词有关系的。例如到中午了我们去吃[X], [X]不可能是随机的可能性比较大的是“饭”、“面条”、“汉堡”而不是“篮球”、“衣服”这样的词2-gram 二元语言模型如果一个词的出现仅依赖于它前面出现的一个词那么我们就称之为bigram.二元语言模型计算也比较简单这种情况相对于1元语言模型来说比较符合实际情况仍然依赖上文内容太少了。3-gram三元语言模型如果一个词的出现仅依赖于它前面出现的两个词那么我们就称之为trigram.一般来说N元模型就是假设当前词的出现概率只与它前面的N-1个词有关而这些概率参数都是可以通过大规模语料库来计算比如三元概率其中就是统计预料中这几个词同时出现的次数。在实践中用的最多的就是bigram和trigram接下来以bigram语言模型为例理解其工作原理首先我们准备一个语料库简单理解让模型学习的数据集为了计算对应的二元模型的参数即我们要先计数即然后计数, 就能得到条件概率。计数结果如下的计数结果如下那么bigram语言模型针对上述语料的参数计算结果如何实现假如我想计算,计算过程如下显示其他参数计算过程类似有了上面的统计以后根据二元模型bigram就可以计算语言模型了下面分别计算下面的概率“我想去打篮球”的概率预测“我想去打[MASK]”预测下一个词的概率思考mask 篮球 或者 mask 晚饭原理是依次计算词表中所有的词选择概率最大的就是下一个词这里只演示计算两个词。可以看出P(我想去打篮球) P(我想去打晚饭)因此mask 篮球对比真实语境下也符合人类习惯。总结该方法存在两个缺陷参数空间过大概率的可能性太多无法估算也不一定有用数据稀疏严重许多词对的组合在语料库中都没有出现依据最大似然估计得到的概率为02.2 神经语言模型基于N-gram语言模型以上的问题以及随着神经网络技术的发展人们开始尝试使用神经网络来建模语言模型。2.3 预训练语言模型Transformer模型由一些编码器和解码器层组成见图学习复杂语义信息的能力强很多主流预训练模型在提取特征时都会选择Transformer结构并产生了一系列的基于Transformer的预训练模型包括GPT、BERT、T5等.这些模型能够从大量的通用文本数据中学习的词表示并将这些知识运用到下游任务中获得了较好的效果.预训练语言模型的使用方式预训练预训练指构建基础模型初始化参数先在一些比较基础的数据集、语料库上进行训练然后按照特定任务训练学习数据的普遍特征。这个阶段的特点是无监督数据训练。微调微调指在具体的下游任务中使用预训练好的模型进行迁移学习以获取更好的泛化效果。预训练语言模型的特点优点更强大的泛化能力丰富的语义表示可以有效防止过拟合。缺点计算资源需求大可解释性差等2.4 大语言模型随着对预训练语言模型研究的开展模型的参数量越来越大需要的无监督数据量也越多那么参数量与数据量应该存在某种关联关系研究人员发现通过规模扩展如增加模型参数规模或数据规模通常会带来下游任务的模型性能提升这种现象通常被称为“扩展法则”Scaling Law。即随着预训练模型参数的指数级提升其语言模型性能也会线性上升。2020年OpenAI发布了参数量高达1750亿的GPT-3首次展示了大语言模型的性能。相较于此前的参数量较小的预训练语言模型例如3.3亿参数的Bert-large和17亿参数的GPT-2GPT-3展现了在Few-shot语言任务能力上的飞跃并具备了预训练语言模型不具备的一些能力例如GPT-3 可以通过“上下文学习”In-Context Learning, ICL的方式来利用少样本数据解决下游任务而GPT-2 则不具备这一能力。这种大模型具有但小模型不具有的能力通常被称为“涌现能力”。为了区别这一能力上的差异学术界将这些大型预训练语言模型命名为“大语言模型”。大语言模型的特点优点具备了一定的智能非常好的捕捉到上下的语义信息并且具备强大的生成能力包括文字生成以及多模态内容的生成甚至具备了使用插件进行自动信息检索的能力。缺点参数量大算力要求高、生成部分有害的、有偏见的内容等等3.语言模型的评估相比于分类的评估方法语言模型评估就复杂多了。分类问题存在确定的答案而生成内容通常没有确定的答案需要结合需求来综合判断生成内容的质量在开放领域有通用的评测任务和数据集来评估模型的好坏但是在垂直领域内可能连评估标准都要自己制定。下面介绍几种生成类问题的评估指标分别是BLEUrougePPL3.1BLEUBLEUBLEU 双语评估分数是评估一种语言翻译成另一种语言的文本质量的指标。它将“质量”的好坏定义为与人类翻译结果的一致性程度。BLEU算法实际上就是在判断两个句子的相似程度. BLEU 的分数取值范围是 01分数越接近1说明翻译的质量越高。BLEU有许多变种根据n-gram可以划分成多种评价指标常见的评价指标有BLEU-1、BLEU-2、BLEU-3、BLEU-4四种其中n-gram指的是连续的单词个数为nBLEU-1衡量的是单词级别的准确性更高阶的BLEU可以衡量句子的流畅性.实践中通常是取N1~4然后对进行加权平均。下面举例说计算过程分别计算candidate句和reference句的N-grams模型然后统计其匹配的个数计算匹配度candidate和reference中匹配的 n−gram 的个数 / candidate中n−gram 的个数假设机器翻译的译文candidate和一个参考翻译reference如下candidate: it is a nice day today reference: today is a nice day使用1-gram进行匹配candidate: {it, is, a, nice, day, today} reference: {today, is, a, nice, day} 结果: 其中{today, is, a, nice, day}匹配所以匹配度为5/6使用2-gram进行匹配candidate: {it is, is a, a nice, nice day, day today} reference: {today is, is a, a nice, nice day} 结果: 其中{is a, a nice, nice day}匹配所以匹配度为3/5使用3-gram进行匹配candidate: {it is a, is a nice, a nice day, nice day today} reference: {today is a, is a nice, a nice day} 结果: 其中{is a nice, a nice day}匹配所以匹配度为2/4使用4-gram进行匹配candidate: {it is a nice, is a nice day, a nice day today} reference: {today is a nice, is a nice day} 结果: 其中{is a nice day}匹配所以匹配度为1/3根据计算出的BLEU1、BLEU2、BLEU3、BLEU4对应的概率值为$$p_1,p_2,p_3,p_4$$计算出最终的BLEU值为其中bp为长度惩罚系数$$w_i$$为对应BLEU值的权重4个BLUE值默认为0.25通过上面的例子分析可以发现匹配的个数越多BLEU值越大则说明候选句子更好. 但是也会出现下面的极端情况举例说明candidate: the the the the rference: The cat is standing on the ground 如果按照1-gram的方法进行匹配则匹配度为1显然是不合理的所以计算某个词的出现次数进行改进将计算某个词的出现次数的方法改为计算某个词在译文中出现的最小次数,如下所示的公式其中k表示在机器译文candidate中出现的第k个词语, $$c_k$$则代表在candidate中这个词语出现的次数而sk则代表在reference中这个词语出现的次数。通过上面修正以后按照1-gram的方法进行匹配BLUE1结果就是1/4了。python代码实现#!/usr/bin/env python # -*- coding: utf-8 -*- Author : web网页精选 Time : 2026/7/8 15:00 File : _01_bleu.py Function : import math # 第一步安装nltk的包--pip install nltk from nltk.translate.bleu_score import sentence_bleu def cumulative_bleu(reference, candidate): bleu_1_gram sentence_bleu(reference, candidate, weights(1, 0, 0, 0)) bleu_2_gram sentence_bleu(reference, candidate, weights(0, 1, 0, 0)) bleu_3_gram sentence_bleu(reference, candidate, weights(0, 0, 1, 0)) bleu_4_gram sentence_bleu(reference, candidate, weights(0, 0, 0, 1)) # print(bleu 1-gram: %f % bleu_1_gram) # print(bleu 2-gram: %f % bleu_2_gram) # print(bleu 3-gram: %f % bleu_3_gram) # print(bleu 4-gram: %f % bleu_4_gram) return bleu_1_gram, bleu_2_gram, bleu_3_gram, bleu_4_gram # 生成文本 generated_text it is a nice day today.split( ) # 参考文本列表 reference_texts [today is a nice day.split( )] # 计算 Bleu 指标 c_bleu cumulative_bleu(reference_texts, generated_text) # 打印结果 print(The Bleu score is:, c_bleu) # The Bleu score is: (0.8333333333333334, 0.7071067811865476, 0.63287829698514, 0.537284965911771) bleu sentence_bleu(reference_texts, generated_text, weights(0.25, 0.25, 0.25, 0.25)) print(接口返回结果, bleu) print(手动计算结果, math.exp(sum([0.25 * math.log(p) for p in c_bleu])) )输出结果为The Bleu score is: (0.8333333333333334, 0.6, 0.5, 0.3333333333333333) 接口返回结果 0.537284965911771 手动计算结果 0.5372849659117713.2 RougeROUGE指标是在机器翻译、自动摘要、问答生成等领域常见的评估指标。ROUGE通过将模型生成的摘要或者回答与参考答案一般是人工生成的进行比较计算得到对应的得分。ROUGE分为四种方法ROUGE-N, ROUGE-L, ROUGE-W, ROUGE-S.3.2.1 Rogue-NROUGE指标与BLEU指标非常类似均可用来衡量生成结果和标准结果的匹配程度不同的是ROUGE基于召回率BLEU更看重精确率。下面举例说计算过程这里只介绍ROUGE-N基本步骤Rouge-N实际上是将模型生成的结果和标准结果按N-gram拆分后计算匹配度candidate和reference中匹配的 n−gram 的个数 / reference中n−gram 的个数假设模型生成的文本candidate和一个参考文本reference如下candidate: it is a nice day today reference: today is a nice day使用ROUGE-1进行匹配candidate: {it, is, a, nice, day, today} reference: {today, is, a, nice, day} 结果: 其中{today, is, a, nice, day}匹配所以匹配度为5/51,这说明生成的内容完全覆盖了参考文本中的所有单词质量较高。同样的方法可以计算出rouge-2的结果。python代码实现#!/usr/bin/env python # -*- coding: utf-8 -*- Author : web网页精选 Time : 2026/7/8 15:00 File : _02_rouge.py Function : # 第一步安装rouge--pip install rouge from rouge import Rouge # 生成文本 generated_text it is a nice day today # 参考文本列表 reference_texts [today is a nice day] # 计算 ROUGE 指标 rouge Rouge() scores rouge.get_scores(generated_text, reference_texts[0]) # 打印结果 print(ROUGE-1 precision:, scores[0][rouge-1][p]) print(ROUGE-1 recall:, scores[0][rouge-1][r]) print(ROUGE-1 F1 score:, scores[0][rouge-1][f]) # ROUGE-1 precision: 0.8 # ROUGE-1 recall: 0.6666666666666666 # ROUGE-1 F1 score: 0.7272727223140496 print(全部结果, scores) # rouge-l 计算最终公共子序列输出为ROUGE-1 precision: 0.8333333333333334 ROUGE-1 recall: 1.0 ROUGE-1 F1 score: 0.9090909041322315 全部结果 [{rouge-1: {r: 1.0, p: 0.8333333333333334, f: 0.9090909041322315}, rouge-2: {r: 0.75, p: 0.6, f: 0.6666666617283951}, rouge-l: {r: 0.8, p: 0.6666666666666666, f: 0.7272727223140496}}]3.2.2 Rouge-L*ROUGE-LRecall-Oriented Understudy for Gisting Evaluation - Longest Common Subsequence是自然语言处理NLP中用于评估自动摘要、机器翻译等生成任务质量的指标之一。与基于 n-gram 重叠的 ROUGE-N如 ROUGE-1, ROUGE-2不同ROUGE-L 基于最长公共子序列Longest Common Subsequence, LCS。这意味着它不要求匹配的单词必须连续只要它们在句子中的相对顺序一致即可。这使得 ROUGE-L 能够更好地捕捉句子的结构相似性对词序变化具有一定的鲁棒性。子序列 (Subsequence)指从一个字符串中删除零个或多个字符不改变剩余字符的相对顺序后得到的新字符串。例如ace 是 abcde 的子序列ROUGE-L 的计算依赖于三个指标召回率Recall、精确率Precision和 F1 值F-measurem 参考句子 XX的长度单词数n 生成句子 YY的长度单词数LCS(X,Y) X 和 Y 的最长公共子序列的长度3.3 PPL困惑度1PPL用来度量一个概率分布或概率模型在预测样本的好坏程度PPL基本思想:给测试集的句子赋予较高概率值的语言模型较好当语言模型训练完之后测试集中的句子都是正常的句子那么训练好的模型就是在测试集上的概率越高越好.计算方式如下其中S是一个句子由公式可知句子概率越大语言模型越好困惑度越小python代码实现import math # 定义测试样本 sentences [ [I, have, a, pen], [He, has, a, book], [She, has, a, cat] ] # 定义语言模型,只写了部分词的概率 unigram { I: 1 / 100, have: 1 / 100, a: 3 / 100, pen: 5 / 100, He: 7 / 100, has: 21 / 100, book: 12 / 100, She: 17 / 100, cat: 2 / 100 } # 计算 PPL log_p 0 # 计算对数化概率 total_words 0 # 统计token 数 for sent in sentences: for word in sent: log_p math.log(unigram[word]) total_words 1 ppl math.exp(-1 / total_words * log_p) print(最终计算的 PPL 为, ppl)企业使用指标可以评估微调前后模型在特定的语料上的PPL。通用领域的模型qwen2.5-7B垂直领域的微调模型qwen2.5-7B-SFT在对应领域上微调以后PPL应该越小4.通用大模型的评估任务5.国内外大模型的差异https://www.superclueai.com/generalpageSuperCLUE中文大模型测评基准-AI评测榜单这里是中文大模型能力对比的权威平台,为您提供全面、客观的大模型性能评估和排行榜单。SuperCLUE是独立、领先的中文通用大模型综合性测评基准涵盖通用、文本、多模态、推理、Agent、AI应用及性能系列为产业与学术研究提供重要参考。openRouter使用排名https://openrouter.ai/rankings?viewweek1.2 大模型结构介绍1.大模型架构基础课程目标掌握transformer架构的原理理解多头注意力机制的原理理解掩码多头注意力机制的原理了解transformer位置编码的原理Transformer架构谷歌在2017年发表论文 《attention is all you need》中提出了transformer架构的模型核心是把注意力机制引入了NLP中。核心模块包括输入部分位置编码多头注意力机制掩码注意力机制交叉注意力机制层归一化前馈网络层输入编码在Transformer 模型中输入的词元序列($$\mathrm u [_1,_2,...,_]$$) 首先经过一个输入嵌入模块Input Embedding Module转化成词向量序列。具体来说为了捕获词汇本身的语义信息每个词元在输入嵌入模块中被映射成为一个可学习的、具有固定维度的词向量$$v_t \in \mathrm R^ {H}$$。由于Transformer 的编码器结构本身无法识别序列中元素的顺序因此位置编码Position Embedding, PE被引入来表示序列中的位置信息。给定一个词元$$u_t$$位置编码根据其在输入中的绝对位置分配一个固定长度的嵌入向量$$p_t \in \mathrm R^{H}$$。然后每个词元对应的词向量和位置向量将直接相加生成了最终的输入嵌入序列$$\mathrm X [x_1,...,x_]$$并且被传入到后续层中位置编码多头自注意力机制多头注意力机制有什么好处每个线性子空间分别计算注意力机制每个子空间可以关注不同的特征这样特征表能力更强。前馈网络层为了学习复杂的函数关系和特征Transformer 模型引入了一个前馈网络层Feed Forward Netwok, FFN对于每个位置的隐藏状态进行非线性变换和特征提取。具体来说给定输入Transformer 中的前馈神经网络由两个线性变换和一个非线性激活函数组成编码器在Transformer 模型中编码器Encoder的作用是将每个输入词元都编码成一个上下文语义相关的表示向量。其中残差连接Residual Connection将输入与该层的输出相加实现了信息在不同层的跳跃传递从而缓解梯度爆炸和消失的问题。而LayerNorm 则对数据进行重新放缩提升模型的训练稳定性。其中−1 和 分别是该Transformer 层的输入和输出′ 是该层中输入经过多头注意力模块后的中间表示LayerNorm 表示层归一化。解码器Transformer 架构中的解码器基于来自编码器编码后的最后一层的输出表示以及已经由模型生成的词元序列执行后续的序列生成任务。与编码器不同解码器需要引入掩码自注意力Masked Self-attention模块用来在计算注意力分数的时候掩盖当前位置之后的词以保证生成目标序列时不依赖于未来的信息。其中−1 和 分别是该Transformer 层的输入和输出′ 和′′ 是该层中输入经过掩码多头注意力MaskedMHA 和交叉多头注意力CrossMHA 模块后的中间表示LayerNorm 表示层归一化。然后将最后一层的输入 映射到词表的维度上大模型的架构主流的大模型架构基本都是基于transformer架构。大模型的架构主要有3种编码器解码器、编码器-解码器架构。大模型的发展图Encoder-only架构代表模型BERT。autoencoderAEBERT详细介绍Encoder-Decoder架构代表模型T5T5模型的详细介绍Decoder-only架构代表模型GPTAuto Regressive 自回归架构ARGPT详细介绍总结本节内容详细介绍了大模型的3种架构每种架构选择了一种代表模型详细介绍了模型的原理。只有深刻理解模型的原理在使用的时候才能得心应手。2.BERT详细介绍1.概述代表模型BERT。BERT是2018年10月由Google AI研究院提出的一种预训练模型.BERT的全称是 Bidirectional Encoder Representation from Transformers.BERT在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩: 全部两个衡量指标上全面超越人类, 并且在11种不同NLP测试中创出SOTA表现. 包括将GLUE基准推高至80.4% (绝对改进7.6%), MultiNLI准确度达到86.7% (绝对改进5.6%). 成为NLP发展史上的里程碑式的模型成就.2.架构总体架构: 如下图所示, 最左边的就是BERT的架构图, 可以很清楚的看到BERT采用了Transformer Encoder block进行连接, 因为是一个典型的双向编码模型.从上面的架构图中可以看到, 宏观上BERT分三个主要模块:最底层黄色标记的Embedding模块.中间层蓝色标记的Transformer模块.最上层绿色标记的预微调模块.2.1 输入部分2.2 多头注意力2.3 层归一化层归一化对输入数据缩放有效的控制方差提升训练的稳定性2.4 前馈网络层Feed Forward线性层激活层线性层。激活函数使用GELU。2.5 激活函数在前馈网络FFN使用 GELU作为激活函数注意RoBERTa / GPT-1/2 均采用该近似版本。Bert为什么选择GELU而不是RELU对比项ReLUGELU负数处理直接置 0概率性保留平滑性不光滑光滑梯度稳定性一般更好表达能力较弱更强面试一句话总结BERT 使用的激活函数是 GELU它是一种基于高斯分布的平滑激活函数相比 ReLU 在负值区间处理更柔和有助于提升模型表达能力和训练稳定性。3.预训练任务4.微调任务4.1 单句分类任务4.2 句子对分类任务4.3 序列标注任务序列标注任务4.4 基于原文的问答任务5. 源码分析使用句子分类模型加载权重查看模型的架构from transformers import BertTokenizer, BertForSequenceClassification model_path /Users/chan/projects/models/bert-base-chinese # 加载分词器 tokenizer BertTokenizer.from_pretrained(model_path) # 加载分类模型 model BertForSequenceClassification.from_pretrained(model_path, num_labels5) print(model)BertForSequenceClassification( (bert): BertModel( (embeddings): BertEmbeddings( (word_embeddings): Embedding(21128, 768, padding_idx0) # 词嵌入向量 (position_embeddings): Embedding(512, 768) # 位置编码向量 (token_type_embeddings): Embedding(2, 768) # 句子归属向量 (LayerNorm): LayerNorm((768,), eps1e-12, elementwise_affineTrue) (dropout): Dropout(p0.1, inplaceFalse) ) (encoder): BertEncoder( # 编码器 (layer): ModuleList( (0-11): 12 x BertLayer( (attention): BertAttention( # 注意力机制 (self): BertSdpaSelfAttention( (query): Linear(in_features768, out_features768, biasTrue) # 查询 (key): Linear(in_features768, out_features768, biasTrue) # 键 (value): Linear(in_features768, out_features768, biasTrue) # 值 (dropout): Dropout(p0.1, inplaceFalse) ) (output): BertSelfOutput( # 注意力机制输出 (dense): Linear(in_features768, out_features768, biasTrue) # 输出密集层 (LayerNorm): LayerNorm((768,), eps1e-12, elementwise_affineTrue) (dropout): Dropout(p0.1, inplaceFalse) ) ) (intermediate): BertIntermediate( # FFN前馈层 (dense): Linear(in_features768, out_features3072, biasTrue) # 第一次线性变化 (intermediate_act_fn): GELUActivation() # 激活函数 ) (output): BertOutput( (dense): Linear(in_features3072, out_features768, biasTrue) # 第二次线性变换 (LayerNorm): LayerNorm((768,), eps1e-12, elementwise_affineTrue) (dropout): Dropout(p0.1, inplaceFalse) ) ) ) ) (pooler): BertPooler( # 池化层 取[CLS]的token输出 (dense): Linear(in_features768, out_features768, biasTrue) (activation): Tanh() ) ) (dropout): Dropout(p0.1, inplaceFalse) (classifier): Linear(in_features768, out_features5, biasTrue) # 线性分类层 )6. 分类任务inputs hello world inputs tokenizer(inputs, return_tensorspt) output model(**inputs) ## 前向传播 logits output.logits # 未归一化的概率 # 取概率最大的标签就是分类标签 logits.argmax()7. MLM任务from transformers import BertForMaskedLM mlm BertForMaskedLM.from_pretrained(model_path) mlm_inputs [MASK]京是中国的首都 mlm_inputs tokenizer(mlm_inputs, return_tensorspt) output mlm(**mlm_inputs) logits output.logits index 1 # [MASK] 位置在1索引 logits[:, index, :] mlm_input_id logits[:, index, :].argmax() tokenizer.decode(mlm_input_id) # [MASK] 北8. 总结本节内容主要讲解bert的原理包括架构、预训练任务、微调任务、如何做分类任务如何完成掩码词预测任务。重点需要掌握bert的架构以及微调分类任务。3.T5模型的详细介绍4.GPT详细介绍5.序列标注任务1.3 深入理解注意力机制第二章 提示词工程第三章 基于大模型的RAGEduRAG扩展内容第四章 大模型智能体第五章 大模型微调

相关新闻