Kafayı toplantılarla bozmaktan bıktım artık. "Acaba bu konuşulanları otomatik metne çevirip özetleyen bir bot yazsam mı?" diye düşündüm ve kolları sıvadım. Hedef basitti: Telegram'a atılan ses kayıtlarını al, metne dök, özetle, bana özeti gönder. Ne kadar zor olabilirdi ki? (Spoiler: Çok.)
İlk adım python-telegram-bot kütüphanesiyle botu ayağa kaldırmaktı. O kısım nispeten kolaydı. Bot ses dosyasını alıp indirebiliyordu. Asıl cefayı çektiğim kısım sesi metne çevirmek oldu.
Ses tanıma için OpenAI Whisper'ı seçtim. Modeli yüklemek bir dert, "CUDA hatası" almak ayrı bir dert! Meğerse benim ekran kartı hafızası küçük modeli kaldırmıyormuş. Kafayı yiyecektim. Neyse sonunda whisper-tiny modeliyle idare etmeye karar verdim.
Python:
import whisper
model = whisper.load_model("tiny")
result = model.transcribe("toplanti.ogg")
Buraya kadar tamam. Ama çıktı dümdüz, noktalama olmayan, upuzun bir metin. Dinleyen de anlamaz bunu.
Sıra geldi özetlemeye. "Hızlı olsun" diye transformers kütüphanesinden hazır bir özetleme pipeline'ı kurdum. İlk testi yaptım, bot çalıştı, sesi aldı, metne çevirdi, özetledi ve bana gönderdi. Muzaffer bir şekilde ekrana baktım. Özet şuydu: "Evet, tamam, anladım, olur, hmm, şey..."
Şaka gibi ama! Bot, konuşmadaki dolgu kelimelerini ve kısa onayları özet sanıp bana yollamıştı. Meğerse model Türkçe konuşma dilindeki bu "ııı", "eee", "şey" gibi ifadeleri içeriğin ta kendisi zannediyordu.
Çözüm olarak, metni özetlemeden önce bir ön işlemciden (pre-processor) geçirmeye karar verdim. Basit bir regex ve stopwords listesiyle dolgu kelimelerini ve çok kısa cümleleri temizledim. Ayrıca, özetleme modelinin minimum ve maksimum uzunluk parametrelerini elle ayarladım.
Python:
# Kabaca bir ön temizlik
cleaned_text = re.sub(r'\b(ıı|eee|şey|yani|hmm)\b', '', raw_text, flags=re.IGNORECASE)
Şu an pipeline şöyle işliyor: 1) Ses dosyası gelir, 2) Whisper metne çevirir, 3) Benim yazdığım temizleyici gereksizleri atar, 4) Özetleme modeli anlamlı kısmı sıkıştırır, 5) Bot bana özeti yollar.
Artık toplantılara katılmıyorum desem yalan olur ama en azından kaçırdığım yerleri 30 saniyede okuyup yetişebiliyorum. Tabii bot bazen "çok önemli" dediği şeyi kaçırıp, önemsiz bir ayrıntıyı özetin başına koyabiliyor. O da kendi karakteri artık.
Siz de böyle otomasyon delilikleri yapıyor musunuz? Ya da Whisper'ı daha verimli kullanmanın, Türkçe konuşma metnini temizlemenin sırları sizde mi?