attention、transform、bert 复习总结 1

详细内容见:

1 注意力机制:

  • 简单通俗描述计算过程:Q,K,V(query,key,value); 我们首先需要计算一下 Q 和 K的距离(相似度),可以使用向量点积,余弦相似性,或者 MLP,计算结果进行softmax处理,一是归一化处理,二是突出高权重K,然后根据最新处理的K 值与对应 V 值,加权求和即是 attention 值
  • 举例:
    • 1 我喜欢吃苹果,也喜欢吃香蕉,不喜欢吃榴莲”(3 个短语,对应 3 个信息单元)
    • 2 我最喜欢吃什么水果?” 这个问题(Q):
    • 3 生成 K 和 V:K1=“苹果”,V1=“喜欢吃”;K2=“香蕉”,V2=“喜欢吃”;K3=“榴莲”,V3=“不喜欢吃”;
    • 4 Q=“最喜欢的水果”,和 K 匹配:Q vs K1(苹果):相关(喜欢),权重 3;Q vs K2(香蕉):相关(喜欢),权重 3;Q vs K3(榴莲):无关(不喜欢),权重 0;
    • 5 加权合并 V:重点提取 “喜欢吃苹果” 和 “喜欢吃香蕉”,最终输出 “你最喜欢吃苹果和香蕉”。

2 自注意力机制:

  • 没有外来的 Q,自己这段信息分成多个部分,不同部分和其他部分充当 Q,K,V
    • 举例:
      • 1 “小明去超市买了牛奶,他喝完后觉得很好喝”(输入文本的 6 个词:小明、去、超市、买了、牛奶、他、喝完、觉得、很好喝)。
      • 2 写 “他” 这个词时,你得知道 “他” 指的是谁 —— 这就是自注意力机制在工作
      • 3 每个词都当 “提问者(Q)”:“他” 这个词会生成一个 Q(查询):“他指的是谁?”同时,每个词也都当 “被查者(K/V)”:所有词都会生成自己的 K(标签)和 V(内容):
        • 小明:K=“人名 - 小明”,V=“句子主语,去超市的人”;
        • 去:K=“动作 - 去”,V=“前往某地”;
        • 超市:K=“地点 - 超市”,V=“购物的地方”;
        • 他:K=“代词 - 他”,V=“指代前文的人”;
      • 4 Q "他"去匹配所有词的 K:Q(“我指的是谁?”) vs K(小明);Q vs K(去 / 超市 / 牛奶);Q vs K(他自己);
      • 5 加权提取 V 的信息:重点提取 “小明” 的 V,其他词的 V 几乎忽略;最终 “他” 就明确了:这就是自注意力通过 “内部查询” 找到的关联。

3 多头注意力机制:

  • 把自注意力机制复制多份(“多个头”),每个头专注于找文本中不同维度的关联(比如一个头找指代关系、一个头找动作和对象、一个头找因果关系),最后把所有头的结果合并,让理解更全面。
    • 举例:
      • 1 “小明在超市买了牛奶,他喝完后觉得很甜,于是又买了一箱”(核心关联有 3 个:“他” 指代 “小明”、“喝” 的对象是 “牛奶”、“又买” 的原因是 “很甜”)。
      • 2 所有头共享输入文本的 Q、K、V(但会各自做微小的 “参数调整”,让每个头的关注点不同)—— 相当于 3 个小组都拿到同一份报告, but 各自的分析侧重点预设不同。
      • 3 头 1(负责 “指代关系”):重点找 “谁指谁”:以 “他” 为 Q(“我指谁?”),匹配所有 K,最终锁定 “小明” 的 V,得出结论:“他 = 小明”;
        • 头 2(负责 “动作 - 对象关系”):重点找 “动作对应什么东西”以 “喝” 为 Q(“我针对的对象是什么?”),匹配所有 K,锁定 “牛奶” 的 V,得出结论:“喝的是牛奶”;
        • 头 3(负责 “因果关系”):重点找 “为什么做这个动作”以 “又买” 为 Q(“我发生的原因是什么?”),匹配所有 K,锁定 “很甜” 的 V,得出结论:“又买是因为牛奶甜”。
      • 4 把 3 个小组的结论合并:“小明在超市买了牛奶,小明喝完牛奶后觉得很甜,因为牛奶甜所以小明又买了一箱”—— 比单个头只找一种关联,理解更完整、更精准。
      • 5 注意:头的数量要能被维度整除
      • 6 分头是对每一个 Q,K,V 的向量化结果进行分头,也就是一段话分成几段儿

