
相关文章:
基础知识介绍:
【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?_汀、的博客-CSDN博客_ernie模型
百度飞桨:ERNIE 3.0 、通用信息抽取 UIE、paddleNLP的安装使用[一]_汀、的博客-CSDN博客_paddlenlp 安装
项目实战:
PaddleHub--飞桨预训练模型应用工具{风格迁移模型、词法分析情感分析、Fine-tune API微调}【一】_汀、的博客-CSDN博客
PaddleHub--{超参优化AutoDL Finetuner}【二】_汀、的博客-CSDN博客
PaddleHub实战篇{词法分析模型LAC、情感分类ERNIE Tiny}训练、部署【三】_汀、的博客-CSDN博客
PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】_汀、的博客-CSDN博客

https://github.com/PaddlePaddle/PaddleNLP
https://github.com/PaddlePaddle/PaddleNLP
参考官网:开始使用_飞桨-源于产业实践的开源深度学习平台
首先在anaconda下创建虚拟环境:
conda create -n test  python=3.8 #test为创建的虚拟环境名称在安装paddle
python -m pip install paddlepaddle==2.3.0 -i https://mirror.baidu.com/pypi/simple验证安装
安装完成后您可以使用
python进入python解释器,输入import paddle,再输入paddle.utils.run_check()如果出现PaddlePaddle is installed successfully!,说明您已成功安装。
python -c "import platform;print(platform.architecture()[0]);print(platform.machine())"paddlenlp安装
环境依赖
pip install --upgrade paddlenlpshow paddlenlp环境依赖
| 任务名称 | 调用方式 | 一键预测 | 单条输入 | 多条输入 | 文档级输入 | 定制化训练 | 其它特性 | 
|---|---|---|---|---|---|---|---|
| 中文分词 | Taskflow("word_segmentation") | ✅ | ✅ | ✅ | ✅ | ✅ | 多种分词模式,满足快速切分和实体粒度精准切分 | 
| 词性标注 | Taskflow("pos_tagging") | ✅ | ✅ | ✅ | ✅ | ✅ | 基于百度前沿词法分析工具LAC | 
| 命名实体识别 | Taskflow("ner") | ✅ | ✅ | ✅ | ✅ | ✅ | 覆盖最全中文实体标签 | 
| 依存句法分析 | Taskflow("dependency_parsing") | ✅ | ✅ | ✅ | ✅ | 基于最大规模中文依存句法树库研发的DDParser | |
| 信息抽取 | Taskflow("information_extraction") | ✅ | ✅ | ✅ | ✅ | ✅ | 适配多场景的开放域通用信息抽取工具 | 
| 『解语』-知识标注 | Taskflow("knowledge_mining") | ✅ | ✅ | ✅ | ✅ | ✅ | 覆盖所有中文词汇的知识标注工具 | 
| 文本纠错 | Taskflow("text_correction") | ✅ | ✅ | ✅ | ✅ | ✅ | 融合拼音特征的端到端文本纠错模型ERNIE-CSC | 
| 文本相似度 | Taskflow("text_similarity") | ✅ | ✅ | ✅ | 基于百度知道2200万对相似句组训练 | ||
| 情感倾向分析 | Taskflow("sentiment_analysis") | ✅ | ✅ | ✅ | ✅ | 基于情感知识增强预训练模型SKEP达到业界SOTA | |
| 生成式问答 | Taskflow("question_answering") | ✅ | ✅ | ✅ | 使用最大中文开源CPM模型完成问答 | ||
| 智能写诗 | Taskflow("poetry_generation") | ✅ | ✅ | ✅ | 使用最大中文开源CPM模型完成写诗 | ||
| 开放域对话 | Taskflow("dialogue") | ✅ | ✅ | ✅ | 十亿级语料训练最强中文闲聊模型PLATO-Mini,支持多轮对话 | 
PaddleNLP提供一键预测功能,无需训练,直接输入数据即可开放域抽取结果:【信息提取】
from pprint import pprint
from paddlenlp import Taskflow
schema = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
ie = Taskflow('information_extraction', schema=schema) #花费时间会安装文件
pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!"))[{'时间': [{'end': 6,
          'probability': 0.9857379716035553,
          'start': 0,
          'text': '2月8日上午'}],
  '赛事名称': [{'end': 23,
            'probability': 0.8503087823987343,
            'start': 6,
            'text': '北京冬奥会自由式滑雪女子大跳台决赛'}],
  '选手': [{'end': 31,
          'probability': 0.8981548639781138,
          'start': 28,
          'text': '谷爱凌'}]}]当然定义实体提取的模式有一定灵活性:
