torchtext的基本使用

Field

Field

对于自然语言处理的诸多任务,不同的任务所需要处理的数据类型不一样,但最后都是需要把这些数据转换为计算机能够计算的数值形式,Filed类的设计思想用来将不同的文本数据转换为用 t e n s o r tensor tensor表示,以情感分析为例子。
情感分析的数据一般是由 T e x t Text Text l a b e l label label两个字段表示, T e x t Text Text表示一个文本、一段话或一个句子。 L a b e l Label Label表示 T e x t Text Text类别,积极或消极,也可以用数字0和1表示, F i e l d Field Field类就是要把 T e x t Text Text L a b e l Label Label 两个字段的数据转换为tensor表示。
先对 F i e l d Field Field类参数进行表示:

  • S e q u e n t i a l ( b o o l ) Sequential(bool) Sequentialbool) 是否为序列数据,默认是True,说白了就是该字段表示的数据是否需要转换为 T e n s o r Tensor Tensor形式。
  • use_vocab(bool): 是否使用 V o c a b 对象 Vocab对象 Vocab对象,默认为True,如果为False,则该字段的数据已经转换为数值形式。
  • init_tokerl(str): 为该字段的数据添加一个起始标记:默认为None.
  • eos_token: 为该字段的数据添加一个结束标记。默认为None。
  • fix_length: 将该字段的每条数据填充到固定长度。默认为None。
  • dtype: 数据类型,默认为torch.long。
  • preprocessing:该字段的数据在数值化之前,转换为 t o k e n s tokens tokens之后进行的处理操作,默认为None,即输入在转换为 t o k e n s tokens tokens之后,对tokens做一些预处理,该参数一般都是设置为 t o k e n s 的数值化 tokens的数值化 tokens的数值化函数。
  • postprocessing :在数值化之后,但在数值转换为张量之前对该字段的数据进行的处理操作,默认为None。
  • l o w e r ( b o o l ) lower(bool) lower(bool):是否将数据中的文本转换为小写,针对具有大小写的语言数据,默认为False.
  • t o k e n i z e tokenize tokenize:说白了都是对文本的数据进行分词,默认为: s t r i n g . s p l i t string.split string.split.
  • include_lengths (bool) 如果为True,返回的是一个填充小批量的元组和一个包含批量中吗每条数据长度的列表,如果为False,返回一个填充的小批量;默认为False;
  • batch_first (bool):是否使批量大小为第一维度,默认为False.
  • pad_token (str) : 用作填充字符串标记,默认为
  • unk_token (str) :用于表示OOV (Out Of Vocabulary) 词的字符串标记,默认为 “” ;
  • pad_first(bool): 是否一开对序列进行填充,默认为False.
  • truncate_first (bool): 是否一开始对序列进行截断,默认为False.
  • is_target (bool): 该字段是否为目标变量,类比文本分类中的类别。

Dataset

TabularDataset

TabularDataset类定义以 CSV、TSV 或 JSON 格式存储的列的数据集。

上面是官方文档中对TabularDataset的描述,顾名思义,tabular为表格的意思,TabularDataset类将以表格形式存储的数据抽象为一个类,方便后续的数据处理;我们可以直接使用 Dataset 类方法 splits 来得到 Dataset 对象,也可以继承该类来定制自己的 TabularDataset 类;TabularDataset 类继承 Dataset 类;

将以表格形式存储的数据抽象为一个类。

先对 TabularDataset 类的参数进行解释;

  • path(str) :数据文件存储在磁盘位置的路径。
  • format (str) :数据文件的格式,例如,json.csv格式。
  • fields (list(tuple(str, Field))) : 该参数类型为list,list中的每个元素为tuple,每个tuple的形式为(str,Field). t u p l e tuple tuple的第一个元素为表头字段,第二个元素为一个 F i e l d Field Field对象,可以理解为,将表格形式的数据中的每一列数据映射为一个 F i e l d Field Field对象,字段的顺序要和文件中字段的顺序一致。
  • skip_header (bool) :是否跳过输入文件的第一行,因为传入的是表格形式的文件,文件的第一行一般为表头字段,不是实际的数据,默认为False,不跳过第一行数据。
  • csv_reader_params (dict) 传入csv.reader的参数。
    使用类方法 s p l i t s splits splits 可以很方便的从训练集、验证集和测试集文件中分别得到对应的Dataset对象,先对 S p l i t s Splits Splits参数进行解释:
    • path (str):存放训练集、验证集和测试集文件的文件夹的路径名。
    • root(str): 根数据集的存储目录,默认为data.
    • train(str): 训练集文件名,和参数 path 拼接在一起,默认为None
    • validation (str) : 验证集文件名,默认为None,表示不划分验证集
    • test (str) : 测试集文件名,默认为None,表示不划分测试集
    • keyword arguments (Remaining) – 传递给正在使用的 Dataset(子)类的构造函数
      return (tuple(Dataset)): 按train、validation、test的顺序返回。
