torchtext 的基本使用

可以结合博客《使用BERT+BiGRU对京东手机评论进行情感分析》来看

1. Field

Field

对于自然语言处理的诸多任务,不同的任务所需要处理的数据的类型不一样,但最后都是需要把这些数据转化为计算机能够计算的数值形式,Field 类的设计就是用来将不同的文本数据转化为用 tensor 表示,以情感分析为例;

情感分析的数据一般由 Text 和 Label 两个字段来表示,Text 表示一个文本、一段话或一个句子,Label 表示 Text 的类别,积极或消极,也可用数字 0 和 1 表示;Field 类就是要把 Text 和 Label 两个字段的数据都转化 tensor 表示;

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

  • sequential (bool) – 是否为序列数据,默认为True;说白了就是该字段表示的数据是否为需要转化 tensor 的形式;
  • use_vocab (bool) – 是否使用 Vocab 对象,默认为 True;如果为 False,则该字段的数据应已经转化为数值形式;
  • init_token (str) – 为该字段的数据添加一个起始标记,默认为None;
  • eos_token (str) – 为该字段的数据添加一个结束标记,默认为None;
  • fix_length (int) – 将该字段的每条数据填充到固定长度,默认为None;
  • dtype (torch.dtype) – 数据类型,默认为 torch.long;
  • preprocessing – 该字段的数据在数值化之前,转化为 tokens 之后进行的处理操作,默认为None;即输入在转化为 tokens 后,对tokens做的一些预处理,该参数一般就是设置为 “tokens 数值化” 的函数;
  • postprocessing – 在数值化之后但在数字转换为张量之前对该字段的数据进行的处理操作,默认为None;
  • lower (bool) – 是否将数据中的文本转化为小写,针对具有大小写的语言数据,默认为False;
  • tokenize – 说白了就是对文本数据进行分词,默认为 string.split;
  • include_lengths (bool) – 如果为True,返回的是一个填充小批量的元组和一个包含批量中每条数据的长度的列表;如果为False,返回一个填充的小批量;默认为False;
  • batch_first (bool) – 是否使批量大小为第一维度,默认为False;
  • pad_token (str) – 用作填充的字符串标记,默认为 "<pad>"
  • unk_token (str) – 用于表示OOV (Out Of Vocabulary) 词的字符串标记,默认为 "<unk>"
  • pad_first (bool) – 是否一开对序列进行填充,默认为False;
  • truncate_first (bool) – 是否一开始对序列进行截断,默认为False;
  • is_target (bool) – 该字段是否为目标变量,类比文本分类中的类别;

2. 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),tuple 的第一个元素为表头字段,第二个元素为一个Filed对象;可以理解为,将表格形式的数据中的每一列数据映射为一个Filed对象;字段的顺序要和文件中字段顺序一致
  • skip_header (bool) : 是否跳过输入文件的第一行,因为传入的是表格形式的文件,文件的第一行一般为表头字段,不是实际的数据,默认为False,不跳过第一行数据;
  • csv_reader_params (dict) : 传入给 csv.reader 的参数;

使用类方法 splits 可以很方便的从训练集、验证集和测试集文件中分别得到对应的 Dataset 对象,先对 splits 方法的参数进行解释;

  • path (str) : 存放训练集、验证集和测试集文件的文件夹的路径名;
  • root (str) : 根数据集的存储目录, 默认为 ‘.data’;
  • train (str) : 训练集文件名,和参数 path 拼接在一起,默认为None;
  • validation (str) : 验证集文件名,默认为None,表示不划分验证集;
  • test (str) : 测试集文件名,默认为None,表示不划分测试集;
  • keyword arguments (Remaining) – 传递给正在使用的 Dataset(子)类的构造函数;

return (tuple(Dataset)) : 按 tran、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)

3. Iterators

Iterator

定义从 Dataset 中加载批量数据的迭代器。

对 Iterator 类的参数进行解释,

  • 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) – 是否在 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;

类方法 splits,分别为多个 Dataset 创建迭代器对象;

对类方法 splits 的参数进行解释;

  • datasets (tuple(Dataset)) – 传入的参数为一个元组,元组中的元素为 Dataset 实例,第一个应该为训练集对应的 Dataset;
  • batch_sizes (tuple or int) – 若为 tuple,则对应于参数 datasets 中的 Dataset 实例的批量大小;若为 int,则 datasets 中的 Dataset 实例的批量大小相同;
  • keyword arguments (Remaining) – 传递给正在使用的迭代器类的构造函数,即类 Iterator 中的参数;

BucketIterator

定义一个迭代器,将相似长度的数据批处理在一起;

BucketIterator 类继承 Iterator 类,在为每个新的 epoch 打乱数据生成新的 batch 时,最大限度地减少数据需要的填充量;

使用 BucketIterator.splits 方法可以很方便的生成训练集、验证集和测试集的迭代器;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值