| | import gradio as gr |
| | from transformers import pipeline |
| |
|
| | |
| | model_names = [ |
| | "dslim/bert-base-NER", |
| | "dslim/bert-base-NER-uncased", |
| | "dslim/bert-large-NER", |
| | "dslim/distilbert-NER", |
| | ] |
| |
|
| | example_sent = ( |
| | "Nim Chimpsky was a chimpanzee at Columbia University named after Noam Chomsky." |
| | ) |
| |
|
| | |
| | model_info = { |
| | model_name: { |
| | "link": f"https://huggingface.co/{model_name}", |
| | "usage": f"""from transformers import pipeline |
| | ner = pipeline("ner", model="{model_name}", grouped_entities=True) |
| | result = ner("{example_sent}") |
| | print(result)""", |
| | } |
| | for model_name in model_names |
| | } |
| |
|
| | |
| | models = { |
| | model_name: pipeline("ner", model=model_name, grouped_entities=True) |
| | for model_name in model_names |
| | } |
| |
|
| |
|
| | |
| | def display_model_info(model_name): |
| | info = model_info[model_name] |
| | usage_code = info["usage"] |
| | link_button = f'[Open model page for {model_name} ]({info["link"]})' |
| | return usage_code, link_button |
| |
|
| |
|
| | |
| | def analyze_text(text, model_name): |
| | ner = models[model_name] |
| | ner_results = ner(text) |
| | highlighted_text = [] |
| | last_idx = 0 |
| | for entity in ner_results: |
| | start = entity["start"] |
| | end = entity["end"] |
| | label = entity["entity_group"] |
| | |
| | if start > last_idx: |
| | highlighted_text.append((text[last_idx:start], None)) |
| | |
| | highlighted_text.append((text[start:end], label)) |
| | last_idx = end |
| | |
| | if last_idx < len(text): |
| | highlighted_text.append((text[last_idx:], None)) |
| | return highlighted_text |
| |
|
| |
|
| | with gr.Blocks() as demo: |
| | gr.Markdown("# Named Entity Recognition (NER) with BERT Models") |
| |
|
| | |
| | model_selector = gr.Dropdown( |
| | choices=list(model_info.keys()), |
| | value=list(model_info.keys())[0], |
| | label="Select Model", |
| | ) |
| |
|
| | |
| | text_input = gr.Textbox( |
| | label="Enter Text", |
| | lines=5, |
| | value=example_sent, |
| | ) |
| | analyze_button = gr.Button("Run NER Model") |
| | output = gr.HighlightedText(label="NER Result", combine_adjacent=True) |
| |
|
| | |
| | code_output = gr.Code(label="Use this model", visible=True) |
| | link_output = gr.Markdown( |
| | f"[Open model page for {model_selector} ]({model_selector})" |
| | ) |
| | |
| | analyze_button.click( |
| | analyze_text, inputs=[text_input, model_selector], outputs=output |
| | ) |
| |
|
| | |
| | model_selector.change( |
| | display_model_info, inputs=[model_selector], outputs=[code_output, link_output] |
| | ) |
| |
|
| | |
| | demo.load( |
| | fn=display_model_info, |
| | inputs=[model_selector], |
| | outputs=[code_output, link_output], |
| | ) |
| |
|
| | demo.launch() |
| |
|