和嗲囡囡和做的网站网站开发的前后端是什么
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:55
当前位置: 首页 > news >正文
和嗲囡囡和做的网站,网站开发的前后端是什么,c 网站开发 vs2012,武平县天恒建设投资集团公司网站本系列用于Bert模型实践实际场景#xff0c;分别包括分类器、命名实体识别、选择题、文本摘要等等。#xff08;关于Bert的结构和详细这里就不做讲解#xff0c;但了解Bert的基本结构是做实践的基础#xff0c;因此看本系列之前#xff0c;最好了解一下transformers和Bert…本系列用于Bert模型实践实际场景分别包括分类器、命名实体识别、选择题、文本摘要等等。关于Bert的结构和详细这里就不做讲解但了解Bert的基本结构是做实践的基础因此看本系列之前最好了解一下transformers和Bert等 本篇主要讲解完形填空应用场景。本系列代码和数据集都上传到GitHub上https://github.com/forever1986/bert_task 1 环境说明 1本次实践的框架采用torch-2.1transformer-4.37 2另外还采用或依赖其它一些库如evaluate、pandas、datasets、accelerate等 2 前期准备 Bert模型是一个只包含transformer的encoder部分并采用双向上下文和预测下一句训练而成的预训练模型。可以基于该模型做很多下游任务。 2.1 了解Bert的输入输出 Bert的输入input_ids使用tokenizer将句子向量化attention_masktoken_type_ids句子序号、labels结果 Bert的输出 last_hidden_state最后一层encoder的输出大小是(batch_size, sequence_length, hidden_size)注意这是关键输出本次任务就需要获取该值可以取出那个被mask掉的token获取其前几个取score最高的当然也可以使用top_k或者top_p方式获取一定随机性 pooler_output这是序列的第一个token(classification token)的最后一层的隐藏状态输出的大小是(batch_size, hidden_size)它是由线性层和Tanh激活函数进一步处理的。通常用于句子分类至于是使用这个表示还是使用整个输入序列的隐藏状态序列的平均化或池化视情况而定。 hidden_states 这是输出的一个可选项如果输出需要指定config.output_hidden_statesTrue,它也是一个元组它的第一个元素是embedding其余元素是各层的输出每个元素的形状是(batch_size, sequence_length, hidden_size) attentions这是输出的一个可选项如果输出需要指定config.output_attentionsTrue,它也是一个元组它的元素是每一层的注意力权重用于计算self-attention heads的加权平均值。 2.2 数据集与模型 1数据集来自ChnSentiCorp该数据集本身是做情感分类但是我们只需要取其text部分即可 2模型权重使用bert-base-chinese 2.3 任务说明 完形填空其实就是在一段文字中mask掉几个字让模型能够自动填充字。这里本身就是bert模型做预训练是所做的事情之一因此就是让数据给模型做训练的过程。 2.4 实现关键 1数据集结构是一个带有text和label两列的数据我们只需要获取到text部分即可。 2随机mask掉部分数据这个本身也是bert的训练过程因此在transforms框架中DataCollatorForLanguageModeling已经实现了你也可以自己实现随机mask掉你的数据进行训练 3 关键代码 3.1 数据集处理 数据集不需要做过多处理只需要将text部分进行tokenizer并制定max_length和truncation即可 def process_function(datas):tokenized_datas tokenizer(datas[text], max_length256, truncationTrue)return tokenized_datas new_datasets datasets.map(process_function, batchedTrue, remove_columnsdatasets[train].column_names)3.2 模型加载 model BertForMaskedLM.from_pretrained(model_path)注意这里使用的是transformers中的BertForMaskedLM该类对bert模型进行封装。如果我们不使用该类需要自己定义一个model继承bert增加分类线性层。另外使用AutoModelForMaskedLM也可以其实AutoModel最终返回的也是BertForMaskedLM它是根据你config中的model_type去匹配的。 这里列一下BertForMaskedLM的关键源代码说明一下transformers帮我们做了哪些关键事情
在init方法中增加增加了BertOnlyMLMHeadBertOnlyMLMHead其实就是一个二层神经网络一层是BertPredictionHeadTransform包括lineargeluActln一层是decoderhidden_size*vocab_size大小的linear。
self.bert BertModel(config, add_pooling_layerFalse) self.cls BertOnlyMLMHead(config)# 将输出结果outputs取第一个返回值也就是last_hidden_state sequence_output outputs[0]
将last_hidden_state输入到cls层中获得最终结果预测的score和词
prediction_scores self.cls(sequence_output)3.3 自动并随机mask数据 关键代码在于DataCollatorForLanguageModeling该类会实现自动mask。参考torch_mask_tokens方法。 trainer Trainer(modelmodel,argstrain_args,train_datasetnew_datasets[train],data_collatorDataCollatorForLanguageModeling(tokenizer, mlmTrue, mlm_probability0.15),)4 整体代码 基于BERT做完形填空 1数据集来自ChnSentiCorp 2模型权重使用bert-base-chinese# step 1 引入数据库 from datasets import DatasetDict from transformers import TrainingArguments, Trainer, BertTokenizerFast, BertForMaskedLM, DataCollatorForLanguageModeling, pipelinemodel_path ./model/tiansz/bert-base-chinese data_path ./data/ChnSentiCorp# step 2 数据集处理 datasets DatasetDict.load_from_disk(data_path) tokenizer BertTokenizerFast.from_pretrained(model_path)def process_function(datas):tokenized_datas tokenizer(datas[text], max_length256, truncationTrue)return tokenized_datasnew_datasets datasets.map(process_function, batchedTrue, remove_columnsdatasets[train].column_names)# step 3 加载模型 model BertForMaskedLM.from_pretrained(model_path)# step 4 创建TrainingArguments
原先train是9600条数据batch_size32因此每个epoch的step300
train_args TrainingArguments(output_dir./checkpoints, # 输出文件夹per_device_train_batch_size32, # 训练时的batch_sizenum_train_epochs1, # 训练轮数logging_steps30, # log 打印的频率)# step 5 创建Trainer trainer Trainer(modelmodel,argstrain_args,train_datasetnew_datasets[train],# 自动MASK关键所在通过DataCollatorForLanguageModeling实现自动MASK数据data_collatorDataCollatorForLanguageModeling(tokenizer, mlmTrue, mlm_probability0.15),)# Step 6 模型训练 trainer.train()# step 7 模型评估 pipe pipeline(fill-mask, modelmodel, tokenizertokenizer, device0) str datasets[test][3][text] str str.replace(方便,[MASK][MASK]) results pipe(str)
results[0][0][token_str]
print(results[0][0][token_str]results[1][0][token_str])5 运行效果 注本文参考来自大神https://github.com/zyds/transformers-code
- 上一篇: 合优做网站需要多少钱网站支付怎么做
- 下一篇: 和嗲囡囡和做的网站注册公司核名
相关文章
-
合优做网站需要多少钱网站支付怎么做
合优做网站需要多少钱网站支付怎么做
- 技术栈
- 2026年03月21日
-
合伙合同网站建设协议促销式软文案例
合伙合同网站建设协议促销式软文案例
- 技术栈
- 2026年03月21日
-
合格的网站设计师需要会什么软件广州中小学智慧阅读门户网站
合格的网站设计师需要会什么软件广州中小学智慧阅读门户网站
- 技术栈
- 2026年03月21日
-
和嗲囡囡和做的网站注册公司核名
和嗲囡囡和做的网站注册公司核名
- 技术栈
- 2026年03月21日
-
和平区网站制作深圳市力同科技有限公司
和平区网站制作深圳市力同科技有限公司
- 技术栈
- 2026年03月21日
-
和平苏州网站建设主流的网站建设软件
和平苏州网站建设主流的网站建设软件
- 技术栈
- 2026年03月21日
