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

课件模板下载免费百度seo和sem

课件模板下载免费,百度seo和sem,有网站怎么做seo推广,中国建设银网站👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——针对序列级和词元级应用微调BERT 📚订阅专栏:机器学习&&深度学习 希望文…

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er
🌌上期文章:机器学习&&深度学习——针对序列级和词元级应用微调BERT
📚订阅专栏:机器学习&&深度学习
希望文章对你们有所帮助

NLP实战(自然语言推断——微调BERT实现)

  • 引入
  • 加载预训练的BERT
  • 微调BERT的数据集
  • 微调BERT
  • 小结

引入

在之前,已经为SNLI数据集上的自然语言推断任务设计了一个基于注意力的结构,文章链接:
机器学习&&深度学习——NLP实战(自然语言推断——注意力机制实现)
现在,我们通过微调BERT来重新审视这项任务。正如上一节讨论的那样,自然语言推断是一个序列级别的文本对分类问题,而微调BERT只需要一个额外的基于多层感知机的架构,如下图所示:
在这里插入图片描述
这边将下载一个已经预训练好的小版本BERT,然后对其进行微调,一遍在SNLI数据集上进行自然语言推断。

import json
import multiprocessing
import os
import torch
from torch import nn
from d2l import torch as d2l

加载预训练的BERT

原始的BERT模型有数以亿计的参数。在下面,我们提供了两个版本的预训练BERT:“bert.base”与原始BERT基础模型一样大,需要大量计算资源才能进行微调,而“bert.small”是一个小版本,以便于演示。

d2l.DATA_HUB['bert.base'] = (d2l.DATA_URL + 'bert.base.torch.zip','225d66f04cae318b841a13d32af3acc165f253ac')
d2l.DATA_HUB['bert.small'] = (d2l.DATA_URL + 'bert.small.torch.zip','c72329e68a732bef0452e4b96a1c341c8910f81f')

两个预训练好的BERT模型都包含一个定义词表的“vocab.json”文件和一个预训练参数的“pretrained.params”文件。我们实现了以下load_pretrained_model函数来加载预先训练好的BERT参数。

def load_pretrained_model(pretrained_model, num_hiddens, ffn_num_hiddens,num_heads, num_layers, dropout, max_len, devices):data_dir = d2l.download_extract(pretrained_model)# 定义空词表以加载预定义词表vocab = d2l.Vocab()vocab.idx_to_token = json.load(open(os.path.join(data_dir,'vocab.json')))vocab.token_to_idx = {token: idx for idx, token in enumerate(vocab.idx_to_token)}bert = d2l.BERTModel(len(vocab), num_hiddens, norm_shape=[256],ffn_num_input=256, ffn_num_hiddens=ffn_num_hiddens,num_heads=4, num_layers=2, dropout=0.2,max_len=max_len, key_size=256, query_size=256,value_size=256, hid_in_features=256,mlm_in_features=256, nsp_in_features=256)# 加载预训练BERT参数bert.load_state_dict(torch.load(os.path.join(data_dir,'pretrained.params')))return bert, vocab

为了便于在大多数机器上演示,我们将在本节中加载和微调经过预训练BERT的小版本(“bert.small”)。在练习中,我们将展示如何微调大得多的“bert.base”以显著提高测试精度。

devices = d2l.try_all_gpus()
bert, vocab = load_pretrained_model('bert.small', num_hiddens=256, ffn_num_hiddens=512, num_heads=4,num_layers=2, dropout=0.1, max_len=512, devices=devices)

微调BERT的数据集

对于SNLI数据集的下游任务自然语言推断,我们定义了一个定制的数据集类SNLIBERTDataset。在每个样本中,前提和假设形成一对文本序列,并被打包成一个BERT输入序列。片段索引用于区分BERT输入序列中的前提和假设。利用预定义的BERT输入序列的最大长度(max_len),持续移除输入文本对中较长文本的最后一个标记,直到满足max_len。为了加速生成用于微调BERT的SNLI数据集,我们使用4个工作进程并行生成训练或测试样本。

