目录

  • 引言
  • How to Fine-Tune BERT for Text Classification 论文
    • 微调策略
    • ITPT:继续预训练
  • 学术论文分类挑战赛微调
    • huggingface工具介绍
    • bert模型介绍
    • 数据创建
    • 模型定义
    • 模型训练与评估
    • 模型改进

How to Fine-Tune BERT for Text Classification 论文

微调策略

  1. 处理长文本 我们知道BERT 的最大序列长度为 512,BERT 应用于文本分类的第一个问题是如何处理长度大于 512 的文本。本文尝试了以下方式处理长文章。

Truncation methods 截断法 文章的关键信息位于开头和结尾。 我们可以使用三种不同的截断文本方法来执行 BERT 微调。

head-only: keep the first 510 tokens 头部510个字符,加上两个特殊字符刚好是512 ;
tail-only: keep the last 510 tokens;尾部510个字符,同理加上两个特殊字符刚好是512 ;
head+tail: empirically select the first 128and the last 382 tokens.:尾部结合

Hierarchical methods 层级法 输入的文本首先被分成k = L/510个片段,喂入 BERT 以获得 k 个文本片段的表示向量。 每个分数的表示是最后一层的 [CLS] 标记的隐藏状态,然后我们使用均值池化、最大池化和自注意力来组合所有分数的表示。

  1. 不同层的特征 BERT 的每一层都捕获输入文本的不同特征。 文本研究了来自不同层的特征的有效性, 然后我们微调模型并记录测试错误率的性能。
image

我们可以看到:最后一层表征效果最好;最后4层进行max-pooling效果最好

  1. 灾难性遗忘 Catastrophic forgetting (灾难性遗忘)通常是迁移学习中的常见诟病,这意味着在学习新知识的过程中预先训练的知识会被遗忘。 因此,本文还研究了 BERT 是否存在灾难性遗忘问题。 我们用不同的学习率对 BERT 进行了微调,发现需要较低的学习率,例如 2e-5,才能使 BERT 克服灾难性遗忘问题。 在 4e-4 的较大学习率下,训练集无法收敛。
image

这个也深有体会,当预训练模型失效不能够收敛的时候多检查下超参数是否设置有问题。

  1. Layer-wise Decreasing Layer Rate 逐层降低学习率 下表 显示了不同基础学习率和衰减因子在 IMDb 数据集上的性能。 我们发现为下层分配较低的学习率对微调 BERT 是有效的,比较合适的设置是 ξ=0.95 和 lr=2.0e-5

为不同的BERT设置不同的学习率及衰减因子,BERT的表现如何?

image

η^l代表第几层的学习率

ITPT:继续预训练

ITPT:继续预训练
Bert是在通用的语料上进行预训练的,如果要在特定领域应用文本分类,数据分布一定是有一些差距的。这时候可以考虑进行深度预训练。

  1. Within-task pre-training:Bert在训练语料上进行预训练 In-domain pre-training:在同一领域上的语料进行预训练 Cross-domain pre-training:在不同领域上的语料进行预训练
    Within-task pretraining
    [图片上传失败...(image-177ffd-1627289320036)]
    BERT-ITPT-FiT 的意思是“BERT + with In-Task Pre-Training + Fine-Tuning”,上图表示IMDb 数据集上进行不同步数的继续预训练是有收益的。

  2. In-Domain 和 Cross-Domain Further Pre-Training

    image

    我们发现几乎所有进一步的预训练模型在所有七个数据集上的表现都比原始 BERT 基础模型。 一般来说,域内预训练可以带来比任务内预训练更好的性能。 在小句子级 TREC 数据集上,任务内预训练会损害性能,而在使用 Yah 的领域预训练中。Yah. A.语料库可以在TREC上取得更好的结果。
    这篇论文与其他模型进行了比较,结果如下表所示:

    image

改进1 Last 4 Layers Concatenating

class LastFourModel(nn.Module):def __init__(self):super().__init__()config = AutoConfig.from_pretrained(PRE_TRAINED_MODEL_NAME)config.update({'output_hidden_states':True})self.model = AutoModel.from_pretrained(PRE_TRAINED_MODEL_NAME, config=config)self.linear = nn.Linear(4*HIDDEN_SIZE, n_classes)def forward(self, input_ids, attention_mask):outputs = self.model(input_ids, attention_mask)all_hidden_states = torch.stack(outputs[2])concatenate_pooling = torch.cat((all_hidden_states[-1], all_hidden_states[-2], all_hidden_states[-3], all_hidden_states[-4]), -1)concatenate_pooling = concatenate_pooling[:,0]output = self.linear(concatenate_pooling)return soutput

