Package: paddle-ernie
English|简体中文ERNIE是百度开创性提出的基于知识增强的持续学习语义理解框架，该框架将大数据预训练与多源丰富知识相结合，通过持续学习技术，不断吸收海量文本数据中词汇、结构、语义等方面的知识，实现模型效果不断进化。ERNIE在累积 40 余个典型 NLP 任务取得 SOTA 效果，并在 GLUE、VCR、XTREME、SemEval 等国际权威评测上斩获十余项冠军。ERNIE 在 2020年荣获了中国人工智能学会优秀科技成果奖及世界人工智能大会最高荣誉 SAIL奖，该技术也被全球顶级科技商业杂志《麻省理工科技评论》官方网站报道，相关创新成果也被国际顶级学术会议AAAI、ACL、NAACL、IJCAI收录。ERNIE在工业界得到了大规模应用，如搜索引擎、新闻推荐、广告系统、语音交互、智能客服等。提醒: ERNIE老版本代码已经迁移至repro分支，欢迎使用我们全新升级的基于动静结合的新版ERNIE套件进行开发。另外，也欢迎上EasyDL体验更丰富的功能（如ERNIE 2.0、ERNIE 2.1、ERNIE领域模型等）。【了解更多】新闻2021.5.20:ERNIE 最新开源四大预训练模型:多粒度语言知识模型ERNIE-Gram正式开源超长文本双向建模预训练模型ERNIE-Doc正式开源融合场景图知识的跨模态预训练模型ERNIE-ViL正式开源语言与视觉一体的预训练模型ERNIE-UNIMO正式开源2020.12.29:ERNIE开源工具套件全面升级PaddlePaddle v2.0所有demo教程均引入AMP（混合精度训练), 平均提速达2.3倍。引入Gradient accumulation, 8G显存也可运行ERNIE-large模型。2020.9.24:ERNIE-ViL技术发布! (点击进入)面向视觉-语言知识增强的预训练框架，首次在视觉-语言预训练引入结构化的知识。利用场景图中的知识，构建了物体、属性和关系预测任务，精细刻画模态间细粒度语义对齐。五项视觉-语言下游任务取得最好效果，视觉常识推理榜单取得第一。2020.5.20:欢迎试用动态图实现的 ERNIE:动态执行, 所见即所得。大规模分布式训练。易于部署。通过Aistudio 教程快速入门NLP。向后兼容老版 checkpoint。ERNIE-GEN模型正式开源! (点击进入)最强文本生成预训练模型正式开源，相关工作已被IJCAI-2020收录。首次把 ERNIE 预训练技术能力扩展至文本生成领域，在多个典型任务上取得最佳。您现在即可下载论文报告的所有模型（包含base/large/large-430G）。首次在预训练阶段加入span-by-span 生成任务，让模型每次能够生成一个语义完整的片段。提出填充式生成机制和噪声感知机制来缓解曝光偏差问题。精巧的 Mulit-Flow Attention 实现框架。2020.4.30 发布ERNIESage， 一种新型图神经网络模型，采用ERNIE做为aggreagtor. 由PGL实现。2020.3.27在SemEval2020五项子任务上夺冠。2019.12.26GLUE榜第一名。2019.11.6 发布ERNIE Tiny。2019.7.7 发布ERNIE 2.0。2019.3.16 发布ERNIE 1.0。导航教程安装支持的NLP任务预训练(ERNIE 1.0)在线预测蒸馏快速上手importnumpyasnpimportpaddleasPfromernie.tokenizing_ernieimportErnieTokenizerfromernie.modeling_ernieimportErnieModelmodel=ErnieModel.from_pretrained('ernie-1.0')# Try to get pretrained model from server, make sure you have network connectionmodel.eval()tokenizer=ErnieTokenizer.from_pretrained('ernie-1.0')ids,_=tokenizer.encode('hello world')ids=P.to_tensor(np.expand_dims(ids,0))# insert extra `batch` dimensionpooled,encoded=model(ids)# eager executionprint(pooled.numpy())# convert  results to numpy教程手边没有GPU？欢迎在AIStudio中直接试用 ERNIE.
(请选择最新版本的教程并申请GPU运行环境)从0开始学ERNIE情感识别完形填空知识蒸馏万事不决问ERNIE加载并读取老式checkpointERNIE作诗安装1. 安装 PaddlePaddle本项目依赖PaddlePaddle 1.7.0+， 请参考这里安装 PaddlePaddle。2. 安装 ERNIE 套件pip install paddle-ernie或者gitclonehttps://github.com/PaddlePaddle/ERNIE.git--depth1cdERNIE
pipinstall-rrequirements.txt
pipinstall-e.propeller是辅助模型训练的高级框架，包含NLP常用的前、后处理流程。你可以通过将本repo根目录放入PYTHONPATH的方式导入propeller:exportPYTHONPATH=$PWD:$PYTHONPATH3. 下载预训练模型（可选）Model细节参数下载简写ERNIE 1.0 Base 中文Layer:12, Hidden:768, Heads:12ernie-1.0ERNIE TinyLayer:3, Hdden:1024, Heads:16ernie-tinyERNIE 2.0 Base 英文Layer:12, Hidden:768, Heads:12ernie-2.0-enERNIE 2.0 Large 英文Layer:24, Hidden:1024, Heads16ernie-2.0-large-enERNIE Gen Base 英文Layer:12, Hidden:768, Heads:12ernie-gen-base-enERNIE Gen Large 英文Layer:24, Hidden:1024, Heads:16ernie-gen-large-enERNIE Gen Large 430G英文Layer:24, Hidden:1024, Heads:16 + 额外430G 预训练语料ernie-gen-large-430g-enERNIE Doc Base 中文Layer:12, Hidden:768, Heads:12ernie-doc-base-zhERNIE Doc Base 英文Layer:12, Hidden:768, Heads:12ernie-doc-base-enERNIE Doc Large 英文Layer:24, Hidden:1024, Heads:16ernie-doc-large-enERNIE Gram Base 中文L12H768A12ernie-gram-zhERNIE Gram Base 英文L12H768A12ernie-gram-en4. 下载数据集英文数据集运行此脚本，下载GLUE datasets.请将数据目录整理成以下格式，方便在后续 demo 教程中使用（通过--data_dir参数将数据路径传入训练脚本）；data/xnli
├──dev
│└──1├──test│└──1└──train└──1示例数据（MNLI任务测试、训练集合）。中文数据数据集描述XNLIXNLI 是由 Facebook 和纽约大学的研究者联合构建的自然语言推断数据集，包括 15 种语言的数据。我们用其中的中文数据来评估模型的语言理解能力。链接ChnSentiCorpChnSentiCorp 是一个中文情感分析数据集，包含酒店、笔记本电脑和书籍的网购评论。MSRA-NERMSRA-NER (SIGHAN2006) 数据集由微软亚研院发布，其目标是识别文本中具有特定意义的实体，包括人名、地名、机构名。NLPCC2016-DBQANLPCC2016-DBQA 是由国际自然语言处理和中文计算会议 NLPCC 于 2016 年举办的评测任务，其目标是从候选中找到合适的文档作为问题的答案。链接CMRC2018CMRC2018 是中文信息学会举办的评测，评测的任务是抽取类阅读理解。链接支持的NLP任务使用动态图模型进行finetune:python3 ./ernie_d/demo/finetune_classifier.py \
       --from_pretrained ernie-1.0 \
       --data_dir ./data/xnli加入--use_amp以启用AMP功能(请在支持TensorCore设备上启用AMP)通过--bsz指定全局batch_size(一步优化中模型所能见到的样本数), 通过--micro_bsz指定输入给每一张GPU卡的样本数
