gliner_x_small / app.py
ciCic's picture
Update app.py
fdb60e3 verified
from typing import Dict, Union
from gliner import GLiNER
import gradio as gr
model = GLiNER.from_pretrained("knowledgator/gliner-x-small-v0.5")
examples = [
[
"Het bruto binnenlands product (bbp) groeide in 2024 met 0,9 procent. De daling van de emissies door de Nederlandse economie komt vooral doordat elektriciteitsbedrijven minder steenkool en aardgas hebben verbruikt. Ook bij huishoudens en de overige dienstverlening namen de emissies af, vooral door een lager benzine- en dieselgebruik. Deze sectoren gebruikten echter wel meer aardgas. De transportsector stootte ook minder CO2 uit in 2024. Dit kwam met name door een lager gebruik van diesel bij binnenvaart, zeevaart en wegvervoer.",
"Welke sectoren hebben in 2024 minder broeikasgassen uitgestoten en welke sector stootte juist meer uit?",
0.6,
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-X-small-v0.5") as demo:
gr.Markdown(
"""
# GLiNER-X small v0.5
GLiNER is a Named Entity Recognition (NER) model capable of identifying any entity type using a bidirectional transformer encoders (BERT-like). It provides a practical alternative to traditional NER models, which are limited to predefined entities, and Large Language Models (LLMs) that, despite their flexibility, are costly and large for resource-constrained scenarios.
## Links
* Model: https://huggingface.co/knowledgator/gliner-x-small-v0.5
* All GLiNER-X models: https://huggingface.co/collections/knowledgator/gliner-x-684320a3f1220315c651d2f5
* Repository: https://github.com/urchade/GLiNER
"""
)
with gr.Accordion("How to run this model locally", open=False):
gr.Markdown(
"""
## Installation
To use this model, you must install the GLiNER Python library:
```
!pip install gliner -U
```
## Usage
Once you've downloaded the GLiNER library, you can import the GLiNER class. You can then load this model using `GLiNER.from_pretrained` and predict entities with `predict_entities`.
"""
)
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)