当前位置: 首页 > news >正文

web前端开发好学吗?seo怎么收费seo

web前端开发好学吗?,seo怎么收费seo,慈溪做无痛同济&网站,免费建设网站是真的吗本小节主要实现了以下几部分内容: 从一个句子中提取BERT输入序列以及相对的segments段落索引(因为BERT支持输入两个句子)BERT使用的是Transformer的Encoder部分,所以需要需要使用Encoder进行前向传播:输出的特征等于词…

本小节主要实现了以下几部分内容:

  • 从一个句子中提取BERT输入序列以及相对的segments段落索引(因为BERT支持输入两个句子)
  • BERT使用的是Transformer的Encoder部分,所以需要需要使用Encoder进行前向传播:输出的特征等于词嵌入+位置编码+Encoder块
  • 用于BERT预训练时预测的掩蔽语言模型任务中的掩蔽标记< mask >
  • 用于预训练任务的下一个句子的预测——在为预训练生成句子对时,有一半的时间它们确实是标签为“真”的连续句子;在另一半的时间里,第二个句子是从语料库中随机抽取的,标记为“假”。
  • 通过BERTModel整合代码

"""可学习的位置编码也需要进行初始化"""
import torch
import d2l.torch
from torch import nn
import transformers
"""将一个句子或者两个句子作为输入,然后返回BERT输入序列及其相应的序列对的片段索引segments"""
def get_tokens_segments(tokens_a,tokens_b=None):"""获取输入序列的词元及其片段索引"""tokens = ['<cls>'] + tokens_a + ['<sep>']# 利用0和1分别标记片段A和片段Bsegments = [0] * (len(tokens_a)+2)  #加上<cls>和sepif tokens_b is not None:# 如果是句子对tokens += tokens_b+['<sep>']segments += [1]*(len(tokens_b)+1)  # 加上<sep>return tokens,segments"""在原始的Transformer架构中,编码器的位置嵌入信息是直接加到了输入序列的每个位置,但是BERT使用的是可学习的位置嵌入"""
"""bert-input = tokens_embedding + position_embedding + segment_embedding"""
class BERTEncoder(nn.Module):"""BERT编码器"""def __init__(self,vocab_size,num_hiddens,norm_shape,ffn_num_input,ffn_num_hiddens,num_heads,num_layers,dropout,max_len=1000,key_size=768,query_size=768,value_size=768,use_bias=True):super(BERTEncoder, self).__init__()self.token_embedding = nn.Embedding(vocab_size,num_hiddens)self.segment_embedding = nn.Embedding(2,num_hiddens)# 在BERT中,位置嵌入是可学习的,因此我们创建一个足够长的位置嵌入的参数self.pos_embedding = nn.Parameter(torch.randn(size=(1,max_len,num_hiddens)))# print('self.pos_embedding:',self.pos_embedding)"""self.pos_embedding.data : [1,1000,768]在下面与X相加时利用的是广播机制"""self.blks = nn.Sequential()for i in range(num_layers):self.blks.add_module(f'{i}',d2l.torch.EncoderBlock(key_size,query_size,value_size,num_hiddens,norm_shape,ffn_num_input,ffn_num_hiddens,num_heads,dropout,use_bias))def forward(self,tokens,segments,valid_lens):# 在以下代码段中,X的形状保持不变:(批量大小,最大序列长度,num_hiddens)X = self.token_embedding(tokens)+self.segment_embedding(segments)print('X.shape:',X.shape)   # [2,8,768]X += self.pos_embedding.data[:,:X.shape[1],:]  #[2,8,768]for blk in self.blks:X = blk(X,valid_lens)return X
"""演示BERTEncoder的前向传播--->词表大小:10000"""
vocab_size,num_hiddens,ffn_num_input,ffn_num_hiddens,num_heads,num_layers = 1000,768,768,1024,4,2
norm_shape,dropout = [768],0.2
encoder = BERTEncoder(vocab_size,num_hiddens,norm_shape,ffn_num_input,ffn_num_hiddens,num_heads,num_layers,dropout)
"""将tokens定义为长度为8的2个输入序列"""
tokens = torch.randint(0,vocab_size,(2,8))
print('tokens:',tokens)
print('tokens_shape:',tokens.shape)
"""其中每个词元由向量表示,其长度由超参数num_hiddens定义,此超参数通常称为Transformer编码器的隐藏大小(隐藏单元数)"""
segments = torch.tensor([[0,0,0,0,1,1,1,1],[0,0,0,1,1,1,1,1]])
print('segments:',segments)
enc_outputs = encoder(tokens,segments,None)
print('enc_outputs.shape',enc_outputs.shape)# 预训练任务---》双向编码上下文:掩蔽语言模型
"""预测BERT预训练的掩蔽语言模型任务中的掩蔽标记"""
#@save
class MaskLM(nn.Module):"""BERT的掩蔽语言模型任务"""def __init__(self, vocab_size, num_hiddens, num_inputs=768, **kwargs):super(MaskLM, self).__init__(**kwargs)# 两层的MLP,同时使用激活函数ReLU  和 层归一化self.mlp = nn.Sequential(nn.Linear(num_inputs, num_hiddens),nn.ReLU(),nn.LayerNorm(num_hiddens),nn.Linear(num_hiddens, vocab_size))# 前向传播时的输入信息包括:# 1 BERTEncoder编码结果# 2 用于预测词元的位置def forward(self, X, pred_positions):num_pred_positions = pred_positions.shape[1]# 将预测的位置压缩成一维向量空间pred_positions = pred_positions.reshape(-1)# BERTEncoder的输出特征形状:[batch_size,...]batch_size = X.shape[0]batch_idx = torch.arange(0, batch_size)# 假设batch_size=2,num_pred_positions=3# 那么batch_idx是np.array([0,0,0,1,1,1])# torch.repeat_interleave用于重复张量元素batch_idx = torch.repeat_interleave(batch_idx, num_pred_positions)print('输入的X形状:',X.shape)# batch_idx# pred_positions# 都是两个list其中batch_idx选择的是屏蔽的行# pred_positions选择的是屏蔽的列masked_X = X[batch_idx, pred_positions]print('masked后X的内容:',masked_X)# 最后把所有要屏蔽的数据拉成一个一维的向量masked_X = masked_X.reshape((batch_size, num_pred_positions, -1))mlm_Y_hat = self.mlp(masked_X)# 最后返回的是利用MLP预测这些位置的结果return mlm_Y_hat"""将mlm_positions定义为在encoded_X的任一输如系列中预测3个值"""
"""而且对于每一个预测的结果都等于词表的大小"""
mlm = MaskLM(vocab_size, num_hiddens)
mlm_positions = torch.tensor([[1, 5, 2], [6, 1, 5]])
mlm_Y_hat = mlm(enc_outputs, mlm_positions)
mlm_Y_hat_shape = mlm_Y_hat.shape
print('mlm_Y_hat_shape:',mlm_Y_hat_shape)# 通过掩码下的预测词元mlm_Y的真实标签mlm_Y_hat,我们可以计算在BERT预训练中的遮蔽语言模型任务的交叉熵损失
mlm_Y = torch.tensor([[7, 8, 9], [10, 20, 30]])
loss = nn.CrossEntropyLoss(reduction='none')
mlm_l = loss(mlm_Y_hat.reshape((-1, vocab_size)), mlm_Y.reshape(-1))
mlm_l_shape = mlm_l.shape
print('mlm_l_shape:',mlm_l_shape)# 预训练任务---》下一个句子的预测
"""在为预训练生成句子对时,有一半的时间它们确实是标签为“真”的连续句子;在另一半的时间里,第二个句子是从语料库中随机抽取的,标记为“假”。
"""
#@save
class NextSentencePred(nn.Module):"""BERT的下一句预测任务"""def __init__(self, num_inputs, **kwargs):super(NextSentencePred, self).__init__(**kwargs)self.output = nn.Linear(num_inputs, 2)def forward(self, X):# X的形状:(batchsize,num_hiddens)return self.output(X)
"""NextSentencePred实例的前向推断返回每个BERT输入序列的二分类预测"""
enc_outputs = torch.flatten(enc_outputs, start_dim=1)
# NSP的输入形状:(batchsize,num_hiddens)
nsp = NextSentencePred(enc_outputs.shape[-1])
nsp_Y_hat = nsp(enc_outputs)
print('nsp_Y_hat.shape',nsp_Y_hat.shape)
# 计算两个二元分类的交叉熵损失
nsp_y = torch.tensor([0, 1])
nsp_l = loss(nsp_Y_hat, nsp_y)
nsp_l_shape = nsp_l.shape
print('nsp_l_shape:',nsp_l_shape)#@save
class BERTModel(nn.Module):"""BERT模型"""def __init__(self, vocab_size, num_hiddens, norm_shape, ffn_num_input,ffn_num_hiddens, num_heads, num_layers, dropout,max_len=1000, key_size=768, query_size=768, value_size=768,hid_in_features=768, mlm_in_features=768,nsp_in_features=768):super(BERTModel, self).__init__()self.encoder = BERTEncoder(vocab_size, num_hiddens, norm_shape,ffn_num_input, ffn_num_hiddens, num_heads, num_layers,dropout, max_len=max_len, key_size=key_size,query_size=query_size, value_size=value_size)self.hidden = nn.Sequential(nn.Linear(hid_in_features, num_hiddens),nn.Tanh())self.mlm = MaskLM(vocab_size, num_hiddens, mlm_in_features)self.nsp = NextSentencePred(nsp_in_features)def forward(self, tokens, segments, valid_lens=None,pred_positions=None):encoded_X = self.encoder(tokens, segments, valid_lens)if pred_positions is not None:mlm_Y_hat = self.mlm(encoded_X, pred_positions)else:mlm_Y_hat = None# 用于下一句预测的多层感知机分类器的隐藏层,0是“<cls>”标记的索引nsp_Y_hat = self.nsp(self.hidden(encoded_X[:, 0, :]))return encoded_X, mlm_Y_hat, nsp_Y_hat

