PaddleHub 1.0正式发布: 一键模型加载,十行代码完成迁移学习

飞桨(PaddlePaddle)核心框架Paddle Fluid v1.5已经发布,而作为其关键工具,用来迁移学习的PaddleHub也进行了全面更新,正式发布了1.0版本。

全新的PaddleHub模型和任务更加丰富,为用户提供了覆盖文本图像视频三大领域八大任务的40+预训练模型,同时还在飞桨官网上开辟了PaddleHub的网页。

本文将对PaddleHub及其更新做更加全面的介绍。

PaddleHub是什么

深度学习模型的价值在AI时代不断增大。要想得到一个高质量的深度学习模型,离不开4个要素,优秀的算法、充足的算力、丰富的数据以及专家知识。大家在深度学习中常常遇到以下问题:

  • 一些研究领域只有少量标注数据,且数据标注成本较高,不足以训练一个足够鲁棒的神经网络

  • 大规模神经网络的训练依赖于大量的计算资源,这对于一般用户而言难以实现

  • 应对于普适化需求的模型,在特定应用上表现不尽如人意

PaddleHub就是为了解决对深度学习模型的需求而开发的工具。

它基于飞桨领先的核心框架,精选效果优秀的算法,提供了百亿级大数据训练的预训练模型,方便用户不用花费大量精力从头开始训练一个模型。PaddleHub可以便捷地获取这些预训练模型,完成模型的管理和一键预测。

配合使用Fine-tune API,可以基于大规模预训练模型快速完成迁移学习,让预训练模型能更好地服务于用户特定场景的应用。

PaddleHub有什么特色

1、 通过PaddleHub,开发者可以便捷地获取飞桨生态下的所有预训练模型,涵盖了图像分类目标检测词法分析、语义模型、情感分析、语言模型、视频分类、图像生成八类主流模型40余个,如图1 所示。飞桨还发布了PaddleHub的官方网页,对各个预训练模型的应用提供了详实的介绍。

图1 PaddleHub提供了40+官方预训练模型

2、PaddleHub引入了模型即软件的概念,通过Python API或者命令行工具,一键完成预训练模型地预测。此外还借鉴了Anaconda和pip软件包管理的理念设计了一套命令行接口。

深度学习时代,模型发展的趋势会逐渐向软件工程靠拢;未来模型可以当作一个可执行程序,一键预测;也可以是第三方库,通过模型插拔的方式提高开发者的开发效率。

同时模型会有版本的概念,通过不断迭代升级的方式提升我们模型的效果。通过命令行工具,可以方便快捷的完成模型的搜索、下载、安装、预测等功能,对应的关键的命令分别是search,download,install,run等。

如以下示例,在安装完成飞桨和PaddleHub以后(具体安装方法见后文示例),使用词法分析模型LAC,可以一键实现分词。

$ hub run lac --input_text "今天是个好日子"
[{'word': ['今天', '是', '个', '好日子'], 'tag': ['TIME', 'v', 'q', 'n']}]

再如以下示例所示,是一个目标检测的例子,通过hub run 调用不同的目标检测模型,一行即可完成预测,同时也可以快速体验哪个模型能更符合开发的需求。

$ hub run yolov3_coco2017 --input_path test.jpg 
$ hub run faster_rcnn_coco2017 --input_path test.jpg

图2 PaddleHub一键完成预训练模型地预测

3、通过PaddleHub Fine-tune API,结合少量代码即可完成大规模预训练模型的迁移学习。下面一节我们也会全面介绍PaddleHub的API。

PaddleHub API全景

PaddleHub API的全景图如图3所示。

为了更好帮助用户更好的应用预训练模型,PaddleHub对Fine-tune做了6个层次的抽象。

图3 PaddleHub Fine-tune API全景

  • 数据集Dataset:PaddleHub提供多种NLP任务和CV任务的数据集,用户也可以在自定义数据集上完成Fine-tune。

  • 数据预处理Reader:PaddleHub的数据预处理模块Reader对常见的NLP和CV任务进行了抽象。

  • 预训练模型Module:Module代表了一个预训练模型。

  • 优化策略Strategy:在PaddleHub中,Strategy类封装了一系列适用于迁移学习的Fine-tune策略。Strategy包含了对预训练参数使用什么学习率变化策略,使用哪种类型的优化器,使用什么类型的正则化等。

  • 运行配置 RunConfig:在PaddleHub中,RunConfig代表了在对Task进行Fine-tune时的运行配置。包括运行的epoch次数、batch的大小、是否使用GPU训练等。

  • 迁移任务Task:PaddleHub预置了常见任务的Task。Task代表了一个Fine-tune的任务。任务中包含了执行该任务相关的Program、数据Reader、运行配置等内容。每种Task都有自己特有的应用场景以及提供了对应的度量指标,用于适应用户的不同需求。预置的任务类型包括图像分类文本分类、序列分类和多标签分类各类任务。