4 transform:

  • 左侧 Encode:理解输入内容(能看到全文),只执行一次,可以看成是专属"词典"
    • 1 输入数据(编码:见基础知识)+位置信息(PE编码用的正弦余弦距离),Sin| Cos(pos / 10000 * (2 i * d))
      • 奇数用Cos,偶数用 Sin,pos 是分词位置顺序,i 是分词向量的向量值顺序,d 是向量长度
      • 好处就是:可以应对未出现过更长的句子; 每个分词都有独一无二的位置信息
    • 2 多头注意力机制(多头就是自注意力并行):输入信息和位置信息输入后,通过 attention 机制进一步提取更多的信息
    • 3 Add 和 Norm:
      • Add:此时的 Add 是一个残差连接,即 输出 = 原始输入 + 多头(原始输入)
        • 1 防止过度加工,保留初始信息,防止多头处理效果差导致预训练越差;
        • 2 训练随着层数增加,调整参数的信息会越传递越弱,残差连接可以保持"信号"强度
        • Norm: 标准化处理(归一化属于标准化的一种),防止数值过大或者过小导致的梯度爆炸/消失; 标准化后数值小,可以加速收敛
        • 爆炸就是"信号"越来越大,防止消息就是越来越弱
    • 4 Feed Forword: 两层全连接层,一层有激活函数,一层没有,公式max(0,XW1+b1)W2+b2
      • 第一层:使用全连接层提高维度放大输入数据中的有效部分,然后使用Relu 函数 max() 进一步扩大有效和无效数据的差异
      • 第二层:再通过全连接层把维度降低,留下有效部分
  • 右侧 Dncode:生成输出(不能看到全文),以翻译任务为例
    • 1 输入数据的形式: 翻译的正确"答案"和同等大小的"答案贴纸"(Mask 矩阵)乘积作为输入,这是为了确保不能提前看到答案,一开始预测的时候只能看到初始信息,其他的都被掩盖了,然后预测出第一个信息后,预测第二个信息时候,就已经能获取到初始信息+预测信息 1 了,来预测信息 2,以此类推预测得到全部结果,注意,这个过程是在一个矩阵内一次生成的!
    • 2 谁来预测?不是预训练模型,预训练模型属于成品模型,此处是搭建好 Decode 框架(比如前馈,Add 和归一化等层)后,随机或者自定义参数,输入数据直接预测,根据不断训练得到最优参数
    • 3 第一个多头输入数据: 翻译答案的 Embedding 结果+位置信息Embedding 结果生成Q,K,V 矩阵
    • 4 第一个多头: QK 矩阵乘以"答案贴纸"(Mask 矩阵),再乘以 V,加权求和,再进行 software,多头结果拼接到一起就是最终的多头结果, 此时多头的作用,仅仅是获取了初步翻译结果词语之间的顺序,和中文答案没有任何对应关系,因为还没查"词典"
    • 5 第一个 Add 和 Norm: 与 encoder 那个一毛一样
    • 6 第二个多头输入数据:此时上面5 中的输入作为 Q(类似于"我要查字典"),encode输出作为 K,V(字典内索性和详细信息)
    • 7 第二个多头:同样的方法计算多头结果,此时已经获取到了词典信息,正确率会提升不少
    • 8 第二个Add 和 Norm: 与第一个处理方法一样
    • 9 Feed Forword处理是一致的
    • 10 第三个Add 和 Norm:同上
    • 线性函数:把docode生成的矩阵转化成每个词表中对应的"分数",搭建 “语义特征” 到 “具体词汇” 的桥梁 —— 把抽象的语义,映射到每个具体词的 “匹配度打分"
    • softmax: 做一个 “归一化转换”,让所有分数变成 0~1 之间的概率,且所有词的概率加起来等于 1;

5 bert:双向编码的预训练语言模型