ie = Taskflow('information_extraction', schema=schema)[{'分数': [{'end': 39,
          'probability': 0.9873907344274926,
          'start': 32,
          'text': '188.25分'}],
  '时间': [{'end': 6,
          'probability': 0.9857379716035553,
          'start': 0,
          'text': '2月8日上午'}],
  '赛事名称': [{'end': 23,
            'probability': 0.8503087823987343,
            'start': 6,
            'text': '北京冬奥会自由式滑雪女子大跳台决赛'}],
  '选手': [{'end': 31,
          'probability': 0.8981548639781138,
          'start': 28,
          'text': '谷爱凌'}]}]这里如果增加“”“奖牌、名次”等实体则无法实现
schema = ['时间', '选手', '赛事名称',"城市","分数"] # Define the schema for entity extraction[{'分数': [{'end': 39,
          'probability': 0.9873907344274926,
          'start': 32,
          'text': '188.25分'}],
  '城市': [{'end': 8,
          'probability': 0.8775704061407907,
          'start': 6,
          'text': '北京'}],
  '时间': [{'end': 6,
          'probability': 0.9857379716035553,
          'start': 0,
          'text': '2月8日上午'}],
  '赛事名称': [{'end': 23,
            'probability': 0.8503087823987343,
            'start': 6,
            'text': '北京冬奥会自由式滑雪女子大跳台决赛'}],
  '选手': [{'end': 31,
          'probability': 0.8981548639781138,
          'start': 28,
          'text': '谷爱凌'}]}]如果对一键预测效果不满意,也可以使用少量数据进行模型精调,进一步提升特定场景的效果,详见UIE小样本定制训练。
