如何利用torchtext读取json文件并生成batch

  • 设置Field
  • 使用torchtext.data.Tabulardataset.splits读取文件
  • 构建vocab表
  • 使用torchtext.data.Iterator.splits生成batch
  • 附录
    • 全部code及输出结果
    • Field参数表
    • Iterator参数表

设置Field

首先加载torchtext

from torchtext import data

设置Field,对输入文本数据的格式进行"预设置"

question = data.Field(sequential=True, fix_length=20, pad_token='0')
label    = data.Field(sequential=False, use_vocab=False)
sequential=True tokenizer fix_length pad_first=True tensor_type lower
是否为sequences 分词器 文本长度 是否从左补全 Tensor type 是否令英文字符为小写

question为例,设置文本长度为20,超过20删除,不足20则使用pad_token补全。sequential的含义为输入文本是否是序列文本,若为True则是序列文本,需要配合tokenize(默认使用splits,也可以用Spacy)进行分词,若为False则输入已经是切分好的文本或不需要进行分词。如果处理的是中文文本,也可以自定义tokenizer对中文进行切分:

import jiebadef chinese_tokenizer(text):return [tok for tok in jieba.lcut(text)]question = data.Field(sequential=True, tokenize=chinese_tokenizer, fix_length=20)

使用torchtext.data.Tabulardataset.splits读取文件

同时读取训练集、验证集与测试集,path为路径,trainvalidationtest为文件名。

splits()的作用为 Create train-test(-valid?) splits from the instance’s examples, and return Datasets for train, validation, and test splits in that order, if the splits are provided.

train, val, test = data.TabularDataset.splits(path = './',train = 'train.json',validation = 'val.json',test = 'test.json',format = 'json',fields = {'question': ('question',question),'label': ('label', label)})

测试数据是否正确读入(此处使用jieba中文分词器)