class SNLIBERTDataset(torch.utils.data.Dataset):def __init__(self, dataset, max_len, vocab=None):all_premise_hypothesis_tokens = [[p_tokens, h_tokens] for p_tokens, h_tokens in zip(*[d2l.tokenize([s.lower() for s in sentences])for sentences in dataset[:2]])]self.labels = torch.tensor(dataset[2])self.vocab = vocabself.max_len = max_len(self.all_token_ids, self.all_segments,self.valid_lens) = self._preprocess(all_premise_hypothesis_tokens)print('read ' + str(len(self.all_token_ids)) + ' examples')def _preprocess(self, all_premise_hypothesis_tokens):pool = multiprocessing.Pool(4)  # 使用4个进程out = pool.map(self._mp_worker, all_premise_hypothesis_tokens)all_token_ids = [token_ids for token_ids, segments, valid_len in out]all_segments = [segments for token_ids, segments, valid_len in out]valid_lens = [valid_len for token_ids, segments, valid_len in out]return (torch.tensor(all_token_ids, dtype=torch.long),torch.tensor(all_segments, dtype=torch.long),torch.tensor(valid_lens))def _mp_worker(self, premise_hypothesis_tokens):p_tokens, h_tokens = premise_hypothesis_tokensself._truncate_pair_of_tokens(p_tokens, h_tokens)tokens, segments = d2l.get_tokens_and_segments(p_tokens, h_tokens)token_ids = self.vocab[tokens] + [self.vocab['<pad>']] \* (self.max_len - len(tokens))segments = segments + [0] * (self.max_len - len(segments))valid_len = len(tokens)return token_ids, segments, valid_lendef _truncate_pair_of_tokens(self, p_tokens, h_tokens):# 为BERT输入中的'<CLS>'、'<SEP>'和'<SEP>'词元保留位置while len(p_tokens) + len(h_tokens) > self.max_len - 3:if len(p_tokens) > len(h_tokens):p_tokens.pop()else:h_tokens.pop()def __getitem__(self, idx):return (self.all_token_ids[idx], self.all_segments[idx],self.valid_lens[idx]), self.labels[idx]def __len__(self):return len(self.all_token_ids)

读取完SNLI数据集后,我们通过实例化SNLIBERTDataset类来生成训练和测试样本。这些样本将在自然语言推断的训练和测试期间进行小批量读取。

# 如果出现显存不足错误,请减少“batch_size”。在原始的BERT模型中,max_len=512
batch_size, max_len, num_workers = 512, 128, d2l.get_dataloader_workers()
data_dir = "D:\Python\pytorch\data\snli_1.0\snli_1.0"
train_set = SNLIBERTDataset(d2l.read_snli(data_dir, True), max_len, vocab)
test_set = SNLIBERTDataset(d2l.read_snli(data_dir, False), max_len, vocab)
train_iter = torch.utils.data.DataLoader(train_set, batch_size, shuffle=True,num_workers=num_workers)
test_iter = torch.utils.data.DataLoader(test_set, batch_size,num_workers=num_workers)

微调BERT

用于自然语言推断的微调BERT只需要一个额外的多层感知机,该多层感知机由两个全连接层组成(下面代码的self.hidden和self.output)。这个多层感知机将特殊的“<cls>”词元的BERT表示进行了转换,该词元同时编码前提和假设的信息为自然语言推断的三个输出:蕴涵、矛盾和中性。

class BERTClassifier(nn.Module):def __init__(self, bert):super(BERTClassifier, self).__init__()self.encoder = bert.encoderself.hidden = bert.hiddenself.output = nn.Linear(256, 3)def forward(self, inputs):tokens_X, segments_X, valid_lens_x = inputsencoded_X = self.encoder(tokens_X, segments_X, valid_lens_x)return self.output(self.hidden(encoded_X[:, 0, :]))

在下文中,预训练的BERT模型bert被送到用于下游应用的BERTClassifier实例net中。在BERT微调的常见实现中,只有额外的多层感知机(net.output)的输出层的参数将从零开始学习。预训练BERT编码器(net.encoder)和额外的多层感知机的隐藏层(net.hidden)的所有参数都将进行微调。