若--bsz > --micro_bsz脚本会自动开启梯度累计功能.分布式 finetunepaddle.distributed.launch是一个进程管理器，我们采用它在每一张GPU上启动一个python进程，并配置相应的环境变量以进行分布式训练:当采用分布式训练时，我们采用max_steps做为终止条件而非epoch, 这样处理是为了避免进程间死锁。
你可以通过EPOCH * NUM_TRAIN_EXAMPLES / TOTAL_BATCH的方式计算出所需执行的max_steps.
另外值得注意的是训练集需要在不同的进程间进行切分；以避免所有进程训练同一份数据造成的过拟合。示例脚本（请确保你有两张以上GPU卡, 在线模型下载功能在paddle.distributed.launch下无法工作，
你可能需要一个先通过单卡finetune方式下载预训练模型，或者根据这里手动下载并解压预训练模型）:python3 -m paddle.distributed.launch \
./demo/finetune_classifier_distributed.py \
    --data_dir data/mnli \
    --max_steps 10000 \
    --from_pretrained ernie2.0-en更多示例脚本:情感分析语义匹配命名实体识别(NER)机器阅读理解(需要多卡环境运行；参见上面"分布式 finetune"一节)文本摘要生成使用静态图完成文本分类推荐超参数设置：任务batch sizelearning rateCoLA32 / 64 (base)3e-5SST-264 / 256 (base)2e-5STS-B1285e-5QQP2563e-5(base)/5e-5(large)MNLI256 / 512 (base)3e-5QNLI2562e-5RTE16 / 4 (base)2e-5(base)/3e-5(large)MRPC16 / 32 (base)3e-5WNLI82e-5XNLI5121e-4(base)/4e-5(large)CMRC2018643e-5DRCD645e-5(base)/3e-5(large)MSRA-NER(SIGHAN2006)165e-5(base)/1e-5(large)ChnSentiCorp245e-5(base)/1e-5(large)LCQMC322e-5(base)/5e-6(large)NLPCC2016-DBQA642e-5(base)/1e-5(large)VCR642e-5(base)/2e-5(large)预训练 (ERNIE 1.0)请见这里在线预测如果finetune_classifier.py中指定了--inference_model_dir参数，funetune脚本会将你的模型序列化并产出可以直接部署线上预测的inference_model.关于生产环境中使用线上预测代码的实现细节，请见C++ inference API.
