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

h5制作报价细则谷歌seo需要做什么的

h5制作报价细则,谷歌seo需要做什么的,宿州做网站的公司,软件开发文档工具微调BERT 微调#xff08;Fine-tuning#xff09;BERT是指在预训练的BERT模型基础上#xff0c;使用特定领域或任务相关的数据对其进行进一步训练以适应具体任务的需求。BERT#xff08;Bidirectional Encoder Representations from Transformers#xff09;是一种基于Tr…微调BERT 微调Fine-tuningBERT是指在预训练的BERT模型基础上使用特定领域或任务相关的数据对其进行进一步训练以适应具体任务的需求。BERTBidirectional Encoder Representations from Transformers是一种基于Transformer架构的深度双向预训练语言模型通过在大规模无监督数据上进行预训练学习到了丰富的语言表示。 微调BERT的过程可以分为以下步骤 准备数据集根据任务或领域的需求准备标注的训练数据集。数据集应包含输入文本以及相应的标签或目标。 加载预训练的BERT模型从预训练的BERT模型中加载参数。这些参数包含了在大规模无监督数据上学习到的丰富语言表示。 构建模型结构在加载预训练的BERT模型的基础上构建任务特定的模型结构。通常这涉及添加一个适当的分类器层该层的输出与任务的类别数相匹配。 输入编码将训练数据转换为BERT模型可以接受的输入格式。这包括将文本分割为标记、添加特殊标记如[CLS]和[SEP]并将其转换为对应的标记ID。 微调过程使用准备好的训练数据对模型进行训练。通过将输入数据提供给模型计算损失函数并使用反向传播算法更新模型参数。常用的优化算法包括随机梯度下降SGD和Adam。 超参数调优在微调过程中可以根据需要调整学习率、批大小、训练轮数等超参数以获得更好的性能。 模型评估使用验证集或交叉验证方法评估微调后的模型性能。可以使用常见的评估指标如准确率、精确度、召回率和F1分数。 推断和应用在微调完成后可以使用微调后的BERT模型进行推断和应用输入新的未见过的文本数据并生成相应的预测结果。 微调BERT的关键在于将预训练的语言模型参数与特定任务的数据进行结合通过在任务数据上的有监督训练使模型适应特定任务的需求并提升在该任务上的性能表现。同时由于BERT学习到了丰富的语言表示在训练数据较少的情况下微调BERT能够起到迁移学习的作用从而提升模型的泛化能力。 文章内容来自李沐大神的《动手学深度学习》并加以我的理解感兴趣可以去https://zh-v2.d2l.ai/查看完整书籍 文章目录 微调BERT针对序列级和词元级应用微调BERT单文本分类文本对分类或回归文本标注问答 自然语言推断微调BERT加载BERT微调BERT的数据集微调BERT 针对序列级和词元级应用微调BERT 在本章的前几节中我们为自然语言处理应用设计了不同的模型例如基于循环神经网络、卷积神经网络、注意力和多层感知机。这些模型在有空间或时间限制的情况下是有帮助的但是为每个自然语言处理任务精心设计一个特定的模型实际上是不可行的。我们介绍了一个名为BERT的预训练模型该模型可以对广泛的自然语言处理任务进行最少的架构更改。一方面在提出时BERT改进了各种自然语言处理任务的技术水平。另一方面原始BERT模型的两个版本分别带有1.1亿和3.4亿个参数。因此当有足够的计算资源时我们可以考虑为下游自然语言处理应用微调BERT。 下面我们将自然语言处理应用的子集概括为序列级和词元级。在序列层次上介绍了在单文本分类任务和文本对分类或回归任务中如何将文本输入的BERT表示转换为输出标签。在词元级别我们将简要介绍新的应用如文本标注和问答并说明BERT如何表示它们的输入并转换为输出标签。在微调期间不同应用之间的BERT所需的“最小架构更改”是额外的全连接层。在下游应用的监督学习期间额外层的参数是从零开始学习的而预训练BERT模型中的所有参数都是微调的。 单文本分类 单文本分类将单个文本序列作为输入并输出其分类结果。 除了我们在这一章中探讨的情感分析之外语言可接受性语料库Corpus of Linguistic AcceptabilityCOLA也是一个单文本分类的数据集它的要求判断给定的句子在语法上是否可以接受。 (Warstadt et al., 2019)。例如“I should study.”是可以接受的但是“I should studying.”不是可以接受的。 BERT输入序列明确地表示单个文本和文本对其中特殊分类标记“”用于序列分类而特殊分类标记“”标记单个文本的结束或分隔成对文本。如图所示在单文本分类应用中特殊分类标记“”的BERT表示对整个输入文本序列的信息进行编码。作为输入单个文本的表示它将被送入到由全连接稠密层组成的小多层感知机中以输出所有离散标签值的分布。 文本对分类或回归 在本章中我们还研究了自然语言推断。它属于文本对分类这是一种对文本进行分类的应用类型。 以一对文本作为输入但输出连续值语义文本相似度是一个流行的“文本对回归”任务。 这项任务评估句子的语义相似度。例如在语义文本相似度基准数据集Semantic Textual Similarity Benchmark中句子对的相似度得分是从0无语义重叠到5语义等价的分数区间 (Cer et al., 2017)。我们的目标是预测这些分数。来自语义文本相似性基准数据集的样本包括句子1句子2相似性得分 “A plane is taking off.”“一架飞机正在起飞。”“An air plane is taking off.”“一架飞机正在起飞。”5.000分; “A woman is eating something.”“一个女人在吃东西。”“A woman is eating meat.”“一个女人在吃肉。”3.000分; “A woman is dancing.”一个女人在跳舞。“A man is talking.”“一个人在说话。”0.000分。 图中的文本对分类的BERT微调在输入表示上有所不同。对于文本对回归任务如语义文本相似性可以应用细微的更改例如输出连续的标签值和使用均方损失它们在回归中很常见。 文本标注 现在让我们考虑词元级任务比如文本标注text tagging其中每个词元都被分配了一个标签。在文本标注任务中词性标注为每个单词分配词性标记例如形容词和限定词。 根据单词在句子中的作用。如在Penn树库II标注集中句子“John Smith‘s car is new”应该被标记为“NNP名词专有单数NNP POS所有格结尾NN名词单数或质量VB动词基本形式JJ形容词”。 图中说明了文本标记应用的BERT微调。唯一的区别在于在文本标注中输入文本的每个词元的BERT表示被送到相同的额外全连接层中以输出词元的标签例如词性标签。 问答 作为另一个词元级应用问答反映阅读理解能力。 例如斯坦福问答数据集Stanford Question Answering DatasetSQuAD v1.1由阅读段落和问题组成其中每个问题的答案只是段落中的一段文本文本片段 (Rajpurkar et al., 2016)。举个例子考虑一段话“Some experts report that a mask’s efficacy is inconclusive.However,mask makers insist that their products,such as N95 respirator masks,can guard against the virus.”“一些专家报告说面罩的功效是不确定的。然而口罩制造商坚持他们的产品如N95口罩可以预防病毒。”还有一个问题“Who say that N95 respirator masks can guard against the virus?”“谁说N95口罩可以预防病毒”。答案应该是文章中的文本片段“mask makers”“口罩制造商”。因此SQuAD v1.1的目标是在给定问题和段落的情况下预测段落中文本片段的开始和结束。 为了微调BERT进行问答在BERT的输入中将问题和段落分别作为第一个和第二个文本序列。为了预测文本片段开始的位置相同的额外的全连接层将把来自位置 i i i的任何词元的BERT表示转换成标量分数 s i s_i si​。文章中所有词元的分数还通过softmax转换成概率分布从而为文章中的每个词元位置 i i i分配作为文本片段开始的概率 p i p_i pi​。预测文本片段的结束与上面相同只是其额外的全连接层中的参数与用于预测开始位置的参数无关。当预测结束时位置 i i i的词元由相同的全连接层变换成标量分数 e i e_i ei​。 上图描述了用于问答的微调BERT。 对于问答监督学习的训练目标就像最大化真实值的开始和结束位置的对数似然一样简单。当预测片段时我们可以计算从位置 i i i到位置 j j j的有效片段的分数 s i e j s_ie_j si​ej​ i j ij ij并输出分数最高的跨度。 下面我们举一个例子微调BERT 自然语言推断微调BERT 在本章的前面几节中我们已经为SNLI数据集上的自然语言推断任务设计了一个基于注意力的结构。现在我们通过微调BERT来重新审视这项任务。自然语言推断是一个序列级别的文本对分类问题而微调BERT只需要一个额外的基于多层感知机的架构如图中所示。 本节将下载一个预训练好的小版本的BERT然后对其进行微调以便在SNLI数据集上进行自然语言推断。 加载BERT 原始的BERT模型有数以亿计的参数。在下面我们提供了两个版本的预训练的BERT“bert.base”与原始的BERT基础模型一样大需要大量的计算资源才能进行微调而“bert.small”是一个小版本以便于演示。 import json import multiprocessing import os import torch from torch import nn from d2l import torch as d2l 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_input256, ffn_num_hiddensffn_num_hiddens,num_heads4, num_layers2, dropout0.2,max_lenmax_len, key_size256, query_size256,value_size256, hid_in_features256,mlm_in_features256, nsp_in_features256)# 加载预训练BERT参数bert.load_state_dict(torch.load(os.path.join(data_dir,pretrained.params)))return bert, vocab为了便于在大多数机器上演示我们将在本节中加载和微调经过预训练BERT的小版本“bert.small”。在练习中我们将展示如何微调大得多的“bert.base”以显著提高测试精度。 微调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, vocabNone):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, dtypetorch.long),torch.tensor(all_segments, dtypetorch.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类用于将数据集转换为适合BERT模型微调的格式。以下是该类的主要功能和方法 __init__(self, dataset, max_len, vocabNone): 类的初始化方法接受数据集、最大长度和词汇表作为参数并进行预处理操作包括分词、截断、转换为ID等。初始化时会打印读取的示例数量。 _preprocess(self, all_premise_hypothesis_tokens): 内部方法用于多进程处理数据集中的所有前提和假设对。它调用_mp_worker方法处理每个前提和假设对并返回转换后的token ID、segments和有效长度。 _mp_worker(self, premise_hypothesis_tokens): 内部方法用于处理单个前提和假设对的token化、截断和转换为ID等操作。返回处理后的token ID、segments和有效长度。 _truncate_pair_of_tokens(self, p_tokens, h_tokens): 内部方法用于根据最大长度对前提和假设对进行截断以便适应BERT模型的输入格式。 __getitem__(self, idx): 用于获取数据集中特定索引处的样本和标签。返回的是模型所需的输入张量和相应的标签。 __len__(self): 返回数据集的样本数量。 all_premise_hypothesis_tokens是一个列表其中包含了前提和假设对的tokenized表示。 具体地all_premise_hypothesis_tokens列表是通过列表推导式生成的。每个列表元素都是一个包含两个子列表的元组分别表示一个前提句子和一个假设句子的tokenized表示。这些tokenized表示是通过对输入的前提和假设对进行小写转换和分词操作生成的。 例如假设输入的前提和假设对是 dataset [[The cat is on the mat., The cat is lying on the mat.],[She is reading a book., The girl is studying.], ]经过处理后all_premise_hypothesis_tokens的值将是 [([the, cat, is, on, the, mat, .], [the, cat, is, lying, on, the, mat, .]),([she, is, reading, a, book, .], [the, girl, is, studying, .]) ]将所有句子词元化后使用多线程的方法调用_mp_worker方法对每个假设和前提进行处理和转换 具体而言_mp_worker方法执行以下操作 解包传入的premise_hypothesis_tokens元组将前提和假设的tokenized表示分配给p_tokens和h_tokens变量。 调用_truncate_pair_of_tokens方法根据设定的最大长度截断前提和假设的tokenized表示以确保其长度不超过最大长度限制。 调用d2l.get_tokens_and_segments函数将截断后的前提和假设的tokenized表示作为参数获取它们的tokens和segments。tokens表示整个句子的token序列segments表示句子的分段标识。 将tokens转换为对应的token ID并使用词汇表进行查找。如果tokens的长度小于最大长度(self.max_len)则在末尾添加的ID以使token_ids的长度与最大长度相同。 将segments的长度扩展到与最大长度相同如果segments的长度小于最大长度则在末尾添加0。 计算tokens的有效长度即没有被截断的长度。 返回处理后的结果即包含了token ID表示、segments表示和有效长度的元组(token_ids, segments, valid_len)。 下载完SNLI数据集后我们通过实例化SNLIBERTDataset类来生成训练和测试样本。这些样本将在自然语言推断的训练和测试期间进行小批量读取。 # 如果出现显存不足错误请减少“batch_size”。在原始的BERT模型中max_len512 batch_size, max_len, num_workers 512, 128, d2l.get_dataloader_workers() data_dir d2l.download_extract(SNLI) 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, shuffleTrue,num_workersnum_workers) test_iter torch.utils.data.DataLoader(test_set, batch_size,num_workersnum_workers)这个地方可能会卡在train_set SNLIBERTDataset(d2l.read_snli(data_dir, True), max_len, vocab)这一行具体原因不知可以尝试减少batch_size 微调BERT 用于自然语言推断的微调BERT只需要一个额外的多层感知机该多层感知机由两个全连接层组成请参见下面BERTClassifier类中的self.hidden和self.output。这个多层感知机将特殊的“”词元的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)MaskLM类和NextSentencePred类在其使用的多层感知机中都有一些参数。这些参数是预训练BERT模型bert中参数的一部分因此是net中的参数的一部分。然而这些参数仅用于计算预训练过程中的遮蔽语言模型损失和下一句预测损失。这两个损失函数与微调下游应用无关因此当BERT微调时MaskLM和NextSentencePred中采用的多层感知机的参数不会更新陈旧的staled。 为了允许具有陈旧梯度的参数标志ignore_stale_gradTrue在step函数d2l.train_batch_ch13中被设置。我们通过该函数使用SNLI的训练集train_iter和测试集test_iter对net模型进行训练和评估。由于计算资源有限训练和测试精度可以进一步提高我们把对它的讨论留在练习中。 虽然书中这么写但是我并没有找到哪里设置了ignore_stale_grad这里应该仍然微调了所有的参数 lr, num_epochs 1e-4, 5 trainer torch.optim.Adam(net.parameters(), lrlr) loss nn.CrossEntropyLoss(reductionnone) d2l.train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs,devices)
http://www.hkea.cn/news/14388544/

