@@ -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() | |||||
@@ -220,10 +220,7 @@ Bert在针对具有两句话的任务时(如matching,Q&A任务),句子 | |||||
在多个[SEP]的情况下,将会使token_type_id不断0,1循环。比如"first sentence [SEP] second sentence [SEP] third sentence", 它们的 | 在多个[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],否则无法识别。 | 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 | Part VI: 使用character-level的embedding | ||||
@@ -72,7 +72,7 @@ DataSetIter初探之前的内容与 :doc:`/tutorials/tutorial_5_loss_optimizer` | |||||
:class:`~fastNLP.io.SST2Pipe` 类的 :meth:`~fastNLP.io.SST2Pipe.process_from_file` 方法在预处理过程中还将训练、测试、验证集 | :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。 | 的 `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` 方法查看各个 | 我们可以通过 :class:`~fastNLP.core.Dataset` 类的 :meth:`~fastNLP.core.Dataset.print_field_meta` 方法查看各个 | ||||
:mod:`~fastNLP.core.field` 的设定情况,代码如下: | |||||
:mod:`~fastNLP.core.field` 的设定情况,代码如下: | |||||
.. code-block:: python | .. 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数 | 其中is_input和is_target分别表示是否为input和target。ignore_type为true时指使用 :class:`~fastNLP.DataSetIter` 取出batch数 | ||||
据时fastNLP不会进行自动padding,pad_value指对应 :mod:`~fastNLP.core.field` padding所用的值,这两者只有当 | 据时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_input为true的 :mod:`~fastNLP.core.field` 在 :class:`~fastNLP.DataSetIter` 迭代取出的 batch_x 中, | ||||
而 is_target为true的 :mod:`~fastNLP.core.field` 在 :class:`~fastNLP.DataSetIter` 迭代取出的 batch_y 中。 | 而 is_target为true的 :mod:`~fastNLP.core.field` 在 :class:`~fastNLP.DataSetIter` 迭代取出的 batch_y 中。 | ||||
@@ -19,3 +19,7 @@ fastNLP 详细使用教程 | |||||
使用Callback自定义你的训练过程 </tutorials/tutorial_10_callback> | 使用Callback自定义你的训练过程 </tutorials/tutorial_10_callback> | ||||
使用fitlog 辅助 fastNLP 进行科研 </tutorials/tutorial_11_fitlog> | 使用fitlog 辅助 fastNLP 进行科研 </tutorials/tutorial_11_fitlog> | ||||
.. toctree:: | |||||
:maxdepth: 1 | |||||
拓展阅读:BertEmbedding的各种用法 </tutorials/extend_1_bert_embedding> |
@@ -1,7 +1,3 @@ | |||||
# fastNLP 教程 | # 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) | |||||
这里只保留了部分的 |