Whole Word Masking (wwm),暂翻译为全词Mask或整词Mask,是谷歌在2019年5月31日发布的一项BERT的升级版本,主要更改了原预训练阶段的训练样本生成策略。 简单来说,原有基于WordPiece的分词方式会把一个完整的词切分成若干个子词,在生成训练样本时,这些被分开的子词会随机被mask。 在全词Mask中,如果一个完整的词的部分WordPiece子词被mask,则同属该词的其他部分也会被mask,即全词Mask。

需要注意的是,这里的mask指的是广义的mask(替换成[MASK];保持原词汇;随机替换成另外一个词),并非只局限于单词替换成[MASK]标签的情况。 更详细的说明及样例请参考:#4

同理,由于谷歌官方发布的BERT-base, Chinese中,中文是以字为粒度进行切分,没有考虑到传统NLP中的中文分词(CWS)。 我们将全词Mask的方法应用在了中文中,使用了中文维基百科(包括简体和繁体)进行训练,并且使用了哈工大LTP作为分词工具,即对组成同一个词的汉字全部进行Mask。

下述文本展示了全词Mask的生成样例。 注意:为了方便理解,下述例子中只考虑替换成[MASK]标签的情况。

说明 样例
原始文本 使用语言模型来预测下一个词的probability。
分词文本 使用 语言 模型 来 预测 下 一个 词 的 probability 。
原始Mask输入 使 用 语 言 [MASK] 型 来 [MASK] 测 下 一 个 词 的 pro [MASK] ##lity 。
全词Mask输入 使 用 语 言 [MASK] [MASK] 来 [MASK] [MASK] 下 一 个 词 的 [MASK] [MASK] [MASK] 。

