流程图
代码
- 数据链接:
链接: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)