NLP学习之:如何使用 torchtext 构建数据

本文详细介绍了如何使用Python和PyTorch库处理文本数据,包括读取CSV数据、数据预处理、构建词汇表、数据集划分、数据向量化以及创建迭代器。通过实例展示了从数据加载到模型训练前的数据准备过程,对于理解深度学习中的文本数据处理具有指导意义。
摘要由CSDN通过智能技术生成

流程图

在这里插入图片描述

代码

  • 数据链接:

链接:https://pan.baidu.com/s/1KwtnpD57pKc5mmIB9l2dBQ?pwd=gm6e 提取码:gm6e


# 读取数据
import pandas as pd
path = "/Users/qinpeinuan/Downloads/cnews_csv/cnews.train.csv"


# 调整数据格式
df = pd.read_csv(path)
df.columns = ['label', 'text','']
df

#删除全空列
df = df.dropna(axis=1, how='all')
df

# 构建名称 - 标签字典,将所有的字符串类型的标签进行替换,替换成数值型
names = list(set(df.label))
dicts = {name: i for i, name in enumerate(names)}
dicts


df['label'] = df.label.replace(dicts)

# 保留前 100 个数据做演示,重新保存成 train.csv 文件
df.iloc[:100,:].to_csv("./train.csv", index=False)

from torchtext.data import Field
import jieba

def cut(x):
    return jieba.lcut(x)


# 构建 Field 对象,csv 文件中有多少列数据就构建多少个 field 对象
text_field = Field(sequential=True
                  , use_vocab=True
                  , tokenize=cut)

# 如果是做分类任务,那么 label 应该先转成离散的数值,如果是做翻译任务
# 那么 label 和 text 一样的处理方式
label_field = Field(sequential=False
                  , use_vocab=False)

# 将 fields 对象组合到一起
fields = [('label',label_field), ('text', text_field)]


from torchtext.data import TabularDataset
# 切分训练和测试数据,这里都用 train.csv 来快速演示
trainset, testset = TabularDataset.splits(path='./'
                     , format='csv'
                     , train='train.csv'
                     , test='train.csv'
                     , fields=fields
                     , skip_header=True)

# 查看切分好的数据集的数据的 text 和 label
# text 应该是分好词的结果,label 是离散的数值
trainset.examples[0].label

trainset.examples[0].text

# 构建词表,label 在分类任务中没有词表
text_field.build_vocab(trainset
                       , max_size=1000
                       , min_freq=0
                       , vectors=None)

# label_field.build_vocab(trainset)

# 展示词表内容
for i in range(len(text_field.vocab)):
    print(text_field.vocab.itos[i])

text_field.vocab.stoi['在']

# 构建迭代器 + 数据向量化
from torchtext.data import BucketIterator

train_iter, veri_iter, test_iter= BucketIterator.splits(datasets=(trainset,valset, testset), batch_size=10)

for idx, batch in enumerate(train_iter):
    print(batch.text)
    


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值