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

网站开发与应用是什么wordpress redis memcached

网站开发与应用是什么,wordpress redis memcached,网站自动跳转怎么办,河南住房和城乡建设厅网站主页以往#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.hkea.cn/news/14421534/

相关文章:

  • 建设银行网站怎么打印明细2345浏览器主页网址
  • 做企业网站用什么程序闵行做网站公司铝棒易站公司
  • 重庆垫江网站建设为什么做网站能赚钱
  • 群晖如何做网站服务器柳州企业 商家应该如何做网站
  • 网站免费模版厦门住房建设局网站首页
  • 青岛百度公司总部沈阳seo顾问
  • 高度重视机关门户网站建设酒店seo是什么意思
  • 贵州省建设厅网站公众一体化平台html5做网站导航
  • 做推广可以在哪些网站发布软文程序员做网站外快
  • 台商网站建设公司黄页做网站的软件 简单易学
  • iis 新建网站seo标题关键词优化
  • 天津模板做网站微信管理系统免费版
  • 东莞网站设计定制开发谷德设计网官网
  • h5网站开发哪个好北京网页制作电话
  • 商务网站建设体会关键词优化公司推荐
  • 商城网站建设服务简述网络营销的意义
  • 做移动网站建设电商网站项目经验介绍
  • seo两个域名一个网站有影响吗重庆巴南网站制作
  • wordpress直播网站主题沈阳市建设工程质量检测中心网站
  • 制作地图的网站现有的网站开发技术
  • 做app必须有网站吗wordpress阿里云esc
  • 网站图片动态换名店面设计平面图
  • 朝青板块网站建设娄星区建设局网站
  • 企业网站导航设计代理主要干什么
  • 备案网站注意事项做机械配件的网站
  • 做相同网站违法吗荆门seo
  • 百度网站打开linux wordpress路径
  • 微网站怎么做百度关键词排名seo关键词排名优化教程
  • 男的做直播哪个网站好用vs2013做网站案例
  • 网站建设方向论文提纲全国工商登记网