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

转载于:https://www.cnblogs.com/curtisxiao/p/11179006.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
torchtext是一个用于自然语言处理的Python库,可以方便地加载和处理文本数据。SST2是指树形结构句子对分类任务(The Stanford Sentiment Treebank),其中每个样本都是由一对句子组成,这些句子是由情绪标签(正面或负面)标记的。下面是如何使用torchtext的SST2类: 1. 导入所需的模块 ```python import torch import torchtext from torchtext.datasets import SST2 from torchtext.data.utils import get_tokenizer from torchtext.vocab import GloVe ``` 2. 下载和加载数据集 ```python train_data, test_data = SST2.splits( root='data', train='train.tsv', test='test.tsv', tokenizer=get_tokenizer('basic_english'), filter_pred=lambda ex: ex.label != 'neutral' ) ``` 在这里,我们将数据集下载到“data”目录下,使用“basic_english”作为分词器,并过滤掉标签为“neutral”的样本。 3. 构建词汇表 ```python text_field = torchtext.legacy.data.Field(sequential=True, use_vocab=True, tokenize=get_tokenizer('basic_english'), lower=True) label_field = torchtext.legacy.data.Field(sequential=False, use_vocab=False) text_field.build_vocab(train_data, vectors=GloVe(name='6B', dim=300)) ``` 我们首先定义了两个字段:一个用于文本数据,另一个用于标签。然后我们使用“basic_english”作为分词器,使用GloVe预训练的词向量来构建文本字段的词汇表。 4. 构建数据迭代器 ```python train_iter, test_iter = torchtext.legacy.data.Iterator.splits((train_data, test_data), batch_size=32, device=torch.device('cuda'), sort_key=lambda x: len(x.text)) ``` 我们使用“Iterator”类来构建数据迭代器,其中包括训练和测试数据集。在这里,我们设置批量大小为32,使用GPU加速,并按文本序列长度排序。 现在,我们已经准备好使用torchtext的SST2类来加载和处理句子对分类数据集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值