diff --git a/PaddleNLP/README.md b/PaddleNLP/README.md index 00945a53eb9746c1c1d41e5212881936800a0db0..ec010f73123cfd22dc1ec21f39520eebf1ebf560 100644 --- a/PaddleNLP/README.md +++ b/PaddleNLP/README.md @@ -17,15 +17,12 @@ PaddleNLP 2.0拥有丰富的模型库、简洁易用的API与高性能的分布 ## 特性 - **丰富的模型库** - - 涵盖了NLP主流应用相关的前沿模型,包括中文词向量、预训练模型、词法分析、文本分类、文本匹配、文本生成、机器翻译、通用对话、问答系统等,更多详细介绍请查看[PaddleNLP模型库](./exmaples/README.md)。 - **简洁易用的API** - - 深度兼容飞桨2.0的高层API体系,提供可复用的文本建模模块,可大幅度减少数据处理、组网、训练环节的代码开发量,提升文本建模开发效率。 - **高性能分布式训练** - - 通过深度优化的混合精度训练策略与Fleet分布式训练API,可充分利用GPU集群资源,高效完成大规模预训练模型的分布式训练。 @@ -40,7 +37,6 @@ PaddleNLP 2.0拥有丰富的模型库、简洁易用的API与高性能的分布 pip install paddlenlp==2.0.0rc ``` - ## 快速开始 ### 数据集快速加载 @@ -48,7 +44,7 @@ pip install paddlenlp==2.0.0rc ```python from paddlenlp.datasets import ChnSentiCorp -train_dataset, dev_dataset, test_dataset= ChnSentiCorp.get_datasets(['train', 'dev', 'test']) +train_ds, dev_ds, test_ds = ChnSentiCorp.get_datasets(['train', 'dev', 'test']) ``` 可参考[Dataset文档](./docs/datasets.md)查看更多数据集。 @@ -74,11 +70,8 @@ wordemb.cosine_sim("艺术", "火车") from paddlenlp.transformers import ErnieModel, BertModel, RobertaModel, ElectraModel ernie = ErnieModel.from_pretrained('ernie-1.0') - bert = BertModel.from_pretrained('bert-wwm-chinese') - roberta = RobertaModel.from_pretrained('roberta-wwm-ext') - electra = ElectraModel.from_pretrained('chinese-electra-small') ``` @@ -102,7 +95,7 @@ electra = ElectraModel.from_pretrained('chinese-electra-small') ## API 使用文档 - [Transformer API](./docs/transformers.md) - * 基于Transformer结构相关的预训练模型API,包含ERNIE, BERT, RoBERTa, Electra等主流经典结构和下游任务。 + * 基于Transformer结构相关的预训练模型API,包含ERNIE, BERT, RoBERTa, Electra等主流经典结构和下游任务。 - [Data API](./docs/data.md) * 文本数据Pipeline相关的API说明。 - [Dataset API](./docs/datasets.md) diff --git a/PaddleNLP/docs/README.md b/PaddleNLP/docs/README.md deleted file mode 100644 index 87a3cc3d4ce90e73e8b7ea7be061c3c533213af4..0000000000000000000000000000000000000000 --- a/PaddleNLP/docs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# PaddleNLP docs - -存放readthedocs材料 \ No newline at end of file diff --git a/PaddleNLP/docs/data.md b/PaddleNLP/docs/data.md index ca45005f95086affd6454cb561b446bc2dad90be..7dc61a390b9ad33c89620d16687b59ae561ae5ce 100644 --- a/PaddleNLP/docs/data.md +++ b/PaddleNLP/docs/data.md @@ -1,6 +1,6 @@ -# paddlenlp.data +# PaddleNLP Data API -该模块提供了在NLP任务中构建有效的数据pipeline的一些常用API。 +该模块提供了在NLP任务中构建有效的数据Pipeline的常用API。 ## API汇总 diff --git a/PaddleNLP/docs/datasets.md b/PaddleNLP/docs/datasets.md index 1a80f3d9569bae4489f3a1ba90b4d225d6249605..1c1d7981452ec74bb3b759d8f356e598ffc6394f 100644 --- a/PaddleNLP/docs/datasets.md +++ b/PaddleNLP/docs/datasets.md @@ -1,10 +1,10 @@ -# PaddleNLP Datasets +# PaddleNLP Datasets API ## 阅读理解 | 数据集名称 | 简介 | 调用方法 | | ---- | ----- | ------ | -| [SQaAD](https://rajpurkar.github.io/SQuAD-explorer/) | 斯坦福问答数据集,包括SQaAD1.1和SQaAD2.0|`paddlenlp.datasets.SQuAD` | +| [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/) | 斯坦福问答数据集,包括SQaAD1.1和SQaAD2.0|`paddlenlp.datasets.SQuAD` | | [DuReader-yesno](https://aistudio.baidu.com/aistudio/competition/detail/49) | 千言数据集:阅读理解,判断答案极性|`paddlenlp.datasets.DuReaderYesNo` | | [DuReader-robust](https://aistudio.baidu.com/aistudio/competition/detail/49) | 千言数据集:阅读理解,答案原文抽取|`paddlenlp.datasets.DuReaderRobust` | @@ -52,6 +52,6 @@ | 数据集名称 | 简介 | 调用方法 | | ---- | --------- | ------ | -| [yahoo](https://webscope.sandbox.yahoo.com/catalog.php?datatype=l&guccounter=1) | 雅虎英文语料库| [VAE](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/examples/text_generation/vae-seq2seq)| +| [yahoo](https://webscope.sandbox.yahoo.com/catalog.php?datatype=l&guccounter=1) | 雅虎英文语料库 | [VAE](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/examples/text_generation/vae-seq2seq)| | [PTB](http://www.fit.vutbr.cz/~imikolov/rnnlm/) | Penn Treebank Dataset | `paddlenlp.datasets.PTB`| | [1 Billon words](https://opensource.google/projects/lm-benchmark) | 1 Billion Word Language Model Benchmark R13 Output 基准语料库| [ELMo](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/examples/language_model/elmo)| diff --git a/PaddleNLP/docs/embeddings.md b/PaddleNLP/docs/embeddings.md index f54b5f081d1b5e1592770526eded80541c4c17e5..fbd58a429ee1f8ca526df731d86367903413e0ed 100644 --- a/PaddleNLP/docs/embeddings.md +++ b/PaddleNLP/docs/embeddings.md @@ -1,3 +1,5 @@ +# PaddleNLP Embedding API + - [Embedding 模型汇总](#embedding-模型汇总) - [中文词向量](#中文词向量) - [英文词向量](#英文词向量) @@ -145,7 +147,9 @@ token_embedding = TokenEmbedding(embedding_name="fasttext.wiki-news.target.word- | fasttext.crawl.target.word-word.dim300.en | 1.19 GB | 2000002 | ## 致谢 -- 感谢 [Chinese-Word-Vectors](https://github.com/Embedding/Chinese-Word-Vectors)提供Word2Vec中文Embedding预训练模型,[GloVe Project](https://nlp.stanford.edu/projects/glove)提供的GloVe英文Embedding预训练模型,[FastText Project](https://fasttext.cc/docs/en/english-vectors.html)提供的fasttext英文预训练模型。 +- 感谢 [Chinese-Word-Vectors](https://github.com/Embedding/Chinese-Word-Vectors)提供Word2Vec中文Embedding预训练模型。 +- 感谢 [GloVe Project](https://nlp.stanford.edu/projects/glove)提供的GloVe英文Embedding预训练模型。 +- 感谢 [FastText Project](https://fasttext.cc/docs/en/english-vectors.html)提供的fasttext英文预训练模型。 ## 参考论文 - Li, Shen, et al. "Analogical reasoning on chinese morphological and semantic relations." arXiv preprint arXiv:1805.06504 (2018). diff --git a/PaddleNLP/docs/metrics.md b/PaddleNLP/docs/metrics.md index 54f26ae018364440dc2472276f1c4337b91c09c5..84a123987e60f2dfa926573a0e16392bbc0fd63e 100644 --- a/PaddleNLP/docs/metrics.md +++ b/PaddleNLP/docs/metrics.md @@ -1,14 +1,14 @@ -# paddlenlp.metrics API汇总 +# PaddleNLP Metrics API -目前paddlenlp提供以下评价指标: +目前PaddleNLP提供以下模型评价指标: -| Metric | 简介 | API | -| -------------------------------------------------------- | :----------------------------------------------------------- | ------------------------------------------------------------ | -| Perplexity | 困惑度,常用来衡量语言模型优劣,也可用于机器翻译、文本生成等任务。 | `paddlenlp.metrics.Perplexity` | -| BLEU(bilingual evaluation understudy) | 机器翻译常用评价指标 | `paddlenlp.metrics.BLEU` | -| Rouge(Recall-Oriented Understudy for Gisting Evaluation) | 评估自动文摘以及机器翻译的指标 | `paddlenlp.metrics.RougeL`, `paddlenlp.metrics.RougeN` | +| Metric | 简介 | API | +| ------ | --- | --- | +| [Perplexity](https://en.wikipedia.org/wiki/Perplexity) | 困惑度,常用来衡量语言模型优劣,也可用于机器翻译、文本生成等任务。 | `paddlenlp.metrics.Perplexity` | +| [BLEU(BiLingual Evaluation Understudy)](https://en.wikipedia.org/wiki/BLEU) | 机器翻译常用评价指标 | `paddlenlp.metrics.BLEU` | +| [Rouge(Recall-Oriented Understudy for Gisting Evaluation)](https://en.wikipedia.org/wiki/ROUGE_(metric)) | 评估自动文摘以及机器翻译的指标 | `paddlenlp.metrics.RougeL`, `paddlenlp.metrics.RougeN` | | AccuracyAndF1 | 准确率及F1-score,可用于GLUE中的MRPC 和QQP任务 | `paddlenlp.metrics.AccuracyAndF1` | | PearsonAndSpearman | 皮尔森相关性系数和斯皮尔曼相关系数。可用于GLUE中的STS-B任务 | `paddlenlp.metrics.PearsonAndSpearman` | | Mcc(Matthews correlation coefficient) | 马修斯相关系数,用以测量二分类的分类性能的指标。可用于GLUE中的CoLA任务 | `paddlenlp.metrics.Mcc` | | ChunkEvaluator | 计算了块检测的精确率、召回率和F1-score。常用于序列标记任务,如命名实体识别(NER) | `paddlenlp.metrics.ChunkEvaluator` | -| Squad | 用于SQuAD和DuReader-robust的评价指标 | `paddlenlp.metrics.compute_predictions`, `paddlenlp.metrics.squad_evaluate` | +| Squad Evalutaion | 用于SQuAD和DuReader-robust的评价指标 | `paddlenlp.metrics.compute_predictions`, `paddlenlp.metrics.squad_evaluate` | diff --git a/PaddleNLP/docs/models.md b/PaddleNLP/docs/models.md index 4b185ca1472955d43b37e4b06012ae478dc35d2f..a4401770019feeff4c31525acddb4320e55340fe 100644 --- a/PaddleNLP/docs/models.md +++ b/PaddleNLP/docs/models.md @@ -1,4 +1,4 @@ -# paddlenlp.models +# PaddleNLP Models API 该模块提供了百度自研的模型的高阶API,如文本分类模型Senta,文本匹配模型SimNet,通用预训练模型ERNIE等。 diff --git a/PaddleNLP/docs/transformers.md b/PaddleNLP/docs/transformers.md index cea646846838fe28d22b3e8bba1f2bf92bc5dda8..b0213b1fd8169eab250fbf911689be0dcc76b75c 100644 --- a/PaddleNLP/docs/transformers.md +++ b/PaddleNLP/docs/transformers.md @@ -7,7 +7,7 @@ 下表汇总了目前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
BertForQuestionAnswering
BertForSequenceClassification
BertForTokenClassification| `bert-base-uncased`
`bert-large-uncased`
`bert-base-multilingual-uncased`
`bert-base-cased`
`bert-base-chinese`
`bert-base-multilingual-cased`
`bert-large-cased`
`bert-wwm-chinese`
`bert-wwm-ext-chinese` | |[ERNIE](https://arxiv.org/abs/1904.09223)|ErnieTokenizer
ErnieTinyTokenizer|ErnieModel
ErnieForQuestionAnswering
ErnieForSequenceClassification
ErnieForTokenClassification
ErnieForGeneration| `ernie-1.0`
`ernie-tiny`
`ernie-2.0-en`
`ernie-2.0-large-en`
`ernie-gen-base-en`
`ernie-gen-large-en`
`ernie-gen-large-en-430g`| @@ -15,33 +15,30 @@ |[ELECTRA](https://arxiv.org/abs/2003.10555) | ElectraTokenizer| ElectraModel
ElectraForSequenceClassification
ElectraForTokenClassification
|`electra-small`
`electra-base`
`electra-large`
`chinese-electra-small`
`chinese-electra-base`
| |[Transformer](https://arxiv.org/abs/1706.03762) |- | TransformerModel | - | -注:其中中文的预训练模型有 `bert-base-chinese, bert-wwm-chinese, bert-wwm-ext-chinese, ernie-1.0, ernie-tiny, roberta-wwm-ext, roberta-wwm-ext-large, rbt3, rbtl3, chinese-electra-base, chinese-electra-small`。生成模型`ernie-gen-base-en, ernie-gen-large-en, ernie-gen-large-en-430g`仅支持`ErnieForGeneration`任务。 +**NOTE**:其中中文的预训练模型有 `bert-base-chinese, bert-wwm-chinese, bert-wwm-ext-chinese, ernie-1.0, ernie-tiny, roberta-wwm-ext, roberta-wwm-ext-large, rbt3, rbtl3, chinese-electra-base, chinese-electra-small`。生成模型`ernie-gen-base-en, ernie-gen-large-en, ernie-gen-large-en-430g`仅支持`ErnieForGeneration`任务。 ## 预训练模型使用方法 -PaddleNLP在提丰富预训练模型的同时,也降低了用户的使用难度。只需轻松十几行代码,用户即可完成加载模型,fine-tune下游任务。 +PaddleNLP Transformer API在提丰富预训练模型的同时,也降低了用户的使用门槛。只需十几行代码,用户即可完成模型加载和下游任务Fine-tuning。 ```python import paddle from paddlenlp.datasets import ChnSentiCorp from paddlenlp.transformers import BertForSequenceClassification, BertTokenizer -train_dataset, dev_dataset, test_dataset = ChnSentiCorp.get_datasets( - ['train', 'dev', 'test']) +train_ds, dev_ds, test_ds = ChnSentiCorp.get_datasets(['train', 'dev', 'test']) -model = BertForSequenceClassification.from_pretrained( - "bert-wwm-chinese", num_classes=len(train_dataset.get_labels())) +model = BertForSequenceClassification.from_pretrained("bert-wwm-chinese", num_classes=len(train_ds.get_labels())) tokenizer = BertTokenizer.from_pretrained("bert-wwm-chinese") -# please define your dataloader from dataset and tokenizer +# Define the dataloader from dataset and tokenizer here + +optimizer = paddle.optimizer.AdamW(learning_rate=0.001, parameters=model.parameters()) -optimizer = paddle.optimizer.AdamW(learning_rate=0.001, - parameters=model.parameters()) criterion = paddle.nn.loss.CrossEntropyLoss() -for batch in train_data_loader: - input_ids, segment_ids, labels = batch +for input_ids, segment_ids, labels in train_dataloader: logits = model(input_ids, segment_ids) loss = criterion(logits, labels) probs = paddle.nn.functional.softmax(logits, axis=1) @@ -50,15 +47,13 @@ for batch in train_data_loader: optimizer.clear_grad() ``` -上面的代码给出使用预训练模型的简要示例,更完整详细的示例代码,可以参考[使用预训练模型Fine-tune完成中文文本分类任务](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/examples/text_classification/pretrained_models)。 +上面的代码给出使用预训练模型的简要示例,更完整详细的示例代码,可以参考[使用预训练模型Fine-tune完成中文文本分类任务](../examples/text_classification/pretrained_models)。 1. 加载数据集:PaddleNLP内置了多种数据集,用户可以一键导入所需的数据集。 -2. 加载预训练模型:PaddleNLP的预训练模型可以很容易地通过`from_pretrained`方法加载。第一个参数是汇总表中对应的 `Pretrained Weight`,可加载对应的预训练权重。`BertForSequenceClassification`初始化`__init__`所需的其他参数,如`num_classes`等,也是通过`from_pretrained`传入。`Tokenizer`使用同样的`from_pretrained`方法加载。 +2. 加载预训练模型:PaddleNLP的预训练模型可以很容易地通过`from_pretrained()`方法加载。第一个参数是汇总表中对应的 `Pretrained Weight`,可加载对应的预训练权重。`BertForSequenceClassification`初始化`__init__`所需的其他参数,如`num_classes`等,也是通过`from_pretrained()`传入。`Tokenizer`使用同样的`from_pretrained`方法加载。 3. 使用tokenier将dataset处理成模型的输入。此部分可以参考前述的详细示例代码。 4. 定义训练所需的优化器,loss函数等,就可以开始进行模型fine-tune任务。 -更多详细使用方法,请参考[examples](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/examples)。 - ## 参考资料: - 部分中文预训练模型来自:https://github.com/ymcui/Chinese-BERT-wwm - Sun, Yu, et al. "Ernie: Enhanced representation through knowledge integration." arXiv preprint arXiv:1904.09223 (2019). diff --git a/PaddleNLP/examples/README.md b/PaddleNLP/examples/README.md index 001526f4cb20e502002eae9e13de34934e79205a..f0f30588da94c1a60170ab876e990dc2588e9da1 100644 --- a/PaddleNLP/examples/README.md +++ b/PaddleNLP/examples/README.md @@ -1,46 +1,52 @@ # 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核心应用**。 +[**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](./lexical_analysis) | 百度自主研发中文特色模型词法分析任务,集成了中文分词、词性标注和命名实体识别任务。输入是一个字符串,而输出是句子中的词边界和词性、实体类别。 | -| 任务类型 | 目录 | 简介 | +### 词向量 + 模型 | 目录 | 简介 | | ----------------------------------| ------------------------------------------------------------ | ------------------------------------------------------------ | -| 中文词法分析 | [Lexical Analysis](./lexical_analysis) | 百度自主研发中文特色模型词法分析任务,集成了中文分词、词性标注和命名实体识别任务。输入是一个字符串,而输出是句子中的词边界和词性、实体类别。 | -| 预训练词向量 | [Word Embedding](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/examples/word_embedding) | 提供了丰富的中文预训练词向量,通过简单配置即可使用词向量来进行热启训练,能支持较多的中文场景下的训练任务的热启训练,加快训练收敛速度。| +| 预训练词向量 | [Word Embedding](./word_embedding) | 提供了丰富的中文预训练词向量,通过简单配置即可使用词向量来进行热启训练,能支持较多的中文场景下的训练任务的热启训练,加快训练收敛速度。| +### 命名实体识别 (Named Entity Recognition) -### 核心技术 -| 任务类型 | 目录 | 简介 | -| -------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| ERNIE-GEN文本生成 | [ERNIE-GEN(An Enhanced Multi-Flow Pre-training and Fine-tuning Framework for Natural Language Generation)](./text_generation/ernie-gen) |ERNIE-GEN是百度发布的生成式预训练模型,是一种Multi-Flow结构的预训练和微调框架。ERNIE-GEN利用更少的参数量和数据,在摘要生成、问题生成、对话和生成式问答4个任务共5个数据集上取得了SOTA效果 | -| BERT 预训练&GLUE下游任务 | [BERT(Bidirectional Encoder Representation from Transformers)](./language_model/bert) | BERT模型作为目前最为火热语义表示预训练模型,PaddleNLP提供了简洁功效的实现方式,同时易用性方面通过简单参数切换即可实现不同的BERT模型。 | -| Electra 预训练&GLUE下游任务 | [Electra(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)](./language_model/electra) |ELECTRA 创新性地引入GAN的思想对BERT预训练过程进行了改进,在和BERT具有相同的模型参数、预训练计算量一样的情况下,ELECTRA GLUE得分明显好。同时相比GPT、ELMo,在GLUE得分略好时,ELECTRA预训练模型只需要很少的参数和计算量。| +命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务。NER是信息提取、问答系统、句法分析、机器翻译等众多NLP任务的重要基础工具。命名实体识别的准确度,决定了下游任务的效果,是NLP中非常重要的一个基础问题。 +在NER任务提供了两种解决方案,一类LSTM/GRU + CRF(Conditional Random Field),RNN类的模型来抽取底层文本的信息,而CRF(条件随机场)模型来学习底层Token之间的联系;另外一类是通过预训练模型,例如ERNIE,BERT模型,直接来预测Token的标签信息。 +因为该类模型较为抽象,提供了一份快递单信息抽取的训练脚本给大家使用,具体的任务是通过两类的模型来抽取快递单的核心信息,例如地址,姓名,手机号码,具体的[快递单任务链接](./named_entity_recognition/express_ner)。 -### 核心应用 +| 模型 | 简介 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| [BiGRU-CRF](./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的标签信息,模型结构简单,效果优异。| -#### 机器翻译 (Machine Translation) -机器翻译是计算语言学的一个分支,是人工智能的终极目标之一,具有重要的科学研究价值。在机器翻译的任务上,提供了两大类模型,一类是传统的 Sequence to Sequence任务,简称Seq2Seq,通过RNN类模型进行编码,解码;另外一类是Transformer类模型,通过Self-Attention机制来提升Encoder和Decoder的效果,Transformer模型的具体信息可以参考论文, [Attention Is All You Need](https://arxiv.org/abs/1706.03762)。下面是具体的模型信息。 +### 语言模型 (Language Model) +在自然语言处理(NLP)领域中,语言模型预训练方法在多项NLP任务上都获得了不错的提升,广泛受到了各界的关注。在这里主要是提供了目前两种语言模型,一种是RNNLM模型,通过RNN网络来进行序列任务的预测;另外一种是ELMo模型,以双向 LSTM 为网路基本组件,以 Language Model 为训练目标,通过预训练得到通用的语义表示。 | 模型 | 简介 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [Seq2Seq](./machine_translation/seq2seq) | 使用编码器-解码器(Encoder-Decoder)结构, 同时使用了Attention机制来加强Decoder和Encoder之间的信息交互,Seq2Seq 广泛应用于机器翻译,自动对话机器人,文档摘要自动生成,图片描述自动生成等任务中。| -| [Transformer](./machine_translation/transformer) |基于PaddlePaddle框架的Transformer结构搭建的机器翻译模型,Transformer 计算并行度高,能解决学习长程依赖问题。并且模型框架集成了训练,验证,预测任务,功能完备,效果突出。| +| [RNNLM](./language_model/rnnlm) |序列任务常用的RNN网络,实现了一个两层的LSTM网络,然后LSTM的结果去预测下一个词出现的概率。是基于RNN的常规的语言模型。| +| [ELMo](./language_model/elmo) |ElMo是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。ELMo主要是解决了传统的Word Embedding的向量表示单一的问题,ELMo通过结合上下文来增强语义表示。| +### 预训练语言模型 (Pretrained Language Model) +| 任务类型 | 目录 | 简介 | +| -------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -#### 命名实体识别 (Named Entity Recognition) -命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务。NER是信息提取、问答系统、句法分析、机器翻译等众多NLP任务的重要基础工具。命名实体识别的准确度,决定了下游任务的效果,是NLP中非常重要的一个基础问题。 -在NER任务提供了两种解决方案,一类LSTM/GRU + CRF(Conditional Random Field),RNN类的模型来抽取底层文本的信息,而CRF(条件随机场)模型来学习底层Token之间的联系;另外一类是通过预训练模型,例如ERNIE,BERT模型,直接来预测Token的标签信息。 -因为该类模型较为抽象,提供了一份快递单信息抽取的训练脚本给大家使用,具体的任务是通过两类的模型来抽取快递单的核心信息,例如地址,姓名,手机号码,具体的[快递单任务链接](./named_entity_recognition/express_ner)。 +| BERT | [BERT(Bidirectional Encoder Representation from Transformers)](./language_model/bert) | BERT模型作为目前最为火热语义表示预训练模型,PaddleNLP提供了简洁功效的实现方式, +同时易用性方面通过简单参数切换即可实现不同的BERT模型。 | +| ERNIE-GEN | [ERNIE-GEN(An Enhanced Multi-Flow Pre-training and Fine-tuning Framework for Natural Language Generation)](./text_generation/ernie-gen) |ERNIE-GEN是百度发布的生成式预训练模型,是一种Multi-Flow结构的预训练和微调框架。ERNIE-GEN利用更少的参数量和数据,在摘要生成、问题生成、对话和生成式问答4个任务共5个数据集上取得了SOTA效果 | +| ELECTRA | [Electra(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)](./language_model/electra) |ELECTRA 创新性地引入GAN的思想对BERT预训练过程进行了改进,在和BERT具有相同的模型参数、预训练计算量一样的情况下,ELECTRA GLUE得分明显好。同时相比GPT、ELMo,在GLUE得分略好时,ELECTRA预训练模型只需要很少的参数和计算量。| -| 模型 | 简介 | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| [BiGRU-CRF](./named_entity_recognition/express_ner) |传统的序列标注模型,通过双向GRU模型能抽取文本序列的信息和联系,通过CRF模型来学习文本Token之间的联系,本模型集成PaddleNLP自己开发的CRF模型,模型结构清晰易懂。 | -| [ERNIE/BERT Fine-tuning](./named_entity_recognition) |通过预训练模型提供的强大的语义信息和ERNIE/BERT类模型的Self-Attention机制来覆盖Token之间的联系,直接通过BERT/ERNIE的序列分类模型来预测文本每个token的标签信息,模型结构简单,效果优异。| + +## NLP核心技术 -#### 文本分类 (Text Classification) +### 文本分类 (Text Classification) 文本分类任务是NLP中较为常见的任务,在该任务上我们提供了两大类模型,一类是基于RNN类模型的传统轻量级的分类模型,一类是基于预训模型的分类模型,在RNN类模型上我们提供了百度自研的Senta模型,模型结构经典,效果突出;在预训练类模型上,提供了大量的预训练模型,模型参数自动下载,用法简易,极易提升文本分类任务效果。 | 模型 | 简介 | @@ -48,7 +54,7 @@ | [RNN/GRU/LSTM](./text_classification/rnn) | 面向通用场景的文本分类模型,网络结构接入常见的RNN类模型,例如LSTM,GRU,RNN。整体模型结构集成在百度的自研的Senta文本情感分类模型上,效果突出,用法简易。| | [ERNIE/BERT Fine-tuning](./text_classification/pretrained_models) |基于预训练后模型的文本分类的模型,多达11种的预训练模型可供使用,其中有较多中文预训练模型,预训练模型切换简单,情感分析任务上效果突出。| -#### 文本生成 (Text Generation) +### 文本生成 (Text Generation) 文本生成是自然语言处理中一个重要的研究领域,具有广阔的应用前景。国内外已经有诸如Automated Insights、Narrative Science等文本生成系统投入使用,这些系统根据格式化数据或自然语言文本生成新闻、财报或者其他解释性文本。目前比较常见的文本生成任务两大类,文本写作和文本摘要。在这里主要提供百度自研的文本生成模型ERNIE-GEN, ERNIE-GEN是一种Multi-Flow结构的预训练和微调框架。ERNIE-GEN利用更少的参数量和数据,在摘要生成、问题生成、对话和生成式问答4个任务共5个数据集上取得了SOTA效果。我们基于ERNIE-GEN模型提供了一个自动关写诗的示例,来展示ERNIE-GEN的生成效果。 @@ -57,8 +63,7 @@ | [ERNIE-GEN(An Enhanced Multi-Flow Pre-training and Fine-tuning Framework for Natural Language Generation)](./text_generation/ernie-gen) | ERNIE-GEN是百度发布的生成式预训练模型,通过Global-Attention的方式解决训练和预测曝光偏差的问题,同时使用Multi-Flow Attention机制来分别进行Global和Context信息的交互,同时通过片段生成的方式来增加语义相关性。| - -#### 文本匹配 (Text Matching) +### 文本匹配 (Text Matching) 文本匹配一直是自然语言处理(NLP)领域一个基础且重要的方向,一般研究两段文本之间的关系。文本相似度计算、自然语言推理、问答系统、信息检索等,都可以看作针对不同数据和场景的文本匹配应用。在文本匹配的任务上提供了百度自研的SimNet语义匹配框架,以及基于Transformer结构的SentenceBERT模型。SimNet是一个计算短文本相似度的框架,主要包括 BOW、CNN、RNN、MMDNN 等核心网络结构形式,在百度各产品上广泛应用,提供语义相似度计算训练和预测框架,适用于信息检索、新闻推荐、智能客服等多个应用场景,帮助企业解决语义匹配问题。SentenceBERT模型是通过强大语义信息的预训练模型来表征句子的语义信息,通过比较两个句子的语义信息来判断两个句子是否匹配。 | 模型 | 简介 | @@ -66,30 +71,33 @@ | [SimNet](./text_matching/simnet)|PaddleNLP提供的SimNet模型已经纳入了PaddleNLP的官方API中,用户直接调用API即完成一个SimNet模型的组网,在模型层面提供了Bow/CNN/LSTM/GRU常用信息抽取方式, 灵活高,使用方便。| | [SentenceTransformer](./text_matching/sentence_transformers)|直接调用简易的预训练模型接口接口完成对Sentence的语义表示,同时提供了较多的中文预训练模型,可以根据任务的来选择相关参数。| - -#### 语言模型 (Language Model) -在自然语言处理(NLP)领域中,语言模型预训练方法在多项NLP任务上都获得了不错的提升,广泛受到了各界的关注。在这里主要是提供了目前两种语言模型,一种是RNNLM模型,通过RNN网络来进行序列任务的预测;另外一种是ELMo模型,以双向 LSTM 为网路基本组件,以 Language Model 为训练目标,通过预训练得到通用的语义表示。 +### 文本图学习 (Text Graph) +在很多工业应用中,往往出现一种特殊的图:Text Graph。顾名思义,图的节点属性由文本构成,而边的构建提供了结构信息。如搜索场景下的Text Graph,节点可由搜索词、网页标题、网页正文来表达,用户反馈和超链信息则可构成边关系。百度图学习PGL((Paddle Graph Learning)团队提出ERNIESage(ERNIE SAmple aggreGatE)模型同时建模文本语义与图结构信息,有效提升Text Graph的应用效果。图学习是深度学习领域目前的研究热点,如果想对图学习有更多的了解,可以访问[PGL Github链接](https://github.com/PaddlePaddle/PGL/)。 | 模型 | 简介 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [RNNLM](./language_model/rnnlm) |序列任务常用的rnn网络,实现了一个两层的LSTM网络,然后LSTM的结果去预测下一个词出现的概率。是基于RNN的常规的语言模型。| -| [ELMo](./language_model/elmo) |ElMo是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。ELMo主要是解决了传统的WordEmbedding的向量表示单一的问题,ELMo通过结合上下文来增强语义表示。| +| [ERNIESage(ERNIE SAmple aggreGatE)](./text_graph/erniesage)|通过Graph(图)来构建自身节点和邻居节点的连接关系,将自身节点和邻居节点的关系构建成一个关联样本输入到ERNIE中,ERNIE作为聚合函数(Aggregators)来表征自身节点和邻居节点的语义关系,最终强化图中节点的语义表示。| -#### 文本图学习 (Text Graph) -在很多工业应用中,往往出现一种特殊的图:Text Graph。顾名思义,图的节点属性由文本构成,而边的构建提供了结构信息。如搜索场景下的Text Graph,节点可由搜索词、网页标题、网页正文来表达,用户反馈和超链信息则可构成边关系。百度图学习PGL((Paddle Graph Learning)团队提出ERNIESage(ERNIE SAmple aggreGatE)模型同时建模文本语义与图结构信息,有效提升Text Graph的应用效果。图学习是深度学习领域目前的研究热点,如果想对图学习有更多的了解,可以访问[PGL Github链接](https://github.com/PaddlePaddle/PGL/)。 + +## 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)。下面是具体的模型信息。 | 模型 | 简介 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [ERNIESage(ERNIE SAmple aggreGatE)](./text_graph/erniesage)|通过Graph(图)来来构建自身节点和邻居节点的连接关系,将自身节点和邻居节点的关系构建成一个关联样本输入到ERNIE中,ERNIE作为聚合函数(Aggregators)来表征自身节点和邻居节点的语义关系,最终强化图中节点的语义表示。在TextGraph的任务上ERNIESage的效果非常优秀。| +| [Seq2Seq](./machine_translation/seq2seq) | 使用编码器-解码器(Encoder-Decoder)结构, 同时使用了Attention机制来加强Decoder和Encoder之间的信息交互,Seq2Seq 广泛应用于机器翻译,自动对话机器人,文档摘要自动生成,图片描述自动生成等任务中。| +| [Transformer](./machine_translation/transformer) |基于PaddlePaddle框架的Transformer结构搭建的机器翻译模型,Transformer 计算并行度高,能解决学习长程依赖问题。并且模型框架集成了训练,验证,预测任务,功能完备,效果突出。| -#### 阅读理解(Machine Reading Comprehension) + +### 阅读理解(Machine Reading Comprehension) 机器阅读理解是近期自然语言处理领域的研究热点之一,也是人工智能在处理和理解人类语言进程中的一个长期目标。得益于深度学习技术和大规模标注数据集的发展,用端到端的神经网络来解决阅读理解任务取得了长足的进步。下面是具体的模型信息。 | 模型 | 简介 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [BERT Fine-tuning](./machine_reading_comprehension/) |通过ERNIE/BERT等预训练模型的强大的语义表示能力,设置在阅读理解上面的下游任务,该模块主要是提供了多个数据集来验证BERT模型在阅读理解上的效果,数据集主要是包括了SQuAD,DuReader,DuReader-robust,DuReader-yesno。同时提供了和相关阅读理解相关的Metric(指标),用户可以简易的调用这些API,快速验证模型效果。| +| [BERT/ERNIE Question Answering](./machine_reading_comprehension/) |通过ERNIE/BERT等预训练模型的强大的语义表示能力,设置在阅读理解上面的下游任务,该模块主要是提供了多个数据集来验证BERT模型在阅读理解上的效果,数据集主要是包括了SQuAD,DuReader-robust,DuReader-yesno。同时提供了和相关阅读理解相关的Metric(指标),用户可以简易的调用这些API,快速验证模型效果。| -#### 对话系统(Dialogue System) +### 对话系统(Dialogue System) 对话系统 (Dialogue System) 常常需要根据应用场景的变化去解决多种多样的任务。任务的多样性(意图识别、槽填充、行为识别、状态追踪等等),以及领域训练数据的稀少给对话系统领域带来了诸多挑战。为此提供了基于BERT的对话通用理解模型 (DGU: DialogueGeneralUnderstanding),该种训练范式在对话理解任务上取得比肩甚至超越各个领域业内最好的模型的效果,展现了学习一个通用对话理解模型的巨大潜力。下面是模型的信息。 @@ -98,11 +106,19 @@ | [Dialogue General Understanding](./dialogue/dgu) | 提供基于BERT通用对话理解模型,通过对文本分类、序列标注等操作就可以完成对话中的意图识别,行文识别,状态跟踪等理解任务。| | [PLATO-2](./dialogue/plato-2) | 百度自研领先的开放域对话预训练模型。[PLATO-2: Towards Building an Open-Domain Chatbot via Curriculum Learning](https://arxiv.org/abs/2006.16779) | -#### 时间序列预测(Time Series) +## 更多序列建模应用 + +### 时间序列预测(Time Series) 时间序列是指按照时间先后顺序排列而成的序列,例如每日发电量、每小时营业额等组成的序列。通过分析时间序列中的发展过程、方向和趋势,我们可以预测下一段时间可能出现的情况。为了更好让大家了解时间序列预测任务,提供了基于19年新冠疫情预测的任务示例,有兴趣的话可以进行研究学习。 下面是具体的时间序列模型的信息。 | 模型 | 简介 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [TCN(Temporal convolutional network)](./time_series)|TCN模型基于卷积的时间序列模型,通过因果卷积(Causal Convolution)和空洞卷积(Dilated Convolution) 特定的组合方式解决卷积不适合时间序列任务的问题,TCN具备并行度高,内存低等诸多优点,在某些时间序列任务上效果已经超过传统的RNN模型。| +| [TCN(Temporal Convolutional Network)](./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)| diff --git a/PaddleNLP/examples/language_model/transformer-xl/README.md b/PaddleNLP/examples/language_model/transformer-xl/README.md index d82c3ced2d8383fc104f8c288de649095dc4da46..8c06dc606aa9ab9fbd99c39a9f70a09997da0149 100644 --- a/PaddleNLP/examples/language_model/transformer-xl/README.md +++ b/PaddleNLP/examples/language_model/transformer-xl/README.md @@ -1,6 +1,4 @@ -# Language Model - -## Transformer-XL +# Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context 以下是本例的简要目录结构及说明: diff --git a/PaddleNLP/examples/time_series/README.md b/PaddleNLP/examples/time_series/README.md index 651875911fc8e810ab3f20f60eb3581d640084c0..a562096791ff3085de542cfb8348247d21008674 100644 --- a/PaddleNLP/examples/time_series/README.md +++ b/PaddleNLP/examples/time_series/README.md @@ -1,6 +1,6 @@ -# 时间序列预测 +# 使用TCN序列模型解决时间序列预测 -## 1. 简介 +## 简介 时间序列是指按照时间先后顺序排列而成的序列,例如每日发电量、每小时营业额等组成的序列。通过分析时间序列中的发展过程、方向和趋势,我们可以预测下一段时间可能出现的情况。在本例中,我们使用时间卷积网络TCN进行建模,将学习到的特征接入全连接层完成预测。TCN的网络如下所示:
@@ -8,25 +8,25 @@ 图中是一个filters number=3, dilated rate=1的时间卷积网络,它能够学习前T个时序的数据特征。关于TCN更详细的资料请参考论文:[An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling](https://arxiv.org/abs/1803.01271)。 -## 2. 快速开始 +## 快速开始 2019年末,新冠疫情席卷而来,影响了我们工作、生活中的方方面面。如今,疫情在国内逐渐得到控制,但在国际上依然呈现急剧扩增的趋势,预测今后的疫情形势对我们的规划实施具有重大的指导意义。在本例中,我们关注时下还在发展进行的新冠疫情,将病例数作为时序预测对象。 -### 2.1 环境配置 +### 环境配置 -- Python >= 3.6 +- python >= 3.6 +- PaddlePaddle >= 2.0.0,安装方式请参考 [快速安装](https://www.paddlepaddle.org.cn/install/quick) +- paddlenlp >= 2.0.0rc -- PaddlePaddle >= 2.0.0,安装方式请参考 [快速安装](https://www.paddlepaddle.org.cn/install/quick)。 +### 数据准备 -### 2.2 数据准备 - -数据集由约翰·霍普金斯大学系统科学与工程中心提供,每日最新数据可以从https://github.com/CSSEGISandData/COVID-19 仓库中获取,我们在本例中提供了2020年11月24日下载的病例数据。如您需要使用最新数据,请运行: +数据集由约翰·霍普金斯大学系统科学与工程中心提供,每日最新数据可以从 [COVID-19](https://github.com/CSSEGISandData/COVID-19) 仓库中获取,我们在本例中提供了2020年11月24日下载的病例数据。如您需要使用最新数据,请运行: ``` wget https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv ``` -### 2.3 模型训练 +### 模型训练 模型训练支持 CPU 和 GPU,使用 GPU 之前应指定使用的显卡卡号: @@ -43,7 +43,7 @@ python train.py --data_path time_series_covid19_confirmed_global.csv \ --use_gpu ``` -### 2.5 模型预测 +### 模型预测 预测启动方式如下: