提交 300756a4 编写于 作者: Z Zeyu Chen

update README

上级 a15e797b
...@@ -17,7 +17,7 @@ PaddleNLP 2.0拥有丰富的模型库、简洁易用的API与高性能的分布 ...@@ -17,7 +17,7 @@ PaddleNLP 2.0拥有丰富的模型库、简洁易用的API与高性能的分布
## 特性 ## 特性
- **丰富的模型库** - **丰富的模型库**
- 涵盖了NLP主流应用相关的前沿模型,包括中文词向量、预训练模型、词法分析、文本分类、文本匹配、文本生成、机器翻译、通用对话、问答系统等,更多详细介绍请查看[PaddleNLP模型库](./exmaples/README.md) - 涵盖了NLP主流应用相关的前沿模型,包括中文词向量、预训练模型、词法分析、文本分类、文本匹配、文本生成、机器翻译、通用对话、问答系统等,更多详细介绍请查看[PaddleNLP模型库](./docs/model_zoo.md)
- **简洁易用的API** - **简洁易用的API**
- 深度兼容飞桨2.0的高层API体系,提供可复用的文本建模模块,可大幅度减少数据处理、组网、训练环节的代码开发量,提升文本建模开发效率。 - 深度兼容飞桨2.0的高层API体系,提供可复用的文本建模模块,可大幅度减少数据处理、组网、训练环节的代码开发量,提升文本建模开发效率。
...@@ -79,6 +79,9 @@ electra = ElectraModel.from_pretrained('chinese-electra-small') ...@@ -79,6 +79,9 @@ electra = ElectraModel.from_pretrained('chinese-electra-small')
## 模型库及其应用 ## 模型库及其应用
PaddleNLP模型库整体介绍请参考文档[PaddleNLP Model Zoo](./docs/model_zoo.md).
以下为基于PaddleNLP相关的应用场景应用示例:
- [词向量](./examples/word_embedding/README.md) - [词向量](./examples/word_embedding/README.md)
- [词法分析](./examples/lexical_analysis/README.md) - [词法分析](./examples/lexical_analysis/README.md)
- [语言模型](./examples/language_model) - [语言模型](./examples/language_model)
...@@ -91,13 +94,16 @@ electra = ElectraModel.from_pretrained('chinese-electra-small') ...@@ -91,13 +94,16 @@ electra = ElectraModel.from_pretrained('chinese-electra-small')
- [机器翻译](./exmaples/machine_translation) - [机器翻译](./exmaples/machine_translation)
- [阅读理解](./exmaples/machine_reading_comprehension) - [阅读理解](./exmaples/machine_reading_comprehension)
## 进阶应用
- [模型压缩](./examples/model_compression/)
## API 使用文档 ## API 使用文档
- [Transformer API](./docs/transformers.md) - [Transformer API](./docs/transformers.md)
* 基于Transformer结构相关的预训练模型API,包含ERNIE, BERT, RoBERTa, Electra等主流经典结构和下游任务。 * 基于Transformer结构相关的预训练模型API,包含ERNIE, BERT, RoBERTa, Electra等主流经典结构和下游任务。
- [Data API](./docs/data.md) - [Data API](./docs/data.md)
* 文本数据Pipeline相关的API说明。 * 文本数据处理Pipeline的相关API说明。
- [Dataset API](./docs/datasets.md) - [Dataset API](./docs/datasets.md)
* 数据集相关API,包含自定义数据集,数据集贡献与数据集快速加载等功能说明。 * 数据集相关API,包含自定义数据集,数据集贡献与数据集快速加载等功能说明。
- [Embedding API](./docs/embeddings.md) - [Embedding API](./docs/embeddings.md)
......
# PaddleNLP Data API # PaddleNLP Data API
该模块提供了在NLP任务中构建有效的数据Pipeline的常用API。 该模块提供了在NLP任务中构建有效的数据处理Pipeline的常用API。
## API汇总 ## APIl列表
| API | 简介 | | API | 简介 |
| ------------------------------- | :----------------------------------------- | | ------------------------------- | :----------------------------------------- |
...@@ -47,7 +47,7 @@ vocab4 = Vocab.from_json(json_file_path) ...@@ -47,7 +47,7 @@ vocab4 = Vocab.from_json(json_file_path)
#### `paddlenlp.data.JiebaTokenizer` #### `paddlenlp.data.JiebaTokenizer`
`paddlenlp.data.JiebaTokenizer`初始化需传入`paddlenlp.data.Vocab`类,包含`cut`分词方法和将句子转换为ids的`encode`方法。 `paddlenlp.data.JiebaTokenizer`初始化需传入`paddlenlp.data.Vocab`类,包含`cut`分词方法和将句子明文转换为ids的`encode`方法。
```python ```python
from paddlenlp.data import Vocab, JiebaTokenizer from paddlenlp.data import Vocab, JiebaTokenizer
...@@ -64,7 +64,7 @@ tokens = tokenizer.cut('我爱你中国') # ['我爱你', '中国'] ...@@ -64,7 +64,7 @@ tokens = tokenizer.cut('我爱你中国') # ['我爱你', '中国']
ids = tokenizer.encode('我爱你中国') # [1170578, 575565] ids = tokenizer.encode('我爱你中国') # [1170578, 575565]
``` ```
### 构建`batch_sampler` ### 构建`Sampler`
#### `paddlenlp.data.SamplerHelper` #### `paddlenlp.data.SamplerHelper`
...@@ -94,7 +94,7 @@ class MyDataset(Dataset): ...@@ -94,7 +94,7 @@ class MyDataset(Dataset):
dataset = MyDataset() dataset = MyDataset()
# SamplerHelper返回的是数据索引的可迭代对象,产生的迭代的索引为:[0, 1, 2] # SamplerHelper返回的是数据索引的可迭代对象,产生的迭代的索引为:[0, 1, 2]
sampler = SamplerHelper(dataset) sampler = SamplerHelper(dataset)
# shuffle()的作用是随机打乱索引顺序,产生的迭代的索引为:[0, 2, 1] # `shuffle()`的作用是随机打乱索引顺序,产生的迭代的索引为:[0, 2, 1]
sampler = sampler.shuffle() sampler = sampler.shuffle()
# sort()的作用是按照指定key为排序方式并在buffer_size大小个样本中排序 # sort()的作用是按照指定key为排序方式并在buffer_size大小个样本中排序
# 示例中以样本第一个字段的长度进行升序排序,产生的迭代的索引为:[2, 0, 1] # 示例中以样本第一个字段的长度进行升序排序,产生的迭代的索引为:[2, 0, 1]
...@@ -110,7 +110,7 @@ sampler = sampler.shard(num_replicas=2) ...@@ -110,7 +110,7 @@ sampler = sampler.shard(num_replicas=2)
#### `paddlenlp.data.Stack` #### `paddlenlp.data.Stack`
`paddlenlp.data.Stack`用来组建batch,它的输入必须具有相同的shape,输出便是这些输入的堆叠组成的batch数据。 `paddlenlp.data.Stack`用来组建batch,输入必须具有相同的shape,输出便是这些输入的堆叠组成的batch数据。
```python ```python
from paddlenlp.data import Stack from paddlenlp.data import Stack
......
# PaddleNLP Datasets API # PaddleNLP Datasets API
PaddleNLP提供了
## 阅读理解 ## 阅读理解
| 数据集名称 | 简介 | 调用方法 | | 数据集名称 | 简介 | 调用方法 |
......
# PaddleNLP Embedding API # PaddleNLP Embedding API
- [Embedding 模型汇总](#embedding-模型汇总) ## 介绍
- [中文词向量](#中文词向量)
- [英文词向量](#英文词向量)
- [GloVe](#glove)
- [FastText](#fasttext)
- [使用方式](#使用方式)
- [模型信息](#模型信息)
- [致谢](#致谢)
- [参考论文](#参考论文)
# Embedding 模型汇总 PaddleNLP提供多个开源的预训练词向量模型,用户仅需在使用`paddlenlp.embeddings.TokenEmbedding`时,指定预训练模型的名称,即可加载相对应的预训练模型。以下为PaddleNLP所支持的预训练Embedding模型,其名称用作`paddlenlp.embeddings.TokenEmbedding`的参数。
- 命名方式为:\${训练模型}.\${语料}.\${词向量类型}.\${co-occurrence type}.dim\${维度}。
- 模型有三种,分别是Word2Vec(w2v, skip-gram), GloVe(glove)和FastText(fasttext)。
PaddleNLP提供多个开源的预训练Embedding模型,用户仅需在使用`paddlenlp.embeddings.TokenEmbedding`时,指定预训练模型的名称,即可加载相对应的预训练模型。以下为PaddleNLP所支持的预训练Embedding模型,其名称用作`paddlenlp.embeddings.TokenEmbedding`的参数。命名方式为:\${训练模型}.\${语料}.\${词向量类型}.\${co-occurrence type}.dim\${维度}。训练模型有三种,分别是Word2Vec(w2v, 使用skip-gram模型训练), GloVe(glove)和FastText(fasttext)。[使用方式](#使用方式)这一节中,将介绍如何通过模型名称使用`paddlenlp.embeddings.TokenEmbedding`加载预训练模型。 [使用方式](#使用方式)这一节中,将介绍如何通过模型名称使用`paddlenlp.embeddings.TokenEmbedding`加载预训练模型。
## 中文词向量 ## 中文词向量
以下预训练模型[Chinese-Word-Vectors](https://github.com/Embedding/Chinese-Word-Vectors)提供。 以下预训练词向量[Chinese-Word-Vectors](https://github.com/Embedding/Chinese-Word-Vectors)提供。
根据不同类型的上下文为每个语料训练多个目标词向量,第二列开始表示不同类型的上下文。以下为上下文类别: 根据不同类型的上下文为每个语料训练多个目标词向量,第二列开始表示不同类型的上下文。以下为上下文类别:
* Word表示训练时目标词预测的上下文是一个Word。 * Word表示训练时目标词预测的上下文是一个Word。
* Word + Ngram表示训练时目标词预测的上下文是一个Word或者Ngram,其中bigram表示2-grams,ngram.1-2表示1-gram或者2-grams。 * Word + N-gram表示训练时目标词预测的上下文是一个Word或者Ngram,其中bigram表示2-grams,ngram.1-2表示1-gram或者2-grams。
* Word + Character表示训练时目标词预测的上下文是一个Word或者Character,其中word-character.char1-2表示上下文是1个或2个Character。 * Word + Character表示训练时目标词预测的上下文是一个Word或者Character,其中word-character.char1-2表示上下文是1个或2个Character。
* Word + Character + Ngram表示训练时目标词预测的上下文是一个Word、Character或者Ngram。bigram-char表示上下文是2-grams或者1个Character。 * Word + Character + Ngram表示训练时目标词预测的上下文是一个Word、Character或者Ngram。bigram-char表示上下文是2-grams或者1个Character。
| 语料 | Word | Word + Ngram | Word + Character | Word + Character + Ngram | | 语料 | Word | Word + N-gram | Word + Character | Word + Character + N-gram |
| ------------------------------------------- | ---- | ---- | ---- | ---- | | ------------------------------------------- | ---- | ---- | ---- | ---- |
| Baidu Encyclopedia 百度百科 | w2v.baidu_encyclopedia.target.word-word.dim300 | w2v.baidu_encyclopedia.target.word-ngram.1-2.dim300 | w2v.baidu_encyclopedia.target.word-character.char1-2.dim300 | w2v.baidu_encyclopedia.target.bigram-char.dim300 | | Baidu Encyclopedia 百度百科 | w2v.baidu_encyclopedia.target.word-word.dim300 | w2v.baidu_encyclopedia.target.word-ngram.1-2.dim300 | w2v.baidu_encyclopedia.target.word-character.char1-2.dim300 | w2v.baidu_encyclopedia.target.bigram-char.dim300 |
| Wikipedia_zh 中文维基百科 | w2v.wiki.target.word-word.dim300 | w2v.wiki.target.word-bigram.dim300 | w2v.wiki.target.word-char.dim300 | w2v.wiki.target.bigram-char.dim300 | | Wikipedia_zh 中文维基百科 | w2v.wiki.target.word-word.dim300 | w2v.wiki.target.word-bigram.dim300 | w2v.wiki.target.word-char.dim300 | w2v.wiki.target.bigram-char.dim300 |
...@@ -71,7 +65,7 @@ PaddleNLP提供多个开源的预训练Embedding模型,用户仅需在使用`p ...@@ -71,7 +65,7 @@ PaddleNLP提供多个开源的预训练Embedding模型,用户仅需在使用`p
## 使用方式 ## 使用方式
以上所述的模型名称可直接以参数形式传入padddlenlp.embeddings.TokenEmbedding,加载相对应的模型。比如要加载语料为Wiki2017,通过FastText训练的预训练模型(`fasttext.wiki-news.target.word-word.dim300.en`),只需执行以下代码: 以上所述的模型名称可直接以参数形式传入`padddlenlp.embeddings.TokenEmbedding`,加载相对应的模型。比如要加载语料为Wiki2017,通过FastText训练的预训练模型(`fasttext.wiki-news.target.word-word.dim300.en`),只需执行以下代码:
```python ```python
import paddle import paddle
...@@ -147,12 +141,12 @@ token_embedding = TokenEmbedding(embedding_name="fasttext.wiki-news.target.word- ...@@ -147,12 +141,12 @@ token_embedding = TokenEmbedding(embedding_name="fasttext.wiki-news.target.word-
| fasttext.crawl.target.word-word.dim300.en | 1.19 GB | 2000002 | | fasttext.crawl.target.word-word.dim300.en | 1.19 GB | 2000002 |
## 致谢 ## 致谢
- 感谢 [Chinese-Word-Vectors](https://github.com/Embedding/Chinese-Word-Vectors)提供Word2Vec中文Embedding预训练模型 - 感谢 [Chinese-Word-Vectors](https://github.com/Embedding/Chinese-Word-Vectors)提供Word2Vec中文预训练词向量
- 感谢 [GloVe Project](https://nlp.stanford.edu/projects/glove)提供的GloVe英文Embedding预训练模型 - 感谢 [GloVe Project](https://nlp.stanford.edu/projects/glove)提供的GloVe英文预训练词向量
- 感谢 [FastText Project](https://fasttext.cc/docs/en/english-vectors.html)提供的fasttext英文预训练模型 - 感谢 [FastText Project](https://fasttext.cc/docs/en/english-vectors.html)提供的英文预训练词向量
## 参考论文 ## 参考论文
- Li, Shen, et al. "Analogical reasoning on chinese morphological and semantic relations." arXiv preprint arXiv:1805.06504 (2018). - Li, Shen, et al. "Analogical reasoning on chinese morphological and semantic relations." arXiv preprint arXiv:1805.06504 (2018).
- Qiu, Yuanyuan, et al. "Revisiting correlations between intrinsic and extrinsic evaluations of word embeddings." Chinese Computational Linguistics and Natural Language Processing Based on Naturally Annotated Big Data. Springer, Cham, 2018. 209-221. - Qiu, Yuanyuan, et al. "Revisiting correlations between intrinsic and extrinsic evaluations of word embeddings." Chinese Computational Linguistics and Natural Language Processing Based on Naturally Annotated Big Data. Springer, Cham, 2018. 209-221.
- Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. GloVe: Global Vectors for Word Representation. - Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. GloVe: Global Vectors for Word Representation.
- T. Mikolov, E. Grave, P. Bojanowski, C. Puhrsch, A. Joulin. Advances in Pre-Training Distributed Word Representations - T. Mikolov, E. Grave, P. Bojanowski, C. Puhrsch, A. Joulin. Advances in Pre-Training Distributed Word Representations.
# PaddleNLP 安装说明
# PaddleNLP Model Zoo
[**PaddleNLP**](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP) 是基于 PaddlePaddle 深度学习框架开发的自然语言处理 (NLP) 工具,算法,模型和数据的开源项目。百度在 NLP 领域十几年的深厚积淀为 PaddleNLP 提供了强大的核心动力。PaddleNLP 提供较为丰富的模型库,基本涵盖了主流的NLP任务,因为模型库中使用了PaddleNLP提供的基础NLP工具,例如数据集处理,高层API,使得模型库的算法简洁易懂。下面是 PaddleNLP 支持任务的具体信息,涵盖了 **NLP基础技术**, **NLP核心技术**, **NLP系统应用**三大领域。同时随着NLP序列建模技术的成熟,我们还提供了更多的基于NLP序列建模技术的应用场景。
## 经典序列模型结构
## NLP基础技术
| 模型 | 位置 | 简介 |
| ----------------------------------| ------------------------------------------------------------ | -------------------- |
### 词法分析
| 模型 | 目录 | 简介 |
| ----------------------------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
| BiGRU-CRF | [Lexical Analysis](../examples/lexical_analysis) | 百度自主研发中文特色模型词法分析任务,集成了中文分词、词性标注和命名实体识别任务。输入是一个字符串,而输出是句子中的词边界和词性、实体类别。 |
### 词向量
模型 | 目录 | 简介 |
| ----------------------------------| ------------------------------------------------------------ | ------------------------------------------------------------ |
| 预训练词向量 | [Word Embedding](../examples/word_embedding) | 提供了丰富的中文预训练词向量,通过简单配置即可使用词向量来进行热启训练,能支持较多的中文场景下的训练任务的热启训练,加快训练收敛速度。|
### 命名实体识别 (Named Entity Recognition)
命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务。NER是信息提取、问答系统、句法分析、机器翻译等众多NLP任务的重要基础工具。命名实体识别的准确度,决定了下游任务的效果,是NLP中非常重要的一个基础问题。
在NER任务提供了两种解决方案,一类LSTM/GRU + CRF(Conditional Random Field),RNN类的模型来抽取底层文本的信息,而CRF(条件随机场)模型来学习底层Token之间的联系;另外一类是通过预训练模型,例如ERNIE,BERT模型,直接来预测Token的标签信息。
因为该类模型较为抽象,提供了一份快递单信息抽取的训练脚本给大家使用,具体的任务是通过两类的模型来抽取快递单的核心信息,例如地址,姓名,手机号码,具体的[快递单任务链接](../examples/named_entity_recognition/express_ner)
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [BiGRU-CRF](../examples/named_entity_recognition/express_ner) |传统的序列标注模型,通过双向GRU模型能抽取文本序列的信息和联系,通过CRF模型来学习文本Token之间的联系,本模型集成PaddleNLP自己开发的CRF模型,模型结构清晰易懂。 |
| [ERNIE/BERT Token Classification](./named_entity_recognition) |通过预训练模型提供的强大的语义信息和ERNIE/BERT类模型的Self-Attention机制来覆盖Token之间的联系,直接通过BERT/ERNIE的序列分类模型来预测文本每个token的标签信息,模型结构简单,效果优异。|
### 语言模型 (Language Model)
在自然语言处理(NLP)领域中,语言模型预训练方法在多项NLP任务上都获得了不错的提升,广泛受到了各界的关注。在这里主要是提供了目前两种语言模型,一种是RNNLM模型,通过RNN网络来进行序列任务的预测;另外一种是ELMo模型,以双向 LSTM 为网路基本组件,以 Language Model 为训练目标,通过预训练得到通用的语义表示。
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [RNNLM](../examples/language_model/rnnlm) | 序列任务常用的RNN网络,实现了一个两层的LSTM网络,然后LSTM的结果去预测下一个词出现的概率。是基于RNN的常规的语言模型。|
| [ELMo](././exampleslanguage_model/elmo) | ELMo是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。ELMo主要是解决了传统的Word Embedding的向量表示单一的问题,ELMo通过结合上下文来增强语义表示。|
### 预训练语言模型 (Pretrained Language Model)
| 任务类型 | 目录 | 简介 |
| -------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| BERT | [BERT(Bidirectional Encoder Representation from Transformers)](../examples/language_model/bert) | BERT模型作为目前最为火热语义表示预训练模型,PaddleNLP提供了简洁功效的实现方式,
同时易用性方面通过简单参数切换即可实现不同的BERT模型。 |
| ERNIE-GEN | [ERNIE-GEN(An Enhanced Multi-Flow Pre-training and Fine-tuning Framework for Natural Language Generation)](../examples/text_generation/ernie-gen) |ERNIE-GEN是百度发布的生成式预训练模型,是一种Multi-Flow结构的预训练和微调框架。ERNIE-GEN利用更少的参数量和数据,在摘要生成、问题生成、对话和生成式问答4个任务共5个数据集上取得了SOTA效果 |
| ELECTRA | [Electra(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)](../examples/language_model/electra) |ELECTRA 创新性地引入GAN的思想对BERT预训练过程进行了改进,在和BERT具有相同的模型参数、预训练计算量一样的情况下,ELECTRA GLUE得分明显好。同时相比GPT、ELMo,在GLUE得分略好时,ELECTRA预训练模型只需要很少的参数和计算量。|
## NLP核心技术
### 文本分类 (Text Classification)
文本分类任务是NLP中较为常见的任务,在该任务上我们提供了两大类模型,一类是基于RNN类模型的传统轻量级的分类模型,一类是基于预训模型的分类模型,在RNN类模型上我们提供了百度自研的Senta模型,模型结构经典,效果突出;在预训练类模型上,提供了大量的预训练模型,模型参数自动下载,用法简易,极易提升文本分类任务效果。
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [RNN/GRU/LSTM](../examples/text_classification/rnn) | 面向通用场景的文本分类模型,网络结构接入常见的RNN类模型,例如LSTM,GRU,RNN。整体模型结构集成在百度的自研的Senta文本情感分类模型上,效果突出,用法简易。|
| [ERNIE/BERT Fine-tuning](../examples/text_classification/pretrained_models) |基于预训练后模型的文本分类的模型,多达11种的预训练模型可供使用,其中有较多中文预训练模型,预训练模型切换简单,情感分析任务上效果突出。|
### 文本生成 (Text Generation)
文本生成是自然语言处理中一个重要的研究领域,具有广阔的应用前景。国内外已经有诸如Automated Insights、Narrative Science等文本生成系统投入使用,这些系统根据格式化数据或自然语言文本生成新闻、财报或者其他解释性文本。目前比较常见的文本生成任务两大类,文本写作和文本摘要。在这里主要提供百度自研的文本生成模型ERNIE-GEN, ERNIE-GEN是一种Multi-Flow结构的预训练和微调框架。ERNIE-GEN利用更少的参数量和数据,在摘要生成、问题生成、对话和生成式问答4个任务共5个数据集上取得了SOTA效果。我们基于ERNIE-GEN模型提供了一个自动关写诗的示例,来展示ERNIE-GEN的生成效果。
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [ERNIE-GEN(An Enhanced Multi-Flow Pre-training and Fine-tuning Framework for Natural Language Generation)](../examples/text_generation/ernie-gen) | ERNIE-GEN是百度发布的生成式预训练模型,通过Global-Attention的方式解决训练和预测曝光偏差的问题,同时使用Multi-Flow Attention机制来分别进行Global和Context信息的交互,同时通过片段生成的方式来增加语义相关性。|
### 文本匹配 (Text Matching)
文本匹配一直是自然语言处理(NLP)领域一个基础且重要的方向,一般研究两段文本之间的关系。文本相似度计算、自然语言推理、问答系统、信息检索等,都可以看作针对不同数据和场景的文本匹配应用。在文本匹配的任务上提供了百度自研的SimNet语义匹配框架,以及基于Transformer结构的SentenceBERT模型。SimNet是一个计算短文本相似度的框架,主要包括 BOW、CNN、RNN、MMDNN 等核心网络结构形式,在百度各产品上广泛应用,提供语义相似度计算训练和预测框架,适用于信息检索、新闻推荐、智能客服等多个应用场景,帮助企业解决语义匹配问题。SentenceBERT模型是通过强大语义信息的预训练模型来表征句子的语义信息,通过比较两个句子的语义信息来判断两个句子是否匹配。
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [SimNet](../examples/text_matching/simnet)|PaddleNLP提供的SimNet模型已经纳入了PaddleNLP的官方API中,用户直接调用API即完成一个SimNet模型的组网,在模型层面提供了Bow/CNN/LSTM/GRU常用信息抽取方式, 灵活高,使用方便。|
| [SentenceTransformer](../examples/text_matching/sentence_transformers)|直接调用简易的预训练模型接口接口完成对Sentence的语义表示,同时提供了较多的中文预训练模型,可以根据任务的来选择相关参数。|
### 文本图学习 (Text Graph)
在很多工业应用中,往往出现一种特殊的图:Text Graph。顾名思义,图的节点属性由文本构成,而边的构建提供了结构信息。如搜索场景下的Text Graph,节点可由搜索词、网页标题、网页正文来表达,用户反馈和超链信息则可构成边关系。百度图学习PGL((Paddle Graph Learning)团队提出ERNIESage(ERNIE SAmple aggreGatE)模型同时建模文本语义与图结构信息,有效提升Text Graph的应用效果。图学习是深度学习领域目前的研究热点,如果想对图学习有更多的了解,可以访问[PGL Github链接](https://github.com/PaddlePaddle/PGL/)
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [ERNIESage(ERNIE SAmple aggreGatE)](../examples/text_graph/erniesage)|通过Graph(图)来构建自身节点和邻居节点的连接关系,将自身节点和邻居节点的关系构建成一个关联样本输入到ERNIE中,ERNIE作为聚合函数(Aggregators)来表征自身节点和邻居节点的语义关系,最终强化图中节点的语义表示。|
## NLP系统应用
### 机器翻译 (Machine Translation)
机器翻译是计算语言学的一个分支,是人工智能的终极目标之一,具有重要的科学研究价值。在机器翻译的任务上,提供了两大类模型,一类是传统的 Sequence to Sequence任务,简称Seq2Seq,通过RNN类模型进行编码,解码;另外一类是Transformer类模型,通过Self-Attention机制来提升Encoder和Decoder的效果,Transformer模型的具体信息可以参考论文, [Attention Is All You Need](https://arxiv.org/abs/1706.03762)。下面是具体的模型信息。
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [Seq2Seq](../examples/machine_translation/seq2seq) | 使用编码器-解码器(Encoder-Decoder)结构, 同时使用了Attention机制来加强Decoder和Encoder之间的信息交互,Seq2Seq 广泛应用于机器翻译,自动对话机器人,文档摘要自动生成,图片描述自动生成等任务中。|
| [Transformer](../examples/machine_translation/transformer) |基于PaddlePaddle框架的Transformer结构搭建的机器翻译模型,Transformer 计算并行度高,能解决学习长程依赖问题。并且模型框架集成了训练,验证,预测任务,功能完备,效果突出。|
### 阅读理解(Machine Reading Comprehension)
机器阅读理解是近期自然语言处理领域的研究热点之一,也是人工智能在处理和理解人类语言进程中的一个长期目标。得益于深度学习技术和大规模标注数据集的发展,用端到端的神经网络来解决阅读理解任务取得了长足的进步。下面是具体的模型信息。
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [BERT/ERNIE Question Answering](../examples/machine_reading_comprehension/) |通过ERNIE/BERT等预训练模型的强大的语义表示能力,设置在阅读理解上面的下游任务,该模块主要是提供了多个数据集来验证BERT模型在阅读理解上的效果,数据集主要是包括了SQuAD,DuReader-robust,DuReader-yesno。同时提供了和相关阅读理解相关的Metric(指标),用户可以简易的调用这些API,快速验证模型效果。|
### 对话系统(Dialogue System)
对话系统 (Dialogue System) 常常需要根据应用场景的变化去解决多种多样的任务。任务的多样性(意图识别、槽填充、行为识别、状态追踪等等),以及领域训练数据的稀少给对话系统领域带来了诸多挑战。为此提供了基于BERT的对话通用理解模型 (DGU: Dialogue General Understanding),该种训练范式在对话理解任务上取得比肩甚至超越各个领域业内最好的模型的效果,展现了学习一个通用对话理解模型的巨大潜力。下面是模型的信息。
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [Dialogue General Understanding](../examples/dialogue/dgu) | 提供基于BERT通用对话理解模型,通过对文本分类、序列标注等操作就可以完成对话中的意图识别,行文识别,状态跟踪等理解任务。|
| [PLATO-2](../examples/dialogue/plato-2) | 百度自研领先的开放域对话预训练模型。[PLATO-2: Towards Building an Open-Domain Chatbot via Curriculum Learning](https://arxiv.org/abs/2006.16779) |
## 更多序列建模应用
### 时间序列预测(Time Series)
时间序列是指按照时间先后顺序排列而成的序列,例如每日发电量、每小时营业额等组成的序列。通过分析时间序列中的发展过程、方向和趋势,我们可以预测下一段时间可能出现的情况。为了更好让大家了解时间序列预测任务,提供了基于19年新冠疫情预测的任务示例,有兴趣的话可以进行研究学习。
下面是具体的时间序列模型的信息。
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [TCN(Temporal Convolutional Network)](../examples/time_series)|TCN模型基于卷积的时间序列模型,通过因果卷积(Causal Convolution)和空洞卷积(Dilated Convolution) 特定的组合方式解决卷积不适合时间序列任务的问题,TCN具备并行度高,内存低等诸多优点,在某些时间序列任务上效果已经超过传统的RNN模型。|
### 蛋白质二级结构预测 (Protein Secondary Structure Prediction)
| 模型 | 简介 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
[TAPE](https://arxiv.org/abs/1906.08230) | 借鉴自然语言处理中对大量未标记的序列使用自监督学习的方式进行预训练(如Transformer, LSTM等序列建模结构),从而提取蛋白质中有用的生物学信息,并将这些信息迁移到其他带标签的任务,使得这些任务训练更快更稳定的收敛。更多详情可以参考[PaddleHelix蛋白质预训练模型](https://github.com/PaddlePaddle/PaddleHelix/blob/dev/apps/pretrained_protein/tape/README_cn.md#%E5%BA%8F%E5%88%97%E6%A8%A1%E5%9E%8B)|
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
下表汇总了目前PaddleNLP支持的各类预训练模型。用户可以使用PaddleNLP提供的模型,完成问答、序列分类、token分类等任务。同时我们提供了22种预训练的参数权重供用户使用,其中包含了11种中文语言模型的预训练权重。 下表汇总了目前PaddleNLP支持的各类预训练模型。用户可以使用PaddleNLP提供的模型,完成问答、序列分类、token分类等任务。同时我们提供了22种预训练的参数权重供用户使用,其中包含了11种中文语言模型的预训练权重。
| Model | Tokenizer | Supported Task| Pretrained Weight| | Model | Tokenizer | Supported Task | Pretrained Weight|
|---|---|---|---| |---|---|---|---|
| [BERT](https://arxiv.org/abs/1810.04805) | BertTokenizer|BertModel<br> BertForQuestionAnswering<br> BertForSequenceClassification<br>BertForTokenClassification| `bert-base-uncased`<br> `bert-large-uncased` <br>`bert-base-multilingual-uncased` <br>`bert-base-cased`<br> `bert-base-chinese`<br> `bert-base-multilingual-cased`<br> `bert-large-cased`<br> `bert-wwm-chinese`<br> `bert-wwm-ext-chinese` | | [BERT](https://arxiv.org/abs/1810.04805) | BertTokenizer|BertModel<br> BertForQuestionAnswering<br> BertForSequenceClassification<br>BertForTokenClassification| `bert-base-uncased`<br> `bert-large-uncased` <br>`bert-base-multilingual-uncased` <br>`bert-base-cased`<br> `bert-base-chinese`<br> `bert-base-multilingual-cased`<br> `bert-large-cased`<br> `bert-wwm-chinese`<br> `bert-wwm-ext-chinese` |
|[ERNIE](https://arxiv.org/abs/1904.09223)|ErnieTokenizer<br>ErnieTinyTokenizer|ErnieModel<br> ErnieForQuestionAnswering<br> ErnieForSequenceClassification<br> ErnieForTokenClassification<br> ErnieForGeneration| `ernie-1.0`<br> `ernie-tiny`<br> `ernie-2.0-en`<br> `ernie-2.0-large-en`<br>`ernie-gen-base-en`<br>`ernie-gen-large-en`<br>`ernie-gen-large-en-430g`| |[ERNIE](https://arxiv.org/abs/1904.09223)|ErnieTokenizer<br>ErnieTinyTokenizer|ErnieModel<br> ErnieForQuestionAnswering<br> ErnieForSequenceClassification<br> ErnieForTokenClassification<br> ErnieForGeneration| `ernie-1.0`<br> `ernie-tiny`<br> `ernie-2.0-en`<br> `ernie-2.0-large-en`<br>`ernie-gen-base-en`<br>`ernie-gen-large-en`<br>`ernie-gen-large-en-430g`|
......
此差异已折叠。
...@@ -97,7 +97,7 @@ python -u ./run_glue_ofa.py --model_type bert \ ...@@ -97,7 +97,7 @@ python -u ./run_glue_ofa.py --model_type bert \
3. Fine-tuning之后的模型作为教师网络,超网络作为学生网络,进行知识蒸馏。 3. Fine-tuning之后的模型作为教师网络,超网络作为学生网络,进行知识蒸馏。
<p align="center"> <p align="center">
<img src="ofa_bert.jpg" width="950"/><br /> <img src="./imgs/ofa_bert.jpg" width="950"/><br />
整体流程图 整体流程图
</p> </p>
......
...@@ -10,9 +10,9 @@ ...@@ -10,9 +10,9 @@
- Python >= 3.6 - Python >= 3.6
- paddlepaddle >= 2.0.0rc1,安装方式请参考 [快速安装](https://www.paddlepaddle.org.cn/install/quick) - paddlepaddle >= 2.0.0,安装方式请参考 [快速安装](https://www.paddlepaddle.org.cn/install/quick)
- paddlenlp >= 2.0.0b2, 安装方式:`pip install paddlenlp\>=2.0.0b2` - paddlenlp >= 2.0.0rc, 安装方式:`pip install paddlenlp>=2.0.0rc`
### 2.2 数据准备 ### 2.2 数据准备
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
### 2.3 启动训练 ### 2.3 启动训练
本项目提供了两种模型结构,一种是BiGRU + CRF结构,另一种是ERNIE + FC结构,前者显存占用小,后者能够在较小的迭代次数中收敛 本项目提供了两种模型结构,一种是BiGRU+CRF结构,另一种是ERNIE+FC结构,前者显存占用小,推理速度快;后者能够在更快收敛并取得更高的精度,但推理速度较慢
#### 2.3.1 启动BiGRU + CRF训练 #### 2.3.1 启动BiGRU + CRF训练
......
...@@ -115,7 +115,7 @@ def predict(model, data, tokenizer, label_map, batch_size=1): ...@@ -115,7 +115,7 @@ def predict(model, data, tokenizer, label_map, batch_size=1):
Args: Args:
model (obj:`paddle.nn.Layer`): A model to classify texts. model (obj:`paddle.nn.Layer`): A model to classify texts.
data (obj:`List(Example)`): The processed data whose each element is a Example (numedtuple) object. data (obj:`List(Example)`): The processed data whose each element is a Example (numedtuple) object.
A Example object contains `text`(word_ids) and `se_len`(sequence length). A Example object contains `text`(word_ids) and `seq_len`(sequence length).
tokenizer(obj:`PretrainedTokenizer`): This tokenizer inherits from :class:`~paddlenlp.transformers.PretrainedTokenizer` tokenizer(obj:`PretrainedTokenizer`): This tokenizer inherits from :class:`~paddlenlp.transformers.PretrainedTokenizer`
which contains most of the methods. Users should refer to the superclass for more information regarding methods. which contains most of the methods. Users should refer to the superclass for more information regarding methods.
label_map(obj:`dict`): The label id (key) to label str (value) map. label_map(obj:`dict`): The label id (key) to label str (value) map.
......
...@@ -137,7 +137,7 @@ def preprocess_prediction_data(data, vocab): ...@@ -137,7 +137,7 @@ def preprocess_prediction_data(data, vocab):
Returns: Returns:
examples (obj:`List(Example)`): The processed data whose each element is a Example (numedtuple) object. examples (obj:`List(Example)`): The processed data whose each element is a Example (numedtuple) object.
A Example object contains `text`(word_ids) and `se_len`(sequence length). A Example object contains `text`(word_ids) and `seq_len`(sequence length).
""" """
examples = [] examples = []
......
...@@ -39,7 +39,7 @@ def predict(model, data, label_map, collate_fn, batch_size=1, pad_token_id=0): ...@@ -39,7 +39,7 @@ def predict(model, data, label_map, collate_fn, batch_size=1, pad_token_id=0):
Args: Args:
model (obj:`paddle.nn.Layer`): A model to classify texts. model (obj:`paddle.nn.Layer`): A model to classify texts.
data (obj:`List(Example)`): The processed data whose each element is a Example (numedtuple) object. data (obj:`List(Example)`): The processed data whose each element is a Example (numedtuple) object.
A Example object contains `text`(word_ids) and `se_len`(sequence length). A Example object contains `text`(word_ids) and `seq_len`(sequence length).
label_map(obj:`dict`): The label id (key) to label str (value) map. label_map(obj:`dict`): The label id (key) to label str (value) map.
collate_fn(obj: `callable`): function to generate mini-batch data by merging collate_fn(obj: `callable`): function to generate mini-batch data by merging
the sample list. the sample list.
......
...@@ -16,10 +16,11 @@ PaddleNLP已预置多个公开的预训练Embedding,用户可以通过使用`p ...@@ -16,10 +16,11 @@ PaddleNLP已预置多个公开的预训练Embedding,用户可以通过使用`p
* 环境依赖 * 环境依赖
- python >= 3.6 - python >= 3.6
- paddlepaddle-gpu >= 2.0.0-rc1 - paddlepaddle >= 2.0.0
- paddlenlp >= 2.0.0rc
``` ```
pip install paddlenlp==2.0.0b pip install paddlenlp==2.0.0rc
``` ```
### 下载词表 ### 下载词表
...@@ -83,7 +84,9 @@ visualdl --logdir ./vdl_dir --port 8888 --host 0.0.0.0 ...@@ -83,7 +84,9 @@ visualdl --logdir ./vdl_dir --port 8888 --host 0.0.0.0
在Chrome浏览器输入 `ip:8888` (ip为启动VisualDL机器的IP)。 在Chrome浏览器输入 `ip:8888` (ip为启动VisualDL机器的IP)。
以下为示例实验效果对比图,蓝色是使用`paddlenlp.embeddings.TokenEmbedding`进行的实验,绿色是使用没有加载预训练模型的Embedding进行的实验。可以看到,使用`paddlenlp.embeddings.TokenEmbedding`的训练,其验证acc变化趋势上升,并收敛于0.90左右,收敛后相对平稳,不容易过拟合。而没有使用`paddlenlp.embeddings.TokenEmbedding`的训练,其验证acc变化趋势向下,并收敛于0.86左右。从示例实验可以观察到,使用`paddlenlp.embedding.TokenEmbedding`能提升训练效果。 以下为示例实验效果对比图,蓝色是使用`paddlenlp.embeddings.TokenEmbedding`进行的实验,绿色是使用没有加载预训练模型的Embedding进行的实验。
可以看到,使用`paddlenlp.embeddings.TokenEmbedding`的训练,其验证acc变化趋势上升,并收敛于0.90左右,收敛后相对平稳,不容易过拟合。
而没有使用`paddlenlp.embeddings.TokenEmbedding`的训练,其验证acc变化趋势向下,并收敛于0.86左右。从示例实验可以观察到,使用`paddlenlp.embedding.TokenEmbedding`能提升训练效果。
Eval Acc: Eval Acc:
......
...@@ -125,7 +125,7 @@ def preprocess_prediction_data(data, vocab): ...@@ -125,7 +125,7 @@ def preprocess_prediction_data(data, vocab):
data (obj:`List[str]`): The prediction data whose each element is a tokenized text. data (obj:`List[str]`): The prediction data whose each element is a tokenized text.
Returns: Returns:
examples (obj:`List(Example)`): The processed data whose each element is a Example (numedtuple) object. examples (obj:`List(Example)`): The processed data whose each element is a Example (numedtuple) object.
A Example object contains `text`(word_ids) and `se_len`(sequence length). A Example object contains `text`(word_ids) and `seq_len`(sequence length).
""" """
examples = [] examples = []
for text in data: for text in data:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册