具有多个 bert 输入的 SMOTE

2024-01-08

我正在使用 Keras 和 Bert (HuggingFace) 构建多类文本分类模型,但我有一个非常不平衡的数据集。我使用了 Sklearn 中的 SMOTE 来为欠平衡类生成额外的样本(我总共有 45 个),当我使用 Bert Tokenizer 中的输入 id 时,它工作得很好。

但是,我希望能够使用 smote 作为输入掩码 id,以便模型能够确定填充值的位置。

我的问题是如何将 smote 用于输入 id 和掩码 id?到目前为止,我已经完成了以下操作,并且模型没有抱怨,但我不确定重新采样的掩码是否与重新采样的输入 id 行匹配。 Smote 需要两个输入,即输入和标签,因此我使用相同的随机状态复制了该过程,并且只返回了所需的元素:

def smote(input_ids, input_masks, labels):

    smote = SMOTE("not majority", random_state=27)

    input_ids_resampled, labels_resampled = smote.fit_sample(input_ids, labels)
    input_masks_resampled, _ = smote.fit_sample(input_masks, labels)

    return input_ids_resampled, input_masks_resampled, labels_resampled

这是可以接受的吗?有一个更好的方法吗?


我只是想澄清一下,这是将 SMOTE 应用于 input_ ids 的错误方法。您需要将相应的嵌入到CLS中。使用 BERT 获取每条推文的 CLS 令牌,然后对其应用 SMOTE。然后从分类器(任何分类器)传递它。这应该无需微调即可完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多个 bert 输入的 SMOTE 的相关文章