Torchtext 库简单文本预处理

Torchtext 库简单文本预处理

  • TorchText 的数据预处理流程
    • 常规步骤:

TorchText 的数据预处理流程

TorchText 的数据预处理流程为:
定义样本的处理操作。—> torchtext.data.Field
加载 corpus (都是 string)—> torchtext.data.Datasets
在Datasets 中,torchtext 将 corpus 处理成一个个的 torchtext.data.Example 实例
创建 torchtext.data.Example 的时候,会调用 field.preprocess 方法
创建词汇表, 用来将 string token 转成 index —> field.build_vocab()
词汇表负责:string token —> index, index —> string token ,string token —> word vector
将处理后的数据 进行 batch 操作。—> torchtext.data.Iterator
将 Datasets 中的数据 batch 化
其中会包含一些 pad 操作,保证一个 batch 中的 example 长度一致
在这里将 string token 转化成index。
tokenization,vocab, numericalize, embedding lookup 和 TorchText 数据预处理阶段的对应关系是:
tokenization —> Dataset 的构造函数中,由 Field 的 tokenize 操作
vocab —> field.build_vocab 时,由 Field 保存 映射关系
numericalize —> 发生在 iterator 准备 batch 的时候,由 Field 执行 numericalize 操作
embedding lookup —> 由 pytorch Embedding Layer 提供此功能。

常规步骤:

  1. 创建Field对象,这个对象包含了我们打算如何预处理文本数据的信息
    TEXT = data.Field(sequential=True, tokenize=tokenizer, lower=True) LABEL = data.Field(sequential=False, use_vocab=False)
    如果LABEL是整型,不需要 numericalize , 就需要将 use_vocab=False.
  2. 然后我们可以通过 torchtext.data.Dataset 的类方法 splits 加载所有的语料库:(假设我们有三个语料库,train.tsv, val.tsv, test.tsv)
    train, val, test = data.TabularDataset.splits(
    path=’./data/’, train=‘train.tsv’,
    validation=‘val.tsv’, test=‘test.tsv’, format=‘tsv’,
    fields=[(‘Text’, TEXT), (‘Label’, LABEL)])
  3. 建立词典
    如果使用预训练的词向量及词典
    Text.build_vocab(np.array(vacab_word), vectors=Vectors(name=model_path, cach=model_cach))
    不使用预训练的词向量
    Text.build_vocab(train, val)
    同样标签也需要建立词典
    Label.build_vocab(train,val)
  4. 数据Batching操作
    train_iter, val_iter = data.Iterator.splits(
    (train_dataset, val_dataset),
    batch_sizes = batch_size, len(val)), #这里验证集使用全部
    sort_key=lambda x:len(x.test),
    shuffle=True,
    device=-1, #使用CPU
    repeat = False,
    )
    如果想要获得word vector
    Field的vacab属性保存了word vector数据
    vocabulary = TEXT.vocab
    self.embed = nn.Embedding(len(vocab), emb_dim)
    self.embed.weight.data.copy_(vocab.vectors)

你可能感兴趣的:(Pytorch,pytorch)