在2017年之前,工业界和学术界对NLP文本处理依赖于序列模型Recurrent Neural Network (RNN).paddlenlp.seq2vec是什么? 瞧瞧它怎么完成情感分析教程介绍了如何使用paddlenlp.seq2vec表征文本语义。近年来随着深度学习的发展,模型参数的数量飞速增长。为了训练这些参数,需要更大的数据集来避免过拟合。然而,对于大部分NLP任务来说,构建大规模的标注数据集非常困难(成本过高),特别是对于句法和语义相关的任务。相比之下,大规模的未标注语料库的构建则相对容易。为了利用这些数据,我们可以先从其中学习到一个好的表示,再将这些表示应用到其他任务中。最近的研究表明,基于大规模未标注语料库的预训练模型(Pretrained Models, PTM) 在NLP任务上取得了很好的表现。近年来,大量的研究表明基于大型语料库的预训练模型(Pretrained Models, PTM)可以学习通用的语言表示,有利于下游NLP任务,同时能够避免从零开始训练模型。随着计算能力的发展,深度模型的出现(即 Transformer)和训练技巧的增强使得 PTM 不断发展,由浅变深。本图片来自于:https://github.com/thunlp/PLMpapers本示例展示了以ERNIE(Enhanced Representation through Knowledge Integration)代表的预训练模型如何Finetune完成中文文本分类任务。模型简介
本项目针对中文文本分类问题,开源了一系列模型,供用户可配置地使用:BERT(Bidirectional Encoder Representations from Transformers)中文模型,简写bert-base-chinese, 其由12层Transformer网络组成。
ERNIE(Enhanced Representation through Knowledge Integration),支持ERNIE 1.0中文模型(简写ernie-1.0)和ERNIE Tiny中文模型(简写ernie-tiny)。 其中ernie由12层Transformer网络组成,ernie-tiny由3层Transformer网络组成。
RoBERTa(A Robustly Optimized BERT Pretraining Approach),支持24层Transformer网络的roberta-wwm-ext-large和12层Transformer网络的roberta-wwm-ext。
模型  dev acc test acc
bert-base-chinese   0.93833 0.94750
bert-wwm-chinese    0.94583 0.94917
bert-wwm-ext-chinese    0.94667 0.95500
ernie-1.0   0.94667 0.95333
ernie-tiny  0.93917 0.94833
roberta-wwm-ext 0.94750 0.95250
roberta-wwm-ext-large   0.95250 0.95333
rbt3    0.92583 0.93250
rbtl3   0.9341  0.93583
快速开始
代码结构说明
以下是本项目主要代码结构及说明:pretrained_models/
├── deploy # 部署
│   └── python
│       └── predict.py # python预测部署示例
│   └── serving
│       ├── client.py # 客户端预测脚本
│       └── export_servable_model.py # 导出Serving模型及其配置
├── export_model.py # 动态图参数导出静态图参数脚本
├── predict.py # 预测脚本
├── README.md # 使用说明
└── train.py # 训练评估脚本
模型训练
我们以中文情感分类公开数据集ChnSentiCorp为示例数据集,可以运行下面的命令,在训练集(train.tsv)上进行模型训练,并在开发集(dev.tsv)验证$ unset CUDA_VISIBLE_DEVICES
$ python -m paddle.distributed.launch --gpus "0" train.py --device gpu --save_dir ./checkpoints
可支持配置的参数:save_dir:可选,保存训练模型的目录;默认保存在当前目录checkpoints文件夹下。
max_seq_length:可选,ERNIE/BERT模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数;默认为128。
batch_size:可选,批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为32。
learning_rate:可选,Fine-tune的最大学习率;默认为5e-5。
weight_decay:可选,控制正则项力度的参数,用于防止过拟合,默认为0.00。
epochs: 训练轮次,默认为3。
warmup_proption:可选,学习率warmup策略的比例,如果0.1,则学习率会在前10%训练step的过程中从0慢慢增长到learning_rate, 而后再缓慢衰减,默认为0.1。
init_from_ckpt:可选,模型参数路径,热启动模型训练;默认为None。
seed:可选,随机种子,默认为1000.
device: 选用什么设备进行训练,可选cpu或gpu。如使用gpu训练则参数gpus指定GPU卡号。
代码示例中使用的预训练模型是ERNIE,如果想要使用其他预训练模型如BERT,RoBERTa,Electra等,只需更换model 和 tokenizer即可。# 使用ernie预训练模型
# ernie
model = ppnlp.transformers.ErnieForSequenceClassification.from_pretrained('ernie',num_classes=2))
tokenizer = ppnlp.transformers.ErnieTokenizer.from_pretrained('ernie')# ernie-tiny
# model = ppnlp.transformers.ErnieForSequenceClassification.rom_pretrained('ernie-tiny',num_classes=2))
# tokenizer = ppnlp.transformers.ErnieTinyTokenizer.from_pretrained('ernie-tiny')# 使用bert预训练模型
# bert-base-chinese
model = ppnlp.transformers.BertForSequenceClassification.from_pretrained('bert-base-chinese', num_class=2)
tokenizer = ppnlp.transformers.BertTokenizer.from_pretrained('bert-base-chinese')# bert-wwm-chinese
# model = ppnlp.transformers.BertForSequenceClassification.from_pretrained('bert-wwm-chinese', num_class=2)
# tokenizer = ppnlp.transformers.BertTokenizer.from_pretrained('bert-wwm-chinese')# bert-wwm-ext-chinese
# model = ppnlp.transformers.BertForSequenceClassification.from_pretrained('bert-wwm-ext-chinese', num_class=2)
# tokenizer = ppnlp.transformers.BertTokenizer.from_pretrained('bert-wwm-ext-chinese')# 使用roberta预训练模型
# roberta-wwm-ext
# model = ppnlp.transformers.RobertaForSequenceClassification.from_pretrained('roberta-wwm-ext', num_class=2)
# tokenizer = ppnlp.transformers.RobertaTokenizer.from_pretrained('roberta-wwm-ext')# roberta-wwm-ext
# model = ppnlp.transformers.RobertaForSequenceClassification.from_pretrained('roberta-wwm-ext-large', num_class=2)
# tokenizer = ppnlp.transformers.RobertaTokenizer.from_pretrained('roberta-wwm-ext-large')
更多预训练模型,参考transformers程序运行时将会自动进行训练,评估,测试。同时训练过程中会自动保存模型在指定的save_dir中。 如:checkpoints/
├── model_100
│   ├── model_config.json
│   ├── model_state.pdparams
│   ├── tokenizer_config.json
│   └── vocab.txt
└── ...
NOTE:如需恢复模型训练,则可以设置init_from_ckpt, 如init_from_ckpt=checkpoints/model_100/model_state.pdparams。
如需使用ernie-tiny模型,则需要提前先安装sentencepiece依赖,如pip install sentencepiece
使用动态图训练结束之后,还可以将动态图参数导出成静态图参数,具体代码见export_model.py。静态图参数保存在output_path指定路径中。 运行方式:
python export_model.py --params_path=./checkpoint/model_900/model_state.pdparams --output_path=./static_graph_params
其中params_path是指动态图训练保存的参数路径,output_path是指静态图参数导出路径。导出模型之后,可以用于部署,deploy/python/predict.py文件提供了python部署预测示例。运行方式:python deploy/python/predict.py --model_file=static_graph_params.pdmodel --params_file=static_graph_params.pdiparams
模型预测
启动预测:export CUDA_VISIBLE_DEVICES=0
python predict.py --device 'gpu' --params_path checkpoints/model_900/model_state.pdparams
将待预测数据如以下示例:这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般
怀着十分激动的心情放映,可是看着看着发现,在放映完毕后,出现一集米老鼠的动画片
作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。
可以直接调用predict函数即可输出预测结果。如Data: 这个宾馆比较陈旧了,特价的房间也很一般。总体来说一般      Label: negative
Data: 怀着十分激动的心情放映,可是看着看着发现,在放映完毕后,出现一集米老鼠的动画片      Label: negative
Data: 作为老的四星酒店,房间依然很整洁,相当不错。机场接机服务很好,可以在车上办理入住手续,节省时间。      Label: positive
使用Paddle Serving API进行推理部署
NOTE:使用Paddle Serving服务化部署需要将动态图保存的模型参数导出为静态图Inference模型参数文件。如何导出模型参考上述提到的导出模型。Inference模型参数文件:文件 说明
static_graph_params.pdiparams   模型权重文件,供推理时加载使用
static_graph_params.pdmodel 模型结构文件,供推理时加载使用
依赖安装
服务器端依赖:
pip install paddle-serving-app paddle-serving-client paddle-serving-server==0.5.0
如果服务器端可以使用GPU进行推理,则安装server的gpu版本,安装时要注意参考服务器当前CUDA、TensorRT的版本来安装对应的版本:Serving readmepip install paddle-serving-app paddle-serving-client paddle-serving-server-gpu==0.5.0
客户端依赖:
pip install paddle-serving-app paddle-serving-client
建议在docker容器中运行服务器端和客户端以避免一些系统依赖库问题,启动docker镜像的命令参考:Serving readmeServing的模型和配置导出
使用Serving进行预测部署时,需要将静态图inference model导出为Serving可读入的模型参数和配置。运行方式如下:python -u deploy/serving/export_servable_model.py \--inference_model_dir ./ \--model_file static_graph_params.pdmodel \--params_file static_graph_params.pdiparams
可支持配置的参数:inference_model_dir: Inference推理模型所在目录,这里假设为当前目录。
model_file: 推理需要加载的模型结构文件。
params_file: 推理需要加载的模型权重文件。
执行命令后,会在当前目录下生成2个目录:serving_server 和 serving_client。serving_server目录包含服务器端所需的模型和配置,需将其拷贝到服务器端容器中;serving_client目录包含客户端所需的配置,需将其拷贝到客户端容器中。服务器启动server
在服务器端容器中,启动serverpython -m deploy/serving/paddle_serving_server_gpu.serve \--model ./serving_server \--port 8090
其中:model: server加载的模型和配置所在目录。
port: 表示server开启的服务端口8090。
如果服务器端可以使用GPU进行推理计算,则启动服务器时可以配置server使用的GPU idpython -m paddle_serving_server_gpu.serve \--model ./serving_server \--port 8090 \--gpu_id 0
gpu_id: server使用0号GPU。
客服端发送推理请求
在客户端容器中,使用前面得到的serving_client目录启动client发起RPC推理请求。和使用Paddle Inference API进行推理一样。从命令行读取输入数据发起推理请求
python deploy/serving/client.py \--client_config_file ./serving_client/serving_client_conf.prototxt \--server_ip_port 127.0.0.1:8090 \--max_seq_length 128
其中参数释义如下:client_config_file 表示客户端需要加载的配置文件。
server_ip_port 表示服务器端的ip地址和端口号。ip地址和端口号需要根据实际情况进行更换。
max_seq_length 表示输入的最大句子长度,超过该长度将被截断。

