Spaces:
Running
on
T4
Running
on
T4
from typing import Dict, Union | |
from gliner import GLiNER | |
import gradio as gr | |
model = GLiNER.from_pretrained("numind/NuZero_token") | |
examples = [ | |
[ | |
"During the quarterly review, the CEO emphasized that the International Conference on 'Climate Change and Sustainable Practices for Emerging Economies in Southeast Asia', scheduled to be held next month in Paris, is a crucial platform for our team to present their groundbreaking research on renewable energy advancements. This conference, a collaboration between the United Nations Environmental Programme and various national governments, is recognized globally for facilitating critical discussions among world leaders, environmental scientists, and policymakers. The event aims to forge new partnerships and launch initiatives like 'Renewable Energy Deployment in Developing Regions: Challenges and Opportunities', a multi-year program seeking to address the unique energy needs of underdeveloped areas.", | |
"event,program", | |
0.3, | |
False, | |
], | |
[ | |
"At the annual technology summit, the keynote address was delivered by a senior member of the Association for Computing Machinery Special Interest Group on Algorithms and Computation Theory, which recently launched an expansive initiative titled 'Quantum Computing and Algorithmic Innovations: Shaping the Future of Technology'. This initiative explores the implications of quantum mechanics on next-generation computing and algorithm design and is part of a broader effort that includes the 'Global Computational Science Advancement Project'. The latter focuses on enhancing computational methodologies across scientific disciplines, aiming to set new benchmarks in computational efficiency and accuracy", | |
"organization,initiative,project", | |
0.3, | |
False, | |
], | |
[ | |
"She achieved her master's degree from the Massachusetts Institute of Technology School of Architecture and Planning for Environmental and Urban Studies, where she actively engaged in the 'Urban Sustainability and Green Design Integration Project'. This project aimed to revolutionize how modern cities integrate sustainable practices into their core planning and development strategies. Alongside this, she participated in the 'Interdisciplinary Approaches to Urban Scale Regeneration', a collaborative effort with international experts aimed at tackling urban decay through innovative ecological and architectural solutions.", | |
"insitution,project", | |
0.3, | |
False, | |
], | |
[ | |
"During the city council's strategic planning session, extensive references were made to the document titled 'Guidelines for Comprehensive Environmental Strategies in Urban Areas for the 21st Century: A Blueprint for Sustainable Urban Development'. This document serves as a foundational text for urban planners and local governments seeking to implement cutting-edge strategies for managing environmental impacts in rapidly growing metropolitan areas. It is complemented by the 'Metropolitan Environmental and Infrastructure Coordination Framework', which outlines specific policies and practices designed to enhance infrastructure resilience and sustainability in urban settings", | |
"document,framework", | |
0.3, | |
False, | |
], | |
[ | |
"While preparing his thesis on the evolution of scientific thought, John delved into numerous sources, one of which was 'The Impact of Early Exploration on Modern Scientific Developments and Their Influence on Contemporary Scientific Thought: A Comprehensive Study of Geographical Discoveries and Their Lasting Impact on Modern Physics, Biology, and Sociopolitical Structures'. He found this text particularly enlightening, not only for its detailed analysis on how geographical discoveries influenced modern physics and biology but also for its exploration into the sociopolitical impacts these discoveries had on the scientific communities of the 17th and 18th centuries. In addition to this monumental work, he referenced 'Global Shifts in Technological Innovation During the Industrial Revolution', a book that examines the intersection of technology and industrial growth, and 'Philosophical Underpinnings of Modern Science', which offers insights into how Enlightenment philosophies molded scientific methods and inquiries.", | |
0.3, | |
False | |
] | |
] | |
def merge_entities(entities): | |
if not entities: | |
return [] | |
merged = [] | |
current = entities[0] | |
for next_entity in entities[1:]: | |
if next_entity['entity'] == current['entity'] and (next_entity['start'] == current['end'] + 1 or next_entity['start'] == current['end']): | |
current['word'] = text[current['start']: next_entity['end']].strip() | |
current['end'] = next_entity['end'] | |
else: | |
merged.append(current) | |
current = next_entity | |
merged.append(current) | |
return merged | |
def ner( | |
text, labels: str, threshold: float, nested_ner: bool | |
) -> Dict[str, Union[str, int, float]]: | |
labels = labels.split(",") | |
r = { | |
"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 | |
) | |
], | |
} | |
r["entities"] = merge_entities(r["entities"]) | |
return r | |
with gr.Blocks(title="GLiNER-medium-v2.1") as demo: | |
gr.Markdown( | |
""" | |
# NuZero | |
""" | |
) | |
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 | |
``` | |
## 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`. | |
""" | |
) | |
gr.Code( | |
''' | |
from gliner import GLiNER | |
model = GLiNER.from_pretrained("numind/NuZero_token") | |
text = """ | |
Cristiano Ronaldo dos Santos Aveiro (Portuguese pronunciation: [kɾiʃˈtjɐnu ʁɔˈnaldu]; born 5 February 1985) is a Portuguese professional footballer who plays as a forward for and captains both Saudi Pro League club Al Nassr and the Portugal national team. Widely regarded as one of the greatest players of all time, Ronaldo has won five Ballon d'Or awards,[note 3] a record three UEFA Men's Player of the Year Awards, and four European Golden Shoes, the most by a European player. He has won 33 trophies in his career, including seven league titles, five UEFA Champions Leagues, the UEFA European Championship and the UEFA Nations League. Ronaldo holds the records for most appearances (183), goals (140) and assists (42) in the Champions League, goals in the European Championship (14), international goals (128) and international appearances (205). He is one of the few players to have made over 1,200 professional career appearances, the most by an outfield player, and has scored over 850 official senior career goals for club and country, making him the top goalscorer of all time. | |
""" | |
labels = ["person", "award", "date", "competitions", "teams"] | |
entities = model.predict_entities(text, labels) | |
for entity in entities: | |
print(entity["text"], "=>", entity["label"]) | |
''', | |
language="python", | |
) | |
gr.Code( | |
""" | |
Cristiano Ronaldo dos Santos Aveiro => person | |
5 February 1985 => date | |
Al Nassr => teams | |
Portugal national team => teams | |
Ballon d'Or => award | |
UEFA Men's Player of the Year Awards => award | |
European Golden Shoes => award | |
UEFA Champions Leagues => competitions | |
UEFA European Championship => competitions | |
UEFA Nations League => competitions | |
Champions League => competitions | |
European Championship => competitions | |
""" | |
) | |
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) |