Torchtext学习笔记

Torchtext是pytorch处理文本的一个工具包,在学习pytorch的过程中遇到,就顺便学习一下,也相应的做一下记录。
Torchtext工作流程
我们在进行NLP任务时,对数据预处理一般分为:

  • 读入数据
  • 将数据one-hot
  • one-hot to embedding
  • 用迭代器读入(一次性读入容易导致超出内存的问题)
    而Torchtext工作逻辑和平时处理数据是非常相似的,基本上可以完成这一系列工作。
    从torchtext的官方github:Torchtext github地址的readme中可以看到分为Data和Dataset两类,结合Torchtext的官方文档TorchText 官方文档对目前用到的几个对象、方法进行学习。

Torchtext.data

Dataset类:classtorchtext.data.Dataset(examples, fields, filter_pred=None)
由Field对象组成的数据集

变量:

  • sort_key:把长度相似的数据放在一起,提高之后padding的速度
  • examples(list[examples]):这个数据集中的examples
  • fields(dict[str, field]):包含每个列/字段的名称,以及相应的字段对象,具有相同字段对象的两个字段会共享词汇表。
    TabularDataset类:classtorchtext.data.TabularDataset(path, format, fields, skip_header=False, csv_reader_params={}, **kwargs)
    定义以CSV, TSV, JSON形式储存的列数据集

    Fields类:classtorchtext.data.Field(sequential=True, use_vocab=True, init_token=None, eos_token=None, fix_length=None, dtype=torch.int64, preprocessing=None, postprocessing=None, lower=False, tokenize=None, tokenizer_language='en', include_lengths=False, batch_first=False, pad_token='<pad>', unk_token='<unk>', pad_first=False, truncate_first=False, stop_words=None, is_target=False)
    定义一个数据类型,以及将他们转换成张量

    Field对象可以用张量进行表示,保存了一个字典对象定义了这个Field内可能出现的所有值以及他们对应的数值表示。Field对象还保存了与数据类型如何进行数值化相关的其他的参数,例如token化的方法以及应该生产的张量。
    如果一个Field对象在多个列共享,那么Field保存的Vocab也是共享的。
    变量:
  • sequential:数据类型是不是顺序数据,如果False:不进行token
  • use_vocab:是否用Vocab对象,如果数据已经是数值化的了,可以定义为False
  • lower:是不是要进行Lower case操作
  • batch_first:生成的张量是否要把batch维度放在第一维(这个在对齐维度时可能使用)
  • pad_token:用于padding的token
  • unk_token:用于标记未知词的token
    方法:
    build_vocab(*args, **kwargs)
    为field对象从一个或多个数据集构造vocab
    LabelField
    这个类看名字就像是专门处理标签的一个类,但是在官方文档中并找不到关于这个类的介绍,不过在源码中可以找到相关内容,这个类基本就是在分类任务中存储Label值,默认的是None.
    迭代器
    BPTTIterator classtorchtext.data.BPTTIterator(dataset, batch_size, bptt_len, **kwargs) 定义一个用了BPTT(反向遗传算法)的迭代器
    变量:
  • dataset:数据源
  • batch_size:batch size
  • bptt_len:反向传播的序列长度
  • repeat: 多个epoch是否重复迭代器
  • shuffle:epoch之间是否打乱数据
  • device:cpu or gpu

DataSets

所有的数据集都是torch.text.data.Dataset的子集,继承自torch.utils.data.Dataset
Language Modeling
classtorchtext.datasets.LanguageModelingDataset(path, text_field, newline_eos=True, encoding='utf-8', **kwargs)

为LM定义的数据集,同样继承了split和iter方法

torchtext.vocab

Vocab
classtorchtext.vocab.Vocab(counter, max_size=None, min_freq=1, specials=['<pad>'], vectors=None, unk_init=None, vectors_cache=None, specials_first=True)
这个其实就是之前text.build_vocab建立的字典,实践的时候主要用到了stoiitos两个方法,记录一下。

  • stoi:把字符映射成数字
  • itos:把数字映射成字符

目前就用到了这么几种方法,留着之后再继续更新吧~


版权声明:本文为alzy133原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。