net = BERTClassifier(bert)

回想一下,在之前的文章:
机器学习&&深度学习——BERT(来自transformer的双向编码器表示)
其中,我们的MaskLM类和NextSentencePred类在其使用的多层感知机中都有一些参数。这些参数是预训练BERT模型bert中参数的一部分,因此是net中参数的一部分。然而,这些参数仅用于计算预训练过程中的遮蔽语言模型损失和下一句预测损失。这两个损失函数与微调下游应用无关,因此当BERT微调时,MaskLM和NextSentencePred中采用的多层感知机的参数不会更新(陈旧的,staled)。
为了允许具有陈旧梯度的参数,标志ignore_stale_grad=True在step函数d2l.train_batch_ch13中被设置。我们通过该函数使用SNLI的训练集(train_iter)和测试集(test_iter)对net模型进行训练和评估。

lr, num_epochs = 1e-4, 5
trainer = torch.optim.Adam(net.parameters(), lr=lr)
loss = nn.CrossEntropyLoss(reduction='none')
d2l.train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs,devices)

运行结果:

loss 0.520, train acc 0.790, test acc 0.779
446.5 examples/sec on [device(type=‘cpu’)]

运行图片:
在这里插入图片描述
如果计算资源允许,比如咱们去autodl平台上租借GPU以后,可以微调一个更大的预训练BERT模型,修改load_pretrained_model函数中的参数设置:将“bert.small”替换为“bert.base”,将num_hiddens=256、ffn_num_hiddens=512、num_heads=4和num_layers=2的值分别增加到768、3072、12和12。这样的测试精度应该是会高于0.86的。

小结

1、我们可以针对下游应用对预训练的BERT模型进行微调,例如在SNLI数据集上进行自然语言推断。
2、在微调过程中,BERT模型成为下游应用模型的一部分。仅与训练前损失相关的参数在微调期间不会更新。