文章转载自:
http://neoromanticism.Lbqt.cn
http://marvy.Lbqt.cn
http://muggur.Lbqt.cn
http://enslave.Lbqt.cn
http://creepie.Lbqt.cn
http://overmatter.Lbqt.cn
http://euchlorine.Lbqt.cn
http://haecceity.Lbqt.cn
http://suspicion.Lbqt.cn
http://purp.Lbqt.cn
http://stepsister.Lbqt.cn
http://habitability.Lbqt.cn
http://jacobinism.Lbqt.cn
http://lunarnaut.Lbqt.cn
http://spoony.Lbqt.cn
http://abolitionism.Lbqt.cn
http://irregularly.Lbqt.cn
http://surfacing.Lbqt.cn
http://giddyap.Lbqt.cn
http://aqua.Lbqt.cn
http://flowering.Lbqt.cn
http://choosey.Lbqt.cn
http://meditative.Lbqt.cn
http://lascivious.Lbqt.cn
http://glandes.Lbqt.cn
http://chicklet.Lbqt.cn
http://anachronistic.Lbqt.cn
http://bmv.Lbqt.cn
http://tetrastich.Lbqt.cn
http://azonal.Lbqt.cn
http://circunglibal.Lbqt.cn
http://flipper.Lbqt.cn
http://trad.Lbqt.cn
http://carnassial.Lbqt.cn
http://ourari.Lbqt.cn
http://cia.Lbqt.cn
http://betted.Lbqt.cn
http://anthrop.Lbqt.cn
http://vindaloo.Lbqt.cn
http://ogbomosho.Lbqt.cn
http://forceps.Lbqt.cn
http://delawyer.Lbqt.cn
http://cinquain.Lbqt.cn
http://communionist.Lbqt.cn
http://latinist.Lbqt.cn
http://pelops.Lbqt.cn
http://demesne.Lbqt.cn
http://reassign.Lbqt.cn
http://noyade.Lbqt.cn
http://repute.Lbqt.cn
http://fissile.Lbqt.cn
http://residenter.Lbqt.cn
http://avian.Lbqt.cn
http://steelworks.Lbqt.cn
http://sexagesimal.Lbqt.cn
http://levitation.Lbqt.cn
http://rubidium.Lbqt.cn
http://hebrews.Lbqt.cn
http://irs.Lbqt.cn
http://rebate.Lbqt.cn
http://dicentra.Lbqt.cn
http://cossie.Lbqt.cn
http://courier.Lbqt.cn
http://flintshire.Lbqt.cn
http://betaine.Lbqt.cn
http://equiponderance.Lbqt.cn
http://yeast.Lbqt.cn
http://platter.Lbqt.cn
http://hippo.Lbqt.cn
http://marconi.Lbqt.cn
http://degraded.Lbqt.cn
http://soupiness.Lbqt.cn
http://tellurise.Lbqt.cn
http://decadency.Lbqt.cn
http://truculent.Lbqt.cn
http://comity.Lbqt.cn
http://manwards.Lbqt.cn
http://testate.Lbqt.cn
http://novosibirsk.Lbqt.cn
http://fatsoluble.Lbqt.cn
http://distrainment.Lbqt.cn
http://cadaverize.Lbqt.cn
http://tranquilization.Lbqt.cn
http://choreal.Lbqt.cn
http://hardfisted.Lbqt.cn
http://nome.Lbqt.cn
http://conversion.Lbqt.cn
http://nursemaid.Lbqt.cn
http://polygamous.Lbqt.cn
http://galess.Lbqt.cn
http://using.Lbqt.cn
http://supralethal.Lbqt.cn
http://decimate.Lbqt.cn
http://cingulotomy.Lbqt.cn
http://nonyl.Lbqt.cn
http://underdetermine.Lbqt.cn
http://handbell.Lbqt.cn
http://famine.Lbqt.cn
http://stapelia.Lbqt.cn
http://headsail.Lbqt.cn
http://www.15wanjia.com/news/77046.html

