import gradio as gr import torch from transformers import AutoTokenizer, BertForSequenceClassification, AutoModel from torch import nn import re def paragraph_leveling(text): model_name = "./trained_model/fine_tunning_encoder_v2" model = AutoModel.from_pretrained(model_name) tokenizer = AutoTokenizer.from_pretrained('zzxslp/RadBERT-RoBERTa-4m') class MLP(nn.Module): def __init__(self, target_size=3, input_size=768): super(MLP, self).__init__() self.num_classes = target_size self.input_size = input_size self.fc1 = nn.Linear(input_size, target_size) def forward(self, x): out = self.fc1(x) return out classifier = MLP(target_size=3, input_size=768) classifier.load_state_dict(torch.load('./trained_model/fine_tunning_classifier', map_location=torch.device('cpu'))) classifier.eval() output_list = [] text_list = text.split(".") result = [] output_list.append(("\n", None)) for idx_sentence in text_list: train_encoding = tokenizer( idx_sentence, return_tensors='pt', padding='max_length', truncation=True, max_length=120) output = model(**train_encoding) output = classifier(output[1]) output = output[0] if output.argmax(-1) == 0: output_list.append((idx_sentence, 'abnormal')) result.append(0) elif output.argmax(-1) == 1: output_list.append((idx_sentence, 'normal')) result.append(1) else: output_list.append((idx_sentence, 'uncertain')) result.append(2) output_list.append(('\n', None)) if 0 in result: output_list.append(('FINAL LABEL: ', None)) output_list.append(('ABNORMAL', 'abnormal')) else: output_list.append(('FINAL LABEL: ', None)) output_list.append(('NORMAL', 'normal')) return output_list demo = gr.Interface( paragraph_leveling, [ gr.Textbox( label="Medical Report", info="You may put radiology medical report. Each sentence should be seperate with period mark.", lines=20, value=" ", ), ], gr.HighlightedText( label="labeling", show_legend = True, show_label = True, color_map={"abnormal": "violet", "normal": "lightgreen", "uncertain": "lightgray"}), theme=gr.themes.Base() ) if __name__ == "__main__": demo.launch()