Whole Word Masking (wwm) BERT PaddlePaddle常用预训练模型加载相关推荐

  1. Pytorch预训练模型加载

    1. 保存模型:torch.save(model.state_dict(), PATH) 加载模型:model.load_state_dict(torch.load(PATH)) model.eval ...

  2. Pytorch:NLP 迁移学习、NLP中的标准数据集、NLP中的常用预训练模型、加载和使用预训练模型、huggingface的transfomers微调脚本文件

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) run_glue.py微调脚本代码 python命令执行run ...

  3. Whole Word Masking (wwm)

    Whole Word Masking (wwm) 本文代码部分参考github项目: https://github.com/BSlience/search-engine-zerotohero/tree ...

  4. 使用google的bert结合哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer

    使用bert的哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer 前提 简要介绍 开始 导入必要的包和环境 准备并读取数据 导入模型的tokenizer 对数据进行t ...

  5. php 图片预览原理,JavaScript_纯JS实现的批量图片预览加载功能,1.实现原理直接见代码,需要一 - phpStudy...

    纯JS实现的批量图片预览加载功能 1.实现原理直接见代码,需要一张转圈的小图片,需要预览的所有图片默认的位置全是这张小图片,滚轮滚到原图需要出现的位置时候,预览加载替换小图片.实现效果 复制代码 代码 ...

  6. android酷炫转圈动画,android常用旋转线条加载动画

    想要知道关于更多自定义View的实例,请参考:android自定义View索引 先上个效果图,以免大家跑错地了. 嗯,整个来说呢,除了舍不得充VIP去掉水印之外,其他都挺好的. 下面开始实现我们的效果 ...

  7. 小程序预览加载不出图片

    小程序预览加载不出图片 比如在开发者工具做了一个swiper轮播图 <view> <swiper indicator-dots="true" indicator- ...

  8. 一大批中文(BERT等)预训练模型等你认领!

    作者丨Zhe Zhao 机构丨RUC DBIIR & Tencent Research 研究方向丨自然语言处理 项目简介 预训练模型已经成为了 NLP 领域最重要的资源之一.当我们拿到一个 N ...

  9. 从word2vec到bert:NLP预训练模型发展史

    自然语言处理 Author:张俊林 转自:深度学习前沿笔记 知乎专栏 原文链接:https://zhuanlan.zhihu.com/p/49271699 本文的主题是自然语言处理中的预训练过程,会大 ...