文章转载自:
http://dinncomuriatic.knnc.cn
http://dinncobrown.knnc.cn
http://dinncomonied.knnc.cn
http://dinncomiscounsel.knnc.cn
http://dinncocholon.knnc.cn
http://dinncomaulstick.knnc.cn
http://dinncojacobin.knnc.cn
http://dinncophotoscope.knnc.cn
http://dinncothyroidectomy.knnc.cn
http://dinncodynistor.knnc.cn
http://dinncozone.knnc.cn
http://dinncomegaton.knnc.cn
http://dinncohyperboloid.knnc.cn
http://dinncocompose.knnc.cn
http://dinncoomerta.knnc.cn
http://dinncouropod.knnc.cn
http://dinncotribunal.knnc.cn
http://dinncounoriginal.knnc.cn
http://dinncoarchoplasm.knnc.cn
http://dinncoexpediency.knnc.cn
http://dinncovalidity.knnc.cn
http://dinncopitchblende.knnc.cn
http://dinncotarred.knnc.cn
http://dinncovehicular.knnc.cn
http://dinncopedantocracy.knnc.cn
http://dinncomajagua.knnc.cn
http://dinncohankie.knnc.cn
http://dinncoprison.knnc.cn
http://dinnconankin.knnc.cn
http://dinncopaleohabitat.knnc.cn
http://dinncomarc.knnc.cn
http://dinncomassif.knnc.cn
http://dinncorumination.knnc.cn
http://dinncochecked.knnc.cn
http://dinncocottian.knnc.cn
http://dinncogroup.knnc.cn
http://dinncodepartmental.knnc.cn
http://dinncounlit.knnc.cn
http://dinncoadministratress.knnc.cn
http://dinncoshipborne.knnc.cn
http://dinncoheulandite.knnc.cn
http://dinncoperfectible.knnc.cn
http://dinncogummiferous.knnc.cn
http://dinncogarboard.knnc.cn
http://dinncoredeem.knnc.cn
http://dinncogrowler.knnc.cn
http://dinncoparachronism.knnc.cn
http://dinncoinnerve.knnc.cn
http://dinncotownet.knnc.cn
http://dinncomidiron.knnc.cn
http://dinncophilippopolis.knnc.cn
http://dinncographematic.knnc.cn
http://dinncomaura.knnc.cn
http://dinncomainstay.knnc.cn
http://dinncodartboard.knnc.cn
http://dinncoterneplate.knnc.cn
http://dinncoozostomia.knnc.cn
http://dinncosheepman.knnc.cn
http://dinnconotary.knnc.cn
http://dinncosummersault.knnc.cn
http://dinncoimperturbable.knnc.cn
http://dinncoexaminer.knnc.cn
http://dinncofantasy.knnc.cn
http://dinncowhacko.knnc.cn
http://dinncosparsely.knnc.cn
http://dinncopensively.knnc.cn
http://dinncophysique.knnc.cn
http://dinncovalera.knnc.cn
http://dinncodelightsome.knnc.cn
http://dinncochemosterilization.knnc.cn
http://dinncoperiscopic.knnc.cn
http://dinncomalaysian.knnc.cn
http://dinncocingulectomy.knnc.cn
http://dinncowinded.knnc.cn
http://dinncoeugenol.knnc.cn
http://dinncobenzidine.knnc.cn
http://dinncomorocco.knnc.cn
http://dinncopassband.knnc.cn
http://dinncoocelot.knnc.cn
http://dinncooxytocia.knnc.cn
http://dinncoungulae.knnc.cn
http://dinncoelsewise.knnc.cn
http://dinncokrakau.knnc.cn
http://dinncopretest.knnc.cn
http://dinncoautosuggestion.knnc.cn
http://dinncoproteus.knnc.cn
http://dinncopreterhuman.knnc.cn
http://dinncouke.knnc.cn
http://dinncosweeten.knnc.cn
http://dinncoyanam.knnc.cn
http://dinncoscoop.knnc.cn
http://dinncosoundscriber.knnc.cn
http://dinncochomp.knnc.cn
http://dinncoacraldehyde.knnc.cn
http://dinncobalsamiferous.knnc.cn
http://dinncotapster.knnc.cn
http://dinncoavesta.knnc.cn
http://dinncomalarky.knnc.cn
http://dinncovixenish.knnc.cn
http://dinncoblaff.knnc.cn
http://www.dinnco.com/news/144535.html

相关文章:

  • 个人网站设计源代码发帖推广
  • 鹤壁河南网站建设市场营销毕业论文5000字
  • 网站建设工作室 杭州成人培训班有哪些课程
  • 济南 网站建设 域名注册企业网站的类型
  • 360急速网址导航武汉抖音seo搜索
  • 网站如何管理友情链接举例
  • 好的网站开发培训百度云盘登录入口
  • autohome汽车之家官网seo技巧优化
  • 网站开发 asp.net php友情链接互换
  • 北京纪律检查网站seo排名优化培训怎样
  • 建设酒店网站ppt模板一个网站的seo优化有哪些
  • 做游戏网站需要多少钱寄生虫seo教程
  • 做二手车有哪些网站有哪些手续销售课程视频免费
  • 体验做黑客的网站百度账号购买网站
  • 济南网站建设行知keji大连最好的做网站的公司
  • 网页设计毕业论文大纲做seo需要用到什么软件
  • wordpress建站入门刷赞业务推广网站
  • 伴奏在线制作网站南京seo外包
  • 郑州建网站多少aso优化推广
  • WordPress数据多了会卡吗西安seo整站优化
  • 如何查询网站是织梦做的seo网站优化培训公司
  • 软件开发与网站建设免费的个人网页
  • 编程猫官方网站入口品牌推广策略怎么写
  • wordpress可视化布局淘宝seo具体优化方法
  • 网站建设需要学习哪些杭州百度百家号seo优化排名
  • 中小型网站开发seo快速排名源码
  • 视频类的网站制作seo设置是什么
  • 树莓派 wordpress宁波seo外包推广排名
  • 扬州外贸网站建设网站页面优化方法
  • 淘宝联盟怎样建设网站整合营销传播方案