Browse Source

Merge branch 'dev0.5.0' of https://github.com/fastnlp/fastNLP into dev0.5.0

tags/v0.4.10
yh 5 years ago
parent
commit
538c098549
5 changed files with 90 additions and 11 deletions
  1. +82
    -0
      docs/source/tutorials/extend_1_bert_embedding.rst
  2. +1
    -4
      docs/source/tutorials/tutorial_3_embedding.rst
  3. +2
    -2
      docs/source/tutorials/tutorial_6_datasetiter.rst
  4. +4
    -0
      docs/source/user/tutorials.rst
  5. +1
    -5
      tutorials/README.md

+ 82
- 0
docs/source/tutorials/extend_1_bert_embedding.rst View File

@@ -0,0 +1,82 @@
==============================
BertEmbedding的各种用法
==============================

fastNLP的BertEmbedding以pytorch-transformer.BertModel的代码为基础,是一个使用BERT对words进行编码的Embedding。

使用BertEmbedding和fastNLP.models.bert里面模型可以搭建BERT应用到五种下游任务的模型。

预训练好的Embedding参数及数据集的介绍和自动下载功能见 :doc:`/tutorials/tutorial_3_embedding` 和
:doc:`/tutorials/tutorial_4_load_dataset`

1. BERT for Squence Classification
----------------------------------

在文本分类任务中,我们采用SST数据集作为例子来介绍BertEmbedding的使用方法。

.. code-block:: python

import warnings
import torch
warnings.filterwarnings("ignore")

# 载入数据集
from fastNLP.io import SSTPipe
data_bundle = SSTPipe(subtree=False, train_subtree=False, lower=False, tokenizer='raw').process_from_file()
data_bundle

# 载入BertEmbedding
from fastNLP.embeddings import BertEmbedding
embed = BertEmbedding(data_bundle.get_vocab('words'), model_dir_or_name='en-base-cased', include_cls_sep=True)

# 载入模型
from fastNLP.models import BertForSequenceClassification
model = BertForSequenceClassification(embed, len(data_bundle.get_vocab('target')))

# 训练模型
from fastNLP import Trainer, CrossEntropyLoss, AccuracyMetric, Adam
trainer = Trainer(data_bundle.get_dataset('train'), model,
optimizer=Adam(model_params=model.parameters(), lr=2e-5),
loss=CrossEntropyLoss(), device=[0],
batch_size=64, dev_data=data_bundle.get_dataset('dev'),
metrics=AccuracyMetric(), n_epochs=2, print_every=1)
trainer.train()



# 测试结果并删除模型
from fastNLP import Tester
tester = Tester(data_bundle.get_dataset('test'), model, batch_size=128, metrics=AccuracyMetric())
tester.test()

2. BERT for Sentence Matching
-----------------------------

在Matching任务中,我们采用RTE数据集作为例子来介绍BertEmbedding的使用方法。

.. code-block:: python

# 载入数据集
from fastNLP.io import RTEBertPipe
data_bundle = RTEBertPipe(lower=False, tokenizer='raw').process_from_file()

# 载入BertEmbedding
from fastNLP.embeddings import BertEmbedding
embed = BertEmbedding(data_bundle.get_vocab('words'), model_dir_or_name='en-base-cased', include_cls_sep=True)


# 载入模型
from fastNLP.models import BertForSentenceMatching
model = BertForSentenceMatching(embed, len(data_bundle.get_vocab('target')))

# 训练模型
from fastNLP import Trainer, CrossEntropyLoss, AccuracyMetric, Adam
trainer = Trainer(data_bundle.get_dataset('train'), model,
optimizer=Adam(model_params=model.parameters(), lr=2e-5),
loss=CrossEntropyLoss(), device=[0],
batch_size=16, dev_data=data_bundle.get_dataset('dev'),
metrics=AccuracyMetric(), n_epochs=2, print_every=1)
trainer.train()




+ 1
- 4
docs/source/tutorials/tutorial_3_embedding.rst View File

@@ -220,10 +220,7 @@ Bert在针对具有两句话的任务时(如matching,Q&A任务),句子
在多个[SEP]的情况下,将会使token_type_id不断0,1循环。比如"first sentence [SEP] second sentence [SEP] third sentence", 它们的
token_type_id将是[0, 0, 0, 1, 1, 1, 0, 0]。但请注意[SEP]一定要大写的,不能是[sep],否则无法识别。

更多 :class:`~fastNLP.embedding.BertEmbedding` 的使用,请参考BertEmbedding的使用教程

.. todo::
找人写一篇BertEmbedding的使用教程
更多 :class:`~fastNLP.embedding.BertEmbedding` 的使用,请参考 :doc:`/tutorials/extend_1_bert_embedding`


Part VI: 使用character-level的embedding


+ 2
- 2
docs/source/tutorials/tutorial_6_datasetiter.rst View File

@@ -72,7 +72,7 @@ DataSetIter初探之前的内容与 :doc:`/tutorials/tutorial_5_loss_optimizer`
:class:`~fastNLP.io.SST2Pipe` 类的 :meth:`~fastNLP.io.SST2Pipe.process_from_file` 方法在预处理过程中还将训练、测试、验证集
的 `words` 、`seq_len` :mod:`~fastNLP.core.field` 设定为input,同时将`target` :mod:`~fastNLP.core.field` 设定为target。
我们可以通过 :class:`~fastNLP.core.Dataset` 类的 :meth:`~fastNLP.core.Dataset.print_field_meta` 方法查看各个
:mod:`~fastNLP.core.field` 的设定情况,代码如下:
:mod:`~fastNLP.core.field` 的设定情况,代码如下:

.. code-block:: python

@@ -91,7 +91,7 @@ DataSetIter初探之前的内容与 :doc:`/tutorials/tutorial_5_loss_optimizer`

其中is_input和is_target分别表示是否为input和target。ignore_type为true时指使用 :class:`~fastNLP.DataSetIter` 取出batch数
据时fastNLP不会进行自动padding,pad_value指对应 :mod:`~fastNLP.core.field` padding所用的值,这两者只有当
:mod:`~fastNLP.core.field` 设定为input或者target的时候才有存在的意义。
:mod:`~fastNLP.core.field` 设定为input或者target的时候才有存在的意义。

is_input为true的 :mod:`~fastNLP.core.field` 在 :class:`~fastNLP.DataSetIter` 迭代取出的 batch_x 中,
而 is_target为true的 :mod:`~fastNLP.core.field` 在 :class:`~fastNLP.DataSetIter` 迭代取出的 batch_y 中。


+ 4
- 0
docs/source/user/tutorials.rst View File

@@ -19,3 +19,7 @@ fastNLP 详细使用教程
使用Callback自定义你的训练过程 </tutorials/tutorial_10_callback>
使用fitlog 辅助 fastNLP 进行科研 </tutorials/tutorial_11_fitlog>

.. toctree::
:maxdepth: 1

拓展阅读:BertEmbedding的各种用法 </tutorials/extend_1_bert_embedding>

+ 1
- 5
tutorials/README.md View File

@@ -1,7 +1,3 @@
# fastNLP 教程

### 上手教程 Quick Start
`quickstart.ipynb` [Click Here](https://github.com/fastnlp/fastNLP/tree/master/tutorials/quickstart.ipynb)

### 详细教程 Tutorial 1
十分钟上手:`tutorial_1.ipynb` [Click Here](https://github.com/fastnlp/fastNLP/tree/master/tutorials/tutorial_1.ipynb)
这里只保留了部分的

Loading…
Cancel
Save