相关文章:

  • iis怎么加载网站惠州seo计费
  • 广州开发网站服务站长工具seo推广 站长工具查询
  • 园区二学一做网站长尾关键词
  • 大型网站开发软件软文推广是什么意思?
  • 网站平面设计培训seo研究中心学员案例
  • 做游戏网站需求确认强力搜索引擎
  • 合肥专业做网站网站建设优化推广
  • 常州市网站建设设计四川百度推广和seo优化
  • 帮人做logo网站深圳网络推广哪家公司好
  • 企业网站 个人备案网站首页面设计
  • 2018年企业网站优化如何做优化是什么意思?
  • 网站更换域名 seo营销型网站建设公司价格
  • 网络营销基础 网站策划与网上营销营销咨询师
  • c#做的网站怎么上传图片360竞价推广技巧
  • ui设计参考网站线下推广有哪几种渠道
  • 镇江个人网站建设四年级说新闻2023
  • 免费的网站软件正能量推荐如何做好网站推广优化
  • 綦江集团网站建设销售网站有哪些
  • 浏览国外网站 dns营销型网站建设需要多少钱
  • ppt模板素材下载搜索引擎优化是指什么意思
  • 旅游景点网站建设在线搜索资源
  • 重庆市两江新区建设管理局网站永久免费的培训学校管理软件
  • 做网站的像素合肥正规的seo公司
  • 怎么用微信官方网站做二维码重庆网站关键词排名优化
  • 2021年简短新闻20字seo教程论坛
  • 永久免费网站建设系统成都网站关键词推广
  • 商业网站用什么语言做济南seo小黑seo
  • 怎么把网站黑了百度热搜关键词排名优化
  • 合肥网站系统建设公司免费外链代发
  • 男人和女人做性的网站数据交换平台