zoukankan      html  css  js  c++  java
  • torchtext 的使用

    torchtext的使用

    文本预处理流程:

    • file loading
    • Tokenization
    • Vocab
    • Numericalize/Indexify 词映射成 index
    • word vector 词向量
    • Batching

    torchtext的处理流程

    • torchtext.data.Field 定义样本处理流程;
    • torchtext.data.Datasets 加载corpus
      • datasets中,torchtext将corpus处理成一个个 torchtext.data.example;
      • 创建 torchtext.data.Example时会调用field.preprocess 方法
    • filed.build_vocab 创建词汇表,将string转成index;这部分功能包括string token -> index,index -> string token, string token -> word vector;
    • torchtext.data.Iterator 将处理后的数据进行batch操作;
      • 将Dataset数据batch化;
      • pad操作,保证一个batch中的Example长度相同;
      • 此处将string token转成index;

    例子

    1. 首先创建Filed,
    from torchtext import data, datasets
    SRC = data.Field(tokenize=tokenize_en,pad_token=PAD_WORD)
    TGT = data.Field(tokenize=tokenize_en,init_token=BOS,eos_token=EOS,pad_token=PAD)
    
    1. 通过dataset加载数据库
    train,val,test=datasets.TranslationDataset.splits(
        path="./dataset/",
        train="train",
        validation="valid",
        test="test",
        exts=(".src",".tgt"),
        fields=(SRC,TGT),
        filter_pred=lambda x: len(vars(x)['src'])< MAX_LEN and len(vars(x)['trg'])< MAX_LEN
    )
    
    1. 建立词汇表
    SRC.build_vocab(train.src,min_freq=MIN_FREQ)
    TGT.build_vocab(train.trg,min_freq=MIN_FREQ)
    # 这边可以加载预训练的词向量
    # TEXT.build_vocab(train,vectors="glove.100d")
    
    1. 进行batch操作
    train_iter = MyIterator(train,batch_size=BATCH_SIZE, device=0,                repeat=False, sort_key=lambda x: (len(x.src), len(x.trg)),batch_size_fn=batch_size_fn, train=True) 
    
    # train_iter, val_iter, test_iter = data.Iterator.splits(
    #         (train, val, test), sort_key=lambda x: len(x.Text),
            # batch_sizes=(32, 256, 256), device=-1)
    
    1. 获得单词的vocab
    vocab = TEXT.vocab
    self.embed = nn.Embedding(len(vocab), emb_dim)
    self.embed.weight.data.copy_(vocab.vectors)
    

    问题

    • MyIterator中动态batch和静态batch的区别
    • 如何共享词表
      SRC.build(train.src,train.tgt)
      TGT.vocab = SRC.vocab
    
  • 相关阅读:
    BZOJ 1101 莫比乌斯函数+分块
    BZOJ 2045 容斥原理
    BZOJ 4636 (动态开节点)线段树
    BZOJ 2005 容斥原理
    BZOJ 2190 欧拉函数
    BZOJ 2818 欧拉函数
    BZOJ 3123 主席树 启发式合并
    812. Largest Triangle Area
    805. Split Array With Same Average
    794. Valid Tic-Tac-Toe State
  • 原文地址:https://www.cnblogs.com/curtisxiao/p/11179006.html
Copyright © 2011-2022 走看看