ChatGPT'nin piyasaya sürülmesinden sonra sohbet robotları, büyük dil modelleri (LLM'ler) ve yardımcı pilotlar gibi yapay zeka teknolojilerinin heyecanı başladıkça, çok geçmeden çok daha fazla kullanım durumu ortaya çıktı.
Yazma asistanları, görüntü oluşturucular veya verileriniz üzerinde eğitilmiş sohbet robotları gibi en yaygın olanlardan bahsetmiyorum. Gerçekçi konuşan avatarlar, video düzenleyiciler veya konuşma sentezi gibi daha özel kullanım durumlarından bahsediyorum.
Bu makalede, bu kullanım örneklerinden birini, yani podcast'ler veya YouTube videolarıyla kullanabileceğiniz bir transcriber uygulamasını inceleyeceğiz. GPT-3 API'yi kullanmak veya bir OpenAI Whisper demosunu çalışırken görmek istiyorsanız, bu çok değerli olacaktır.
Bu eğitimin 1. bölümünde, uygulamanın kurulumu ve geliştirilmesine başlamak için ihtiyacımız olan her şeyi gözden geçireceğiz.
Daha sonra 2. bölümde çalışma kodumuzu buluta yükleyeceğiz ve başkalarının sonuçları görebilmesi ve uygulamayla etkileşim kurabilmesi için çalışan bir kullanıcı arayüzü elde edeceğiz.
Şimdi kemerlerinizi bağlayın çünkü bunu oluştururken Python kodlarıyla ellerimizi kirleteceğiz.
Bunu oluşturmak için 3 perdeden geçeceğiz.
İlkinde önümüzdeki yolculuğa hazırlanmak için ihtiyacımız olan her şeyi göreceğiz.
İkincisinde yerel olarak bir prototip oluşturacağız ve bu süreçte bize hangi araçların yardımcı olabileceğini öğreneceğiz.
Ve sonuncusunda, başkalarının da deneyebilmesi için oluşturduğumuz her şeyi buluta yükleyeceğiz.
Kulağa iyi geliyor?
Tamam o zaman, haydi gidelim!
İlk olarak, izleyeceğimiz sürece kaba bir genel bakış, yazıya dökmek istediğimiz bilgiyi çıkarmak ve daha sonra onu beslemek olacaktır.
Buradan çıktıyı alacağız ve başkalarının görebilmesi ve onunla etkileşim kurabilmesi için bir ön uç uygulamada göstermeden önce üzerinde bazı son işlemler gerçekleştireceğiz.
Bu işlemi manuel olarak yaparsak birkaç ekstra adım daha gerekir. Neyse ki OpenAI kullanıma sunuldu
Burada hangi yolu seçeceğinize karar vermeniz gerekecek.
Önce yolunuzu seçin, sonra devam edelim.
Daha sonra, GPT-3.5 Turbo modeline (temelde ChatGPT'ye güç veren model) erişmek için OpenAI'den bir API anahtarına ihtiyacımız olacak.
Nasıl alacağınızı bilmiyorsanız şu adımları izleyin:
Anahtarı aldıktan sonra yapbozun bir sonraki parçası olan Fısıltı'ya geçeceğiz.
Aşağıdaki komutu çalıştırarak Whisper'ın en son sürümünü makinenize indirip yükleyebilirsiniz:
pip install -U openai-whisper
Alternatif olarak, şu komutu kullanarak Git'teki en son taahhüdü bağımlılıklarıyla birlikte yükleyebilirsiniz:
pip install git+https://github.com/openai/whisper.git
Bu, hangi sürümü yüklediğiniz konusunda size daha fazla kontrol sağlar (ve bunu bir Colab not defterinden deniyorsanız çalıştırmak isteyeceğiniz komuttur).
Not: Whisper'ı komut satırından çalıştırmak istiyorsanız 'ffmpeg'in kurulu olması gerekir.
Whisper yüklendiğinde artık tek ihtiyacımız olan, yazıya dönüştürmek istediğimiz gerçek dosyalardır. 'mp3', 'mp4', 'mpeg', 'wav' ve çok daha fazlası gibi çeşitli medya dosyalarını besleyebiliriz.
Buradaki tek sınırlama, dosyaların boyutudur; 10 dakikalık bir video, 20 dakikalık bir podcast'e göre çok daha fazla zaman alacaktır.
Şimdi, işte bir sonraki yol ayrımı.
Videoyu mu yoksa sesi mi yazıya dökmek istediğinizi seçmeniz gerekecek.
Bu örnekte basitlik adına podcast'lerdeki ses dosyalarını kullanmayı tercih edeceğiz.
Ve burada aklınıza gelebilecek soru şu olabilir: “ Podcast bölümlerini nereden indirebilirim? ”.
Benim bildiğim 2 yol var.
Birincisi, ListenNotes gibi bir siteyi kullanmak, beğendiğiniz herhangi bir podcast'i seçmek ve ayrı ayrı bölümlere gitmek.
Bireysel bölümlere ve ilgili ses dosyalarına erişebilmek için bir hesap oluşturmanız gerekeceğini belirtmekte fayda var.
Oradan, "daha fazla" sekmesini açmak için 3 noktalı düğmeye tıklamanız gerekecek ve ardından sesi indirme seçeneğini göreceksiniz.
İşte nasıl görüneceği:
2. seçenek bunun yerine Podchaser'ı kullanmaktır. Bir podcast bulma, bölüm listesine göz atma ve belirli bir podcast'i seçme konusunda benzer bir süreci izleyeceksiniz.
Bireysel bölümün sayfasına ulaştığınızda, sağ tarafta oynat düğmesinin ve altında diğer seçeneklerin bulunduğu bir sütun göreceksiniz.
Aşağı kaydırırsanız podcast hakkındaki bilgileri, sosyal medyada paylaşma seçeneklerini ve ses dosyasını indirme seçeneğinin bulunduğu küçük bir bölümü göreceksiniz.
İşte bunun nasıl görüneceği:
Hangi seçeneği tercih ederseniz edin ve farklı uzunluktaki birkaç bölümü indirin, böylece transkripsiyon sürecinin nasıl çalıştığını test edebilirsiniz.
Benim tavsiyem 30 dakikadan kısa bölümleri seçmenizdir.
Bunun nedeni, eğer daha uzun bir tane seçerseniz, Whisper'ın bunu işlemesi uzun sürebilir ve zaman aşımı sorunlarıyla karşılaşabilirsiniz (Özellikle Colab ortamını kullanıyorsanız).
20-30 dakikalık bir bölümün yazıya geçirilmesi 4 ila 8 dakika sürebilir.
Buradaki ana darboğaz, daha sonraki çalışmalarda kullanabileceğimiz bir sonuç elde etmeden önce transkripsiyon sürecinin süresidir.
Artık tüm gereksinimleri yerine getirdiğimize göre kurulum tamamlandı.
Yolculuğumuzun bir sonraki kısmına geçmemizin zamanı geldi.
Daha derin programlama alanına giriyoruz.
Daha uygun olduğu için Whisper'ı Python aracılığıyla kullanacağız. Ayrıca transkripsiyon için özel bir şey yapmamıza da gerek yok, ses dosyasını modele aktarıp transkripsiyonu beklememiz yeterli, bu kadar.
O halde bu süreci satır satır inceleyelim.
import whisper model = whisper.load_model("base")
Burada Whisper modelinin 'temel' versiyonunu yüklüyoruz. OpenAI'nin yayınladığı çeşitli sürümler (veya "boyutlar") vardır ve bunlar parametre sayısına, tükettikleri kaynaklara ve transkripsiyonu gerçekleştirmek için gereken süreye göre değişir.
İşte referans için kullanışlı bir grafik.
İsterseniz devam edip hepsini boyuta göre deneyebilirsiniz (amaçlanan).
Daha büyük bir model kullanırsanız, onu çalıştırmak için daha fazla kaynağa (GPU gibi) ihtiyacınız olacağını unutmayın.
Yani bunu Colab'da çalıştırıyorsanız bunun yerine bu komutu kullanabilirsiniz.
model = whisper.load_model('medium', device='cuda')
Bunun çalıştırılmasını istediğiniz cihazın parametresini girersiniz.
Modelin boyutunu seçtikten sonra, yazıya dönüştürmek istediğiniz ses dosyasını şu şekilde iletebilirsiniz:
result = model.transcribe(“path-to-where-the-file-is”)
Daha sonra transkripsiyonun çalıştığını doğrulamak için içeriği yazdırabilirsiniz. (Ancak her şeyi yazdırmak yerine yalnızca ilk 1000 karaktere göz atmak isteyebilirsiniz.)
podcast_transcript = result['text'] podcast_transcript[:1000]
Eğer bu iyi sonuç verdiyse, artık transkripsiyon işleminin sonuçlarını bir değişkene kaydetmiş olursunuz. İşlem sonrası için kullanacağımız şey.
Bu yeterince kolay. Ancak bölüm açıklamasında bulabileceğimizin ötesinde, podcast'te nelerin tartışıldığını bilmenin bir yolunu bulmak istediğimizi varsayalım.
Transkriptin tamamını alan ve bize “yönetici özeti” veren bir fonksiyon oluşturabiliriz. Her şeyi gözden geçirip zaman ayırmaya değip değmeyeceğini görmeye vakti olmayan meşgul insanlarla da paylaşabileceğimiz bir özet.
Hadi devam edelim ve bunu yapalım.
Bu özeti yapmak için ne kullanacağımıza dair herhangi bir tahmininiz var mı?
İpucu: Bunun için zaten bir API anahtarımız var.
Evet, anladın.
Bu özeti podcast'in transkriptiyle birlikte sunarak oluşturmak için 'get-3.5-turbo' modelini kullanacağız.
Çağrıları doğrudan API'ye yapabiliriz, ancak bunun için OpenAI paketini (uygun bir şekilde 'openai' olarak adlandırılır 😆) kullanmak çok daha uygundur.
Modele göndereceğimiz token miktarını bilmek için OpenAI'nin tokenizer kütüphanesine de ihtiyacımız olacak.
Ve her ikisini de çalıştırarak yükleyebiliriz…
pip install openai pip install tiktoken
Şimdi GPT-3'e çağrı yapmadan önce API anahtarını bir yere kaydetmemiz gerekiyor.
Bunu bir ortam değişkeni olarak kaydedebilir ve daha sonra bu şekilde kodda kullanıma hazır hale getirebilirsiniz.
openai.api_key = os.environ["OPENAI"]
Veya Colab ortamını kullanıyorsanız şöyle bir şey yapabilirsiniz.
import openai from getpass import getpass openai.api_key = getpass("Enter your key here: ")
Ve sonra, bu komutu çalıştırdığınızda, anahtarı yapıştırabileceğiniz bir giriş hücresi görüntülenecektir.
Artık bu kod parçasıyla şu anda mevcut olan modelleri listeleyerek anahtarın çalıştığını doğrulayabilirsiniz.
models = openai.Model.list() for model in models['data]: print(model['root'])
Anahtarımızın doğru çalışmasıyla devam edip GPT-3 API'sine çağrı yapabiliriz.
Ama öncelikle dikkate almamız gereken önemli bir şey var. Bu da daha önce bahsettiğim “jetonlar”la ilgili.
Fikir, podcast transkriptini yapay zeka modeline iletmek ve bunun bir özetini geri almak olduğundan, kaç tane "jeton" kabul edebileceğini bilmemiz gerekiyor.
Yapay zeka, kelimeleri veya karakterleri saymaz, bunun yerine belirteçleri kullanır. “Bağlam penceresi” kavramının var olmasının nedeni budur.
Bağlam penceresinin uzunluğunu aşarsak transkriptimiz kesilebilir ve eksik verilerden bir özet elde ederiz. (Çok uzun olmayan bir podcast bölümü seçmenin bir başka nedeni.)
Neyse ki GPT-3 modelinin 2 versiyonu mevcut. Genişletilmiş bağlam penceresine sahip geleneksel ve diğeri.
OpenAI belgelerini kontrol ederseniz aralarındaki farkı görebilirsiniz.
İşte 'tiktoken' kütüphanesi bunun için var. Transkriptte kaç token bulunduğunu bilmemize yardımcı olacak, böylece özet için hangi modeli kullanacağımızı bileceğiz.
Bu hesaplamayı aşağıdaki kodla yapabiliriz.
import tiktoken enc = tiktoken.encoding_for_model(“gpt-3.5-turbo”) print(“Number of tokens in the input ”, len(enc.encode(podcast_transcript)))
Sonuçtaki token miktarı 4.097'den büyükse modelin '16k' versiyonunu kullanmak zorunda kalacağız.
Bunu öğrendikten sonra nihayet duruma uygun modeli kullanarak API'ye çağrı yapabiliriz.
Öncelikle modele göndereceğimiz istemi bir değişkene kaydedelim. Kendi isteminizi deneyebilirsiniz, ancak işte bir örnek:
prompt = """ You are an expert marketer responsible for the growth of several popular podcasts. You are now tasked with summarizing an episode in a way that is concise and covers the main points of the episode for others to understand. The transcript of the episode is provided below. """ request = prompt + podcast_transcript
Şimdi aşağıdaki kodu kullanarak API’ye çağrı yapalım.
chatOutput = openai.ChatCompletion.create(model="gpt-3.5-turbo-16k", messages=[{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": request} ] )
Daha sonra API'den gelen yanıtı kontrol edelim.
chatOutput.choices[0].messages.content
İşte aldın! Whisper kullanarak oluşturduğumuz transkripsiyona dayalı podcast bölümünün özeti.
Bölümün önemli anlarını çıkarmak için aynı işlemi kullanabilirsiniz. Potansiyel dinleyiciye konuşmaya bir göz atma olanağı sağlamanın bir yolu gibi.
Bunu yapmanın yolu çok benzer. Değişen tek kısım modelin alacağı bilgi istemidir. Özet istemek yerine, en önemli noktaları liste formatında çıkarmasını isteyebilirsiniz. Sonuçlar, istemlerle ilgili yaratıcılığınıza bağlıdır.
Artık bunun işe yaradığını bildiğimize göre, tüm kodu yerel olarak çalıştıracak bir fonksiyona koyabiliriz.
Öyleyse devam edelim ve bu fonksiyonu yaratalım.
def transcribe_podcast(file_path): print("Starting podcast transcription") # Load the Whisper model import os import Whisper print("Loading the Whisper model") model = whisper.load_model("medium") print(model.device) # Do the transcription print("Starting the transcription") result = model.transcribe(file_path) # Return the transcribed text print("Transcription completed, returning results...") return result
Bu işlevi çağırabilir, ona bir ses dosyasının yolunu gönderebilir ve karşılığında bir transkripsiyon alabilirsiniz.
İşte bunu nasıl yapacağınıza dair bir örnek.
output = transcribe_podcast('path_to_audio_file')
Daha sonra transkriptin içeriğine göz atın.
output[text][:1000]
Tamam, şu ana kadar çok iyi.
Artık bu yerel olarak çalıştığına göre, onu buluta yüklemek harika olurdu, böylece başkalarına gösterebilir ve arkadaşlarınızı ve ailenizi l33t h4xx0r kodlama becerilerinizle etkileyebilirsiniz. 😆
Ancak hayır aslında, başkalarının deneyebilmesi için bunu çevrimiçi bir hizmete dağıtmak iyi bir seçimdir.
Ve bunu 2. bölümde yapacağız. İstekleri kabul edebilecek bir bulut işlevi oluşturmak ve bu işlevin sonuçlarını görselleştirmek için hızlı bir ön uç yaptırmak (podcast bölümlerinin özeti ve öne çıkanları gibi).
Şimdilik bunu bırakacağız.
Şu ana kadar uygulamanız yerel olarak çalışıyor ve bunu farklı uzunluklardaki bölümlerle test edebilir ve Whisper'ın transkripsiyonu yapmak için harcadığı ortalama süreyi görebilirsiniz.
Buraya kadar okuduğunuz için teşekkür ederiz.
Umarım 2. Bölümde tekrar görüşürüz.
Gelecek yazıları kaçırmamak için Hackernoon'da bana abone olmayı unutmayın.