canksdi commited on
Commit
380e78c
·
verified ·
1 Parent(s): 7c94f02

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +43 -25
  2. requirements.txt +9 -8
app.py CHANGED
@@ -1,27 +1,47 @@
1
  import gradio as gr
2
- from transformers import pipeline
3
  import torch
4
- from gtts import gTTS
5
  import os
6
  import time
7
 
8
  # Daha az bellek kullanımı için
9
  torch.set_grad_enabled(False)
10
 
11
- # 1️⃣ Duygu Analizi Modeli - küçük model
12
  sentiment_model = pipeline(
13
  "sentiment-analysis",
14
  model="distilbert-base-uncased-finetuned-sst-2-english",
15
  device=-1 # CPU üzerinde çalıştır
16
  )
17
 
18
- # 2️⃣ Metin Üretme Modeli - daha hafif bir model
19
- generator = pipeline(
20
- "text-generation",
21
- model="distilgpt2",
22
- max_length=100,
23
- device=-1 # CPU üzerinde çalıştır
24
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
  def process_input(text):
27
  try:
@@ -38,28 +58,26 @@ def process_input(text):
38
 
39
  print(f"Duygu analizi sonucu: {label} ({score:.2f})")
40
 
41
- # Uygun prompt oluştur
42
  if label == "NEGATIVE" or (label == "POSITIVE" and score < 0.6):
43
- prompt = f"Bu kişi üzgün hissediyor. Ona motive edici ve destekleyici bir mesaj yaz: '{text}'\nDestekleyici mesaj:"
44
  else:
45
- prompt = f"Bu kişi olumlu hissediyor. Onu tebrik eden bir mesaj yaz: '{text}'\nTebrik mesajı:"
46
-
47
- # Metni üret
48
- generated_text = generator(prompt, max_new_tokens=60, do_sample=True, temperature=0.7)[0]['generated_text']
49
 
50
- # Prompt'u yanıttan çıkar
51
- response = generated_text.replace(prompt, "").strip()
 
52
 
53
  # Cevabı kısalt
54
- if len(response) > 150:
55
- response = response[:150] + "..."
56
 
57
- print(f"Üretilen cevap: {response}")
58
 
59
- # gTTS ile seslendirme yap (TTS API'sine göre çok daha hafif)
60
- audio_path = "response.mp3"
61
- tts = gTTS(text=response, lang='tr', slow=False)
62
- tts.save(audio_path)
63
 
64
  print(f"İşlem tamamlandı ({time.time() - start_time:.2f} saniye)")
65
 
 
1
  import gradio as gr
2
+ from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
3
  import torch
4
+ from TTS.api import TTS
5
  import os
6
  import time
7
 
8
  # Daha az bellek kullanımı için
9
  torch.set_grad_enabled(False)
10
 
11
+ # Duygu Analizi Modeli
12
  sentiment_model = pipeline(
13
  "sentiment-analysis",
14
  model="distilbert-base-uncased-finetuned-sst-2-english",
15
  device=-1 # CPU üzerinde çalıştır
16
  )
17
 
18
+ # Türkçe Metin Üretme Modeli - Türkçe destekleyen bir model
19
+ print("Metin üretme modeli yükleniyor...")
20
+ tokenizer = AutoTokenizer.from_pretrained("dbmdz/turkish-gpt2")
21
+ text_model = AutoModelForCausalLM.from_pretrained("dbmdz/turkish-gpt2")
22
+ print("Model yüklendi.")
23
+
24
+ # Daha profesyonel TTS modeli
25
+ print("TTS modeli yükleniyor...")
26
+ tts_model = TTS(model_name="tts_models/tr/common-voice/glow-tts")
27
+ print("TTS modeli yüklendi.")
28
+
29
+ def generate_turkish_text(prompt, max_length=100):
30
+ """Türkçe metin üretme fonksiyonu"""
31
+ inputs = tokenizer(prompt, return_tensors="pt")
32
+ output = text_model.generate(
33
+ inputs["input_ids"],
34
+ max_length=max_length,
35
+ num_return_sequences=1,
36
+ do_sample=True,
37
+ temperature=0.7,
38
+ pad_token_id=tokenizer.eos_token_id
39
+ )
40
+ generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
41
+ # Başlangıç prompt'unu kaldır ve sadece yeni üretilen kısmı al
42
+ if prompt in generated_text:
43
+ generated_text = generated_text[len(prompt):].strip()
44
+ return generated_text
45
 
46
  def process_input(text):
47
  try:
 
58
 
59
  print(f"Duygu analizi sonucu: {label} ({score:.2f})")
60
 
61
+ # Uygun prompt oluştur (Türkçe)
62
  if label == "NEGATIVE" or (label == "POSITIVE" and score < 0.6):
63
+ prompt = f"Aşağıdaki kişi üzgün veya olumsuz hissediyor. Ona destek ve moral verecek bir mesaj yazın:\nKişinin mesajı: '{text}'\nDestekleyici yanıt:"
64
  else:
65
+ prompt = f"Aşağıdaki kişi olumlu ve mutlu hissediyor. Onun bu duygularını destekleyen bir mesaj yazın:\nKişinin mesajı: '{text}'\nOlumlu yanıt:"
 
 
 
66
 
67
+ # Türkçe metin üret
68
+ print("Metin üretiliyor...")
69
+ response = generate_turkish_text(prompt, max_length=150)
70
 
71
  # Cevabı kısalt
72
+ if len(response) > 200:
73
+ response = response[:200] + "..."
74
 
75
+ print(f"Üretilen yanıt: {response[:50]}...")
76
 
77
+ # Yüksek kaliteli TTS ile seslendirme yap
78
+ print("Ses dosyası oluşturuluyor...")
79
+ audio_path = "response.wav"
80
+ tts_model.tts_to_file(text=response, file_path=audio_path)
81
 
82
  print(f"İşlem tamamlandı ({time.time() - start_time:.2f} saniye)")
83
 
requirements.txt CHANGED
@@ -1,8 +1,9 @@
1
- gradio==3.32.0
2
- transformers==4.30.2
3
- torch==2.0.1
4
- gtts==2.3.2
5
- numpy==1.24.3
6
- scipy==1.10.1
7
- protobuf==3.20.3
8
- tqdm
 
 
1
+ gradio==3.32.0
2
+ transformers==4.30.2
3
+ torch==2.0.1
4
+ TTS==0.17.3
5
+ numpy==1.24.3
6
+ scipy==1.10.1
7
+ protobuf==3.20.3
8
+ tqdm
9
+ sentencepiece