使用ktrain结合Pandas DataFrame运行BERT模型时遇报错求助
问题
尝试使用ktrain微调BERT模型,用train_df这个Pandas DataFrame存储数据,执行了拆分数据的代码:
x_train, x_val, y_train, y_val = train_test_split(train_df['text'], train_df['target'], shuffle=True, test_size = 0.2, random_state=random_seed, stratify=train_df['target'])
接着用texts_from_array函数转换BERT特征时触发ValueError: x_train must be a list or NumPy array,执行的代码如下:
(x_train_bert, y_train_bert), (x_val_bert, y_val_bert), preproc = text.texts_from_array(x_train=x_train, y_train=y_train, x_test = x_val, y_test=y_val, class_names= ["0", "1"], preprocess_mode='bert', lang = 'en', maxlen=65, max_features=35000)
请问遗漏了什么?
解决方案
问题出在train_test_split返回的x_train、x_val、y_train、y_val是Pandas Series对象,而texts_from_array要求输入必须是列表或NumPy数组。
解决方法很简单,把这些Series转换成列表或NumPy数组即可:
- 转换成列表:调用
.tolist()方法 - 转换成NumPy数组:使用
.values属性或.to_numpy()方法
修改后的代码示例(转成列表)
(x_train_bert, y_train_bert), (x_val_bert, y_val_bert), preproc = text.texts_from_array( x_train=x_train.tolist(), y_train=y_train.tolist(), x_test=x_val.tolist(), y_test=y_val.tolist(), class_names=["0", "1"], preprocess_mode='bert', lang='en', maxlen=65, max_features=35000 )
修改后的代码示例(转成NumPy数组)
(x_train_bert, y_train_bert), (x_val_bert, y_val_bert), preproc = text.texts_from_array( x_train=x_train.values, y_train=y_train.values, x_test=x_val.values, y_test=y_val.values, class_names=["0", "1"], preprocess_mode='bert', lang='en', maxlen=65, max_features=35000 )
内容的提问来源于stack exchange,提问作者ledbug
相关产品推荐
相关产品推荐

