1.概览
torchtext按下面的流程来处理文本数据
读取textfiles,csv/tsv files,json files或directiories,将他们转换为dataset。然后将dataset转换为iterator。iterator进行numericalizing, batching, packaging, and moving the data to the GPU.

2.声明fields
fields指明了如何处理一个field。
使用的是情感分析数据集。
包含两类field:
一类:the comment text
二类: the labels (toxic, severe toxic, obscene, threat, insult, and identity hate)

数据结构如下:

                 id                                       comment_text  toxic      ...        threat  insult  identity_hate
0  0000997932d777bf  Explanation\nWhy the edits made under my usern...      0      ...             0       0              0
1  000103f0d9cfb60f  D'aww! He matches this background colour I'm s...      0      ...             0       0              0
2  000113f07ec002fd  Hey man, I'm really not trying to edit war. It...      0      ...             0       0              0
3  0001b41b1c6bb37e  "\nMore\nI can't make any real suggestions on ...      0      ...             0       0              0
4  0001d958c54c6e35  You, sir, are my hero. Any chance you remember...      0      ...             0       0              0

comment text field则给了tokenizer(分词),并全部小写,并声明是sequential(序列)。除了这些还可以指定:

参数 描述
unk_token out-of-vocabulary words
pad_token padding
eos_token end of a sentence
init_token start of the sentence
?? choose whether to make the first dimension the batch or the sequence (the first dimension is the sequence by default)
?? choose whether to allow the sequence lengths to be decided at runtime or decided in advance

Label field很简单,默认,所有的field都希望读入的是词序列,如果读入的field已经是数字而且不是序列,则需要指定参数use_vocab=False and sequential=False.

from torchtext.data import Field
tokenize = lambda x: x.split()
TEXT = Field(sequential=True, tokenize=tokenize, lower=True)
LABEL = Field(sequential=False, use_vocab=False)

3.构建dataset

对不同的数据格式有不同的类来处理,对csv和tsv格式的使用TabularDataset
fields必须和csv中的column顺序相同,如果不需要某个column则赋值为None