最新文章

  1. struts2笔记01-环境搭建
  2. 蚂蚁金服 java电话面_蚂蚁金服前端电话面试(一面)
  3. 番茄时间管理和四象限工作法完美搭配造就职场神器
  4. A Java Runtime Environment (JRE) or Java Development Kit (JDK)
  5. u32、u16、u8 数据类型
  6. APP发布Xcode7
  7. simhash与Google的网页去重(转)
  8. oracle中的new old 关键字
  9. python21天打卡Day6-元组
  10. python读音有道-Python版有道翻译
  11. '_thread._local' object has no attribute 'value'
  12. 如何锁定计算机桌面图标,解决win7、win10系统怎么锁定电脑桌面图标
  13. spearman相关系数 matlab,数学建模——相关系数(4)——斯皮尔曼相关系数(spearman)...
  14. 移动硬盘打不开,换一台电脑就又可以打开了
  15. python爬取音乐网站排行榜_使用Python抓取Web端QQ音乐排行榜 批量下载QQ音乐到本地...
  16. Python状况:为什么PyPy是Python的未来?
  17. 这篇文章不错,仔细读读,码农晋升为技术管理者后,痛并快乐着的纠结内心...
  18. 十年微博与没落搜狐的社交求变
  19. python中占位符解释
  20. matlab ccd采集,CCD数据采集.doc

热门文章

  1. 内外兼修 华润啤酒的“有为”哲学
  2. 网吧部分机器耳麦line in线要重插一下才能说话的设置
  3. Could not get unknown property ‘packageForR‘ for task ‘:app:processDebugResources‘ of type com.andro
  4. “自动修复”无法修复你的电脑-SATAFIRM S11-固态硬盘坏了
  5. 在线电子书阅读微信小程序 毕业设计(1)首页
  6. 国庆、中秋双节同庆 青岛浮山湾灯光秀启动节日模式
  7. 项目要求完成杀毒软件,可是为什么网上关于杀毒软件的资料那么少啊
  8. pytorch一小时速成
  9. 文章快速伪原创(怎么快速得到伪原创文章)
  10. 从学校家长委员会谈开去