gpt4 book ai didi

nlp - 如何使用 torchtext 添加功能?

转载 作者:行者123 更新时间:2023-12-05 07:26:47 25 4
gpt4 key购买 nike

torchtext 能够读取包含一些列的文件,每一列对应一个字段。如果我想创建一个新列(我将其用作一项功能)怎么办?例如,假设文件有两列,文本和目标,我想从文本中提取一些信息并生成一个新特征(例如,如果它包含某些词),我可以直接使用 torchtext 还是我需要在之前的文件中做?

谢谢!

最佳答案

这是可以做到的。

def postprocessing(arr,vocab,pad_token):
# required to pad the sequence
max_len = max([len(a) for a in arr])
l = []
for a in arr:
res = max_len - len(a)
if res > 0:
a.extend([[pad_token]*len(a[0])]*res)
l.append(a)
return l

def featurization(text_list):
# creates character level features
# text_list is a list of characters.
features = []
for ch in text_list:
l = []
l.append(1 if ch.isupper() else 0)
l.append(1 if ch in string.digits else 0)
l.append(1 if ch in string.punctuation else 0)
features.append(l)
return features

temp_data = pd.read_csv("../data/processed/data.csv")

下面的步骤对于只获取我们想要处理的那些列是必要的,并且列的顺序很重要

temp_data.loc[:,["text","label"]].to_csv("temp.csv",index=False)

创建文本、特征和目标字段。在这里,我将一个句子标记为字符。

TEXT = torchtext.data.Field(sequential=True, use_vocab=True,
tokenize=lambda x: list(x), include_lengths=True,
batch_first=True)


LABEL_PAD_TOKEN=-1
FEAT = torchtext.data.LabelField(use_vocab=False,batch_first=True,preprocessing=featurization,
pad_token=None,postprocessing=lambda x, _:postprocessing(x,_,LABEL_PAD_TOKEN))

LABELS = torchtext.data.Field(use_vocab=False,pad_token=LABEL_PAD_TOKEN,unk_token=None,
batch_first=True,dtype=torch.int64,tokenize=lambda x: list(x),
preprocessing=lambda x:[eval(i) for i in x])

在 TabularDataset 中,应给出与 temp.csv 列顺序匹配的正确字段顺序。

train_data = torchtext.data.TabularDataset(path="temp.csv",format="csv",skip_header=True,
fields=[(("text","feat"),(TEXT,FEAT)),
("labels",LABELS)])
TEXT.build_vocab(train_data)

train_data,valid_data = train_data.split() # create train val

构建迭代器

   train_iter,valid_iter=torchtext.data.BucketIterator.splits((train_data,valid_data,),batch_size=2,device=device                                                                  ,sort_within_batch=True,sort_key=lambda x:len(x.text))

a = next(iter(train_iter))
a.feat.shape, a.text[0].shape # printing the shape

(torch.Size([2, 36, 3]), torch.Size([2, 36]))

接下来,可以将文本传递给input[batch_size, seq_len]的embedding层这将输出 [batch_size, seq_len, emb_dim]

特征的形状为 [batch_size, seq_len,3] 因为我们有 3 个特征

在给出 [batch_size, seq_len, emb_dim+3] 的最后一个维度上连接这两个并将其传递给 LSTM 或 CNN

关于nlp - 如何使用 torchtext 添加功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54267919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com