Update app.py
Browse files
app.py
CHANGED
@@ -6,7 +6,8 @@ import io
|
|
6 |
import torch
|
7 |
import torchaudio
|
8 |
import librosa
|
9 |
-
from transformers import Wav2Vec2ForCTC,
|
|
|
10 |
st.set_page_config(layout="wide")
|
11 |
|
12 |
# Örnek metin listesi
|
@@ -35,10 +36,6 @@ st.sidebar.write("")
|
|
35 |
|
36 |
if model_checkpoint == "akdeniz27/xlm-roberta-base-turkish-ner":
|
37 |
aggregation = "simple"
|
38 |
-
elif model_checkpoint in ["xlm-roberta-large-finetuned-conll03-english", "asahi417/tner-xlm-roberta-base-ontonotes5"]:
|
39 |
-
aggregation = "simple"
|
40 |
-
st.sidebar.write("")
|
41 |
-
st.sidebar.write("The selected NER model is included just to show the zero-shot transfer learning capability of XLM-Roberta pretrained language model.")
|
42 |
else:
|
43 |
aggregation = "first"
|
44 |
|
@@ -47,24 +44,19 @@ st.subheader("Metin Giriş Yöntemi Seç")
|
|
47 |
input_method = st.radio("", ('Örneklerden Seç', 'Metin Yaz veya Yapıştır', 'Dosya Yükle', 'Ses Dosyası Yükle'))
|
48 |
|
49 |
if input_method == 'Örneklerden Seç':
|
50 |
-
selected_text = st.selectbox('Metin Seç', example_list, index=0, key=
|
51 |
-
st.
|
52 |
-
input_text = st.text_area("Metin", selected_text, height=128, max_chars=None, key=2)
|
53 |
elif input_method == "Metin Yaz veya Yapıştır":
|
54 |
-
st.
|
55 |
-
input_text = st.text_area('Metin Yaz veya Yapıştır', value="", height=128, max_chars=None, key=2)
|
56 |
elif input_method == "Dosya Yükle":
|
57 |
-
st.subheader("Metin")
|
58 |
uploaded_file = st.file_uploader("Dosya Seç", type="txt")
|
59 |
if uploaded_file is not None:
|
60 |
input_text = str(uploaded_file.read(), "utf-8")
|
61 |
else:
|
62 |
input_text = ""
|
63 |
elif input_method == "Ses Dosyası Yükle":
|
64 |
-
st.
|
65 |
-
|
66 |
-
if uploaded_audio is not None:
|
67 |
-
audio_bytes = uploaded_audio.read()
|
68 |
|
69 |
@st.cache_resource
|
70 |
def load_pipeline(model_name, task_type):
|
@@ -110,56 +102,33 @@ def entity_comb(output):
|
|
110 |
output_comb.append(entity)
|
111 |
return output_comb
|
112 |
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
# Ses dosyasını metne çevirme fonksiyonu
|
117 |
def transcribe_audio(audio_file):
|
118 |
-
# Wav2Vec2 model ve processor yükleme
|
119 |
processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-large-xlsr-53")
|
120 |
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-large-xlsr-53")
|
121 |
|
122 |
-
|
123 |
-
audio_input = io.BytesIO(audio_file.read())
|
124 |
-
|
125 |
-
# Torchaudio ile ses dosyasını okuma
|
126 |
waveform, sample_rate = torchaudio.load(audio_input, normalize=True)
|
127 |
|
128 |
-
# Ses verisini işleme
|
129 |
inputs = processor(waveform.squeeze().numpy(), sampling_rate=sample_rate, return_tensors="pt", padding="longest")
|
130 |
|
131 |
-
# Model ile tahmin yapma
|
132 |
with torch.no_grad():
|
133 |
logits = model(inputs.input_values).logits
|
134 |
|
135 |
-
# Tahmin sonuçlarını çözme
|
136 |
predicted_ids = torch.argmax(logits, dim=-1)
|
137 |
transcription = processor.batch_decode(predicted_ids)[0]
|
138 |
|
139 |
return transcription
|
140 |
-
|
141 |
-
Run_Button = st.button("Çalıştır", key=None)
|
142 |
-
# Metin giriş yöntemi
|
143 |
-
st.subheader("Metin Giriş Yöntemi Seç")
|
144 |
-
input_method = st.radio("", ('Metin Yaz veya Yapıştır', 'Ses Dosyası Yükle'), key="input_method_radio")
|
145 |
-
|
146 |
-
if input_method == "Metin Yaz veya Yapıştır":
|
147 |
-
st.subheader("Metin Girişi")
|
148 |
-
input_text = st.text_area("Metni buraya yazın veya yapıştırın:", key="text_input_area")
|
149 |
-
|
150 |
-
if input_text != "":
|
151 |
-
st.subheader("Girdiğiniz Metin")
|
152 |
-
st.write(input_text)
|
153 |
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
if uploaded_audio is not None:
|
159 |
transcription = transcribe_audio(uploaded_audio)
|
160 |
st.subheader("Ses Transkripsiyonu")
|
161 |
st.write(transcription)
|
162 |
-
elif
|
|
|
|
|
163 |
if task == "Metin Sınıflandırma":
|
164 |
pipeline_model = load_pipeline(model_checkpoint, task)
|
165 |
output = pipeline_model(input_text)
|
@@ -185,10 +154,7 @@ elif input_method == "Ses Dosyası Yükle":
|
|
185 |
st.dataframe(df_final)
|
186 |
|
187 |
st.subheader("Spacy Tarzı Görselleştirme")
|
188 |
-
spacy_display = {}
|
189 |
-
spacy_display["ents"] = []
|
190 |
-
spacy_display["text"] = input_text
|
191 |
-
spacy_display["title"] = None
|
192 |
|
193 |
for entity in output_comb:
|
194 |
spacy_display["ents"].append({"start": entity["start"], "end": entity["end"], "label": entity["entity_group"]})
|
|
|
6 |
import torch
|
7 |
import torchaudio
|
8 |
import librosa
|
9 |
+
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
|
10 |
+
|
11 |
st.set_page_config(layout="wide")
|
12 |
|
13 |
# Örnek metin listesi
|
|
|
36 |
|
37 |
if model_checkpoint == "akdeniz27/xlm-roberta-base-turkish-ner":
|
38 |
aggregation = "simple"
|
|
|
|
|
|
|
|
|
39 |
else:
|
40 |
aggregation = "first"
|
41 |
|
|
|
44 |
input_method = st.radio("", ('Örneklerden Seç', 'Metin Yaz veya Yapıştır', 'Dosya Yükle', 'Ses Dosyası Yükle'))
|
45 |
|
46 |
if input_method == 'Örneklerden Seç':
|
47 |
+
selected_text = st.selectbox('Metin Seç', example_list, index=0, key="example_selectbox")
|
48 |
+
input_text = st.text_area("Metin", selected_text, height=128, key="text_area")
|
|
|
49 |
elif input_method == "Metin Yaz veya Yapıştır":
|
50 |
+
input_text = st.text_area('Metin Yaz veya Yapıştır', value="", height=128, key="text_area")
|
|
|
51 |
elif input_method == "Dosya Yükle":
|
|
|
52 |
uploaded_file = st.file_uploader("Dosya Seç", type="txt")
|
53 |
if uploaded_file is not None:
|
54 |
input_text = str(uploaded_file.read(), "utf-8")
|
55 |
else:
|
56 |
input_text = ""
|
57 |
elif input_method == "Ses Dosyası Yükle":
|
58 |
+
uploaded_audio = st.file_uploader("Ses Dosyasını Seç", type=["wav"], key="audio_file_uploader")
|
59 |
+
audio_bytes = uploaded_audio.read() if uploaded_audio is not None else None
|
|
|
|
|
60 |
|
61 |
@st.cache_resource
|
62 |
def load_pipeline(model_name, task_type):
|
|
|
102 |
output_comb.append(entity)
|
103 |
return output_comb
|
104 |
|
|
|
|
|
|
|
105 |
# Ses dosyasını metne çevirme fonksiyonu
|
106 |
def transcribe_audio(audio_file):
|
|
|
107 |
processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-large-xlsr-53")
|
108 |
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-large-xlsr-53")
|
109 |
|
110 |
+
audio_input = io.BytesIO(audio_file)
|
|
|
|
|
|
|
111 |
waveform, sample_rate = torchaudio.load(audio_input, normalize=True)
|
112 |
|
|
|
113 |
inputs = processor(waveform.squeeze().numpy(), sampling_rate=sample_rate, return_tensors="pt", padding="longest")
|
114 |
|
|
|
115 |
with torch.no_grad():
|
116 |
logits = model(inputs.input_values).logits
|
117 |
|
|
|
118 |
predicted_ids = torch.argmax(logits, dim=-1)
|
119 |
transcription = processor.batch_decode(predicted_ids)[0]
|
120 |
|
121 |
return transcription
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
|
123 |
+
# Çalıştır butonu
|
124 |
+
if st.button("Çalıştır"):
|
125 |
+
if input_method == "Ses Dosyası Yükle" and uploaded_audio is not None:
|
|
|
|
|
126 |
transcription = transcribe_audio(uploaded_audio)
|
127 |
st.subheader("Ses Transkripsiyonu")
|
128 |
st.write(transcription)
|
129 |
+
elif input_method in ["Metin Yaz veya Yapıştır", "Örneklerden Seç", "Dosya Yükle"] and input_text:
|
130 |
+
task = st.sidebar.radio("Görev Seçin", ['Metin Sınıflandırma', 'Metin Analizi', 'Duygu Analizi', 'Metin Oluşturma'])
|
131 |
+
|
132 |
if task == "Metin Sınıflandırma":
|
133 |
pipeline_model = load_pipeline(model_checkpoint, task)
|
134 |
output = pipeline_model(input_text)
|
|
|
154 |
st.dataframe(df_final)
|
155 |
|
156 |
st.subheader("Spacy Tarzı Görselleştirme")
|
157 |
+
spacy_display = {"ents": [], "text": input_text, "title": None}
|
|
|
|
|
|
|
158 |
|
159 |
for entity in output_comb:
|
160 |
spacy_display["ents"].append({"start": entity["start"], "end": entity["end"], "label": entity["entity_group"]})
|