微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 BERT 文本分类,ValueError:发生了太多维度“str”错误

如何解决使用 BERT 文本分类,ValueError:发生了太多维度“str”错误

尝试使用 BERT 模型对文本的情感进行分类,但得到 struct ListsView: View { @FetchRequest(entity: listofTasks.entity(),sortDescriptors: [NSSortDescriptor(keyPath: \listofTasks.index,ascending: true)]) private var lists: FetchedResults<listofTasks> @Environment(\.managedobjectContext) private var viewContext var body: some View { Section { ForEach(self.lists,id: \.self) { list in Text("\(list.wrappedTitle)") } .onDelete(perform: deleteList) } } func deleteList(at offsets: IndexSet) { for offset in offsets { let list = lists[offset] self.viewContext.delete(list) } try? viewContext.save() } }

即训练数据值的DataFrame;所以它们是 train_labels

ValueError : too many dimensions 'str'

并且有产生错误代码

0   notr
1   notr
2   notr
3   negative
4   notr
... ...
854 positive
855 notr
856 notr
857 notr
858 positive

train_seq = torch.tensor(tokens_train['input_ids']) train_mask = torch.tensor(tokens_train['attention_mask']) train_y = torch.tensor(train_labels.tolist()) 获取错误At train_y = torch.tensor(train_labels.tolist());

你能帮我吗enter image description here

enter image description here

解决方法

我遇到了同样的问题: 这对我有用我猜你需要在阅读 csv 后在代码的开头执行它: df['labels'] = df['labels'].replace(['negative','notr','positive'],[0,1,2])

然后从这些标签中分离出来进行训练和测试。

,

原因

问题是您在 torch.tensor() 中传递了一个字符串列表 (str),它只接受数值列表(整数、浮点数等)。

解决方案

因此,我建议您在将字符串标签传递给 torch.tensor() 之前将其转换为整数值。

实施

以下代码可能对您有所帮助

# a temporary list to store the string labels
temp_list = train_labels.tolist()

# dictionary that maps integer to its string value 
label_dict = {}

# list to store integer labels 
int_labels = []

for i in range(len(temp_list)):
    label_dict[i] = temp_list[i]
    int_labels.append(i)

现在将此 int_labels 传递给 torch.tensor 并将其用作标签。

train_y = torch.tensor(int_labels)

并且每当您想查看任何整数的相应字符串标签时,只需使用 label_dict 字典。

,

谢谢,确实转换成整数了,但是分类有问题;

Apple=df1[df1.col1.str.contains('apple',case=False)]

Frame 有那个数据,在转换为 int 之后,

0
0   positive
1   negative
2   positive
3   notr
4   positive
... ...
4002    notr
4003    positive
4004    positive
4005    notr
4006    negative

它变成这样,我需要的是所有正数,中性和负数表示为 0 表示 neg-1 表示中性 - 2 表示 pos

,

假设您使用的是拥抱脸,

你需要使用?数据集

python
from datasets import ClassLabel

c2l = ClassLabel(num_classes=2,names=['spam','ham'])

labels = ["spam","ham","ham"]

[c2l.str2int(label) for label in labels ]
# [0,1]

更多参考: https://discuss.huggingface.co/t/converting-string-label-to-int/2816

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。