from torchtext.data import TabularDataset# 训练集和验证集field对应关系
tv_datafields = [("id", None), # id不需要所以舍弃("comment_text", TEXT), ("toxic", LABEL),("severe_toxic", LABEL), ("threat", LABEL),("obscene", LABEL), ("insult", LABEL),("identity_hate", LABEL)]
# 获得训练集和验证集
trn, vld = TabularDataset.splits(path="data", #数据存放的根目录train='train.csv', # 训练集validation="valid.csv", #验证集format='csv', #类型skip_header=True, # 跳过headerfields=tv_datafields) # 将字段和字段处理对齐
# 测试集field对应关系
tst_datafields = [("id", None),("comment_text", TEXT)]
# 获得测试集
tst = TabularDataset(path="data/test.csv",format='csv',skip_header=True,fields=tst_datafields)

可以查看新生成的数据集,trn是一个列表,其中每一个元素是Example对象。该对象包含了相关的属性key。
comment_text已经被tokenized(分词),但还没有转换为数字。

trn[0] # <torchtext.data.example.Example object at 0x000001F9EAFDBA20>
trn[0].__dict__.keys() # dict_keys(['comment_text', 'toxic', 'severe_toxic', 'threat', 'obscene', 'insult', 'identity_hate'])
trn[0].comment_text[:3] # ['explanation', 'why', 'the'] 句子被分词

在training set上创建词库(vocabulary),要检测training和TEXT相关的field,将其中的词语都注册进词库。torchtext的Vocab类来管理词库。Vocab在stoi中保存了word到id的映射,而在itos保存了反映射。
可以使用预训练的embedding matrix比如word2vect。

TEXT.build_vocab(trn)
TEXT.vocab.itos # word - id
TEXT.vocab.stoi # id - word
TEXT.vocab.freqs # word频次
TEXT.vocab.UNK # 超出词库表示

4.构造迭代器

在torchvision中通过DataLoaders来处理数据,由于一些原因,在torchtext中我们更名为Iterators。基本的方法是一样的,但是Iterators有一些处理文本的便捷方法。
sort_within_batch为真时,在每个minibatch中进行排序。当使用pack_padded_sequence和PackedSequence对象时是必须的
BucketIterator自动的shuffles和buckets序列,让他们等长。
sort_key不但是 batch 内的排序方式(降序排列),也是通过它,BucketIterator才知道将长度相近的数据放到同一个 batch 内来sample,这样可以最小化每个 batch 需要padding的个数,提高计算效率。在padding的时候是取每个minibatch最长的句子作为padding的依据。这样可以提高padding的效率。

而在test set上,我们不能shuffle数据,因为要进行结果输出,所以使用标准的iterator

from torchtext.data import Iterator, BucketIterator
# 使用BucketIterator
train_iter, val_iter = BucketIterator.splits((trn, vld), batch_sizes=(64, 64),device=-1, # 指明GPU的编号,-1是CPUsort_key=lambda x: len(x.comment_text), # 指明排序的标准sort_within_batch=False,repeat=False
)
test_iter = Iterator(tst, batch_size=64, device=-1, sort=False, sort_within_batch=False, repeat=False)print(train_iter.dataset.examples[7].comment_text)
print(train_iter.dataset.examples[7].toxic)
print(train_iter.dataset.examples[7].severe_toxic)
print(train_iter.dataset.examples[7].threat)
print(train_iter.dataset.examples[7].obscene)
print(train_iter.dataset.examples[7].insult)
print(train_iter.dataset.examples[7].identity_hate)

但问题是标签有多个,我们需要将toxic,severe_toxic等标签整合成Y

class BatchWrapper:def __init__(self, dl, x_var, y_vars):self.dl, self.x_var, self.y_vars = dl, x_var, y_vars # we pass in the list of attributes for xdef __iter__(self):for batch in self.dl:x = getattr(batch, self.x_var) # we assume only one input in this wrapperif self.y_vars is None: # we will concatenate y into a single tensory = torch.cat([getattr(batch, feat).unsqueeze(1) for feat in self.y_vars], dim=1).float()else:y = torch.zeros((1))yield (x, y)def __len__(self):return len(self.dl)train_dl = BatchWrapper(train_iter, "comment_text", ["toxic", "severe_toxic", "obscene", "threat", "insult", "identity_hate"])
valid_dl = BatchWrapper(val_iter, "comment_text", ["toxic", "severe_toxic", "obscene", "threat", "insult", "identity_hate"])
test_dl = BatchWrapper(test_iter, "comment_text", None)import torch
next(train_dl.__iter__())(tensor([[  738, 38575,   738,  ...,  1056,   180, 40301],[    2,   515,   274,  ...,  1056,   222,    14],[19777,  1013,    10,  ...,  1056,     8,     6],...,[    1,     1,     1,  ...,     1,     1,     1],[    1,     1,     1,  ...,     1,     1,     1],[    1,     1,     1,  ...,     1,     1,     1]]), tensor([0.]))

参考:
https://mlexplained.com/2018/02/08/a-comprehensive-tutorial-to-torchtext/
https://blog.csdn.net/qq_40367479/article/details/95354563
https://www.jianshu.com/p/e5adb235399e

A Comprehensive Introduction to Torchtext相关推荐

  1. pyTorch api

    应用 pytorch FC_regression pytorch FC_classification pytorch RNN_regression pytorch LSTM_regression py ...

  2. 《Java: The Complete Reference》等书读书笔记

    春节期间读了下<Java: The Complete Reference>发现这本书写的深入浅出,我想一个问题,书中很多内容我们也知道,但是为什么我们就写不出这样一本书,这么全面,这么系统 ...

  3. 推荐:一本“高颜值”的R语言数据可视化图书(包邮送3本)

    文章留言点赞前3名的朋友,每人送1本<R语言数据化可视化之美增强版>,名单揭晓日期为:本周日 (2020年7月12日晚7点).到时,获奖的朋友可以直接添加微信:meta-genomics, ...

  4. 半折预售:新书-R语言数据可视化之美|ggplot2作者推荐

    我本来想等正式发售的时候,再告诉大家我的新书<R语言数据可视化之美>已经出版,奈何新书还太贵,这几天刚好京东有买100减50的活动,所以想想还是赶紧告诉大家吧,不然平时购买的话,太真有点小 ...

  5. 报名 | 二值化网络 基于素描图的图像检索论坛

    [论坛主题]二值化网络 & 基于素描图的图像检索 [时间]2018年11月04日(周日)下午2:00 -- 4:00 [地点]中国科学院自动化研究所 [报名方式]扫描下方二维码进行报名 [论坛 ...

  6. [Share]10 Free EBooks for Web Designers

    Introduction to Good Usability This guide is especially handy if you haven't done a lot of webdesign ...

  7. 一文读懂区块链上的隐私与监管问题

    区块链--作为公开账本,解决了各方如何建立信任的问题,却也同时带来了一个新的问题:隐私如何得到保护?当用户的所有交易信息都暴露在大众面前,如果这些交易信息被恶意挖掘及利用,将给用户隐私带来严重的威胁. ...

  8. 计算机网络校园网建设设计摘要,计算机网络专业论文校园网建设设计.doc

    计算机网络专业论文校园网建设设计 目录 摘要I 第1章 校园网概述1 第2章 校园网的需求分析与设计方案3 2.1需求分析3 2.2网络层次分析4 2.3总体设计方案5 2.4网络设备选型6 2.5校 ...

  9. 【推荐系统】变分自编码器(VAEs)在推荐系统中的应用

    「本文概览」 今天给大家介绍一篇VAEs用于推荐系统召回侧的文章,论文题目为<Variational Autoencoders for Collaborative Filtering>.V ...

最新文章

  1. 公路病害检测有了“智慧眼”,思谋AI“助力”广东省高速公路
  2. 32位系统和64位系统的选择
  3. curl请求本地域名问题
  4. oracle12c考试内容,12c ocp考试内容
  5. 湖北大学计算机科学与技术怎么样,湖北大学(专业学位)计算机技术考研难吗
  6. Nest入门教程 - 模块
  7. 数据中心的容器操作系统--k8s理解
  8. python工程代码语法_python编码环境安装与基本语法
  9. DFS-分布式文件系统对比
  10. armstrong number in python_Python3 From Zero——{最初的意识:008~初级实例演练}
  11. 计算机操作系统--文件管理
  12. Eplan2.7 安装教程
  13. 编辑器使用方法 1. 下载编辑器 下载 KindEditor 最新版本,下载之后打开 examples/index.html 就可以看到演示。 下载页面: http://www.kindsoft.
  14. java知识竞赛题库_java程序设计题库
  15. 基于node+mysql的微信商城小程序全栈系统(vue后台管理系统+微信小程序+node服务端)
  16. 案例三:小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌。编写一个程序模拟这一个过程:两个整数分别保存在两个变量中,将这两个变量的值互换,并输出互换后的结果。...
  17. Content Provider(二)之 FileProvider 实现应用文件共享
  18. Java Web一维条形码生成工具选择
  19. python打开xls_用Python读取Excel(*.xls)文件——xlrd模块的使用
  20. i3 7100黑苹果_苹果连发三款新品,售价更低!性能更强!| 数码

热门文章

  1. 用C#写的汉语转拼音缩写的例子
  2. r语言 图形一览_R语言实战(第2版):第三章 图形初阶(01)
  3. sql 单引号_三种数据库的 SQL 注入详解
  4. 自学python 编程基础科学计算及数据分析 pdf_自学Python:编程基础、科学计算及数据分析...
  5. Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制
  6. 微课|玩转Python轻松过二级(2.2.4节):位运算符与集合运算符
  7. 技术要点|Python监控学生端电脑屏幕自动识别学习状态
  8. BeautifulSoup解析库select方法实例——获取企业信息
  9. oracle全文检索 分区表,oracle全文检索
  10. 5渲染判断_Vue页面渲染中key的应用实例教程