快递单信息抽取【二】基于 ERNIE1.0 至 ErnieGram + CRF 预训练模型
本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4157455?contributionType=1
1.ERNIE 1.0 完成快递单信息抽取
命名实体识别是 NLP 中一项非常基础的任务,是信息提取、问答系统、句法分析、机器翻译等众多 NLP 任务的重要基础工具。命名实体识别的准确度,决定了下游任务的效果,是 NLP 中的一个基础问题。在 NER 任务提供了两种解决方案,一类 LSTM/GRU + CRF,通过 RNN 类的模型来抽取底层文本的信息,而 CRF(条件随机场)模型来学习底层 Token 之间的联系;另外一类是通过预训练模型,例如 ERNIE,BERT 模型,直接来预测 Token 的标签信息。
本项目将演示如何使用 PaddleNLP 语义预训练模型 ERNIE 完成从快递单中抽取姓名、电话、省、市、区、详细地址等内容,形成结构化信息。辅助物流行业从业者进行有效信息的提取,从而降低客户填单的成本。
在 2017 年之前,工业界和学术界对文本处理依赖于序列模型Recurrent Neural Network (RNN).
<p align="center"><img src="http://colah.github.io/posts/2015-09-NN-Types-FP/img/RNN-general.png" width="40%" height="30%"> <br /></p><br><center>图 1:RNN 示意图</center></br>
基于BiGRU+CRF的快递单信息抽取项目介绍了如何使用序列模型完成快递单信息抽取任务。<br>
近年来随着深度学习的发展,模型参数的数量飞速增长。为了训练这些参数,需要更大的数据集来避免过拟合。然而,对于大部分 NLP 任务来说,构建大规模的标注数据集非常困难(成本过高),特别是对于句法和语义相关的任务。相比之下,大规模的未标注语料库的构建则相对容易。为了利用这些数据,我们可以先从其中学习到一个好的表示,再将这些表示应用到其他任务中。最近的研究表明,基于大规模未标注语料库的预训练模型(Pretrained Models, PTM) 在 NLP 任务上取得了很好的表现。
近年来,大量的研究表明基于大型语料库的预训练模型(Pretrained Models, PTM)可以学习通用的语言表示,有利于下游 NLP 任务,同时能够避免从零开始训练模型。随着计算能力的不断提高,深度模型的出现(即 Transformer)和训练技巧的增强使得 PTM 不断发展,由浅变深。
<p align="center"><img src="https://ai-studio-static-online.cdn.bcebos.com/327f44ff3ed24493adca5ddc4dc24bf61eebe67c84a6492f872406f464fde91e" width="60%" height="50%"> <br /></p><br><center>图 2:预训练模型一览,图片来源于:https://github.com/thunlp/PLMpapers</center></br>
本示例展示了以 ERNIE(Enhanced Representation through Knowledge Integration)为代表的预训练模型如何 Finetune 完成序列标注任务。
1.1 加载自定义数据集
推荐使用 MapDataset()自定义数据集。
每条数据包含一句文本和这个文本中每个汉字以及数字对应的 label 标签。
之后,还需要对输入句子进行数据处理,如切词,映射词表 id 等。
1.2 数据处理
预训练模型 ERNIE 对中文数据的处理是以字为单位。PaddleNLP 对于各种预训练模型已经内置了相应的 tokenizer。指定想要使用的模型名字即可加载对应的 tokenizer。
tokenizer 作用为将原始输入文本转化成模型 model 可以接受的输入数据形式。
<p align="center"><img src="https://bj.bcebos.com/paddlehub/paddlehub-img/ernie_network_1.png" hspace='10'/> <br /></p>
<p align="center"><img src="https://bj.bcebos.com/paddlehub/paddlehub-img/ernie_network_2.png" hspace='10'/> <br /></p><br><center>图 3:ERNIE 模型示意图</center></br>
1.3 数据读入
使用paddle.io.DataLoader
接口多线程异步加载数据。
1.4PaddleNLP 一键加载预训练模型
快递单信息抽取本质是一个序列标注任务,PaddleNLP 对于各种预训练模型已经内置了对于下游任务文本分类 Fine-tune 网络。以下教程以 ERNIE 为预训练模型完成序列标注任务。
paddlenlp.transformers.ErnieForTokenClassification()
一行代码即可加载预训练模型 ERNIE 用于序列标注任务的 fine-tune 网络。其在 ERNIE 模型后拼接上一个全连接网络进行分类。
paddlenlp.transformers.ErnieForTokenClassification.from_pretrained()
方法只需指定想要使用的模型名称和文本分类的类别数即可完成定义模型网络。
PaddleNLP 不仅支持 ERNIE 预训练模型,还支持 BERT、RoBERTa、Electra 等预训练模型。下表汇总了目前 PaddleNLP 支持的各类预训练模型。您可以使用 PaddleNLP 提供的模型,完成文本分类、序列标注、问答等任务。同时我们提供了众多预训练模型的参数权重供用户使用,其中包含了二十多种中文语言模型的预训练权重。中文的预训练模型有bert-base-chinese, bert-wwm-chinese, bert-wwm-ext-chinese, ernie-1.0, ernie-tiny, gpt2-base-cn, roberta-wwm-ext, roberta-wwm-ext-large, rbt3, rbtl3, chinese-electra-base, chinese-electra-small, chinese-xlnet-base, chinese-xlnet-mid, chinese-xlnet-large, unified_transformer-12L-cn, unified_transformer-12L-cn-luge
等。
更多预训练模型参考:PaddleNLP Transformer API。
更多预训练模型 fine-tune 下游任务使用方法,请参考:examples。
1.5 设置 Fine-Tune 优化策略,模型配置
适用于 ERNIE/BERT 这类 Transformer 模型的迁移优化学习率策略为 warmup 的动态学习率。
<p align="center"><img src="https://ai-studio-static-online.cdn.bcebos.com/2bc624280a614a80b5449773192be460f195b13af89e4e5cbaf62bf6ac16de2c" width="40%" height="30%"/> <br /></p><br><center>图 4:动态学习率示意图</center></br>
1.6 模型训练与评估
模型训练的过程通常有以下步骤:
从 dataloader 中取出一个 batch data
将 batch data 喂给 model,做前向计算
将前向计算结果传给损失函数,计算 loss。将前向计算结果传给评价方法,计算评价指标。
loss 反向回传,更新梯度。重复以上步骤。
每训练一个 epoch 时,程序将会评估一次,评估当前模型训练的效果。
结果:
1.7 模型预测
训练保存好的模型,即可用于预测。如以下示例代码自定义预测数据,调用predict()
函数即可一键预测。
2.0 快递单信息抽取[三]:Ernie 1.0 至 ErnieGram + CRF 改进算法
代码和链接以及项目都在下面链接,fork 一下可以直接跑:项目连接:Ernie 1.0至ErnieGram + CRF改进算法
GRU + CRF
Ernie
ErnieGram
ERNIE + CRF
ErnieGram + CRF
结论:CRF 在 ERNIE 上体现作用不大,主要是在传统处理 nlp 语言上有显著作用,可以避免标注偏置问题。
评论