for i in range(0, len(val)):print(vars(val[i])

打印结果示例为

{'question': ['世界', '上', '为什么', '有', '好人', '和', '坏人'], 'label': 'generate'}
{'question': ['为什么', '有', '坏人', '有', '好人', '呀'], 'label': 'generate'}

构建vocab表

cache = '.vector_cache
if not os.path.exists(cache):os.mkdir(cache)
vectors = Vectors(name=configs.embedding_path, cache = cache)question.build_vocab(train, val, test, min_freq=5, vectors=vectors)

从预训练的 vectors 中,将当前 corpus 词汇表的词向量抽取出来,构成当前 corpus 的 Vocab(词汇表)
.build_vocab用以构建词汇表,将分词结果转化为整数(.vocab.vectors是与此词汇表相关联的词向量)此外,torchtext也提供了一些预训练好的词向量。max_size设置词汇表最大个数,min_freq设置词汇最低出现频率的阈值。

使用torchtext.data.Iterator.splits生成batch

train_iter = data.Iterator(dataset=train, batch_size=256, shuffle=True,  sort_within_batch=False, repeat=False, device=configs.device)
val_iter = data.Iterator(dataset=val, batch_size=256, shuffle=False,  sort=False, repeat=False, device=configs.device)
test_iter = data.Iterator(dataset=test, batch_size=256, shuffle=False, sort=False, repeat=False, device=configs.device)
dataset batch_size batch_size_fn sort_key train repeat shuffle sort sort_within_batch
加载的数据集 Batch 大小 产生动态的batch_size的函数 排序的key 是否为训练集 是否在不同epoch中重复迭代 是否打乱数据 是否对数据进行排序 batch内部是否排序

附录

全部code及输出结果

import codecs
import jieba
import os
from config import config
from torchtext import data, datasets
from torchtext.vocab import Vectorsdef chinese_tokenizer(text):return [tok for tok in jieba.lcut(text)]def load_data(configs):TEXT = data.Field(sequential=True, tokenize = chinese_tokenizer, fix_length=20)LABEL = data.Field(sequential=False, use_vocab=False)train, val, test = data.TabularDataset.splits(path = configs.file_path,train = configs.train,validation = configs.val,test = configs.test,format = 'json',fields = {'question': ('question', TEXT),'label': ('label', LABEL)})#    for i in range(0, len(val)):
#        print(vars(val[i])) print('Read {} success, {} texts in total.'.format(configs.train, len(train)))print('Read {} success, {} texts in total.'.format(configs.val, len(val)))print('Read {} success, {} texts in total.\n'.format(configs.test, len(test)))cache = '.vector_cache'if not os.path.exists(cache):os.mkdir(cache) vectors = Vectors(name=configs.embedding_path, cache = cache)print('load word2vec vectors from {}.'.format(configs.embedding_path))TEXT.build_vocab(train, val, test, min_freq=5, vectors=vectors)train_iter = data.Iterator(dataset=train, batch_size=configs.batch_size, shuffle=True,sort_within_batch=False, repeat=False, device=configs.device)val_iter = data.Iterator(dataset=val, batch_size=configs.batch_size, shuffle=False, sort=False, repeat=False, device=configs.device)test_iter = data.Iterator(dataset=test, batch_size=configs.batch_size, shuffle=False,sort=False, repeat=False, device=configs.device)return train_iter, val_iter, test_iter, len(TEXT.vocab), TEXT.vocab.vectors

Field参数表

Iterator参数表

[torchtext]如何利用torchtext读取json文件并生成batch相关推荐

  1. netcore读取json文件_.net core读取json格式的配置文件

    在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用j ...

  2. R读取json文件并转化为dataframe

    R读取json文件并转化为dataframe 目录 R读取json文件并转化为dataframe R读取json文件 把json转为dataframe

  3. cocos2d-x之读取json文件

    cocos2d-x之读取json文件 在resource文件夹下,添加data.json文件 新建->Other->empty->open 就新建一个json文件了, data.js ...

  4. python读取json配置文件_Python简单读取json文件功能示例

    本文实例讲述了Python简单读取json文件功能.分享给大家供大家参考,具体如下: read_json.json: { "rule":{ "namespace" ...

  5. java spark 读取json_apache-spark - 与aws-java-sdk链接时,在读取json文件时发生Spark崩溃 - 堆栈内存溢出...

    让config.json成为一个小的json文件: { "toto": 1 } 我做了一个简单的代码,用sc.textFile读取json文件(因为文件可以在S3,本地或HDFS上 ...

  6. python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用

    注:本文所指的YUV均为YUV420中的I420格式(最常见的一种),其他格式不能用以下的代码. 位深为8bit时,每个像素占用1字节,对应文件指针的fp.read(1): 位深为10bit时,每个像 ...

  7. qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码

    提要 程序编号后自己模拟的数据程序在生成和解析json时都正常,但是换了一组数据,生成的json文件中部分中文乱码,且出现json文件的格式被混乱的现象. 效果 上述出现的不正确的json文件,如下: ...

  8. Python 读取json文件

    创建json文件: { "fontFamily": "微软雅黑", "fontSize": 12, "BaseSettings&q ...

  9. Python常用小技巧(五)——批量读取json文件

    Python常用小技巧(五)--批量读取json文件 前言:其实Python能够批量读取很多文件,这里,本人以json文件为例(json是标注图片时生成的文件,记录有标注的坐标和标签,友情推荐标注图片 ...

最新文章

  1. [UGUI]圆形Image
  2. 罗辑思维首席架构师:Go微服务改造实践
  3. unicode解码php,PHP解码unicode编码的中文字符
  4. Java学习笔记-对IoC(Inversion of Control)的基本认识
  5. 如何查看/统计当前AD域控制器的活动用户
  6. Paros工具使用操作手册
  7. 进程间能否传递指针?
  8. Ubuntu的默认root密码是多少,修改root密码
  9. python3源代码分析_分析一点python源代码
  10. Hadoop入门进阶步步高(五)-搭建Hadoop集群
  11. pyqt:使用qrc文件配置图片资源,生成py文件
  12. C/C++ 混合编译 C++中的extern “C“
  13. Skype for Business Server与Microsoft Teams的长期共存模式
  14. 刚刚!腾讯荣升Linux基金会白金会员
  15. 最新30个优秀的网站设计作品欣赏
  16. Scrum立会报告+燃尽图(Final阶段第七次)
  17. Stata基础自学——数据查看
  18. 训练集、验证集以及测试集的区别
  19. 最简单的基于FFmpeg的解码器
  20. opencv读取图像的函数

热门文章

  1. 大型网站-开发项目团队组成
  2. i5 12540HX怎么样 相当于什么水平级别
  3. javascript网页设计大作业: HTML期末学生大作业 基于HTML+CSS+JavaScript通用的后台管理系统ui框架模板
  4. 《深入浅出 node.js 笔记》 - part3
  5. C++——放苹果(动态规划)
  6. Python 实现 YYS 自动“困难 28”工具
  7. sqli靶场21-40关
  8. CPU Designer
  9. solomn数据集的分布情况简介
  10. 2022-12-22 linux /proc/version 获取版本号的实现流程,添加一个获取固件版本号的接口