• 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
    
  • 相关阅读:
    【翻译】谈 focus 和 blur 的事件代理
    【翻译】细分域名的优势
    Form窗体的Combobox键值对绑定
    日志
    ajaxload
    c#文件整理程序
    每天工作4小时的程序员
    每年这一天
    转载从交友到社交的个人成长
    旅行的意义
  • 原文地址:https://www.cnblogs.com/curtisxiao/p/11179006.html
Copyright © 2020-2023  润新知