PaddleHub还支持用户可以通过继承BasicTask来实现自己的任务。

PaddleHub封装了finetune、eval、finetune_and_eval、predict等直观的基础接口,让开发者更方便完成模型的迁移和应用。

如何快速开始

图4 PaddleHub Fine-tune API使用

接下来本文结合实际案例,讲述如何快速使用PaddleHub实现十行代码完成文本分类迁移。

场景是标注数据不多中文文本分类场景,如何提高分类的精度和模型的泛化能力。

这里的方案是借助ERNIE + PaddleHub Finetune API,除去安装,只想要5个步骤,10行代码即可解决这一问题。

这里先介绍一下ERNIE,它是百度发布的知识增强的预训练模型,通过建模海量数据中的词、实体及实体关系,学习真实世界的语义知识。

具体来说,ERNIE 模型通过对词、实体等语义单元的掩码,使得模型学习完整概念的语义表示。

相较于 BERT 学习原始语言信号,ERNIE 直接对先验语义知识单元进行建模,增强了模型语义表示能力。

ERNIE在多个公开的中文数据集上进行了效果验证,包括语言推断、语义相似度、命名实体识别、情感分析、问答匹配等自然语言处理各类任务上,均超越了语义表示模型 BERT 的效果。

接下来开始实战演练PaddleHub。

1. 安装

$ pip install paddlepaddle  #CPU安装命令

或者

$ pip install paddlepaddle-gpu # GPU安装

以上命令是安装CPU或者GPU版本的飞桨。通过以下命令则可以安装PaddleHub。

$ pip install paddlehub

另外,PaddleHub内置了深度学习可视化工具VisualDL的依赖,通过VisualDL,可以很好的对深度学习任务进行可视化。

2. 选择预训练模型

在完成安装飞桨与PaddleHub,import导入相应模块后,一行代码即可加载预训练模型。只要1分钟,你就能得到万级别GPU小时训练出来的ERNIE模型。当然也可以支持BERT模型调用,只需要更换不同的模型名称即可。

import paddle.fluid as fluid
import paddlehub as hub
module = hub.Module(name="ernie")
inputs, outputs, program = module.context(trainable=True, max_seq_len=128)

第二步是获取模型上下文,包括了预训练模型的输入Tensor,输出Tensor还有计算图。这里面有个关键参数是trainable。如果trainable为True,那么就是一个fine-tune的任务,预训练模型的参数会做微调,以更好的适应顶层的应用、如果trainable为False,那么就预训练模型参数保持不变,将它当作特征提取器。对于ERNIE模型而言,不推荐使用特征提取,一定要通过Finetune的方式才能取得更好的效果。

3. 数据处理

选择模型后就是进行数据预处理,针对不同的迁移任务做了一系列数据处理的封装。

dataset = hub.dataset.ChnSentiCorp()
reader = hub.reader.ClassifyReader(
    dataset=dataset,
    vocab_path=module.get_vocab_path(),
    max_seq_len=128)

hub.dataset.ChnSentiCorp() 会自动从网络下载数据集并解压到用户目录下。

4. 策略配置

接下来开始配置Fine-tune时用到的优化策略。针对ERNIE与BERT类任务,PaddleHub封装了适合这一任务的迁移学习优化策略AdamWeightDecayStrategy

strategy = hub.AdamWeightDecayStrategy(
    learning_rate=5e-5,
    weight_decay=0.01,
    lr_scheduler="linear_decay",
)

config=hub.RunConfig(use_cuda=True, num_epoch=3,batch_size=32,checkpoint_dir=" ckpt_dir",strategy=strategy)

5. 创建迁移学习任务

组建移学习任务这块也非常简单,首先是选择预训练的模型输出,作为我们句子的特征。

在这里ERNIE我们选择pooled_output作为句子的特征输出。也可以通过获取sequence_output来得到词粒度的特征,这个特征般用于序列标注。

pooled_output = outputs["pooled_output"]

# feed_list的Tensor顺序不可以调整
feed_list = [
    inputs["input_ids"].name,
    inputs["position_ids"].name,
    inputs["segment_ids"].name,
    inputs["input_mask"].name,
]

cls_task = hub.TextClassifierTask(
    data_reader=reader,
    feature=pooled_output,
    feed_list=feed_list,
    num_classes=dataset.num_labels,
    config=config)

cls_task.finetune_and_eval()

Finetuning API非常智能,会自动完成评估,保存最优模型还有自动可视化的功能。Finetune API训练过程中会自动对关键训练指标进行打点,启动程序后执行下面命令

$ visualdl --logdir ckpt_dir/vdllog -t ${HOST_IP}

