8.1 迁移学习介绍

迁移学习

1.迁移学习理论

学习目标:

了解迁移学习中的有关概念.

掌握迁移学习的两种迁移方式.

1.1 迁移学习中的有关概念:

预训练模型

微调

微调脚本

1.2 预训练模型(Pretrained model):

一般情况下预训练模型都是大型模型,具备复杂的网络结构,众多的参数量,以及在足够大的数据集下进行训练而产生的模型. 在NLP领域,预训练模型往往是语言模型,因为语言模型的训练是无监督的,可以获得大规模语料,同时语言模型又是许多典型NLP任务的基础,如机器翻译,文本生成,阅读理解等,常见的预训练模型有BERT, GPT, roBERTa, transformer-XL等.

1.3 微调(Fine-tuning):

根据给定的预训练模型,改变它的部分参数或者为其新增部分输出结构后,通过在小部分数据集上训练,来使整个模型更好的适应特定任务.

1.4 微调脚本(Fine-tuning script):

实现微调过程的代码文件。这些脚本文件中,应包括对预训练模型的调用,对微调参数的选定以及对微调结构的更改等,同时,因为微调是一个训练过程,它同样需要一些超参数的设定,以及损失函数和优化器的选取等, 因此微调脚本往往也包含了整个迁移学习的过程.

关于微调脚本的说明:

一般情况下,微调脚本应该由不同的任务类型开发者自己编写,但是由于目前研究的NLP任务类型(分类,提取,生成)以及对应的微调输出结构都是有限的,有些微调方式已经在很多数据集上被验证是有效的,因此微调脚本也可以使用已经完成的规范脚本.

1.5 两种迁移方式:

(1)直接使用预训练模型,进行相同任务的处理,不需要调整参数或模型结构,这些模型开箱即用。但是这种情况一般只适用于普适任务, 如:fasttest工具包中预训练的词向量模型。另外,很多预训练模型开发者为了达到开箱即用的效果,将模型结构分各个部分保存为不同的预训练模型,提供对应的加载方法来完成特定目标.

(2)更加主流的迁移学习方式是发挥预训练模型特征抽象的能力,然后再通过微调的方式,通过训练更新小部分参数以此来适应不同的任务。这种迁移方式需要提供小部分的标注数据来进行监督学习.

关于迁移方式的说明:

直接使用预训练模型的方式, 已经在fasttext的词向量迁移中学习. 接下来的迁移学习实践将主要讲解通过微调的方式进行迁移学习.

2.NLP标准数据集

学习目标:

了解NLP中GLUE标准数据集合的相关知识.

掌握GLUE标准数据集合的下载方式, 数据样式及其对应的任务类型.

2.1 GLUE数据集合的介绍:

GLUE由纽约大学, 华盛顿大学, Google联合推出, 涵盖不同NLP任务类型, 截止至2020年1月其中包括11个子任务数据集, 成为衡量NLP研究发展的衡量标准.

2.2 GLUE数据集合包含以下数据集:

diagnostics数据集(官方未完善)

CoLA: 语句的语法是否正确, 二分类

SST-2: 情感分析语句积极, 消极, 二分类

MRPC: 判断句子对含义是否相同, 二分类

SST-B: 衡量句子对的相似度, 多分类/回归, 相似度评分[0.0 - 5.0]

QQP: 判断句子对是否重复性问题, 二分类

MNLI(SNLI): 判断句子对的语义信息的关系, 三分类 (蕴含, 矛盾, 不蕴含不矛盾)

QNLI(RTE, WNLI): 判断句子对是否蕴含关系, 二分类

2.3 下载GLUE数据集:

下载脚本代码:略

3. NLP中的常用预训练模型:

    BERT

    GPT

    GPT-2

    Transformer-XL

    XLNet

    XLM

    RoBERTa

    DistilBERT

    ALBERT

    T5

    XLM-RoBERTa

4. 加载和使用预训练模型:

在这里我们使用torch.hub工具进行模型的加载和使用.

这些预训练模型由世界先进的NLP研发团队huggingface提供.

加载和使用预训练模型的步骤:

第一步: 确定需要加载的预训练模型并安装依赖包.

第二步: 加载预训练模型的映射器tokenizer.

第三步: 加载带/不带头的预训练模型.

第四步: 使用模型获得输出结果.

5. 迁移学习实践:

5.1 指定任务类型的微调脚本:

huggingface研究机构向我们提供了针对GLUE数据集合任务类型的微调脚本, 这些微调脚本的核心都是微调模型的最后一个全连接层.

通过简单的参数配置来指定GLUE中存在任务类型(如: CoLA对应文本二分类, MRPC对应句子对文本二分类, STS-B对应句子对文本多分类), 以及指定需要微调的预训练模型.

huggingface研究机构向我们提供了针对GLUE数据集合任务类型的微调脚本, 这些微调脚本的核心都是微调模型的最后一个全连接层.

通过简单的参数配置来指定GLUE中存在任务类型(如: CoLA对应文本二分类, MRPC对应句子对文本二分类, STS-B对应句子对文本多分类), 以及指定需要微调的预训练模型.

5.2 指定任务类型的微调脚本使用步骤:

第一步: 下载微调脚本文件

第二步: 配置微调脚本参数 , 创建run_glue.sh文件

# 定义DATA_DIR: 微调数据所在路径, 这里我们使用glue_data中的数据作为微调数据

export DATA_DIR="../../glue_data"

# 定义SAVE_DIR: 模型的保存路径, 我们将模型保存在当前目录的bert_finetuning_test文件中

export SAVE_DIR="./bert_finetuning_test/"

# 使用python运行微调脚本

# --model_type: 选择需要微调的模型类型, 这里可以选择BERT, XLNET, XLM, roBERTa, distilBERT, ALBERT

# --model_name_or_path: 选择具体的模型或者变体, 这里是在英文语料上微调, 因此选择bert-base-uncased

# --task_name: 它将代表对应的任务类型, 如MRPC代表句子对二分类任务

# --do_train: 使用微调脚本进行训练

# --do_eval: 使用微调脚本进行验证

# --data_dir: 训练集及其验证集所在路径, 将自动寻找该路径下的train.tsv和dev.tsv作为训练集和验证集

# --max_seq_length: 输入句子的最大长度, 超过则截断, 不足则补齐

# --learning_rate: 学习率

# --num_train_epochs: 训练轮数

# --output_dir $SAVE_DIR: 训练后的模型保存路径

# --overwrite_output_dir: 再次训练时将清空之前的保存路径内容重新写入

python run_glue.py \

 --model_type BERT \ 

 --model_name_or_path bert-base-uncased \

 --task_name MRPC \ 

 --do_train \ 

 --do_eval \

 --data_dir $DATA_DIR/MRPC/ \

 --max_seq_length 128 \ 

 --learning_rate 2e-5 \ 

 --num_train_epochs 1.0 \ 

 --output_dir $SAVE_DIR \

 --overwrite_output_dir

第三步: 运行并检验效果  sh run_glue.sh(启动脚本会调用run_glue.py文件来执行微调程序。程序主要有三部分功能:加载模型,加载数据,进行微调(训练,验证,预测)。

5.3 通过微调脚本微调后模型的使用步骤:

第一步: 在https://huggingface.co/join上创建一个帐户

第二步: 在服务器终端使用transformers-cli登陆

第三步: 使用transformers-cli上传模型并查看      

# 选择正确的微调模型路径$ transformers-cli upload ./bert_finetuning_test/

# 查看上传结果$ transformers-cli ls

第四步: 使用pytorch.hub加载模型进行使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343