Код: Выделить всё
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
не уверен, что более целесообразно использовать одну и ту же архитектуру с одним выходом
уровень для всех категорий или архитектура с выходными слоями для конкретных задач, как показано ниже:
Код: Выделить всё
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
Подробнее здесь: https://stackoverflow.com/questions/787 ... categories