README.zh.md 6.8 KB
Newer Older
L
liyukun01 已提交
1 2
[English](./README.en.md)|简体中文

P
PROoshio 已提交
3
`提醒`: *ERNIE-Gram* 中/英文模型已经[正式开源](??),paper 复现代码也即将开源至 [repro分支](https://github.com/PaddlePaddle/ERNIE/tree/repro)。现在您可以使用基于 Paddle 2.0 全新升级、基于动静结合的新版 ERNIE 套件体验 *ERNIE-Gram* 中/英文开源模型。
L
liyukun01 已提交
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19


## _ERNIE-Gram_: Pre-Training with Explicitly N-Gram Masked Language Modeling for Natural Language Understanding

- [模型框架](#模型框架)
- [快速上手](#快速上手)
- [安装& 使用](#安装)
  * [安装 PaddlePaddle](#1-安装-paddlepaddle)
  * [安装 ERNIE 套件](#2-安装-ernie-套件)
  * [下载预训练模型(可选)](#3-下载预训练模型可选)
  * [下载任务数据集](#4-下载数据集)
- [支持的NLP任务](#支持的-nlp-任务)
- [文献引用](#文献引用)

### 模型框架

P
PROoshio 已提交
20 21
![ERNIE-Gram](.meta/ernie-gram.jpeg)

L
liyukun01 已提交
22 23 24 25 26 27 28 29 30 31 32
**ERNIE 1.0** 起,百度研究者们就在预训练中引入**知识增强**学习,通过掩码连续的词、phrase、named entity 等语义知识单元,实现更好的预训练学习。本次开源的通用语义理解模型 **ERNIE-Gram** 更进一步,提出的**显式****完备**的 n-gram 掩码语言模型,实现了显式的 n-gram 语义单元知识建模。

#### ERNIE 多粒度预训练语义理解技术
 作为自然语言处理的基本语义单元,更充分的语言粒度学习能帮助模型实现更强的语义理解能力:
 - **ERNIE-Gram** 提出显式完备的 **n-gram** 多粒度掩码语言模型,同步建模 n-gram **内部**和 n-gram **之间**的语义关系,实现同时学习**细粒度(fine-grained)****粗粒度(coarse-grained)**语义信息
 - **ERNIE-Gram** 采用双流结构,在预训练过程中实现了单一位置多语义粒度层次预测,进一步增强了语义知识学习

**ERNIE-Gram** 多粒度预训练语义理解技术,在**预训练 (pre-training)** 阶段实现了显式的多粒度语义信号学习,在**微调 (fine-tuning)** 阶段采用 bert-style 微调方式,在不增加参数和计算复杂度的前提下,取得 **10 项**英文权威任务的 **SOTA**。在中文任务上,**ERNIE-Gram** 在包括 NLI、阅读理解等需要丰富、多层次的语义理解任务上取得公开 **SOTA**

**ERNIE-Gram** 工作已被 **NAACL-HLT 2021** 作为长文收录,更多细节见 [link](https://arxiv.org/abs/2010.12148)

P
PROoshio 已提交
33
### 快速上手(待补充运行示例)
L
liyukun01 已提交
34
```shell
P
PROoshio 已提交
35 36 37 38 39 40 41
import numpy as np
import paddle as P
from ernie.tokenizing_ernie import ErnieTokenizer
from ernie.modeling_ernie import ErnieModel

model = ErnieModel.from_pretrained('ernie-gram')    # Try to get 

L
liyukun01 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
```


### 安装

##### 1. 安装 PaddlePaddle

本项目依赖 PaddlePaddle 2.0.0+, 请参考[这里](https://www.paddlepaddle.org.cn/install/quick)安装 PaddlePaddle。

##### 2. 安装 ERNIE 套件

```shell
git clone https://github.com/PaddlePaddle/ERNIE.git --depth 1
cd ERNIE
pip install -r requirements.txt
pip install -e .
```
`propeller`是辅助模型训练的高级框架,包含NLP常用的前、后处理流程。你可以通过将本repo根目录放入`PYTHONPATH`的方式导入`propeller`:
```shell
export PYTHONPATH=$PWD:$PYTHONPATH
```

##### 3. 下载预训练模型(可选)


| Model                                              | 细节参数                                                                  |下载简写|
| :------------------------------------------------- |:------------------------------------------------------------------------- |:-------|
P
PROoshio 已提交
69 70
| [ERNIE-Gram 中文](补充链接)           | Layer:12, Hidden:768, Heads:12  |ernie-gram|
| [ERNIE-Gram 英文](补充链接)                  | Layer:3, Hdden:1024, Heads:16   |ernie-gram-en|
L
liyukun01 已提交
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

##### 4. 下载数据集

请将数据目录整理成以下格式,方便使用(通过`--data_dir`参数将数据路径传入训练脚本);

```shell
data/xnli
├── dev
│   └── 1
├── test
│   └── 1
└── train
    └── 1
```

**中文数据**

| 数据集|描述|
|:--------|:----------|
| [XNLI](https://ernie-github.cdn.bcebos.com/data-xnli.tar.gz)                 |XNLI 是由 Facebook 和纽约大学的研究者联合构建的自然语言推断数据集,包括 15 种语言的数据。我们用其中的中文数据来评估模型的语言理解能力。[链接](https://github.com/facebookresearch/XNLI)|
| [ChnSentiCorp](https://ernie-github.cdn.bcebos.com/data-chnsenticorp.tar.gz) |ChnSentiCorp 是一个中文情感分析数据集,包含酒店、笔记本电脑和书籍的网购评论。|
| [MSRA-NER](https://ernie-github.cdn.bcebos.com/data-msra_ner.tar.gz)         |MSRA-NER (SIGHAN2006) 数据集由微软亚研院发布,其目标是识别文本中具有特定意义的实体,包括人名、地名、机构名。|
| [NLPCC2016-DBQA](https://ernie-github.cdn.bcebos.com/data-dbqa.tar.gz)       |NLPCC2016-DBQA 是由国际自然语言处理和中文计算会议 NLPCC 于 2016 年举办的评测任务,其目标是从候选中找到合适的文档作为问题的答案。[链接](http://tcci.ccf.org.cn/conference/2016/dldoc/evagline2.pdf)|
|[CMRC2018](https://ernie-github.cdn.bcebos.com/data-cmrc2018.tar.gz)|CMRC2018 是中文信息学会举办的评测,评测的任务是抽取类阅读理解。[链接](https://github.com/ymcui/cmrc2018)


### 支持的 NLP 任务

使用 `动态图` 模型进行finetune:
  
  - [句对分类](./demo/finetune_classifier_distributed.py)
L
liyukun01 已提交
102
  - [语义匹配](./demo/finetune_classifier_distributed.py)
L
liyukun01 已提交
103
  - [机器阅读理解](./demo/finetune_mrc.py)
P
PROoshio 已提交
104
  - [命名实体识别](./demo/finetune_ner.py)
L
liyukun01 已提交
105 106 107 108


**推荐超参数设置:**

P
PROoshio 已提交
109 110 111 112 113 114 115 116
|任务|batch size|learning rate|epoch|dropout rate|
|--|--|--|--|--|
| XNLI         | 256             | 1.5e-4 | 3 | 0.1 |
| LCQMC        | 32              | 4e-5   | 2 | 0.1 |
| DRCD         | 64              | 1e-4   | 3 | 0.2 |
| CMRC2018     | 64              | 1.5e-4 | 5 | 0.2 |
| DuReader     | 64              | 1.5e-4 | 5 | 0.1 |
| MSRA-NER(SIGHAN2006) | 16      | 5e-5   | 10| 0.1 |
L
liyukun01 已提交
117 118 119 120 121 122 123 124 125 126 127 128 129


### 文献引用

```
@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}
}
```

P
PROoshio 已提交
130 131 132

若希望复现 paper 中的所有实验,请切换至本 repo 的 `repro` 分支。

L
liyukun01 已提交
133 134 135 136 137 138
### 讨论组
- [ERNIE官方主页](https://wenxin.baidu.com/)
- [Github Issues](https://github.com/PaddlePaddle/ERNIE/issues): bug reports, feature requests, install issues, usage issues, etc.
- QQ 群: 760439550 (ERNIE discussion group).
- QQ 2群: 958422639 (ERNIE discussion group-v2).
- [Forums](http://ai.baidu.com/forum/topic/list/168?pageNo=1): discuss implementations, research, etc.