恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
7. 自然语言处理与bert
首页
资讯中心
/
7. 自然语言处理与bert
7. 自然语言处理与bert
发布时间:2026/10/14 13:23:52
一、字的表示常见的输入除了图片等还有序列对于图片它天生就是一堆数字RGB三通道都有自己的像素值那么我们怎么把文字序列输入到模型呢1.1 怎么用数据表示文字编码为向量我们最自然的想法直接用一个向量来代表一个字1.2 one-hot Encoding有两大不足一是太长二是无法体现关系毕竟汉字有两万一千多个字1.3 word Embedding其步骤就是将 one-hot 输入神经网络————》转为词向量然后我们再传入模型————》得到输出比如词性/情感因为人的编码能力是有限的需要让模型自己来学习字与字的关系1.3. 常见的输入1.4 常见的输出可能是每个词通过模型都得到一个输出比如词性识别也可能是所有词输出一个值比如情感分类输入一长句只用输出情感是正向还是负向输入输出长度不对应比如翻译任务把我爱中国翻译为I love China这篇文章先介绍前面两种二、RNN与LSTM2.1 上下文信息的意义序列中一个词的含义受前后词影响如果有一个词性分类任务我们让一个idx经过网络变成768维的向量再让向量经过一个linear(768,12)即可但是现在出现了一个问题有一些字同时体现为不同的词性因为输出参数是固定的所以你不可能一会输出名词一会输出动词这种时候必须结合上下文才能判断这就引出了循环神经网络2.2 RNN用一个传家宝来记录前文信息这个传家宝也就是记忆单元2.3 LSTMRNN的一个弊端就是不利于长序列比如下面这个问题的答案前后之间有太多无关信息了LSTM使用了几个门来处理每个门上都有锁所以就可以把无关信息都拦在门外但是它们都实在是太慢了它们都要一个一个传递结果三、 Self-attention3.1 划时代的技术自从这个论文出现之后模型的参数量急剧上升参数量的上升不可避免的会消耗更多算力所以Attention is All You Need也被戏称为Money is All You Need同时将一句话都输入 Self-attention 中它输出的这个特征是考虑了整个句子的3.2 什么是注意力我们对不同的事的重视程度是不一样的注意力数值就是我对于这件事的关注程度3.3 如何计算注意力我们要计算出b1这个特征对输入的关注程度如何计算呢如果只是简单的点乘两个向量那么则毫无意义我们可以构造两个可训练的参数矩阵q矩阵就像一个扫码器k矩阵就像一个二维码q与k的点乘作为注意力分数用我的扫码器结合你的二维码就得到了我对你的注意力分数依次扫过之后为了保证概率和为1所以要经过一个softmax那么按照流程之后就是按照值将原来的输入相加但是这里这个值未必应该是原来的输入设计为可训练的参数会更加灵活所以还引入了v矩阵代表value我们用注意力分数去乘value再相加得到 b1要注意一个点经过 self-attention 层不会导致维度变化因为 q,k,v 都是方阵不会改变输出后的维度q,k 的点乘v 与注意力分数相乘分数的相加都不会改变维度3.4 这样的好处这样操作我们就可以同时进行特征提取因为不需要等待上一个的完成完全并行所以会比RNN和LSTM快得多3.5 公式的推导先是各个输入与 q,k,v 矩阵相乘得到q1k1v1 q2k2 v2 等接下来我们来找注意力q1k1a1,1以此类推可以得到a1,1 a1,2 a1,3 a1,4再推广到 q2q3 q4那么如下图可以得到整个注意力矩阵就计算完成了A的大小就是字的个数之后再与v相结合(ps:这里我认为v应该竖着排列才对啊)这样就得到了需要输出的特征省略内部细节再来看需要学习的参数也就是qkv三个矩阵3.6 多头自注意力机制其实就是把维度分成几块来处理让不同的维度去关注不同的特征3.7 实战中的处理和全连接层一样既然经过你不改变维度那么我就可以多加几层现在模型这么大的原因就是1.可以加很多层2.维度还可以更多3.8 位置信息模型中每个输入都是完全对称的之所以这个字在哪里完全不会影响特征是因为它是直接考虑了整句话的信息这时候就必须加入位置编码但是如何加呢注意编码后的词向量和编码后位置信息直接相加one-hot 的位置信息经过linear变成768维度和词向量直接相加psRNN不需要位置编码因为它本来就是从前往后的通过注意力机制我可以直接关注到赛罕塔拉这就是这个机制的伟大之处3.9 关于transformer流程图input Embedding就是词编码那个小球代表位置编码Multi-Head Attention代表多头自注意层Add代表残差连接Norm代表归一化所谓的feed forword说白了就是两层全连接四、BERT4.1 bert的由来transformer模型的Encoder部分演化而来BERT是什么呢它就是一个特征提取器先用大规模的文字信息对于bert做一个无监督的训练作为预训练之后我们直接拿过来用作为微调BERT的训练方式经典用M代替字4.2 预训练的任务具体来说就是掩码预测训练还有判断两个句子是否连贯4.3 BERT的结构中间的 bert layers 就是 transformer 的 encoder4.4 embedding层比起transformer多了一个segment embedding加入这个就是为了判断是否下一句这个任务CLSclassfication的简写可以看见整个句子特征类似链表的一个头节点SEP逗号或者句号4.5 pooler如果分类器只需要一个输入呢1.只输出CLS 最常用2.平均池化3.最大池化4.其他五、总结回顾