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

中铁建设工程项目公示网站网络服务大厅

中铁建设工程项目公示网站,网络服务大厅,开发平台 learn,外贸营销邮件主题一般怎么写以往#xff0c;我们在使用HuggingFace在训练BERT模型时#xff0c;代码写得比较复杂#xff0c;涉及到数据处理、token编码、模型编码、模型训练等步骤#xff0c;从事NLP领域的人都有这种切身感受。事实上#xff0c;HugggingFace中提供了datasets模块#xff08;数据处…  以往我们在使用HuggingFace在训练BERT模型时代码写得比较复杂涉及到数据处理、token编码、模型编码、模型训练等步骤从事NLP领域的人都有这种切身感受。事实上HugggingFace中提供了datasets模块数据处理和Trainer函数使得我们的模型训练较为方便。关于datasets模块可参考文章NLP六十二HuggingFace中的Datasets使用。   本文将会介绍如何使用HuggingFace中的Trainer对BERT模型微调。 Trainer Trainer是HuggingFace中的模型训练函数其网址为https://huggingface.co/docs/transformers/main_classes/trainer 。   Trainer的传入参数如下 model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.modules.module.Module] None args: TrainingArguments None data_collator: typing.Optional[DataCollator] None train_dataset: typing.Optional[torch.utils.data.dataset.Dataset] None eval_dataset: typing.Union[torch.utils.data.dataset.Dataset, typing.Dict[str, torch.utils.data.dataset.Dataset], NoneType] None tokenizer: typing.Optional[transformers.tokenization_utils_base.PreTrainedTokenizerBase] None model_init: typing.Union[typing.Callable[[], transformers.modeling_utils.PreTrainedModel], NoneType] None compute_metrics: typing.Union[typing.Callable[[transformers.trainer_utils.EvalPrediction], typing.Dict], NoneType] None callbacks: typing.Optional[typing.List[transformers.trainer_callback.TrainerCallback]] None optimizers: typing.Tuple[torch.optim.optimizer.Optimizer, torch.optim.lr_scheduler.LambdaLR] (None, None) preprocess_logits_for_metrics: typing.Union[typing.Callable[[torch.Tensor, torch.Tensor], torch.Tensor], NoneType] None )参数解释 model为预训练模型args为TrainingArguments训练参数类data_collator会将数据集中的元素组成一个batch默认使用default_data_collator()如果tokenizer没有提供则使用DataCollatorWithPaddingtrain_dataset, eval_dataset为训练集验证集tokenizer为模型训练使用的tokenizermodel_init为模型初始化compute_metrics为验证集的评估指标计算函数callbacks为训练过程中的callback列表optimizers为模型训练中的优化器preprocess_logits_for_metrics为模型评估阶段前对logits的预处理 TrainingArguments为训练参数类其网址为https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments传入参数非常多transformers版本4.32.1中有98个参数我们在这里只介绍几个常见的 output_dir: stroverwrite_output_dir: bool False evaluation_strategy: typing.Union[transformers.trainer_utils.IntervalStrategy, str] no per_gpu_train_batch_size: typing.Optional[int] None per_gpu_eval_batch_size: typing.Optional[int] None learning_rate: float 5e-05 num_train_epochs: float 3.0 logging_dir: typing.Optional[str] None logging_strategy: typing.Union[transformers.trainer_utils.IntervalStrategy, str] steps save_strategy: typing.Union[transformers.trainer_utils.IntervalStrategy, str] stepssave_steps: float 500 report_to: typing.Optional[typing.List[str]] None参数解释 output_dir为模型输出目录evaluation_strategy为模型评估策略 “no: 不做模型评估“steps”: 按训练步数steps进行评估需指定步数“epoch”: 每个epoch训练完后进行评估 per_gpu_train_batch_size, per_gpu_eval_batch_size为每个GPU上训练集和测试集的batch size也有CPU上的对应参数learning_rate为学习率logging_dir为日志输出目录logging_strategy为日志输出策略同样有no, steps, epoch三种意义同上save_strategy为模型保存策略同样有no, steps, epoch三种意义同上report_to为模型训练、评估中的重要指标如loss, accurace输出之处可选择azure_ml, clearml, codecarbon, comet_ml, dagshub, flyte, mlflow, neptune, tensorboard, wandb使用all会输出到所有的地方使用no则不会输出。 下面我们使用Trainer进行BERT模型微调给出英语、中文数据集上文本分类的示例代码。 BERT微调 使用datasets模块导入imdb数据集英语影评数据集常用于文本分类加载预训练模型bert-base-cased的tokenizer。 import numpy as np from transformers import AutoTokenizer, DataCollatorWithPadding import datasetscheckpoint bert-base-cased tokenizer AutoTokenizer.from_pretrained(checkpoint) raw_datasets datasets.load_dataset(imdb)查看数据集有train训练集、test测试集、unsupervised非监督三部分我们这里使用训练集和测试集各自有25000个样本。 raw_datasetsDatasetDict({train: Dataset({features: [text, label],num_rows: 25000})test: Dataset({features: [text, label],num_rows: 25000})unsupervised: Dataset({features: [text, label],num_rows: 50000}) })创建数据tokenize函数对文本进行tokenize最大长度设置为300同时使用data_collector为DataCollatorWithPadding。 def tokenize_function(sample):return tokenizer(sample[text], max_length300, truncationTrue) tokenized_datasets raw_datasets.map(tokenize_function, batchedTrue)data_collator DataCollatorWithPadding(tokenizertokenizer)加载分类模型输出类别为2. from transformers import AutoModelForSequenceClassification model AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels2)设置compute_metrics函数在评估过程中输出accuracy, f1, precision, recall四个指标。设置训练参数TrainingArguments类设置Trainer。 from transformers import Trainer, TrainingArguments from sklearn.metrics import accuracy_score, precision_recall_fscore_supportdef compute_metrics(pred):labels pred.label_idspreds pred.predictions.argmax(-1)precision, recall, f1, _ precision_recall_fscore_support(labels, preds, averageweighted)acc accuracy_score(labels, preds)return {accuracy: acc,f1: f1,precision: precision,recall: recall}training_args TrainingArguments(output_dirimdb_test_trainer, # 指定输出文件夹没有会自动创建evaluation_strategyepoch,per_device_train_batch_size32,per_device_eval_batch_size32,learning_rate5e-5,num_train_epochs3,warmup_ratio0.2,logging_dir./imdb_train_logs,logging_strategyepoch,save_strategyepoch,report_totensorboard) trainer Trainer(model,training_args,train_datasettokenized_datasets[train],eval_datasettokenized_datasets[test],data_collatordata_collator, # 在定义了tokenizer之后其实这里的data_collator就不用再写了会自动根据tokenizer创建tokenizertokenizer,compute_metricscompute_metrics )开启模型训练。 trainer.train()EpochTraining LossValidation LossAccuracyF1PrecisionRecall10.3643000.2232230.9106000.9105090.9122760.91060020.1648000.2044200.9239600.9239410.9243750.92396030.0710000.2413500.9255200.9255100.9257590.925520 TrainOutput(global_step588, training_loss0.20003824169132986, metrics{train_runtime: 1539.8692, train_samples_per_second: 48.705, train_steps_per_second: 0.382, total_flos: 1.156249755e16, train_loss: 0.20003824169132986, epoch: 3.0})以上为英语数据集的文本分类模型微调。   中文数据集使用sougou-mini数据集训练集4000个样本测试集495个样本共5个输出类别预训练模型采用bert-base-chinese。代码基本与英语数据集差不多只要修改 预训练模型数据集加载 和 最大长度为128输出类别。以下是不同的代码之处 import numpy as np from transformers import AutoTokenizer, DataCollatorWithPadding import datasetscheckpoint bert-base-chinese tokenizer AutoTokenizer.from_pretrained(checkpoint)data_files {train: ./data/sougou/train.csv, test: ./data/sougou/test.csv} raw_datasets datasets.load_dataset(csv, data_filesdata_files, delimiter,) ... model AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels5) ...输出结果如下 EpochTraining LossValidation LossAccuracyF1PrecisionRecall10.8492000.1151890.9696970.9694490.9700730.96969720.1069000.0939870.9737370.9737700.9753720.97373730.0478000.0788610.9737370.9737400.9741170.973737 模型评估 在上述模型评估过程中已经有了模型评估的各项指标。   本文也给出单独做模型评估的代码方便后续对模型做量化时后续介绍BERT模型的动态量化获取量化前后模型推理的各项指标。   中文数据集文本分类模型评估代码如下 import torch from transformers import AutoModelForSequenceClassificationMAX_LENGTH 128 device torch.device(cuda:0 if torch.cuda.is_available() else cpu) checkpoint f./sougou_test_trainer_{MAX_LENGTH}/checkpoint-96 model AutoModelForSequenceClassification.from_pretrained(checkpoint).to(device)from transformers import AutoTokenizer, DataCollatorWithPaddingtokenizer AutoTokenizer.from_pretrained(checkpoint)import pandas as pdtest_df pd.read_csv(./data/sougou/test.csv) test_df.head()textlabel0届数比赛时间比赛地点参加国家和地区冠军亚军决赛成绩第一届1956-1957英国11美国丹麦6...01商品属性材质软橡胶带加浮雕工艺合金彩色队徽吊牌规格162mm数量这一系列产品不限量发行图案...02今天下午沈阳金德和长春亚泰队将在五里河相遇。在这两支球队中沈阳籍球员居多因此这场比赛实际...03本报讯中国足协准备好了与特鲁西埃谈判的合同文本也在北京给他预订好了房间但特鲁西埃爽约了...04网友点击发表评论祝贺中国队夺得五连冠搜狐体育讯北京时间5月6日2006年尤伯杯羽毛球赛在日...0 import numpy as np import times_time time.time() true_labels, pred_labels [], [] for i, row in test_df.iterrows():row_s_time time.time()true_labels.append(row[label])encoded_text tokenizer(row[text], max_lengthMAX_LENGTH, truncationTrue, paddingTrue, return_tensorspt).to(device)# print(encoded_text)logits model(**encoded_text)label_id np.argmax(logits[0].detach().cpu().numpy(), axis1)[0]pred_labels.append(label_id)if i % 100 0:print(i, (time.time() - row_s_time)*1000, label_id)print(avg time: , (time.time() - s_time) * 1000 / test_df.shape[0])0 229.3872833251953 0 100 362.0314598083496 1 200 311.16747856140137 2 300 324.13792610168457 3 400 406.9099426269531 4 avg time: 352.44047810332944true_labels[:10][0, 0, 0, 0, 0, 0, 0, 0, 0, 0]pred_labels[:10][0, 0, 0, 0, 0, 0, 0, 0, 0, 0]from sklearn.metrics import classification_reportprint(classification_report(true_labels, pred_labels, digits4))precision recall f1-score support0 0.9900 1.0000 0.9950 991 0.9691 0.9495 0.9592 992 0.9900 1.0000 0.9950 993 0.9320 0.9697 0.9505 994 0.9895 0.9495 0.9691 99accuracy 0.9737 495macro avg 0.9741 0.9737 0.9737 495 weighted avg 0.9741 0.9737 0.9737 495总结 本文介绍了如何使用HuggingFace中的Trainer对BERT模型微调。可以看到使用Trainer进行模型微调代码较为简洁且支持功能丰富是理想的模型训练方式。   本文项目代码已开源至Github网址为https://github.com/percent4/PyTorch_Learning/tree/master/huggingface_learning 。   本人已开通个人博客网站网址为https://percent4.github.io/ 欢迎大家访问~
http://www.w-s-a.com/news/414096/

