一、打开data数据(以csv为例)
#打开并且预处理数据(以一个四类数据一个标签的数据库为例)
def data_read(data_dir):
data = pandas.read_csv(data_dir)
data['content'] = data['content'].fillna('')
data['text'] = data['content'] + data['label1'] + data['label2'] + data['label3'] + data['lable4']
return data
二、补充长度不够的数据,使得数据长度一致
def fill_paddings(data, max_len):
if len(data) <= maxlen:
pad_len = max_len - len(data)
padding = [0 for _ in range(pad_len)]
data = torch.tensor(data + padding)
else:
data = torch.tensor(data[:max_len])
return data
三、使用tokenizer
class DataInput():
def __init__(self, tokenizer, max_len):
self.data = data
self.tokenizer = tokenizer
self.max_len = max_len
def __len__(self,):
return len(self.data)
def __getitem__(self, item):
text = str(self.data['text'][item])
labels = self.data['labels'][item]
labels = torch.tensor(labels, dtype = torch.long)
#手动构建三个要素
tokens = self.tokenizer.tokenize(text)
tokens_ids = self.tokenizer.convert_tokens_to_ids(tokens)
tokens_ids = [101] + tokens_ids + [102]
input_ids = fill_paddings(tokens_ids, self.max_len)
attention_mask = [1 for _ in range(tokens_ids)]
attention_mask = fill_paddings(attention_mask, self.max_len)
token_type_ids = [0 for _ in range(tokens_ids)]
token_type_ids = fill_paddings(token_type_Ids, self.max_Len)
return {
'text' : text
'input_ids' : input_ids
'attention_mask' : attention_mask
'token_typen_ids' : token_type_ids
'labels' : labels
}
注:此处的token_type_ids是不严谨的定义,由于在本博客中,默认每个token_ids都只表示一句话,所以本是用来分割两句话的token_type_ids设置为单一的0值而不是第一句0表示,第二句1表示。
标签:tokenizer,步骤,self,ids,len,tokens,token,数据处理,data From: https://blog.csdn.net/AsukaRanyo/article/details/136918796