NLP data处理


主要总结一下,NLP数据的处理过程
NLP数据的处理主要有分词,然后记录每个词出现的次数,每个词对应的id,word2id,id2word。python有很多库如from collections import Counter,scipy,jieba等配合使用

pytorch dataset

file = open('train.txt','r')

i = 0
data,tag,sentence_lst = [],[],[]
word_to_idx,idx_to_word = {
   
   },{
   
   }


for line in file:
    lst=line.strip().split('|||')
    if len(lst)!=2: #确保上一步拆分成句子和类别的元素才进行下面的操作,保证成功
            continue
    sentence,label= lst[0],lst[1] #提取出句子和类别
    words=sentence.split(' ')#在中文中,这一步可以使用结巴分词操作
    for word in words:
        if word not in word_to_idx:
            word_to_idx[word] = i
            idx_to_word[i] = word
            i=i+1
        sentence_lst.append(word_to_idx[word])
        if (len(sentence_lst)>=50):
            break
    for j in range(50-len(sentence_lst)):
        sentence_lst.append(0) #这之上的操作完成了两件事情,一个是构建词汇表,二就是将句子向量化
    data.append(sentence_lst)
    tag.append([int(label)])
    sentence_lst = []


#将list转化为数组
data=np.array(data)
tag=np.array(tag)  #这个步骤很重要,就是把我们生成的list转化为数组的形式

import torch
from torch.utils.data import Dataset, DataLoader
import numpy as np
 
Data =data
Label = tag
#创建子类
class subDataset(Dataset):
    #初始化,定义数据内容和标签
    def __init__(self, Data, Label):
        self.Data = Data
        self.Label = Label
    #返回数据集大小
    def __len__(self):
        return len(self.Data)
    #得到数据内容和标签
    def __getitem__(self, index):
        data = torch.Tensor(self.Data[index])
        label = torch.IntTensor(self.Label[index])
        return data, label


dataset = subDataset(Data, Label)
print(dataset)
print('dataset大小为:', dataset.__len__())
print(dataset.__getitem__(0))
print(dataset[0])
dataloader =DataLoader(dataset,batch_size= 100, shuffle = False, num_workers= 4)
for i, item in enumerate(dataloader):
    data, label = item
    data=data.long()
    label=label.squeeze(1).long()
    outputs = model(sentence.long())
    loss = criterion(outputs, label.squeeze(1).long())

torchtext

torchtext包含以下组件:
Field :主要包含以下数据预处理的配置信息,比如指定分词方法,是否转成小写,起始字符,结束字符,补全字符以及词典等等
Dataset :继承自pytorch的Dataset,用于加载数据,提供了TabularDataset可以指点路径,格式,Field信息就可以方便的完成数据加载。同时torchtext还提供预先构建的常用数据集的Dataset对象,可以直接加载使用,splits方法可以同时加载训练集,验证集和测试集。
Iterator : 主要是数据输出的模型的迭代器,可以支持batch定制
Field包含以下的参数:
sequential: 是否把数据表示成序列,如果是False, 不能使用分词 默认值: True.
use_vocab: 是否使用词典对象. 如果是False 数据的类型必须已经是数值类型. 默认值: True.
init_token: 每一条数据的起始字符 默认值: None.
eos_token: 每条数据的结尾字符 默认值: None.
fix_length: 修改每条数据的长度为该值,不够的用pad_token补全. 默认值: None.
tensor_type: 把数据转换成的tensor类型 默认值: torch.LongTensor.
preprocessing:在分词之后和数值化之前使用的管道 默认值: None.
postprocessing: 数值化之后和转化成tensor之前使用的管道默认值: None.
lower: 是否把数据转化为小写 默认值: False.
tokenize: 分词函数. 默认值: str.split.
include_lengths: 是否返回一个已经补全的最小batch的元组和和一个包含每条数据长度的列表 . 默认值: False.
batch_first: Whether to produce tensors with the batch dimension first. 默认值: False.
pad_token: 用于补全的字符. 默认值: “”.
unk_token: 不存在词典里的字符. 默认值: “”.
pad_first: 是否补全第一个字符. 默认值: False.
重要的几个方法:
pad(minibatch): 在一个batch对齐每条数据
build_vocab(): 建立词典
numericalize(): 把文本数据数值化,返回tensor

import torchtext
from torchtext import data
from torchtext.vocab import Vectors
from torch.nn import init
from tqdm import tqdm
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchtext.data import Iterator, BucketIterator
pd.read_csv("data/train_one_label.csv").head(2)
tokenize = lambda x: x.split()
TEXT =</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小涵涵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值