You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

quickstart.rst 4.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. ===============
  2. 快速入门
  3. ===============
  4. 这是一个简单的分类任务 (数据来源 `kaggle <https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews>`_ )。
  5. 给出一段文字,预测它的标签是0~4中的哪一个。
  6. 我们可以使用 fastNLP 中 io 模块中的 :class:`~fastNLP.io.CSVLoader` 类,轻松地从 csv 文件读取我们的数据。
  7. .. code-block:: python
  8. from fastNLP.io import CSVLoader
  9. loader = CSVLoader(headers=('raw_sentence', 'label'), sep='\t')
  10. dataset = loader.load("./sample_data/tutorial_sample_dataset.csv")
  11. 此时的 `dataset[0]` 的值如下,可以看到,数据集中的每个数据包含 ``raw_sentence`` 和 ``label`` 两个字段,他们的类型都是 ``str``::
  12. {'raw_sentence': A series of escapades demonstrating the adage that what is good for the
  13. goose is also good for the gander , some of which occasionally amuses but none of which
  14. amounts to much of a story . type=str,
  15. 'label': 1 type=str}
  16. 我们使用 :class:`~fastNLP.DataSet` 类的 :meth:`~fastNLP.DataSet.apply` 方法将 ``raw_sentence`` 中字母变成小写,并将句子分词。
  17. .. code-block:: python
  18. dataset.apply(lambda x: x['raw_sentence'].lower(), new_field_name='sentence')
  19. dataset.apply(lambda x: x['sentence'].split(), new_field_name='words', is_input=True)
  20. 然后我们再用 :class:`~fastNLP.Vocabulary` 类来统计数据中出现的单词,并将单词序列转化为训练可用的数字序列。
  21. .. code-block:: python
  22. from fastNLP import Vocabulary
  23. vocab = Vocabulary(min_freq=2).from_dataset(dataset, field_name='words')
  24. vocab.index_dataset(dataset, field_name='words',new_field_name='words')
  25. 同时,我们也将原来 str 类型的标签转化为数字,并设置为训练中的标准答案 ``target``
  26. .. code-block:: python
  27. dataset.apply(lambda x: int(x['label']), new_field_name='target', is_target=True)
  28. 现在我们可以导入 fastNLP 内置的文本分类模型 :class:`~fastNLP.models.CNNText` ,
  29. .. code-block:: python
  30. from fastNLP.models import CNNText
  31. model = CNNText((len(vocab),50), num_classes=5, padding=2, dropout=0.1)
  32. :class:`~fastNLP.models.CNNText` 的网络结构如下::
  33. CNNText(
  34. (embed): Embedding(
  35. 177, 50
  36. (dropout): Dropout(p=0.0)
  37. )
  38. (conv_pool): ConvMaxpool(
  39. (convs): ModuleList(
  40. (0): Conv1d(50, 3, kernel_size=(3,), stride=(1,), padding=(2,))
  41. (1): Conv1d(50, 4, kernel_size=(4,), stride=(1,), padding=(2,))
  42. (2): Conv1d(50, 5, kernel_size=(5,), stride=(1,), padding=(2,))
  43. )
  44. )
  45. (dropout): Dropout(p=0.1)
  46. (fc): Linear(in_features=12, out_features=5, bias=True)
  47. )
  48. 下面我们用 :class:`~fastNLP.DataSet` 类的 :meth:`~fastNLP.DataSet.split` 方法将数据集划分为 ``train_data`` 和 ``dev_data``
  49. 两个部分,分别用于训练和验证
  50. .. code-block:: python
  51. train_data, dev_data = dataset.split(0.2)
  52. 最后我们用 fastNLP 的 :class:`~fastNLP.Trainer` 进行训练,训练的过程中需要传入模型 ``model`` ,训练数据集 ``train_data`` ,
  53. 验证数据集 ``dev_data`` ,损失函数 ``loss`` 和衡量标准 ``metrics`` 。
  54. 其中损失函数使用的是 fastNLP 提供的 :class:`~fastNLP.CrossEntropyLoss` 损失函数;
  55. 衡量标准使用的是 fastNLP 提供的 :class:`~fastNLP.AccuracyMetric` 正确率指标。
  56. .. code-block:: python
  57. from fastNLP import Trainer, CrossEntropyLoss, AccuracyMetric
  58. trainer = Trainer(model=model, train_data=train_data, dev_data=dev_data,
  59. loss=CrossEntropyLoss(), metrics=AccuracyMetric())
  60. trainer.train()
  61. 训练过程的输出如下::
  62. input fields after batch(if batch size is 2):
  63. words: (1)type:torch.Tensor (2)dtype:torch.int64, (3)shape:torch.Size([2, 26])
  64. target fields after batch(if batch size is 2):
  65. target: (1)type:torch.Tensor (2)dtype:torch.int64, (3)shape:torch.Size([2])
  66. training epochs started 2019-05-09-10-59-39
  67. Evaluation at Epoch 1/10. Step:2/20. AccuracyMetric: acc=0.333333
  68. Evaluation at Epoch 2/10. Step:4/20. AccuracyMetric: acc=0.533333
  69. Evaluation at Epoch 3/10. Step:6/20. AccuracyMetric: acc=0.533333
  70. Evaluation at Epoch 4/10. Step:8/20. AccuracyMetric: acc=0.533333
  71. Evaluation at Epoch 5/10. Step:10/20. AccuracyMetric: acc=0.6
  72. Evaluation at Epoch 6/10. Step:12/20. AccuracyMetric: acc=0.8
  73. Evaluation at Epoch 7/10. Step:14/20. AccuracyMetric: acc=0.8
  74. Evaluation at Epoch 8/10. Step:16/20. AccuracyMetric: acc=0.733333
  75. Evaluation at Epoch 9/10. Step:18/20. AccuracyMetric: acc=0.733333
  76. Evaluation at Epoch 10/10. Step:20/20. AccuracyMetric: acc=0.733333
  77. In Epoch:6/Step:12, got best dev performance:AccuracyMetric: acc=0.8
  78. Reloaded the best model.
  79. 这份教程只是简单地介绍了使用 fastNLP 工作的流程,具体的细节分析见 :doc:`/user/tutorial_one`