@@ -20,87 +20,10 @@ fastNLP is a modular Natural Language Processing system based on PyTorch, for fa | |||||
## Resources | ## Resources | ||||
- [Documentation](https://github.com/fastnlp/fastNLP) | |||||
- [Documentation](https://fastnlp.readthedocs.io/en/latest/) | |||||
- [Source Code](https://github.com/fastnlp/fastNLP) | - [Source Code](https://github.com/fastnlp/fastNLP) | ||||
## Example | |||||
### Basic Usage | |||||
A typical fastNLP routine is composed of four phases: loading dataset, pre-processing data, constructing model and training model. | |||||
```python | |||||
from fastNLP.models.base_model import BaseModel | |||||
from fastNLP.modules import encoder | |||||
from fastNLP.modules import aggregation | |||||
from fastNLP.modules import decoder | |||||
from fastNLP.loader.dataset_loader import ClassDatasetLoader | |||||
from fastNLP.loader.preprocess import ClassPreprocess | |||||
from fastNLP.core.trainer import ClassificationTrainer | |||||
from fastNLP.core.inference import ClassificationInfer | |||||
class ClassificationModel(BaseModel): | |||||
""" | |||||
Simple text classification model based on CNN. | |||||
""" | |||||
def __init__(self, num_classes, vocab_size): | |||||
super(ClassificationModel, self).__init__() | |||||
self.emb = encoder.Embedding(nums=vocab_size, dims=300) | |||||
self.enc = encoder.Conv( | |||||
in_channels=300, out_channels=100, kernel_size=3) | |||||
self.agg = aggregation.MaxPool() | |||||
self.dec = decoder.MLP(100, num_classes=num_classes) | |||||
def forward(self, x): | |||||
x = self.emb(x) # [N,L] -> [N,L,C] | |||||
x = self.enc(x) # [N,L,C_in] -> [N,L,C_out] | |||||
x = self.agg(x) # [N,L,C] -> [N,C] | |||||
x = self.dec(x) # [N,C] -> [N, N_class] | |||||
return x | |||||
data_dir = 'data' # directory to save data and model | |||||
train_path = 'test/data_for_tests/text_classify.txt' # training set file | |||||
# load dataset | |||||
ds_loader = ClassDatasetLoader("train", train_path) | |||||
data = ds_loader.load() | |||||
# pre-process dataset | |||||
pre = ClassPreprocess(data_dir) | |||||
vocab_size, n_classes = pre.process(data, "data_train.pkl") | |||||
# construct model | |||||
model_args = { | |||||
'num_classes': n_classes, | |||||
'vocab_size': vocab_size | |||||
} | |||||
model = ClassificationModel(num_classes=n_classes, vocab_size=vocab_size) | |||||
# train model | |||||
train_args = { | |||||
"epochs": 20, | |||||
"batch_size": 50, | |||||
"pickle_path": data_dir, | |||||
"validate": False, | |||||
"save_best_dev": False, | |||||
"model_saved_path": None, | |||||
"use_cuda": True, | |||||
"learn_rate": 1e-3, | |||||
"momentum": 0.9} | |||||
trainer = ClassificationTrainer(train_args) | |||||
trainer.train(model) | |||||
# predict using model | |||||
seqs = [x[0] for x in data] | |||||
infer = ClassificationInfer(data_dir) | |||||
labels_pred = infer.predict(model, seqs) | |||||
``` | |||||
## Installation | ## Installation | ||||
@@ -1,3 +1,4 @@ | |||||
sphinx | |||||
-e git://github.com/snide/sphinx_rtd_theme.git#egg=sphinx_rtd_theme | |||||
sphinxcontrib.katex | |||||
numpy>=1.14.2 | |||||
http://download.pytorch.org/whl/cpu/torch-0.4.1-cp35-cp35m-linux_x86_64.whl | |||||
torchvision>=0.1.8 | |||||
sphinx-rtd-theme==0.4.1 |
@@ -42,6 +42,8 @@ release = '1.0' | |||||
extensions = [ | extensions = [ | ||||
'sphinx.ext.autodoc', | 'sphinx.ext.autodoc', | ||||
'sphinx.ext.viewcode', | 'sphinx.ext.viewcode', | ||||
'sphinx.ext.autosummary', | |||||
] | ] | ||||
# Add any paths that contain templates here, relative to this directory. | # Add any paths that contain templates here, relative to this directory. | ||||
@@ -1,62 +1,54 @@ | |||||
fastNLP.core package | |||||
==================== | |||||
fastNLP.core | |||||
============= | |||||
Submodules | |||||
---------- | |||||
fastNLP.core.action module | |||||
-------------------------- | |||||
fastNLP.core.action | |||||
-------------------- | |||||
.. automodule:: fastNLP.core.action | .. automodule:: fastNLP.core.action | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.core.metrics module | |||||
--------------------------- | |||||
fastNLP.core.loss | |||||
------------------ | |||||
.. automodule:: fastNLP.core.loss | |||||
:members: | |||||
fastNLP.core.metrics | |||||
--------------------- | |||||
.. automodule:: fastNLP.core.metrics | .. automodule:: fastNLP.core.metrics | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.core.optimizer module | |||||
----------------------------- | |||||
fastNLP.core.optimizer | |||||
----------------------- | |||||
.. automodule:: fastNLP.core.optimizer | .. automodule:: fastNLP.core.optimizer | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.core.predictor module | |||||
----------------------------- | |||||
fastNLP.core.predictor | |||||
----------------------- | |||||
.. automodule:: fastNLP.core.predictor | .. automodule:: fastNLP.core.predictor | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.core.tester module | |||||
-------------------------- | |||||
fastNLP.core.preprocess | |||||
------------------------ | |||||
.. automodule:: fastNLP.core.preprocess | |||||
:members: | |||||
fastNLP.core.tester | |||||
-------------------- | |||||
.. automodule:: fastNLP.core.tester | .. automodule:: fastNLP.core.tester | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.core.trainer module | |||||
--------------------------- | |||||
fastNLP.core.trainer | |||||
--------------------- | |||||
.. automodule:: fastNLP.core.trainer | .. automodule:: fastNLP.core.trainer | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
Module contents | |||||
--------------- | |||||
.. automodule:: fastNLP.core | .. automodule:: fastNLP.core | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,62 +1,36 @@ | |||||
fastNLP.loader package | |||||
====================== | |||||
fastNLP.loader | |||||
=============== | |||||
Submodules | |||||
---------- | |||||
fastNLP.loader.base\_loader module | |||||
---------------------------------- | |||||
fastNLP.loader.base\_loader | |||||
---------------------------- | |||||
.. automodule:: fastNLP.loader.base_loader | .. automodule:: fastNLP.loader.base_loader | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.loader.config\_loader module | |||||
------------------------------------ | |||||
fastNLP.loader.config\_loader | |||||
------------------------------ | |||||
.. automodule:: fastNLP.loader.config_loader | .. automodule:: fastNLP.loader.config_loader | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.loader.dataset\_loader module | |||||
------------------------------------- | |||||
fastNLP.loader.dataset\_loader | |||||
------------------------------- | |||||
.. automodule:: fastNLP.loader.dataset_loader | .. automodule:: fastNLP.loader.dataset_loader | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.loader.embed\_loader module | |||||
----------------------------------- | |||||
fastNLP.loader.embed\_loader | |||||
----------------------------- | |||||
.. automodule:: fastNLP.loader.embed_loader | .. automodule:: fastNLP.loader.embed_loader | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.loader.model\_loader module | |||||
----------------------------------- | |||||
fastNLP.loader.model\_loader | |||||
----------------------------- | |||||
.. automodule:: fastNLP.loader.model_loader | .. automodule:: fastNLP.loader.model_loader | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.loader.preprocess module | |||||
-------------------------------- | |||||
.. automodule:: fastNLP.loader.preprocess | |||||
:members: | |||||
:undoc-members: | |||||
:show-inheritance: | |||||
Module contents | |||||
--------------- | |||||
.. automodule:: fastNLP.loader | .. automodule:: fastNLP.loader | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,46 +1,30 @@ | |||||
fastNLP.models package | |||||
====================== | |||||
fastNLP.models | |||||
=============== | |||||
Submodules | |||||
---------- | |||||
fastNLP.models.base\_model module | |||||
--------------------------------- | |||||
fastNLP.models.base\_model | |||||
--------------------------- | |||||
.. automodule:: fastNLP.models.base_model | .. automodule:: fastNLP.models.base_model | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.models.char\_language\_model module | |||||
------------------------------------------- | |||||
fastNLP.models.char\_language\_model | |||||
------------------------------------- | |||||
.. automodule:: fastNLP.models.char_language_model | .. automodule:: fastNLP.models.char_language_model | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.models.cnn\_text\_classification module | |||||
----------------------------------------------- | |||||
fastNLP.models.cnn\_text\_classification | |||||
----------------------------------------- | |||||
.. automodule:: fastNLP.models.cnn_text_classification | .. automodule:: fastNLP.models.cnn_text_classification | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.models.sequence\_modeling module | |||||
---------------------------------------- | |||||
fastNLP.models.sequence\_modeling | |||||
---------------------------------- | |||||
.. automodule:: fastNLP.models.sequence_modeling | .. automodule:: fastNLP.models.sequence_modeling | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
Module contents | |||||
--------------- | |||||
.. automodule:: fastNLP.models | .. automodule:: fastNLP.models | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,54 +1,36 @@ | |||||
fastNLP.modules.aggregation package | |||||
=================================== | |||||
fastNLP.modules.aggregation | |||||
============================ | |||||
Submodules | |||||
---------- | |||||
fastNLP.modules.aggregation.attention module | |||||
-------------------------------------------- | |||||
fastNLP.modules.aggregation.attention | |||||
-------------------------------------- | |||||
.. automodule:: fastNLP.modules.aggregation.attention | .. automodule:: fastNLP.modules.aggregation.attention | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.aggregation.avg\_pool module | |||||
-------------------------------------------- | |||||
fastNLP.modules.aggregation.avg\_pool | |||||
-------------------------------------- | |||||
.. automodule:: fastNLP.modules.aggregation.avg_pool | .. automodule:: fastNLP.modules.aggregation.avg_pool | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.aggregation.kmax\_pool module | |||||
--------------------------------------------- | |||||
fastNLP.modules.aggregation.kmax\_pool | |||||
--------------------------------------- | |||||
.. automodule:: fastNLP.modules.aggregation.kmax_pool | .. automodule:: fastNLP.modules.aggregation.kmax_pool | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.aggregation.max\_pool module | |||||
-------------------------------------------- | |||||
fastNLP.modules.aggregation.max\_pool | |||||
-------------------------------------- | |||||
.. automodule:: fastNLP.modules.aggregation.max_pool | .. automodule:: fastNLP.modules.aggregation.max_pool | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.aggregation.self\_attention module | |||||
-------------------------------------------------- | |||||
fastNLP.modules.aggregation.self\_attention | |||||
-------------------------------------------- | |||||
.. automodule:: fastNLP.modules.aggregation.self_attention | .. automodule:: fastNLP.modules.aggregation.self_attention | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
Module contents | |||||
--------------- | |||||
.. automodule:: fastNLP.modules.aggregation | .. automodule:: fastNLP.modules.aggregation | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,22 +1,18 @@ | |||||
fastNLP.modules.decoder package | |||||
=============================== | |||||
fastNLP.modules.decoder | |||||
======================== | |||||
Submodules | |||||
---------- | |||||
fastNLP.modules.decoder.CRF module | |||||
---------------------------------- | |||||
fastNLP.modules.decoder.CRF | |||||
---------------------------- | |||||
.. automodule:: fastNLP.modules.decoder.CRF | .. automodule:: fastNLP.modules.decoder.CRF | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.decoder.MLP | |||||
---------------------------- | |||||
.. automodule:: fastNLP.modules.decoder.MLP | |||||
:members: | |||||
Module contents | |||||
--------------- | |||||
.. automodule:: fastNLP.modules.decoder | .. automodule:: fastNLP.modules.decoder | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,78 +1,54 @@ | |||||
fastNLP.modules.encoder package | |||||
=============================== | |||||
fastNLP.modules.encoder | |||||
======================== | |||||
Submodules | |||||
---------- | |||||
fastNLP.modules.encoder.char\_embedding module | |||||
---------------------------------------------- | |||||
fastNLP.modules.encoder.char\_embedding | |||||
---------------------------------------- | |||||
.. automodule:: fastNLP.modules.encoder.char_embedding | .. automodule:: fastNLP.modules.encoder.char_embedding | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.encoder.conv module | |||||
----------------------------------- | |||||
fastNLP.modules.encoder.conv | |||||
----------------------------- | |||||
.. automodule:: fastNLP.modules.encoder.conv | .. automodule:: fastNLP.modules.encoder.conv | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.encoder.conv\_maxpool module | |||||
-------------------------------------------- | |||||
fastNLP.modules.encoder.conv\_maxpool | |||||
-------------------------------------- | |||||
.. automodule:: fastNLP.modules.encoder.conv_maxpool | .. automodule:: fastNLP.modules.encoder.conv_maxpool | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.encoder.embedding module | |||||
---------------------------------------- | |||||
fastNLP.modules.encoder.embedding | |||||
---------------------------------- | |||||
.. automodule:: fastNLP.modules.encoder.embedding | .. automodule:: fastNLP.modules.encoder.embedding | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.encoder.linear module | |||||
------------------------------------- | |||||
fastNLP.modules.encoder.linear | |||||
------------------------------- | |||||
.. automodule:: fastNLP.modules.encoder.linear | .. automodule:: fastNLP.modules.encoder.linear | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.encoder.lstm module | |||||
----------------------------------- | |||||
fastNLP.modules.encoder.lstm | |||||
----------------------------- | |||||
.. automodule:: fastNLP.modules.encoder.lstm | .. automodule:: fastNLP.modules.encoder.lstm | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.encoder.masked\_rnn module | |||||
------------------------------------------ | |||||
fastNLP.modules.encoder.masked\_rnn | |||||
------------------------------------ | |||||
.. automodule:: fastNLP.modules.encoder.masked_rnn | .. automodule:: fastNLP.modules.encoder.masked_rnn | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.encoder.variational\_rnn module | |||||
----------------------------------------------- | |||||
fastNLP.modules.encoder.variational\_rnn | |||||
----------------------------------------- | |||||
.. automodule:: fastNLP.modules.encoder.variational_rnn | .. automodule:: fastNLP.modules.encoder.variational_rnn | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
Module contents | |||||
--------------- | |||||
.. automodule:: fastNLP.modules.encoder | .. automodule:: fastNLP.modules.encoder | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,10 +1,5 @@ | |||||
fastNLP.modules.interaction package | |||||
=================================== | |||||
Module contents | |||||
--------------- | |||||
fastNLP.modules.interaction | |||||
============================ | |||||
.. automodule:: fastNLP.modules.interaction | .. automodule:: fastNLP.modules.interaction | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,8 +1,5 @@ | |||||
fastNLP.modules package | |||||
======================= | |||||
Subpackages | |||||
----------- | |||||
fastNLP.modules | |||||
================ | |||||
.. toctree:: | .. toctree:: | ||||
@@ -11,30 +8,18 @@ Subpackages | |||||
fastNLP.modules.encoder | fastNLP.modules.encoder | ||||
fastNLP.modules.interaction | fastNLP.modules.interaction | ||||
Submodules | |||||
---------- | |||||
fastNLP.modules.other\_modules module | |||||
------------------------------------- | |||||
fastNLP.modules.other\_modules | |||||
------------------------------- | |||||
.. automodule:: fastNLP.modules.other_modules | .. automodule:: fastNLP.modules.other_modules | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.modules.utils module | |||||
---------------------------- | |||||
fastNLP.modules.utils | |||||
---------------------- | |||||
.. automodule:: fastNLP.modules.utils | .. automodule:: fastNLP.modules.utils | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
Module contents | |||||
--------------- | |||||
.. automodule:: fastNLP.modules | .. automodule:: fastNLP.modules | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,8 +1,5 @@ | |||||
fastNLP package | |||||
=============== | |||||
Subpackages | |||||
----------- | |||||
fastNLP | |||||
======== | |||||
.. toctree:: | .. toctree:: | ||||
@@ -12,22 +9,12 @@ Subpackages | |||||
fastNLP.modules | fastNLP.modules | ||||
fastNLP.saver | fastNLP.saver | ||||
Submodules | |||||
---------- | |||||
fastNLP.fastnlp module | |||||
---------------------- | |||||
fastNLP.fastnlp | |||||
---------------- | |||||
.. automodule:: fastNLP.fastnlp | .. automodule:: fastNLP.fastnlp | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
Module contents | |||||
--------------- | |||||
.. automodule:: fastNLP | .. automodule:: fastNLP | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,30 +1,18 @@ | |||||
fastNLP.saver package | |||||
===================== | |||||
fastNLP.saver | |||||
============== | |||||
Submodules | |||||
---------- | |||||
fastNLP.saver.logger module | |||||
--------------------------- | |||||
fastNLP.saver.logger | |||||
--------------------- | |||||
.. automodule:: fastNLP.saver.logger | .. automodule:: fastNLP.saver.logger | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
fastNLP.saver.model\_saver module | |||||
--------------------------------- | |||||
fastNLP.saver.model\_saver | |||||
--------------------------- | |||||
.. automodule:: fastNLP.saver.model_saver | .. automodule:: fastNLP.saver.model_saver | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: | |||||
Module contents | |||||
--------------- | |||||
.. automodule:: fastNLP.saver | .. automodule:: fastNLP.saver | ||||
:members: | :members: | ||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,16 +1,54 @@ | |||||
.. fastNLP documentation master file, created by | |||||
sphinx-quickstart on Mon Aug 20 17:06:44 2018. | |||||
You can adapt this file completely to your liking, but it should at least | |||||
contain the root `toctree` directive. | |||||
fastNLP documentation | |||||
===================== | |||||
fastNLP,目前仍在孵化中。 | |||||
Welcome to fastNLP's documentation! | |||||
=================================== | |||||
Introduction | |||||
------------ | |||||
fastNLP是一个基于PyTorch的模块化自然语言处理系统,用于快速开发NLP工具。 | |||||
它将基于深度学习的NLP模型划分为不同的模块。 | |||||
这些模块分为4类:encoder(编码),interaction(交互), aggregration(聚合) and decoder(解码), | |||||
而每个类别包含不同的实现模块。 | |||||
大多数当前的NLP模型可以构建在这些模块上,这极大地简化了开发NLP模型的过程。 | |||||
fastNLP的架构如下左图所示: | |||||
.. image:: figures/procedures_and_sequence_labeling.png | |||||
在constructing model部分,以序列标注(上右图)和文本分类(下图)为例进行说明: | |||||
.. image:: figures/text_classification.png | |||||
* encoder module:将输入编码为一些抽象表示,输入的是单词序列,输出向量序列。 | |||||
* interaction module:使表示中的信息相互交互,输入的是向量序列,输出的也是向量序列。 | |||||
* aggregation module:聚合和减少信息,输入向量序列,输出一个向量。 | |||||
* decoder module:将表示解码为输出,输出一个label(文本分类)或者输出label序列(序列标注) | |||||
其中interaction module和aggregation module在模型中不一定存在,例如上面的序列标注模型。 | |||||
User's Guide | |||||
------------ | |||||
.. toctree:: | |||||
:maxdepth: 2 | |||||
user/installation | |||||
user/quickstart | |||||
API Reference | |||||
------------- | |||||
If you are looking for information on a specific function, class or | |||||
method, this part of the documentation is for you. | |||||
.. toctree:: | .. toctree:: | ||||
:maxdepth: 4 | |||||
:caption: Contents: | |||||
:maxdepth: 2 | |||||
fastNLP | |||||
fastNLP API <fastNLP> | |||||
@@ -1,7 +0,0 @@ | |||||
fastNLP | |||||
======= | |||||
.. toctree:: | |||||
:maxdepth: 4 | |||||
fastNLP |
@@ -0,0 +1,31 @@ | |||||
============ | |||||
Installation | |||||
============ | |||||
.. contents:: | |||||
:local: | |||||
Cloning From GitHub | |||||
~~~~~~~~~~~~~~~~~~~ | |||||
If you just want to use fastNLP, use: | |||||
.. code:: shell | |||||
git clone https://github.com/fastnlp/fastNLP | |||||
cd fastNLP | |||||
PyTorch Installation | |||||
~~~~~~~~~~~~~~~~~~~~ | |||||
Visit the [PyTorch official website] for installation instructions based | |||||
on your system. In general, you could use: | |||||
.. code:: shell | |||||
# using conda | |||||
conda install pytorch torchvision -c pytorch | |||||
# or using pip | |||||
pip3 install torch torchvision |
@@ -0,0 +1,84 @@ | |||||
========== | |||||
Quickstart | |||||
========== | |||||
Example | |||||
------- | |||||
Basic Usage | |||||
~~~~~~~~~~~ | |||||
A typical fastNLP routine is composed of four phases: loading dataset, | |||||
pre-processing data, constructing model and training model. | |||||
.. code:: python | |||||
from fastNLP.models.base_model import BaseModel | |||||
from fastNLP.modules import encoder | |||||
from fastNLP.modules import aggregation | |||||
from fastNLP.modules import decoder | |||||
from fastNLP.loader.dataset_loader import ClassDatasetLoader | |||||
from fastNLP.loader.preprocess import ClassPreprocess | |||||
from fastNLP.core.trainer import ClassificationTrainer | |||||
from fastNLP.core.inference import ClassificationInfer | |||||
class ClassificationModel(BaseModel): | |||||
""" | |||||
Simple text classification model based on CNN. | |||||
""" | |||||
def __init__(self, num_classes, vocab_size): | |||||
super(ClassificationModel, self).__init__() | |||||
self.emb = encoder.Embedding(nums=vocab_size, dims=300) | |||||
self.enc = encoder.Conv( | |||||
in_channels=300, out_channels=100, kernel_size=3) | |||||
self.agg = aggregation.MaxPool() | |||||
self.dec = decoder.MLP(100, num_classes=num_classes) | |||||
def forward(self, x): | |||||
x = self.emb(x) # [N,L] -> [N,L,C] | |||||
x = self.enc(x) # [N,L,C_in] -> [N,L,C_out] | |||||
x = self.agg(x) # [N,L,C] -> [N,C] | |||||
x = self.dec(x) # [N,C] -> [N, N_class] | |||||
return x | |||||
data_dir = 'data' # directory to save data and model | |||||
train_path = 'test/data_for_tests/text_classify.txt' # training set file | |||||
# load dataset | |||||
ds_loader = ClassDatasetLoader("train", train_path) | |||||
data = ds_loader.load() | |||||
# pre-process dataset | |||||
pre = ClassPreprocess(data_dir) | |||||
vocab_size, n_classes = pre.process(data, "data_train.pkl") | |||||
# construct model | |||||
model_args = { | |||||
'num_classes': n_classes, | |||||
'vocab_size': vocab_size | |||||
} | |||||
model = ClassificationModel(num_classes=n_classes, vocab_size=vocab_size) | |||||
# train model | |||||
train_args = { | |||||
"epochs": 20, | |||||
"batch_size": 50, | |||||
"pickle_path": data_dir, | |||||
"validate": False, | |||||
"save_best_dev": False, | |||||
"model_saved_path": None, | |||||
"use_cuda": True, | |||||
"learn_rate": 1e-3, | |||||
"momentum": 0.9} | |||||
trainer = ClassificationTrainer(train_args) | |||||
trainer.train(model) | |||||
# predict using model | |||||
seqs = [x[0] for x in data] | |||||
infer = ClassificationInfer(data_dir) | |||||
labels_pred = infer.predict(model, seqs) |