File size: 2,837 Bytes
e8574b8
24e3585
e8574b8
 
20fbc9a
e8574b8
 
 
fb7ad84
 
 
18a08c1
e8574b8
 
 
 
5cda7f5
 
 
e8574b8
 
 
 
 
 
 
 
 
 
 
5cda7f5
 
 
e8574b8
 
 
 
ca4db84
e8574b8
 
3b33e19
e8574b8
3b33e19
e8574b8
3b33e19
e8574b8
 
3b33e19
e8574b8
 
 
18a08c1
 
 
 
 
5cda7f5
 
 
 
 
33a63ba
5cda7f5
 
 
18a08c1
 
 
 
 
 
 
 
e8574b8
 
 
 
 
5cda7f5
e8574b8
 
 
 
 
5cda7f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e8574b8
 
18a08c1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from typing import Dict, Union
from gliner import GLiNER
import gradio as gr

model = GLiNER.from_pretrained("kzuri/gliner-bio-finetuned")

examples = [
    [
        "After months of pain, she was finally diagnosed with deep infiltrating endometriosis (DIE).",
        "DISEASE_DISORDER",
        0.5,
        True,
    ],
]


def ner(
    text, labels: str, threshold: float, nested_ner: bool
) -> Dict[str, Union[str, int, float]]:
    labels = labels.split(",")
    return {
        "text": text,
        "entities": [
            {
                "entity": entity["label"],
                "word": entity["text"],
                "start": entity["start"],
                "end": entity["end"],
                "score": 0,
            }
            for entity in model.predict_entities(
                text, labels, flat_ner=not nested_ner, threshold=threshold
            )
        ],
    }


with gr.Blocks(title="GLiNER-medium-v2.1") as demo:
    gr.Markdown(
        """
        # GLiNER bio finetuned model

        Devarsh Patel's assignment submission for Full Stack Developer at Healthy Vignettes. 

        Email me at: pateldevarsh1206@gmail.com
        """
    )
    
    input_text = gr.Textbox(
        value=examples[0][0], label="Text input", placeholder="Enter your text here"
    )
    with gr.Row() as row:
        labels = gr.Textbox(
            value=examples[0][1],
            label="Labels",
            placeholder="Enter your labels here (comma separated)",
            scale=2,
        )
        threshold = gr.Slider(
            0,
            1,
            value=0.3,
            step=0.01,
            label="Threshold",
            info="Lower the threshold to increase how many entities get predicted.",
            scale=1,
        )
        nested_ner = gr.Checkbox(
            value=examples[0][2],
            label="Nested NER",
            info="Allow for nested NER?",
            scale=0,
        )
    output = gr.HighlightedText(label="Predicted Entities")
    submit_btn = gr.Button("Submit")
    examples = gr.Examples(
        examples,
        fn=ner,
        inputs=[input_text, labels, threshold, nested_ner],
        outputs=output,
        cache_examples=True,
    )

    # Submitting
    input_text.submit(
        fn=ner, inputs=[input_text, labels, threshold, nested_ner], outputs=output
    )
    labels.submit(
        fn=ner, inputs=[input_text, labels, threshold, nested_ner], outputs=output
    )
    threshold.release(
        fn=ner, inputs=[input_text, labels, threshold, nested_ner], outputs=output
    )
    submit_btn.click(
        fn=ner, inputs=[input_text, labels, threshold, nested_ner], outputs=output
    )
    nested_ner.change(
        fn=ner, inputs=[input_text, labels, threshold, nested_ner], outputs=output
    )

demo.queue()
demo.launch(debug=True)