Многозадачный Берт для многозначной классификации 5 категорийPython

Программы на Python
Anonymous
Многозадачный Берт для многозначной классификации 5 категорий

Сообщение Anonymous »

Я создал и настроил 5 моделей на основе BioClinicalBERT (тонкая настройка bert) для прогнозирования меток для медицинских записей для следующих категорий:

Код: Выделить всё

specialties = ["aud","den","oph","oto","psy","tbi"]

clinical_summaries = ["consultation", "hospital_discharge", "operative"]

diagnostics = ["imaging", "lab", "vision", "audio", "psychological", "misc"]

organs = ["abdominal_inguinal_femoral_hernias", "ankle", "artery_and_vein", "back", "bone", "breast", "central_nervous_system", "cranial_nerve", "elbow_and_forearm", "endocrine", "esophageal", "foot", "hand_and_finger", "heart", "hip_and_thigh", "kidney", "knee_and_lower_leg", "male_repro", "muscles", "neck", "nose_and_sinus",  "osteomyelitis", "peripheral_nerves", "rectum_and_anus", "shoulder", "skin", "stomach_and_duodenal", "thyroid_and_parathyroid", "urinary_tract", "wrist"]

diseases = ["amputations", "amyotrophic_lateral_sclerosis", "chronic_fatigue","cold_injury", "diabetes_mellitus", "diabetic_peripheral_neuropathy", "fibromyalgia", "gynecological",  "hairy_cell_leukemia", "headaches", "hemic_and_lymphatic_leukemia", "hepatitis_cirrhosis_and_liver", "hiv", "hypertension", "infectious_diseases", "intestines_nonsurgical", "intestines_surgical", "loss_smell_taste", "multiple_sclerosis", "narcolepsy", "nondegenerative_arthritis", "nutritional_deficiencies", "parkinsons", "peritoneal_adhesions", "persian_gulf_afghanistan_infections", "prostate_cancer", "respiratory", "scars", "seizure_disorders_epilepsy", "sleep_apnea", "systemic_lupus_erythematosus", "tuberculosis"].
Точно настроенные модели были построены со следующей архитектурой:

Код: Выделить всё

# Define the model class
class BioClinicalBERTClass(torch.nn.Module):
def __init__(self, num_labels):
super(BioClinicalBERTClass, self).__init__()
self.bert_model = BertForSequenceClassification.from_pretrained("emilyalsentzer/Bio_ClinicalBERT", num_labels=num_labels)

def forward(self, input_ids, attention_mask, token_type_ids):
output = self.bert_model.bert(input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids)
pooled_output = output.pooler_output
logits = self.bert_model.classifier(pooled_output)
return logits
Сейчас я работаю над созданием многозадачной модели, объединяющей 5 точно настроенных моделей,
не уверен, что более целесообразно использовать одну и ту же архитектуру с одним выходом
уровень для всех категорий или архитектура с выходными слоями для конкретных задач, как показано ниже:

Код: Выделить всё

class MultiTaskModel(torch.nn.Module):
def __init__(self, num_specialties, num_clinical_summaries, num_diagnostics, num_organs, num_diseases):
super(MultiTaskModel, self).__init__()
self.shared_base = AutoModel.from_pretrained("emilyalsentzer/Bio_ClinicalBERT")

# Task-specific output layers
self.specialties_output = torch.nn.Linear(self.shared_base.config.hidden_size, num_specialties)
self.clinical_summaries_output = torch.nn.Linear(self.shared_base.config.hidden_size, num_clinical_summaries)
self.diagnostics_output = torch.nn.Linear(self.shared_base.config.hidden_size, num_diagnostics)
self.organs_output = torch.nn.Linear(self.shared_base.config.hidden_size, num_organs)
self.diseases_output = torch.nn.Linear(self.shared_base.config.hidden_size, num_diseases)

def forward(self, input_ids, attention_mask, token_type_ids):
shared_output = self.shared_base(input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids)
pooled_output = shared_output.pooler_output

specialties_logits = self.specialties_output(pooled_output)
clinical_summaries_logits = self.clinical_summaries_output(pooled_output)
diagnostics_logits = self.diagnostics_output(pooled_output)
organs_logits = self.organs_output(pooled_output)
diseases_logits = self.diseases_output(pooled_output)

return specialties_logits, clinical_summaries_logits, diagnostics_logits, organs_logits, diseases_logits
Мне нужны рекомендации по удобной архитектуре для выполнения классификации по нескольким меткам для всех категорий с помощью одной модели, используя знания по точной настройке 5 обученных моделей. Пожалуйста, предоставьте подробное объяснение их весов и смещений, загрузки и использования, чтобы требовалась минимальная тонкая настройка, позволяющая понять корреляцию между категориями. Должны ли модели вносить равный вклад в новую модель или их влияние на параметры должно основываться на количестве прогнозируемых меток категорий?

Подробнее здесь: https://stackoverflow.com/questions/787 ... categories

Вернуться в «Python»