其中${HOST_IP}为本机IP地址,如本机IP地址为192.168.0.1,用浏览器打开192.168.0.1:8040,其中8040为端口号,即可看到训练过程中指标的变化情况

6. 模型预测

通过Finetune完成模型训练后,在对应的ckpt_dir目录下,会自动保存验证集上效果最好的模型。接下来可以按照如下的示例进行预测。

# Data to be prdicted
data = [
    ["这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般"], ["交通方便;环境很好;服务态度很好 房间较小"],["还稍微重了点,可能是硬盘大的原故,还要再轻半斤就好了。其他要进一步验证。贴的几种膜气泡较多,用不了多久就要更换了,屏幕膜稍好点,但比没有要强多了。建议配赠几张膜让用用户自己贴。"],[ "前台接待太差,酒店有A B楼之分,本人check-in后,前台未告诉B楼在何处,并且B楼无明显指示;房间太小,根本不像4星级设施,下次不会再选择入住此店啦"], ["19天硬盘就罢工了~~~算上运来的一周都没用上15天~~~可就是不能换了~~~唉~~~~你说这算什么事呀~~~"]]
index = 0
run_states = cls_task.predict(data=data)
results = [run_state.run_results for run_state in run_states]
for batch_result in results:
    # get predict index
    batch_result = np.argmax(batch_result, axis=2)[0]
    for result in batch_result:
        print("%s\tpredict=%s" % (data[index][0], result))
        index += 1

除了以上的介绍,PaddleHub还在AI Studio和AIBook上提供了IPython NoteBook形式的demo,开发者可以直接在平台上在线体验PaddleHub带来的各种便捷。

此外,AI studio平台还发布了亿元算力支持计划,提供了“每日运行赠12小时”和“连续5天运行赠48小时”两种机制共同服务,每天都得能轻松获得! 

该平台集成算力、教程、 样例模型、工程开发、在线部署的能力, 乃至比赛平台,满足从0基础学习到技术落地的全生命周期,帮助开发者全面掌握深度学习技术的各方各面。

项目地址:
https://github.com/PaddlePaddle/PaddleHub?fr=gzh

PaddlePaddle
PaddlePaddle

PaddlePaddle是百度独立研发的深度学习平台,易用,高效,灵活可伸缩,可支持海量图像识别分类、机器翻译和自动驾驶等多个领域业务需求,现已全面开源。

产业预训练模型词法分析图像分类目标检测PaddlePaddle
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

文本分类技术

该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

词法分析技术

词法分析是计算机科学中将字符序列转换为标记序列的过程。进行词法分析的程序或者函数叫作词法分析器,也叫扫描器。词法分析器一般以函数的形式存在,供语法分析器调用

命名实体识别技术

命名实体识别(NER)是信息提取(Information Extraction)的一个子任务,主要涉及如何从文本中提取命名实体并将其分类至事先划定好的类别,如在招聘信息中提取具体招聘公司、岗位和工作地点的信息,并将其分别归纳至公司、岗位和地点的类别下。命名实体识别往往先将整句拆解为词语并对每个词语进行此行标注,根据习得的规则对词语进行判别。这项任务的关键在于对未知实体的识别。基于此,命名实体识别的主要思想在于根据现有实例的特征总结识别和分类规则。这些方法可以被分为有监督(supervised)、半监督(semi-supervised)和无监督(unsupervised)三类。有监督学习包括隐形马科夫模型(HMM)、决策树、最大熵模型(ME)、支持向量机(SVM)和条件随机场(CRF)。这些方法主要是读取注释语料库,记忆实例并进行学习,根据这些例子的特征生成针对某一种实例的识别规则。

迁移学习技术

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

图像生成技术

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

百度机构

百度(纳斯达克:BIDU),全球最大的中文搜索引擎、最大的中文网站。1999年底,身在美国硅谷的李彦宏看到了中国互联网及中文搜索引擎服务的巨大发展潜力,抱着技术改变世界的梦想,他毅然辞掉硅谷的高薪工作,携搜索引擎专利技术,于 2000年1月1日在中关村创建了百度公司。 “百度”二字,来自于八百年前南宋词人辛弃疾的一句词:众里寻他千百度。这句话描述了词人对理想的执着追求。 百度拥有数万名研发工程师,这是中国乃至全球最为优秀的技术团队。这支队伍掌握着世界上最为先进的搜索引擎技术,使百度成为中国掌握世界尖端科学核心技术的中国高科技企业,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。

http://home.baidu.com/
目标检测技术

一般目标检测(generic object detection)的目标是根据大量预定义的类别在自然图像中确定目标实例的位置,这是计算机视觉领域最基本和最有挑战性的问题之一。近些年兴起的深度学习技术是一种可从数据中直接学习特征表示的强大方法,并已经为一般目标检测领域带来了显著的突破性进展。

推荐文章
暂无评论
暂无评论~