Spaces:
Runtime error
Runtime error
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
from transformers import pipeline, AutoModelForTokenClassification, AutoTokenizer, DebertaV2Tokenizer, DebertaV2Model
|
3 |
+
import sentencepiece
|
4 |
+
import streamlit as st
|
5 |
+
import pandas as pd
|
6 |
+
import spacy
|
7 |
+
|
8 |
+
example_list = [
|
9 |
+
"Mustafa Kemal Atatürk 1919 yılında Samsun'a çıktı.",
|
10 |
+
"""Dünya çapında 40 milyondan fazla insana bulaşan ve 1.1 milyondan fazla insanın ölümüne sebep olan corona virüsüne karşı Pfizer ile BioNTech'in geliştirdiği aşının ilk görüntüleri ortaya çıktı. Aşının fabrikadaki ilk görüntülerini değerlendiren Pfizer'ın Birleşik Krallık CEO'su, "Üretim bandında aşıyı görmek beni neşelendirdi" dedi.
|
11 |
+
ABD merkezli çokuluslu ilaç şirketi Pfizer ile Türk bilim insanlarının kurduğu BioNTech’in geliştirdiği corona virüsü aşısında sona gelindi… Pfizer, paylaştığı video ile bütün dünyayı heyecanlandıran gelişmeyi duyurdu.
|
12 |
+
Şirket, Belçika’daki Puurs’ta geliştirilen Covid-19 aşılarının seri üretim bandındaki üretim aşamasını uluslararası kamuoyu ile paylaştı. Almanya’nın Mainz kentinde Türk profesör Uğur Şahin ile eşi Özlem Türeci’nin kurduğu ve yönettiği biyoteknoloji şirketi BioNTech ile aşı sürecini sürdüren Pfizer’ın küçük şişelerde binlerce corona virüsü aşısı üretmeye başladığı belirtildi.
|
13 |
+
Pfizer, aşının güvenli ve etkili olduğunun klinik olarak da kanıtlanması ve resmi mercilerden de onay alınması durumunda üretilen aşının dağıtılacağını duyurdu."""
|
14 |
+
]
|
15 |
+
|
16 |
+
st.set_page_config(layout="wide")
|
17 |
+
|
18 |
+
st.title("Demo for Turkish NER Models")
|
19 |
+
|
20 |
+
model_list = ['akdeniz27/bert-base-turkish-cased-ner',
|
21 |
+
'akdeniz27/convbert-base-turkish-cased-ner',
|
22 |
+
'akdeniz27/xlm-roberta-base-turkish-ner',
|
23 |
+
'xlm-roberta-large-finetuned-conll03-english']
|
24 |
+
|
25 |
+
st.sidebar.header("Select NER Model")
|
26 |
+
model_checkpoint = st.sidebar.radio("", model_list)
|
27 |
+
|
28 |
+
st.sidebar.write("For details of models: 'https://huggingface.co/akdeniz27/")
|
29 |
+
st.sidebar.write("")
|
30 |
+
|
31 |
+
xlm_agg_strategy_info = "'aggregation_strategy' can be selected as 'simple' or 'none' for 'xlm-roberta' because of the RoBERTa model's tokenization approach."
|
32 |
+
|
33 |
+
st.sidebar.header("Select Aggregation Strategy Type")
|
34 |
+
if model_checkpoint == "akdeniz27/xlm-roberta-base-turkish-ner":
|
35 |
+
aggregation = st.sidebar.radio("", ('simple', 'none'))
|
36 |
+
st.sidebar.write(xlm_agg_strategy_info)
|
37 |
+
elif model_checkpoint == "xlm-roberta-large-finetuned-conll03-english":
|
38 |
+
aggregation = st.sidebar.radio("", ('simple', 'none'))
|
39 |
+
st.sidebar.write(xlm_agg_strategy_info)
|
40 |
+
st.sidebar.write("")
|
41 |
+
st.sidebar.write("This English NER model is included just to show the zero-shot transfer learning capability of XLM-Roberta.")
|
42 |
+
else:
|
43 |
+
aggregation = st.sidebar.radio("", ('first', 'simple', 'average', 'max', 'none'))
|
44 |
+
|
45 |
+
st.sidebar.write("Please refer 'https://huggingface.co/transformers/_modules/transformers/pipelines/token_classification.html' for entity grouping with aggregation_strategy parameter.")
|
46 |
+
|
47 |
+
st.subheader("Select Text Input Method")
|
48 |
+
input_method = st.radio("", ('Select from Examples', 'Write or Paste New Text'))
|
49 |
+
if input_method == 'Select from Examples':
|
50 |
+
selected_text = st.selectbox('Select Text from List', example_list, index=0, key=1)
|
51 |
+
st.subheader("Text to Run")
|
52 |
+
input_text = st.text_area("Selected Text", selected_text, height=128, max_chars=None, key=2)
|
53 |
+
elif input_method == "Write or Paste New Text":
|
54 |
+
st.subheader("Text to Run")
|
55 |
+
input_text = st.text_area('Write or Paste Text Below', value="", height=128, max_chars=None, key=2)
|
56 |
+
|
57 |
+
@st.cache(allow_output_mutation=True)
|
58 |
+
def setModel(model_checkpoint, aggregation):
|
59 |
+
model = AutoModelForTokenClassification.from_pretrained(model_checkpoint)
|
60 |
+
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
|
61 |
+
return pipeline('ner', model=model, tokenizer=tokenizer, aggregation_strategy=aggregation)
|
62 |
+
|
63 |
+
@st.cache(allow_output_mutation=True)
|
64 |
+
def get_html(html: str):
|
65 |
+
WRAPPER = """<div style="overflow-x: auto; border: 1px solid #e6e9ef; border-radius: 0.25rem; padding: 1rem; margin-bottom: 2.5rem">{}</div>"""
|
66 |
+
html = html.replace("\n", " ")
|
67 |
+
return WRAPPER.format(html)
|
68 |
+
|
69 |
+
Run_Button = st.button("Run", key=None)
|
70 |
+
if Run_Button == True:
|
71 |
+
|
72 |
+
ner_pipeline = setModel(model_checkpoint, aggregation)
|
73 |
+
output = ner_pipeline(input_text)
|
74 |
+
|
75 |
+
df = pd.DataFrame.from_dict(output)
|
76 |
+
if aggregation != "none":
|
77 |
+
cols_to_keep = ['word','entity_group','score','start','end']
|
78 |
+
else:
|
79 |
+
cols_to_keep = ['word','entity','score','start','end']
|
80 |
+
df_final = df[cols_to_keep]
|
81 |
+
|
82 |
+
st.subheader("Recognized Entities")
|
83 |
+
st.dataframe(df_final)
|
84 |
+
|
85 |
+
st.subheader("Spacy Style Display")
|
86 |
+
spacy_display = {}
|
87 |
+
spacy_display["ents"] = []
|
88 |
+
spacy_display["text"] = input_text
|
89 |
+
spacy_display["title"] = None
|
90 |
+
|
91 |
+
for entity in output:
|
92 |
+
if aggregation != "none":
|
93 |
+
spacy_display["ents"].append({"start": entity["start"], "end": entity["end"], "label": entity["entity_group"]})
|
94 |
+
else:
|
95 |
+
spacy_display["ents"].append({"start": entity["start"], "end": entity["end"], "label": entity["entity"]})
|
96 |
+
|
97 |
+
entity_list = ["PER", "LOC", "ORG", "MISC"]
|
98 |
+
colors = {'PER': '#85DCDF', 'LOC': '#DF85DC', 'ORG': '#DCDF85', 'MISC': '#85ABDF',}
|
99 |
+
html = spacy.displacy.render(spacy_display, style="ent", minify=True, manual=True, options={"ents": entity_list, "colors": colors})
|
100 |
+
style = "<style>mark.entity { display: inline-block }</style>"
|
101 |
+
st.write(f"{style}{get_html(html)}", unsafe_allow_html=True)
|