From 41c7524d4f4f3c0ba841e7ce399d6a5c7c6060a2 Mon Sep 17 00:00:00 2001 From: lyhuang Date: Tue, 28 Aug 2018 21:23:28 +0800 Subject: [PATCH 1/8] docs/requirements.txt --- docs/requirements.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 3749c2cd..88b6469d 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,4 @@ -sphinx --e git://github.com/snide/sphinx_rtd_theme.git#egg=sphinx_rtd_theme -sphinxcontrib.katex \ No newline at end of file +numpy>=1.14.2 +torch==0.4.0 +torchvision>=0.1.8 +sphinx-rtd-theme==0.4.1 \ No newline at end of file From 96cf03368949210961365a3048da5bbaafa4c703 Mon Sep 17 00:00:00 2001 From: lyhuang Date: Wed, 29 Aug 2018 00:11:33 +0800 Subject: [PATCH 2/8] docs/ --- docs/source/conf.py | 2 + docs/source/fastNLP.core.rst | 54 +++++++------------ docs/source/fastNLP.loader.rst | 50 +++++------------ docs/source/fastNLP.models.rst | 36 ++++--------- docs/source/fastNLP.modules.aggregation.rst | 42 +++++---------- docs/source/fastNLP.modules.decoder.rst | 18 ++----- docs/source/fastNLP.modules.encoder.rst | 60 +++++++-------------- docs/source/fastNLP.modules.interaction.rst | 9 +--- docs/source/fastNLP.modules.rst | 27 +++------- docs/source/fastNLP.rst | 21 ++------ docs/source/fastNLP.saver.rst | 24 +++------ docs/source/index.rst | 20 +++++-- docs/source/modules.rst | 7 --- 13 files changed, 111 insertions(+), 259 deletions(-) delete mode 100644 docs/source/modules.rst diff --git a/docs/source/conf.py b/docs/source/conf.py index d4d73d2a..ff3639fa 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -42,6 +42,8 @@ release = '1.0' extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.viewcode', + 'sphinx.ext.autosummary', + ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/source/fastNLP.core.rst b/docs/source/fastNLP.core.rst index 880be59f..2fa2b93b 100644 --- a/docs/source/fastNLP.core.rst +++ b/docs/source/fastNLP.core.rst @@ -1,62 +1,48 @@ -fastNLP.core package -==================== +fastNLP.core +============= -Submodules ----------- - -fastNLP.core.action module --------------------------- +fastNLP.core.action +-------------------- .. automodule:: fastNLP.core.action :members: - :undoc-members: - :show-inheritance: -fastNLP.core.metrics module ---------------------------- +fastNLP.core.metrics +--------------------- .. automodule:: fastNLP.core.metrics :members: - :undoc-members: - :show-inheritance: -fastNLP.core.optimizer module ------------------------------ +fastNLP.core.optimizer +----------------------- .. automodule:: fastNLP.core.optimizer :members: - :undoc-members: - :show-inheritance: -fastNLP.core.predictor module ------------------------------ +fastNLP.core.predictor +----------------------- .. automodule:: fastNLP.core.predictor :members: - :undoc-members: - :show-inheritance: -fastNLP.core.tester module --------------------------- +fastNLP.core.preprocess +------------------------ + +.. automodule:: fastNLP.core.preprocess + :members: + +fastNLP.core.tester +-------------------- .. automodule:: fastNLP.core.tester :members: - :undoc-members: - :show-inheritance: -fastNLP.core.trainer module ---------------------------- +fastNLP.core.trainer +--------------------- .. automodule:: fastNLP.core.trainer :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- .. automodule:: fastNLP.core :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/fastNLP.loader.rst b/docs/source/fastNLP.loader.rst index 90123b5b..658e07ff 100644 --- a/docs/source/fastNLP.loader.rst +++ b/docs/source/fastNLP.loader.rst @@ -1,62 +1,36 @@ -fastNLP.loader package -====================== +fastNLP.loader +=============== -Submodules ----------- - -fastNLP.loader.base\_loader module ----------------------------------- +fastNLP.loader.base\_loader +---------------------------- .. automodule:: fastNLP.loader.base_loader :members: - :undoc-members: - :show-inheritance: -fastNLP.loader.config\_loader module ------------------------------------- +fastNLP.loader.config\_loader +------------------------------ .. automodule:: fastNLP.loader.config_loader :members: - :undoc-members: - :show-inheritance: -fastNLP.loader.dataset\_loader module -------------------------------------- +fastNLP.loader.dataset\_loader +------------------------------- .. automodule:: fastNLP.loader.dataset_loader :members: - :undoc-members: - :show-inheritance: -fastNLP.loader.embed\_loader module ------------------------------------ +fastNLP.loader.embed\_loader +----------------------------- .. automodule:: fastNLP.loader.embed_loader :members: - :undoc-members: - :show-inheritance: -fastNLP.loader.model\_loader module ------------------------------------ +fastNLP.loader.model\_loader +----------------------------- .. automodule:: fastNLP.loader.model_loader :members: - :undoc-members: - :show-inheritance: - -fastNLP.loader.preprocess module --------------------------------- - -.. automodule:: fastNLP.loader.preprocess - :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- .. automodule:: fastNLP.loader :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/fastNLP.models.rst b/docs/source/fastNLP.models.rst index 49481ac1..f17b1d49 100644 --- a/docs/source/fastNLP.models.rst +++ b/docs/source/fastNLP.models.rst @@ -1,46 +1,30 @@ -fastNLP.models package -====================== +fastNLP.models +=============== -Submodules ----------- - -fastNLP.models.base\_model module ---------------------------------- +fastNLP.models.base\_model +--------------------------- .. automodule:: fastNLP.models.base_model :members: - :undoc-members: - :show-inheritance: -fastNLP.models.char\_language\_model module -------------------------------------------- +fastNLP.models.char\_language\_model +------------------------------------- .. automodule:: fastNLP.models.char_language_model :members: - :undoc-members: - :show-inheritance: -fastNLP.models.cnn\_text\_classification module ------------------------------------------------ +fastNLP.models.cnn\_text\_classification +----------------------------------------- .. automodule:: fastNLP.models.cnn_text_classification :members: - :undoc-members: - :show-inheritance: -fastNLP.models.sequence\_modeling module ----------------------------------------- +fastNLP.models.sequence\_modeling +---------------------------------- .. automodule:: fastNLP.models.sequence_modeling :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- .. automodule:: fastNLP.models :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/fastNLP.modules.aggregation.rst b/docs/source/fastNLP.modules.aggregation.rst index 7106f7bc..bfaf8646 100644 --- a/docs/source/fastNLP.modules.aggregation.rst +++ b/docs/source/fastNLP.modules.aggregation.rst @@ -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 :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.aggregation.avg\_pool module --------------------------------------------- +fastNLP.modules.aggregation.avg\_pool +-------------------------------------- .. automodule:: fastNLP.modules.aggregation.avg_pool :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.aggregation.kmax\_pool module ---------------------------------------------- +fastNLP.modules.aggregation.kmax\_pool +--------------------------------------- .. automodule:: fastNLP.modules.aggregation.kmax_pool :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.aggregation.max\_pool module --------------------------------------------- +fastNLP.modules.aggregation.max\_pool +-------------------------------------- .. automodule:: fastNLP.modules.aggregation.max_pool :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.aggregation.self\_attention module --------------------------------------------------- +fastNLP.modules.aggregation.self\_attention +-------------------------------------------- .. automodule:: fastNLP.modules.aggregation.self_attention :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- .. automodule:: fastNLP.modules.aggregation :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/fastNLP.modules.decoder.rst b/docs/source/fastNLP.modules.decoder.rst index 914802da..b8a36909 100644 --- a/docs/source/fastNLP.modules.decoder.rst +++ b/docs/source/fastNLP.modules.decoder.rst @@ -1,22 +1,12 @@ -fastNLP.modules.decoder package -=============================== +fastNLP.modules.decoder +======================== -Submodules ----------- - -fastNLP.modules.decoder.CRF module ----------------------------------- +fastNLP.modules.decoder.CRF +---------------------------- .. automodule:: fastNLP.modules.decoder.CRF :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- .. automodule:: fastNLP.modules.decoder :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/fastNLP.modules.encoder.rst b/docs/source/fastNLP.modules.encoder.rst index 3af14b64..41b4ce13 100644 --- a/docs/source/fastNLP.modules.encoder.rst +++ b/docs/source/fastNLP.modules.encoder.rst @@ -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 :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.encoder.conv module ------------------------------------ +fastNLP.modules.encoder.conv +----------------------------- .. automodule:: fastNLP.modules.encoder.conv :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.encoder.conv\_maxpool module --------------------------------------------- +fastNLP.modules.encoder.conv\_maxpool +-------------------------------------- .. automodule:: fastNLP.modules.encoder.conv_maxpool :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.encoder.embedding module ----------------------------------------- +fastNLP.modules.encoder.embedding +---------------------------------- .. automodule:: fastNLP.modules.encoder.embedding :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.encoder.linear module -------------------------------------- +fastNLP.modules.encoder.linear +------------------------------- .. automodule:: fastNLP.modules.encoder.linear :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.encoder.lstm module ------------------------------------ +fastNLP.modules.encoder.lstm +----------------------------- .. automodule:: fastNLP.modules.encoder.lstm :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.encoder.masked\_rnn module ------------------------------------------- +fastNLP.modules.encoder.masked\_rnn +------------------------------------ .. automodule:: fastNLP.modules.encoder.masked_rnn :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.encoder.variational\_rnn module ------------------------------------------------ +fastNLP.modules.encoder.variational\_rnn +----------------------------------------- .. automodule:: fastNLP.modules.encoder.variational_rnn :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- .. automodule:: fastNLP.modules.encoder :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/fastNLP.modules.interaction.rst b/docs/source/fastNLP.modules.interaction.rst index 32552231..91a34268 100644 --- a/docs/source/fastNLP.modules.interaction.rst +++ b/docs/source/fastNLP.modules.interaction.rst @@ -1,10 +1,5 @@ -fastNLP.modules.interaction package -=================================== - -Module contents ---------------- +fastNLP.modules.interaction +============================ .. automodule:: fastNLP.modules.interaction :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/fastNLP.modules.rst b/docs/source/fastNLP.modules.rst index 5a6cac28..6ccdc21a 100644 --- a/docs/source/fastNLP.modules.rst +++ b/docs/source/fastNLP.modules.rst @@ -1,8 +1,5 @@ -fastNLP.modules package -======================= - -Subpackages ------------ +fastNLP.modules +================ .. toctree:: @@ -11,30 +8,18 @@ Subpackages fastNLP.modules.encoder fastNLP.modules.interaction -Submodules ----------- - -fastNLP.modules.other\_modules module -------------------------------------- +fastNLP.modules.other\_modules +------------------------------- .. automodule:: fastNLP.modules.other_modules :members: - :undoc-members: - :show-inheritance: -fastNLP.modules.utils module ----------------------------- +fastNLP.modules.utils +---------------------- .. automodule:: fastNLP.modules.utils :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- .. automodule:: fastNLP.modules :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/fastNLP.rst b/docs/source/fastNLP.rst index fbc3a922..bb5037ce 100644 --- a/docs/source/fastNLP.rst +++ b/docs/source/fastNLP.rst @@ -1,8 +1,5 @@ -fastNLP package -=============== - -Subpackages ------------ +fastNLP +======== .. toctree:: @@ -12,22 +9,12 @@ Subpackages fastNLP.modules fastNLP.saver -Submodules ----------- - -fastNLP.fastnlp module ----------------------- +fastNLP.fastnlp +---------------- .. automodule:: fastNLP.fastnlp :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- .. automodule:: fastNLP :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/fastNLP.saver.rst b/docs/source/fastNLP.saver.rst index 7699c2e8..daa6fbe8 100644 --- a/docs/source/fastNLP.saver.rst +++ b/docs/source/fastNLP.saver.rst @@ -1,30 +1,18 @@ -fastNLP.saver package -===================== +fastNLP.saver +============== -Submodules ----------- - -fastNLP.saver.logger module ---------------------------- +fastNLP.saver.logger +--------------------- .. automodule:: fastNLP.saver.logger :members: - :undoc-members: - :show-inheritance: -fastNLP.saver.model\_saver module ---------------------------------- +fastNLP.saver.model\_saver +--------------------------- .. automodule:: fastNLP.saver.model_saver :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- .. automodule:: fastNLP.saver :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/index.rst b/docs/source/index.rst index 1caf2373..fadcc056 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -3,14 +3,24 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to fastNLP's documentation! -=================================== +fastNLP documentation +===================== + + +Introduction +------------ + + +API Reference +------------- + +If you are looking for information on a specific function, class or +method, this part of the documentation is for you. .. toctree:: - :maxdepth: 4 - :caption: Contents: + :maxdepth: 2 - fastNLP + fastNLP API diff --git a/docs/source/modules.rst b/docs/source/modules.rst deleted file mode 100644 index e9a92cb7..00000000 --- a/docs/source/modules.rst +++ /dev/null @@ -1,7 +0,0 @@ -fastNLP -======= - -.. toctree:: - :maxdepth: 4 - - fastNLP From 3fde83563868df7c77075109535f16bf7ccabe7e Mon Sep 17 00:00:00 2001 From: lyhuang Date: Wed, 29 Aug 2018 00:18:15 +0800 Subject: [PATCH 3/8] docs/requirements.txt --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 88b6469d..2809876b 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ numpy>=1.14.2 -torch==0.4.0 +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 \ No newline at end of file From 5a70d655916431a2c866004460815214516ac218 Mon Sep 17 00:00:00 2001 From: h00Jiang <378213564@qq.com> Date: Wed, 29 Aug 2018 14:02:24 +0800 Subject: [PATCH 4/8] fix a bug (when restore the pickle_file , cannot restore dev.pkl) --- fastNLP/core/preprocess.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fastNLP/core/preprocess.py b/fastNLP/core/preprocess.py index dfaf3e94..90a32c12 100644 --- a/fastNLP/core/preprocess.py +++ b/fastNLP/core/preprocess.py @@ -59,7 +59,6 @@ class BasePreprocess(object): def run(self, train_dev_data, test_data=None, pickle_path="./", train_dev_split=0, cross_val=False, n_fold=10): """Main preprocessing pipeline. - :param train_dev_data: three-level list, with either single label or multiple labels in a sample. :param test_data: three-level list, with either single label or multiple labels in a sample. (optional) :param pickle_path: str, the path to save the pickle files. @@ -98,6 +97,7 @@ class BasePreprocess(object): save_pickle(data_train, pickle_path, "data_train.pkl") else: data_train = load_pickle(pickle_path, "data_train.pkl") + data_dev = load_pickle(pickle_path, "data_dev.pkl") else: # cross_val is True if not pickle_exist(pickle_path, "data_train_0.pkl"): @@ -307,4 +307,4 @@ def infer_preprocess(pickle_path, data): data_index = [] for example in data: data_index.append([word2index.get(w, DEFAULT_UNKNOWN_LABEL) for w in example]) - return data_index + return data_index \ No newline at end of file From 18586c9c6db7fbc181fe12948f95c17b62f26903 Mon Sep 17 00:00:00 2001 From: h00Jiang <378213564@qq.com> Date: Wed, 29 Aug 2018 14:08:29 +0800 Subject: [PATCH 5/8] fix a bug (when init_emb is not None , get an error) --- fastNLP/modules/encoder/embedding.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastNLP/modules/encoder/embedding.py b/fastNLP/modules/encoder/embedding.py index b2641bff..73ddd77a 100644 --- a/fastNLP/modules/encoder/embedding.py +++ b/fastNLP/modules/encoder/embedding.py @@ -15,7 +15,7 @@ class Embedding(nn.Module): def __init__(self, nums, dims, padding_idx=0, sparse=False, init_emb=None, dropout=0.0): super(Embedding, self).__init__() self.embed = nn.Embedding(nums, dims, padding_idx, sparse=sparse) - if init_emb: + if init_emb is not None: self.embed.weight = nn.Parameter(init_emb) self.dropout = nn.Dropout(dropout) From 50b53455391ba1ff126b4f2ff76a2d149d22b567 Mon Sep 17 00:00:00 2001 From: Coet Date: Wed, 29 Aug 2018 17:03:26 +0800 Subject: [PATCH 6/8] check if data_dev.pkl exists In line 100, add a if statement to check whether there exists a file named "data_dev.pkl" in the pickle path. If not, the file won't be loaded. --- fastNLP/core/preprocess.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fastNLP/core/preprocess.py b/fastNLP/core/preprocess.py index 90a32c12..77df6b51 100644 --- a/fastNLP/core/preprocess.py +++ b/fastNLP/core/preprocess.py @@ -97,7 +97,8 @@ class BasePreprocess(object): save_pickle(data_train, pickle_path, "data_train.pkl") else: data_train = load_pickle(pickle_path, "data_train.pkl") - data_dev = load_pickle(pickle_path, "data_dev.pkl") + if pickle_exist(pickle_path, "data_dev.pkl"): + data_dev = load_pickle(pickle_path, "data_dev.pkl") else: # cross_val is True if not pickle_exist(pickle_path, "data_train_0.pkl"): @@ -307,4 +308,4 @@ def infer_preprocess(pickle_path, data): data_index = [] for example in data: data_index.append([word2index.get(w, DEFAULT_UNKNOWN_LABEL) for w in example]) - return data_index \ No newline at end of file + return data_index From e82ec43b3790bd003a9b6303b7aa28043a5d9664 Mon Sep 17 00:00:00 2001 From: Coet Date: Sun, 2 Sep 2018 15:23:13 +0800 Subject: [PATCH 7/8] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index a38771ee..8ad0f018 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,9 @@ [![Build Status](https://travis-ci.org/fastnlp/fastNLP.svg?branch=master)](https://travis-ci.org/fastnlp/fastNLP) [![codecov](https://codecov.io/gh/fastnlp/fastNLP/branch/master/graph/badge.svg)](https://codecov.io/gh/fastnlp/fastNLP) +[![PyPI version](https://badge.fury.io/py/fastNLP.svg)](https://badge.fury.io/py/fastNLP) +![Hex.pm](https://img.shields.io/hexpm/l/plug.svg) +[![Documentation Status](https://readthedocs.org/projects/fastnlp/badge/?version=latest)](http://fastnlp.readthedocs.io/?badge=latest) fastNLP is a modular Natural Language Processing system based on PyTorch, for fast development of NLP tools. It divides the NLP model based on deep learning into different modules. These modules fall into 4 categories: encoder, interaction, aggregation and decoder, while each category contains different implemented modules. Encoder modules encode the input into some abstract representation, interaction modules make the information in the representation interact with each other, aggregation modules aggregate and reduce information, and decoder modules decode the representation into the output. Most current NLP models could be built on these modules, which vastly simplifies the process of developing NLP models. The architecture of fastNLP is as the figure below: From 34c78cb9de3673fe4a094fe4bd2ce0b7864e64d4 Mon Sep 17 00:00:00 2001 From: lyhuang Date: Sun, 2 Sep 2018 20:08:17 +0800 Subject: [PATCH 8/8] update docs move example to docs --- README.md | 79 +--------------- docs/source/fastNLP.core.rst | 6 ++ docs/source/fastNLP.modules.decoder.rst | 6 ++ .../procedures_and_sequence_labeling.png | Bin 0 -> 51186 bytes docs/source/figures/text_classification.png | Bin 0 -> 54120 bytes docs/source/index.rst | 38 ++++++-- docs/source/user/installation.rst | 31 +++++++ docs/source/user/quickstart.rst | 84 ++++++++++++++++++ 8 files changed, 161 insertions(+), 83 deletions(-) create mode 100644 docs/source/figures/procedures_and_sequence_labeling.png create mode 100644 docs/source/figures/text_classification.png create mode 100644 docs/source/user/installation.rst create mode 100644 docs/source/user/quickstart.rst diff --git a/README.md b/README.md index 8ad0f018..df9c89c9 100644 --- a/README.md +++ b/README.md @@ -20,87 +20,10 @@ fastNLP is a modular Natural Language Processing system based on PyTorch, for fa ## Resources -- [Documentation](https://github.com/fastnlp/fastNLP) +- [Documentation](https://fastnlp.readthedocs.io/en/latest/) - [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 diff --git a/docs/source/fastNLP.core.rst b/docs/source/fastNLP.core.rst index 2fa2b93b..13943f72 100644 --- a/docs/source/fastNLP.core.rst +++ b/docs/source/fastNLP.core.rst @@ -7,6 +7,12 @@ fastNLP.core.action .. automodule:: fastNLP.core.action :members: +fastNLP.core.loss +------------------ + +.. automodule:: fastNLP.core.loss + :members: + fastNLP.core.metrics --------------------- diff --git a/docs/source/fastNLP.modules.decoder.rst b/docs/source/fastNLP.modules.decoder.rst index b8a36909..6844543a 100644 --- a/docs/source/fastNLP.modules.decoder.rst +++ b/docs/source/fastNLP.modules.decoder.rst @@ -7,6 +7,12 @@ fastNLP.modules.decoder.CRF .. automodule:: fastNLP.modules.decoder.CRF :members: +fastNLP.modules.decoder.MLP +---------------------------- + +.. automodule:: fastNLP.modules.decoder.MLP + :members: + .. automodule:: fastNLP.modules.decoder :members: diff --git a/docs/source/figures/procedures_and_sequence_labeling.png b/docs/source/figures/procedures_and_sequence_labeling.png new file mode 100644 index 0000000000000000000000000000000000000000..06adc0514e10388eb395c160e1218a0c7e05c636 GIT binary patch literal 51186 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 [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) \ No newline at end of file