PaddleNLP/model_zoo/uie at develop · PaddlePaddle/PaddleNLP · GitHubEasy-to-use and powerful NLP library with Awesome model zoo, supporting wide-range of NLP tasks from research to industrial applications, including Neural Search, Question Answering, Information Extraction and Sentiment Analysis end-to-end system. - PaddleNLP/model_zoo/uie at develop · PaddlePaddle/PaddleNLP
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie我们推荐使用数据标注平台doccano 进行数据标注
对于简单的抽取目标可以直接使用paddlenlp.Taskflow实现零样本(zero-shot)抽取,对于细分场景我们推荐使用轻定制功能(标注少量数据进行模型微调)以进一步提升效果。下面通过报销工单信息抽取的例子展示如何通过5条训练数据进行UIE模型微调。
代码结构: ├── utils.py # 数据处理工具 ├── model.py # 模型组网脚本 ├── doccano.py # 数据标注脚本 ├── doccano.md # 数据标注文档 ├── finetune.py # 模型微调脚本 ├── evaluate.py # 模型评估脚本 └── README.md
标注安装和标注指南:
https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/uie/doccano.md
最终效果展示:
Few-Shot实验
我们在互联网、医疗、金融三大垂类自建测试集上进行了实验:
| 金融 | 医疗 | 互联网 | ||||
|---|---|---|---|---|---|---|
| 0-shot | 5-shot | 0-shot | 5-shot | 0-shot | 5-shot | |
| uie-tiny | 41.11 | 64.53 | 65.40 | 75.72 | 78.32 | 79.68 | 
| uie-base | 46.43 | 70.92 | 71.83 | 85.72 | 78.33 | 81.86 | 
0-shot表示无训练数据直接通过paddlenlp.Taskflow进行预测,5-shot表示基于5条标注数据进行模型微调。实验表明UIE在垂类场景可以通过少量数据(few-shot)进一步提升效果。
PaddleNLP Transformer预训练模型 — PaddleNLP 文档
PaddleNLP的Transformer预训练模型包含从 huggingface.co 直接转换的模型权重和百度自研模型权重,方便社区用户直接迁移使用。 目前共包含了40多个主流预训练模型,500多个模型权重。
Transformer预训练模型适用任务汇总
| Model | Sequence Classification | Token Classification | Question Answering | Text Generation | Multiple Choice | 
|---|---|---|---|---|---|
| ALBERT | ✅ | ✅ | ✅ | ❌ | ✅ | 
| BART | ✅ | ✅ | ✅ | ✅ | ❌ | 
| BERT | ✅ | ✅ | ✅ | ❌ | ✅ | 
| BigBird | ✅ | ✅ | ✅ | ❌ | ✅ | 
| Blenderbot | ❌ | ❌ | ❌ | ✅ | ❌ | 
| Blenderbot-Small | ❌ | ❌ | ❌ | ✅ | ❌ | 
| ChineseBert | ✅ | ✅ | ✅ | ❌ | ❌ | 
| ConvBert | ✅ | ✅ | ✅ | ❌ | ✅ | 
| CTRL | ✅ | ❌ | ❌ | ❌ | ❌ | 
| DistilBert | ✅ | ✅ | ✅ | ❌ | ❌ | 
| ELECTRA | ✅ | ✅ | ✅ | ❌ | ✅ | 
| ERNIE | ✅ | ✅ | ✅ | ❌ | ✅ | 
| ERNIE-CTM | ❌ | ✅ | ❌ | ❌ | ❌ | 
| ERNIE-DOC | ✅ | ✅ | ✅ | ❌ | ❌ | 
| ERNIE-GEN | ❌ | ❌ | ❌ | ✅ | ❌ | 
| ERNIE-GRAM | ✅ | ✅ | ✅ | ❌ | ❌ | 
| ERNIE-M | ✅ | ✅ | ✅ | ❌ | ❌ | 
| FNet | ✅ | ✅ | ✅ | ❌ | ✅ | 
| Funnel | ✅ | ✅ | ✅ | ❌ | ❌ | 
| GPT | ✅ | ✅ | ❌ | ✅ | ❌ | 
| LayoutLM | ✅ | ✅ | ❌ | ❌ | ❌ | 
| LayoutLMV2 | ❌ | ✅ | ❌ | ❌ | ❌ | 
| LayoutXLM | ❌ | ✅ | ❌ | ❌ | ❌ | 
| Luke | ❌ | ✅ | ✅ | ❌ | ❌ | 
| MBart | ✅ | ❌ | ✅ | ❌ | ✅ | 
| MegatronBert | ✅ | ✅ | ✅ | ❌ | ✅ | 
| MobileBert | ✅ | ❌ | ✅ | ❌ | ❌ | 
| MPNet | ✅ | ✅ | ✅ | ❌ | ✅ | 
| NeZha | ✅ | ✅ | ✅ | ❌ | ✅ | 
| PPMiniLM | ✅ | ❌ | ❌ | ❌ | ❌ | 
| ProphetNet | ❌ | ❌ | ❌ | ✅ | ❌ | 
| Reformer | ✅ | ❌ | ✅ | ❌ | ❌ | 
| RemBert | ✅ | ✅ | ✅ | ❌ | ✅ | 
| RoBERTa | ✅ | ✅ | ✅ | ❌ | ✅ | 
| RoFormer | ✅ | ✅ | ✅ | ❌ | ❌ | 
| SKEP | ✅ | ✅ | ❌ | ❌ | ❌ | 
| SqueezeBert | ✅ | ✅ | ✅ | ❌ | ❌ | 
| T5 | ❌ | ❌ | ❌ | ✅ | ❌ | 
| TinyBert | ✅ | ❌ | ❌ | ❌ | ❌ | 
| UnifiedTransformer | ❌ | ❌ | ❌ | ✅ | ❌ | 
| XLNet | ✅ | ✅ | ✅ | ❌ | ✅ | 
使用预训练模型Fine-tune完成中文文本分类任务
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_classification/pretrained_models/