fields = [('label', labels), ('comment_processed', comments)]
train, valid, test = TabularDataset.splits(path='/data', format='csv',
                                           train='train_data.csv', validation='valid_data.csv', test='test_data.csv',
                                           skip_header=True, fields=fields)

Iterators

Iterator

定义从Dataset中加载批量数据的迭代器。
l t e r a t o r lterator lterator类进行参数解释。

  • dataset (Dataset) – Dataset 对象;
  • batch_size (int) – 批量大小;
  • batch_size_fn – Function of three arguments (new example to add, current count of examples in the batch, and current effective batch size) that returns the new effective batch size resulting from adding that example to a batch. This is useful for dynamic batching, where this function would add to the current effective batch size the number of tokens in the new example.
  • sort_key – A key to use for sorting examples in order to batch together examples with similar lengths and minimize padding. The sort_key provided to the Iterator constructor overrides the sort_key attribute of the Dataset, or defers to it if None.
  • train(bool): 该迭代器是否表示为训练集。
  • repeat(bool): 是否对多个epoch重复迭代器,默认为False.
  • shuffle (bool): 是否在 e p o c h epoch epoch之前打乱数据。
  • sort – Whether to sort examples according to self.sort_key. Note that shuffle and sort default to train and (not train).
  • sort_within_batch – Whether to sort (in descending order according to self.sort_key) within each batch. If None, defaults to self.sort. If self.sort is True and this is False, the batch is left in the original (ascending) sorted order.
  • device (str or torch.device) – torch.device 的字符串或实例,指定在哪个设备上创建 tensor,默认为None,在CPU上创建 tensor
    类方法 s p l i t s splits splits: 分别为多个 D a t a s e t Dataset Dataset创建迭代器对象。
    • 对类方法splits的参数进行解释:
    • datasets (tuple(Dataset)): 传入参数为一个元组,元组中的元素为Dataset实例,第一个应该为训练集对应的 D a t a s e t Dataset Dataset
    • batch_sizes (tuple or int): 若为 t u p l e tuple tuple,则对应于参数 datasets 中的 Dataset 实例的批量大小;若为 int,则 datasets 中的 Dataset 实例的批量大小相同
    • keyword arguments (Remaining): 传递给正在使用的迭代器类的构造函数,即类 l t e r a t o r lterator lterator中的参数。

BucketIterator

  • 定义一个迭代器,将相似长度的数据批处理在一起。
  • BucketIterator 类继承 l t e r a t o r lterator lterator类,在为每个新 e p o c h epoch epoch打乱数据生成新的 b a t c h batch batch时,最大限度的减少数据需要的填充量。
  • 使用 B u c k e t I t e r a t o r . s p l i t s BucketIterator.splits BucketIterator.splits方法可以很方便地生成训练集、验证集和测试集的迭代器。

迭代器详解

什么是迭代。

从一个数据集合中按照一定的顺序,不断的取出数据的过程。

迭代和遍历有什么区别。

迭代强调的依次取出,不能确定取出有多少。

什么是迭代器。

对迭代过程的封装,通常为对象,不同的语言,表现出来的迭代形式不一样。

torch.utils.data.Dataloader

是一个功能丰富的迭代器,其功能包括,但不限于:

  • 批量处理数据。
  • 打乱数据
  • 使用多线程并行加载数据。

总结

慢慢的会根据代码,将数据迭代器全部都将其搞清楚,会自己研究每个参数,将各个参数及代码迭代器全部都将其搞透彻,研究彻底。

你可能感兴趣的:(Torch的使用及参数解释,人工智能,自然语言处理)