pytorch对text数据的预处理

pytorch对text数据的预处理

我们需要把文本数据转化为向量从而可以被神经网络处理。在被喂给神经网络之前,我们需要对text文本数据进行预处理。

关于这一块的预处理,其实有一个很高度抽象化的接口torchtext可以很高效的解决问题,但是有些时候不清楚里面怎么运作的心理总是没谱,所以我一般在写代码的时候都是使用人工自己处理代码。

这个人工手动处理流程代码其实各式各样,我大概是写两个版本,之后如果看到不错的,可能还会整理,比如如何处理大数据,不过核心思想是一样的。

大致流程是这样的:

首先:对原始数据(一般是训练数据)进行预处理,进行分词,繁体字转化,半角符号转化

随后:记录各个词汇的词频,过滤低词频词汇,简历Word2index的映射表保存起来,需要注意pad和unk符号

随后:把数据(训练/测试/dev,使用参数进行控制)转化为对应的index,按照最大长度进行补全,并转化为tensor

其次:制造自己的数据集类,改写关键部位,一般是get_item这里,以便被dataloder处理。

转自---pytorch对text数据的预处理-综述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch中,可以使用`torchtext`库来进行数据预处理。下面是一个基本的数据预处理流程: 1. 导入`torchtext`库和必要的模块: ```python import torchtext from torchtext.vocab import Vectors, GloVe import torch import pandas as pd ``` 2. 定义数据集的字段: ```python text_field = torchtext.data.Field(sequential=True, use_vocab=True, tokenize=lambda x: x.split(), lower=True) label_field = torchtext.data.Field(sequential=False, use_vocab=False) ``` 其中,`text_field`表示输入文本的字段,`label_field`表示标签的字段。 3. 读取数据集并进行预处理: ```python train_data, test_data = torchtext.data.TabularDataset.splits( path='.', train='train.csv', test='test.csv', format='csv', fields=[('text', text_field), ('label', label_field)]) text_field.build_vocab(train_data, vectors=GloVe(name='6B', dim=300)) ``` 其中,`TabularDataset`表示读取csv文件的数据集类,`train`和`test`参数分别指定训练集和测试集的文件名,`fields`参数指定每列的字段名和对应的`Field`对象。`build_vocab`方法用于构建词汇表,`vectors`参数指定词向量的来源,这里使用的是GloVe预训练的词向量。 4. 定义迭代器: ```python train_iter, test_iter = torchtext.data.Iterator.splits( (train_data, test_data), sort_key=lambda x: len(x.text), batch_sizes=(32, 32)) ``` 其中,`Iterator`类用于生成迭代器,`sort_key`参数指定按输入文本的长度排序,`batch_sizes`参数指定批次大小。 5. 将文本中的英文字母转化为小写: ```python text_field = torchtext.data.Field(sequential=True, use_vocab=True, tokenize=lambda x: x.split(), lower=True) ``` 其中,`lower=True`表示将所有英文字母转化为小写。 6. 将特征中含有英文字母的列忽略: ```python train_data, test_data = torchtext.data.TabularDataset.splits( path='.', train='train.csv', test='test.csv', format='csv', fields=[('text', None), ('label', label_field)]) ``` 其中,`None`表示忽略该列。 完整代码如下: ```python import torchtext from torchtext.vocab import Vectors, GloVe import torch import pandas as pd text_field = torchtext.data.Field(sequential=True, use_vocab=True, tokenize=lambda x: x.split(), lower=True) label_field = torchtext.data.Field(sequential=False, use_vocab=False) train_data, test_data = torchtext.data.TabularDataset.splits( path='.', train='train.csv', test='test.csv', format='csv', fields=[('text', None), ('label', label_field)]) train_iter, test_iter = torchtext.data.Iterator.splits( (train_data, test_data), sort_key=lambda x: len(x.text), batch_sizes=(32, 32)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值