Я создаю модель классификации текста с несколькими классами, используя Кераса и Берта (HuggingFace), но у меня очень несбалансированный набор данных. Я использовал SMOTE из Sklearn, чтобы сгенерировать дополнительные образцы для классов с депрессией (всего у меня их 45), что отлично работает, когда я использую входные идентификаторы из Bert Tokenizer.
Однако я хотел бы иметь возможность также использовать сглаживание для идентификаторов входных масок, чтобы позволить модели определять, где находятся заполненные значения.
Мой вопрос в том, как я могу использовать сглаживание как для идентификаторов ввода, так и для идентификаторов масок? До сих пор я делал следующее, и модель не жалуется, но я не уверен, соответствуют ли передискретизированные маски строке передискретизированных входных идентификаторов для строки. 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
Это приемлемо? Есть лучший способ сделать это?