改进2 模型层间差分学习率

def get_parameters(model, model_init_lr, multiplier, classifier_lr):parameters = []lr = model_init_lrfor layer in range(12,-1,-1):layer_params = {'params': [p for n,p in model.named_parameters() if f'encoder.layer.{layer}.' in n],'lr': lr}parameters.append(layer_params)lr *= multiplierclassifier_params = {'params': [p for n,p in model.named_parameters() if 'layer_norm' in n or 'linear' in n or 'pooling' in n],'lr': classifier_lr}parameters.append(classifier_params)return parameters
parameters=get_parameters(model,2e-5,0.95, 1e-4)
optimizer=AdamW(parameters)

改进3 ITPT 继续预训练

import warnings
import pandas as pd
from transformers import (AutoModelForMaskedLM,AutoTokenizer, LineByLineTextDataset,DataCollatorForLanguageModeling,Trainer, TrainingArguments)warnings.filterwarnings('ignore')train_data = pd.read_csv('data/train/train.csv', sep='\t')
test_data = pd.read_csv('data/test/test.csv', sep='\t')
train_data['text'] = train_data['title'] + '.' + train_data['abstract']
test_data['text'] = test_data['title'] + '.' + test_data['abstract']
data = pd.concat([train_data, test_data])
data['text'] = data['text'].apply(lambda x: x.replace('\n', ''))text = '\n'.join(data.text.tolist())with open('text.txt', 'w') as f:f.write(text)model_name = 'roberta-base'
model = AutoModelForMaskedLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.save_pretrained('./paper_roberta_base')train_dataset = LineByLineTextDataset(tokenizer=tokenizer,file_path="text.txt",  # mention train text file hereblock_size=256)valid_dataset = LineByLineTextDataset(tokenizer=tokenizer,file_path="text.txt",  # mention valid text file hereblock_size=256)data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=True, mlm_probability=0.15)training_args = TrainingArguments(output_dir="./paper_roberta_base_chk",  # select model path for checkpointoverwrite_output_dir=True,num_train_epochs=5,per_device_train_batch_size=16,per_device_eval_batch_size=16,gradient_accumulation_steps=2,evaluation_strategy='steps',save_total_limit=2,eval_steps=200,metric_for_best_model='eval_loss',greater_is_better=False,load_best_model_at_end=True,prediction_loss_only=True,report_to="none")trainer = Trainer(model=model,args=training_args,data_collator=data_collator,train_dataset=train_dataset,eval_dataset=valid_dataset)trainer.train()
trainer.save_model(f'./paper_roberta_base')

http://www.taodudu.cc/news/show-2722620.html

相关文章:

  • Transformer 综合讲解15-20章
  • 文本分类上分利器: Bert微调trick大全
  • std::set用法
  • ★「C++游戏」BattleOfPhantom:大乱斗游戏升级版
  • 自然语言处理NLP星空智能对话机器人系列:NLP on Transformers 101 第16章:Kaggle BERT比赛CommonLit Readability Prize赛题解析
  • C语言程序设计(2018-2019学年第一学期测试卷)
  • paper阅读笔记:How to Fine-Tune BERT for Text Classification?
  • 【论文解读】文本分类上分利器:Bert微调trick大全
  • itpt_TCPL 第四章:函数和程序结构
  • itpt_TCPL 第一章:C简要教程
  • itpt_TCPL 第三章:控制流
  • 计算机itpt证书有什么用,ITPT信息技术应用专业能力培训项目认证课程体系表.pdf...
  • itpt_TCPL 第二章:类型、运算符以及表达式
  • itpt_TCPL 第五章:指针和数组 - 第八章:UNIX系统接口
  • CCRC认证是什么,ISCCC与CCRC是什么关系?
  • 【ISCCC认证】WEB安全工程师认证介绍
  • “异军突起”的蔷薇灵动或成云安全领域“独角兽”?
  • 黑龙江民族职业学院数据备份集成
  • 蔷薇灵动或成为云安全领域“独角兽”?
  • 【国产数据库产品】
  • GB/T 20281-2020实施两周年,美创数据库防火墙的标准实践
  • CISAW信息安全保证人员介绍
  • “信息安全产品”的昨天、今天和明天
  • CCRC信息安全服务资质
  • CCRC信息安全服务资质认证流程知识点汇总
  • GIDC全球互联网数据大会:政企应用如何构筑安全合规的互联内容分发加速?
  • Bind9源代码分析
  • sim卡iccid编辑软件_5G超级SIM卡 能握在自己手中的 才是最安全的
  • CCRC信息安全服务资质。
  • 数据库应用之(教育)

文本分类上分微调技巧实战相关推荐

  1. 【直播】闫强:文本分类上分利器 -- Bert微调技巧大全

    文本分类上分利器 – Bert微调技巧大全 直播信息 主讲人:ChallengeHub成员,中国人民大学硕士. 直播时间:2021年07月25日 15:00~16:00 直播内容: 经典论文介绍与解读 ...

  2. 【论文解读】文本分类上分利器:Bert微调trick大全

    论文标题:How to Fine-Tune BERT for Text Classification? 中文标题:如何微调 BERT 进行文本分类? 论文作者:复旦大学邱锡鹏老师课题组 实验代码:ht ...

  3. 文本分类上分利器: Bert微调trick大全

    点击下面卡片,关注我呀,每天给你送来AI技术干货! 来自:ChallengeHub 论文标题:How to Fine-Tune BERT for Text Classification? 中文 中文标 ...

  4. 【NLP】文本分类微调技巧实战2.0

    讯飞比赛答辩结束,笔者和小伙伴们参加了一些讯飞的比赛,今年讯飞文本分类比赛相比去年更加多元化,涉及领域.任务和数据呈现多样性,听完各位大佬的答辩之后,结合之前经验和以下赛题总结下文本分类比赛的实战思路 ...

  5. 文本分类(下) | 卷积神经网络(CNN)在文本分类上的应用

    正文共3758张图,4张图,预计阅读时间18分钟. 1.简介 原先写过两篇文章,分别介绍了传统机器学习方法在文本分类上的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN在文本分类上的 ...

  6. 【数据竞赛】长文本竞赛上分的三种策略。

    作者:杰少 长文本处理上分策略 简 介 在诸多文本相关的问题中,我们不可避免的会遇到很多长短不一的文本,有的文本很短就是一句话,但有的文本则很长,有上好几千的文字甚至上万多文字, 如果我们设置截取的文 ...

  7. 半监督学习技术在金融文本分类上的实践

    垂直领域内的自然语言处理任务往往面临着标注数据缺乏的问题,而近年来快速发展的半监督学习技术为此类问题提供了有希望的解决方案.本文以 Google 在 2019 年提出的 UDA 框架为研究主体,详细探 ...

  8. 【NLP】深度学习文本分类|模型代码技巧

    文本分类是NLP的必备入门任务,在搜索.推荐.对话等场景中随处可见,并有情感分析.新闻分类.标签分类等成熟的研究分支和数据集. 本文主要介绍深度学习文本分类的常用模型原理.优缺点以及技巧,是「NLP入 ...

  9. 机器学习笔记(3)——使用聚类分析算法对文本分类(分类数k未知)

    聚类分析是一种无监督机器学习(训练样本的标记信息是未知的)算法,它的目标是将相似的对象归到同一个簇中,将不相似的对象归到不同的簇中.如果要使用聚类分析算法对一堆文本分类,关键要解决这几个问题: 如何衡 ...

最新文章

  1. 打开浏览器的包 node_如何发布可在浏览器和Node中使用的软件包
  2. RPC的超时设置,一不小心就是线上事故
  3. 使用 Visual Studio Team Services 和 IIS 创建持续集成管道
  4. 打造vim的python编辑器
  5. 如何操控输入框中的placeholder属性
  6. (转)创建X509证书,并获取证书密钥的一点研究
  7. svn强制要求提交注释
  8. 2014-01-01
  9. IOS7 position:fixed focus定位问题
  10. 【NOIP 2016】组合数问题
  11. 一个简单的问题,为什么我要搞得复杂绕一大圈
  12. QT5入门学习(一)
  13. hive分区表加载数据
  14. 微信小程序-实现tab选项卡
  15. 威沙特分布和逆威沙特分布(Wishart 分布及逆 Wishart 分布)
  16. linux 关闭屏幕键盘 软键盘
  17. CSS实现纯右上角倾斜四十五度封页角以及小浮标效果
  18. 软件测试面试题:一个输入手机号获取验证码的页面,说出测试过程
  19. 《Automation in Construction》期刊介绍(SCI 2区)
  20. 车载毫米波雷达测试方法

热门文章

  1. ais文件还原到mysql_金蝶kis系列数据库(.ais)打开与账套恢复办法
  2. mysql cbrt函数_Hive FUNCTIONS函数
  3. GPS软件接收机(3)——跟踪
  4. 【下载所有XKCD漫画】 详细解析
  5. Pyton爬虫实现豆瓣登陆
  6. 5种经典程序化日内交易策略
  7. 新网站关键词优化小技巧
  8. 给自己分一个 MAC地址--locally administered address
  9. 2006德国世界杯完全赛程表
  10. 什么是5G承载网?【转载自微信公众号网络技术联盟站】