相关文章:

  • 网站安全检测漏洞扫描风险等级分布建设一个网站步骤
  • 摄影网站的意义开发企业小程序公司
  • 龙岩网站设计招聘信息网上免费logo设计
  • 高端定制网站开发建站教程详解网站共享备案可以申请支付接口
  • 做房产网站接不到电话企业推广宣传方式
  • 网站建设费用不用摊销下一页p30
  • 北京 工业网站建设公司国外服务器公司有哪些
  • 怎样局域网站建设盈利网站
  • 公司做网站广告语济南建网站价格消费品展
  • 建德网站网站建设规划设计书
  • 谷歌网站流量分析wordpress置顶浮标
  • 江苏新宁建设集团网站网络规划设计师2023论文
  • 合作建站协议python wordpress采集器
  • 集团网站网页模板网站建设图片大全
  • 举报非法网站要求做笔录wordpress怎么插视频
  • 网站服务器防护如何搭建网站平台
  • 设计师接私活的网站如何做网站的搜索栏
  • ps做图下载网站网站子目录设计
  • 厦门网站制作策划高中生做网站网页
  • 高端品牌网站建设在哪济南兴田德润优惠吗专业定制网站开发公司
  • 怎么做网站卖东西汽车网站排行榜前十名
  • 网站关键字没有排名只有单页面的网站怎么做seo
  • 网站流量盈利模式宝塔没有域名直接做网站怎么弄
  • 淡蓝色网站qq推广中心
  • 设计网站价格餐饮吸引客流的活动方案
  • 手机网站建设电话百度搜索量
  • 条件查询 php网站源码中国白云手机网站建设
  • 网上注册公司流程及材料班级优化大师免费下载电脑版
  • 应用网站如何做营销型网站的重要特点
  • 怎么样百度搜到自己的网站加强社区网站建设