在这里插入图片描述
在这里插入图片描述

  • 1 预训练阶段:用大量的无监督文本通过自监督(无需人工标注)训练的方式( MLP 和 NSP)训练
    • 输入:与 transform 类似,也是词Embedding+位置 Embedding 向量对应相加作为输入A,如果是句子对的情况还需要加上归属标记向量
    • 但是句子开头有标识符Embeding [CLS]和句子末尾的[SEP]作为输入 B,A 和 B 构成了输入,注意,是拼接不是对应相加, 其中位置向量不是正余弦位置了,和 CLS 和 SEP 一样,都是从初始随机变量随机训练"可学习"的
    • transform 因为是单向的所以在输入的时候使用了 mask 矩阵,而bert 是不需要的,但是两个模型都是有"答案"对比的,不然无法反向传播进行训练
  • MLM:先从输入中随机抽取 15%,准备进行处理,在这 15% 中,80% 概率直接 mask,10% 替换其他单词,10% 不动
    • 10% 概率直接替换成其他单词,这有助于模型学习理解上下文的重要性,而不仅仅是依赖于[MASK]标记
    • 10% 概率原封不动; 这有助于模型在微调阶段更好地处理未遮蔽的单词
  • NSP:语料库中随机抽取两个句子,判断是不是上下文;
    • 在BERT的后续版本中,Next Sentence Prediction(NSP)任务被废弃了。因为研究人员发现这个任务对下游任务的性能提升有限
    • 举例:
    每个token的输入 = 自身向量(可学习) + 位置向量(可学习) + 句子归属向量(固定0/1[CLS]  →  自身向量(初始随机:[0.2, -0.1, 0.3]+ 位置向量(第1位:[0.5, 0.02, -0.1]+ 句子归属向量(句1[0, 0, 0]= 最终输入向量:[0.7, -0.08, 0.2]  👉  不是固定值,训练中会变
    	
    	"我"   →  自身向量(初始随机:[0.8, 0.4, -0.2]+ 位置向量(第2位:[0.4, 0.05, -0.05]+ 句子归属向量(句1[0, 0, 0]= 最终输入向量:[1.2, 0.45, -0.25]
    	
    	...(中间"爱""吃""苹果"同理,都是各自向量相加,归属向量全为0...
    	
    	[SEP]  →  自身向量(初始随机:[-0.3, 0.6, 0.2]+ 位置向量(第6位:[0.1, 0.01, -0.15]+ 句子归属向量(句1[0, 0, 0]= 最终输入向量:[-0.2, 0.61, 0.05]
    	
    	"它"   →  自身向量(初始随机:[0.1, -0.3, 0.7]+ 位置向量(第7位:[0.08, 0.005, -0.18]+ 句子归属向量(句2[1, 1, 1])  👉  句2专属标记,和句1区分
    			= 最终输入向量:[1.18, -0.295, 0.52]
    	
    	...(中间"很""甜"同理,归属向量全为1...
    	
    	[SEP]  →  自身向量(初始随机:[-0.3, 0.6, 0.2]+ 位置向量(第10位:[0.02, 0, -0.2]+ 句子归属向量(句2[1, 1, 1]= 最终输入向量:[0.72, 1.6, 1.0]
    
  • 2 微调阶段:BERT首先使用预训练的参数初始化模型,所有参数都使用下游任务的标签数据进行微调,每个不同的下游任务都有单独的微调模型
    • bert 的主干就是多个 transform 的 encode 叠加,为了深入理解语义,但是具体任务使用还是需要在输出层(主干部分微调)进行微调处理
    • 微调任务包含:
      • 基于句子对的分类任务:核心共性:输入是 “句 1 + 句 2”,用 [CLS] 汇总全局语义,输出层做分类 / 回归,复用句对归属标记(0/1)
        • MNLI:自然语言推理) 输出层:线性层 + Softmax(三分类:蕴含 / 矛盾 / 中立);目的:判断句 2 是否能从句 1 推出。
        • QQP(Quora 问答匹配):输出层:线性层 + Softmax(二分类:两问题是否语义相同);目的:判断两个问题是否是同一问题的不同表述。
        • QNLI(问答自然语言推理)输出层:线性层 + Softmax(二分类:段落句子是否能回答问题);目的:筛选能回答问题的句子。
        • STS-B(语义文本相似度):输出层:线性层(回归任务,输出 0~5 的相似度分数);目的:量化两句话的语义相似程度。
        • MRPC(微软同义句匹配):输出层:线性层 + Softmax(二分类:是否同义);目的:判断两句话是否语义等价。
        • RTE(文本蕴含识别):输出层:线性层 + Softmax(二分类:蕴含 / 不蕴含);目的:简化版 MNLI,只判断是否蕴含。
        • SWAG(情境推理)输出层:线性层 + Softmax(四分类:从 4 个候选后半句选最连贯的);目的:判断哪个候选句能承接前半句的情境。
      • 基于单个句子的分类任务:核心共性:输入是单句,不用句对标记(全标 0),[CLS] 汇总语义,输出层分类。
        • SST-2(情感分类):输出层:线性层 + Softmax(二分类:正面 / 负面);目的:判断句子情感倾向。
        • ColA(语言可接受性判断):输出层:线性层 + Softmax(二分类:句子是否语法 / 语义通顺);目的:判断句子是否是自然语言(比如 “我吃饭” 可接受,“饭吃我” 不可接受)。
      • 问答任务:核心:输入是 “问题 + 原文段落”,输出层预测答案的 “起始 / 结束位置”,不做分类做定位。
        • SQuAD:输出层:两个独立线性层(一个预测答案起始位置,一个预测结束位置);
          • 目的:从原文中找到问题的答案片段(比如问题 “李白生于哪年?”,原文 “李白生于 701 年”,预测起始 = 3,结束 = 5)。
      • 命名实体识别NER:核心:输入是单句,输出层对 “每个词” 做分类(不是 [CLS] 汇总),识别实体类型。
        • CoNLL-2003 NER:输出层:给每个 token 配一个线性层 + Softmax(多分类:PER 人 / ORG 机构 / LOC 地点 / O 非实体);
          • 目的:给每个词打实体标签(比如 “李白(PER)生于 701 年,是唐代(ORG)诗人”)。
虽然给定引用中未直接提及BERT - BiGRU - Attention的相关内容,但可以结合已知的BERT、BiGRU等知识对其原理、使用方法和应用场景进行推测。 ### 原理 BERT(Bidirectional Encoder Representations from Transformers)是一种采用双向Transformer网络结构进行预训练的语言模型,能够学习到上下文的双向语义信息,捕捉文本中的深层语义特征 [^1]。 BiGRU(Bidirectional Gated Recurrent Unit)是双向的门控循环单元,它结合了前向和后向的GRU,能更好地捕捉序列数据中的前后文信息,对于处理具有时间序列特征的文本数据有很好的效果。 Attention机制则可以让模型在处理序列时,更加关注与当前任务相关的部分,动态地分配权重,突出重要信息。 BERT - BiGRU - Attention模型结合了这三者的优势。首先,BERT对输入文本进行编码,提取出丰富的语义特征表示。然后,将这些特征输入到BiGRU中,利用其双向的特性进一步捕捉文本的上下文依赖关系。最后,通过Attention机制对BiGRU的输出进行加权,聚焦于关键信息,从而得到更具代表性的特征用于后续的任务。 ### 使用方法 1. **环境搭建**:安装必要的深度学习框架,如PyTorch或TensorFlow。如果使用PyTorch,可以参考引用中安装pytorch - pretrained - bert的方法进行安装: ```python pip install pytorch-pretrained-bert ``` 2. **数据准备**:将输入数据处理成适合模型输入的格式,确定输入数据目录。同时,根据应用场景自定义数据预处理模块。 3. **模型加载**:加载预训练的BERT模型,对于中文文本可以使用'bert - base - chinese'。定义BiGRU和Attention层的参数,构建完整的BERT - BiGRU - Attention模型。 4. **模型训练**:设置训练参数,如最大文本长度、batch大小、Adam初始学习步长、最大epoch数等。使用训练数据对模型进行训练,并保存模型参数。 ```python # 示例代码框架 import torch from pytorch_pretrained_bert import BertModel, BertTokenizer # 加载BERT模型和分词器 bert_model = 'bert-base-chinese' tokenizer = BertTokenizer.from_pretrained(bert_model) bert = BertModel.from_pretrained(bert_model) # 定义BiGRU和Attention层 # 此处省略具体实现 # 定义模型 class BERTBiGRUAttentionModel(torch.nn.Module): def __init__(self): super(BERTBiGRUAttentionModel, self).__init__() # 初始化BERT、BiGRU和Attention层 pass def forward(self, input_ids): # 前向传播 pass model = BERTBiGRUAttentionModel() # 训练模型 # 此处省略训练代码 ``` 5. **模型评估与预测**:使用测试数据对训练好的模型进行评估,根据评估结果调整模型参数。在实际应用中,使用训练好的模型对新的文本数据进行预测。 ### 应用场景 1. **文本分类**:可以利用BERT - BiGRU - Attention模型对中文文本进行分类,如新闻分类、情感分类等。通过模型提取文本的语义特征和上下文信息,能够更准确地判断文本所属的类别 [^4]。 2. **命名实体识别**:在命名实体识别任务中,该模型可以捕捉文本中的语义和上下文依赖关系,结合Attention机制聚焦于关键实体信息,提高命名实体识别的准确率。类似于BERT - BiGRU - CRF在中文命名实体识别任务中的应用 [^1]。 3. **问答系统**:在问答系统中,模型可以对问题和答案文本进行编码和特征提取,更好地理解问题的意图和答案的相关性,从而提高问答系统的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矮人三等

秀儿,是你吗秀儿?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值