akdeniz27's picture
Model and Interface Update
f474e98
raw history blame
No virus
4.91 kB
# Turkish NER Demo for Various Models
from transformers import pipeline, AutoModelForTokenClassification, AutoTokenizer
import streamlit as st
import pandas as pd
# img_kognitek = Image.open("logo_tr_dikey.png")
# st.sidebar.image(img_kognitek, width=300)
example_list = [
"Mustafa Kemal Atatürk 1919 yılında Samsun'a çıktı.",
"""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.
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.
Ş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.
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."""
]
st.title("Demo for Turkish NER Models")
st.write("For details of models: 'https://huggingface.co/akdeniz27/")
st.write("Please refer 'https://huggingface.co/transformers/_modules/transformers/pipelines/token_classification.html' for entity grouping with aggregation_strategy parameter.")
model_list = ['akdeniz27/bert-base-turkish-cased-ner',
'akdeniz27/convbert-base-turkish-cased-ner',
'akdeniz27/xlm-roberta-base-turkish-ner',
'xlm-roberta-large-finetuned-conll03-english']
st.sidebar.header("Select NER Model")
model_checkpoint = st.sidebar.radio("", model_list)
# if selection == "bert-base-turkish-cased-ner":
# model_checkpoint = "akdeniz27/bert-base-turkish-cased-ner"
# elif selection == "convbert-base-turkish-cased-ner":
# model_checkpoint = "akdeniz27/convbert-base-turkish-cased-ner"
# elif selection == "xlm-roberta-base-turkish-ner":
# model_checkpoint = "akdeniz27/xlm-roberta-base-turkish-ner"
# elif selection == "xlm-roberta-large-finetuned-conll03-english":
# model_checkpoint = "xlm-roberta-large-finetuned-conll03-english"
st.sidebar.write("")
st.sidebar.write("")
st.sidebar.write("")
xlm_agg_strategy_info = "'aggregation_strategy' can be selected as 'simple' or 'none' for 'xlm-roberta' because of the RoBERTa model's tokenization approach."
st.sidebar.header("Select Aggregation Strategy Type")
if model_checkpoint == "akdeniz27/xlm-roberta-base-turkish-ner":
aggregation = st.sidebar.radio("", ('simple', 'none'))
st.sidebar.write(xlm_agg_strategy_info)
elif model_checkpoint == "xlm-roberta-large-finetuned-conll03-english":
aggregation = st.sidebar.radio("", ('simple', 'none'))
st.sidebar.write(xlm_agg_strategy_info)
st.sidebar.write("")
st.sidebar.write("This English NER model is included just to show the zero-shot transfer learning capability of XLM-Roberta.")
else:
aggregation = st.sidebar.radio("", ('first', 'simple', 'average', 'max', 'none'))
st.subheader("Select Text Input Method")
input_method = st.radio("", ('Select among Examples', 'Write or Paste New Text'))
if input_method == 'Select among Examples':
selected_text = st.selectbox('Select Text from List', example_list, index=0, key=1)
st.subheader("Text to Run")
input_text = st.text_area("Selected Text", selected_text, height=128, max_chars=None, key=2)
elif input_method == "Write or Paste New Text":
st.subheader("Text to Run")
input_text = st.text_area('Write or Paste Text Below', value="", height=128, max_chars=None, key=2)
def setModel(model_checkpoint, aggregation):
model = AutoModelForTokenClassification.from_pretrained(model_checkpoint)
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
return pipeline('ner', model=model, tokenizer=tokenizer, aggregation_strategy=aggregation)
Run_Button = st.button("Run", key=None)
if Run_Button == True:
ner_pipeline = setModel(model_checkpoint, aggregation)
output = ner_pipeline(input_text)
df = pd.DataFrame.from_dict(output)
if aggregation != "none":
cols_to_keep = ['word','entity_group','score','start','end']
else:
cols_to_keep = ['word','entity','score','start','end']
df_final = df[cols_to_keep]
st.header("Recognized Entities")
st.dataframe(df_final)