或者你可以使用propeller启动一个多GPU预测服务(需要GPU环境)，只需执行：python-mpropeller.tools.start_server-m/path/to/saved/inference_model-p8881即可启动预测服务；随后在Python端采用如下命令访问该服务(仅限 python3):frompropeller.service.clientimportInferenceClientfromernie.tokenizing_ernieimportErnieTokenizerclient=InferenceClient('tcp://localhost:8881')tokenizer=ErnieTokenizer.from_pretrained('ernie-1.0')ids,sids=tokenizer.encode('hello world')ids=np.expand_dims(ids,0)sids=np.expand_dims(sids,0)result=client(ids,sids)你也可从此处下载一个预先制作好的ernie-1.0 base模型的inference_model.
该模型没有经过finetune，一般可以用做上层模型结构的 feature-base finetune或者做为一个文本特征抽取器。
因为该模行由老版API 产出，在进行客户端请求时需要在输入tensor后面追加一个维度：ids=np.expand_dims(ids,-1)# ids.shape==[BATCH, SEQLEN, 1]蒸馏知识蒸馏是进行ERNIE模型压缩、加速的有效方式；关于知识蒸馏的实现细节请参见这里。文献引用ERNIE 1.0@article{sun2019ernie,
  title={Ernie: Enhanced representation through knowledge integration},
  author={Sun, Yu and Wang, Shuohuan and Li, Yukun and Feng, Shikun and Chen, Xuyi and Zhang, Han and Tian, Xin and Zhu, Danxiang and Tian, Hao and Wu, Hua},
  journal={arXiv preprint arXiv:1904.09223},
  year={2019}
}ERNIE 2.0@article{sun2019ernie20,
  title={ERNIE 2.0: A Continual Pre-training Framework for Language Understanding},
  author={Sun, Yu and Wang, Shuohuan and Li, Yukun and Feng, Shikun and Tian, Hao and Wu, Hua and Wang, Haifeng},
  journal={arXiv preprint arXiv:1907.12412},
  year={2019}
}ERNIE-GEN@article{xiao2020ernie-gen,
  title={ERNIE-GEN: An Enhanced Multi-Flow Pre-training and Fine-tuning Framework for Natural Language Generation},
  author={Xiao, Dongling and Zhang, Han and Li, Yukun and Sun, Yu and Tian, Hao and Wu, Hua and Wang, Haifeng},
  journal={arXiv preprint arXiv:2001.11314},
  year={2020}
}ERNIE-ViL@article{yu2020ernie,
  title={ERNIE-ViL: Knowledge Enhanced Vision-Language Representations Through Scene Graph},
  author={Yu, Fei and Tang, Jiji and Yin, Weichong and Sun, Yu and Tian, Hao and Wu, Hua and Wang, Haifeng},
  journal={arXiv preprint arXiv:2006.16934},
  year={2020}
}ERNIE-Gram@article{xiao2020ernie,
  title={ERNIE-Gram: Pre-Training with Explicitly N-Gram Masked Language Modeling for Natural Language Understanding},
  author={Xiao, Dongling and Li, Yu-Kun and Zhang, Han and Sun, Yu and Tian, Hao and Wu, Hua and Wang, Haifeng},
  journal={arXiv preprint arXiv:2010.12148},
  year={2020}
}ERNIE-Doc@article{ding2020ernie,
  title={ERNIE-DOC: The Retrospective Long-Document Modeling Transformer},
  author={Ding, Siyu and Shang, Junyuan and Wang, Shuohuan and Sun, Yu and Tian, Hao and Wu, Hua and Wang, Haifeng},
  journal={arXiv preprint arXiv:2012.15688},
  year={2020}
}ERNIE-UNIMO@article{li2020unimo,
  title={UNIMO: Towards Unified-Modal Understanding and Generation via Cross-Modal Contrastive Learning},
  author={Li, Wei and Gao, Can and Niu, Guocheng and Xiao, Xinyan and Liu, Hao and Liu, Jiachen and Wu, Hua and Wang, Haifeng},
  journal={arXiv preprint arXiv:2012.15409},
  year={2020}
}若希望复现 paper 中的所有实验，请切换至本repo的repro分支。讨论组ERNIE官方主页Github Issues: bug reports, feature requests, install issues, usage issues, etc.QQ 群: 760439550 (ERNIE discussion group).QQ 2群: 958422639 (ERNIE discussion group-v2).Forums: discuss implementations, research, etc.