NuZero / app.py
etiennebcp's picture
Update app.py
0fdd915 verified
raw
history blame contribute delete
No virus
9.88 kB
from typing import Dict, Union
from gliner import GLiNER
import gradio as gr
model = GLiNER.from_pretrained("numind/NuZero_token")
examples = [
[
"The Moon is Earth's only natural satellite. It orbits at an average distance of 384,400 km (238,900 mi), about 30 times the diameter of Earth. Over time Earth's gravity has caused tidal locking, causing the same side of the Moon to always face Earth. Because of this, the lunar day and the lunar month are the same length, at 29.5 Earth days. The Moon's gravitational pull – and to a lesser extent, the Sun's – are the main drivers of Earth's tides.",
"celestial body,quantity,physical concept",
0.3,
False
],
[
"Their creation was inspired by the ancient Olympic Games, held in Olympia, Greece from the 8th century BC to the 4th century AD. Baron Pierre de Coubertin founded the International Olympic Committee (IOC) in 1894, leading to the first modern Games in Athens in 1896. The IOC is the governing body of the Olympic Movement, which encompasses all entities and individuals involved in the Olympic Games. The Olympic Charter defines their structure and authority.",
"location,date,person,event",
0.3,
True
],
[
"Cells were discovered by Robert Hooke in 1665, who named them after their resemblance to cells inhabited by Christian monks in a monastery. Cell theory, developed in 1839 by Matthias Jakob Schleiden and Theodor Schwann, states that all organisms are composed of one or more cells, that cells are the fundamental unit of structure and function in all living organisms, and that all cells come from pre-existing cells.",
"biological concept,person,date",
0.3,
True
],
[
"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
],
[
"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.",
"book",
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'] += ' ' + next_entity['word']
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)