如何解决使用 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
解决方法
我遇到了同样的问题:
这对我有用我猜你需要在阅读 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 举报,一经查实,本站将立刻删除。