相关文章:

  • 地方志网站建设自查报告建网站开发语言对比
  • 公关公司网站郑州seo代理外包公司
  • 做代理去哪个网站找山东网站备案
  • 重庆网站建设找承越如何进行外贸网站建设
  • 万维网如何建设网站商标设计logo图案设计软件
  • 建行网站关于我们网站设计公司 推荐
  • 建设银行商城网站微信怎么创建自己的小程序
  • 梧州网站设计公司深圳网络seo推广
  • 网站开发需要哪些人才淘宝seo排名优化
  • 深圳定制专业网站网站建设与管理案例教程教学大纲
  • 一站式建设网站电子商务网站有哪些?
  • 天津专业网站设计报价自己怎么优化网站
  • 天津怎样做网站推广泰安企业网站制作
  • 银川网站建设价格六安做网站多少钱
  • 北京建设招聘信息网站分销系统合法吗
  • 环保局网站建设wordpress导入项目
  • 如何提高网站收录数同城信息网站建设
  • 加强政协机关网站建设wordpress图片添加音乐
  • 国外对旅游网站建设的现状竞价托管一般多少
  • 姚家园做网站开发工具包
  • python 营销型网站建设查询关键词排名工具
  • 网站建设论文模板深圳住房建设局网站首页
  • 朝阳区网站开发公司wordpress查询功能
  • 用vs2005做网站设计安庆注册公司
  • 上海湖南网站建设外包公司要不要去
  • 仿静态网站wordpress注册页面不跳转
  • 网站建设费用能否计入广告费房地产销售新手入门知识
  • 江苏网站建设电话用凡科网做网站怎么保存到桌面
  • 东莞在哪里学网站建设青岛做网络直播的网站
  • 怎样建设大型网站网站建设公司知名企业