使用 BERT 文本分类时,出现 ValueError: Too muchDimensions 'str' 错误

Kaz*_*Sar 15 python text-classification tensor mlp bert-language-model

尝试使用 BERT 模型制作文本情感分类器,但得到ValueError : too many dimensions 'str'

这是列车数据值的 DataFrame;所以它们是train_labels

0   notr
1   notr
2   notr
3   negative
4   notr
... ...
854 positive
855 notr
856 notr
857 notr
858 positive
Run Code Online (Sandbox Code Playgroud)

并且有代码产生错误

train_seq = torch.tensor(tokens_train['input_ids'])
train_mask = torch.tensor(tokens_train['attention_mask'])
train_y = torch.tensor(train_labels.tolist())
Run Code Online (Sandbox Code Playgroud)

At train_y = torch.tensor(train_labels.tolist());出现错误: ValueError: too many dimensions 'str'

你能帮我吗

在此输入图像描述

在此输入图像描述

cod*_*ina 11

原因

问题是您在 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)
Run Code Online (Sandbox Code Playgroud)

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

train_y = torch.tensor(int_labels)
Run Code Online (Sandbox Code Playgroud)

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


小智 11

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

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