Son gözden geçirme: 2024-12-03.
Burada ideali hedefleyen bir veri kümesini nasıl yaratacağımızı tartışırken sıklıkla yapılan yanlışları da ele alacak, onaylarken neyin kabul edilebileceğini nelerin ise reddedilmesi gerektiğini örneklerle açıklamaya çalışacağız.
Buradaki bilgiler Common Voice’un ilgili sayfalarındaki bilgilere ek olarak kişisel deneyimleri de içermektedir. Her zamanki gibi bu metinler zaman içinde geliştirilecektir. Sizler de iletinin altına yorum, katkı ve sorularınızla katkıda bulunabilirsiniz ne güzel olur!
Neyin neden doğru olacağını anlayabilmek için ne için kullanılacağını bilmemiz gerekiyor.
Bu konuları içeren Common Voice’un Hakkında sayfasını da okumayı unutmayınız.
Common Voice Veri Kümesi Ne için Kullanılabilir?
Günümüzde makine öğrenmesinde kullanılan pek çok teknik var ve bazıları bazı amaçlar için daha uygun olabiliyor. Mozilla bu kümeyi yaratırken olabildiğince farklı modelde çeşitli kullanıma uygun olabilecek bir yöntem izliyor. Gerek araştırmacılar, gerekse uygulama geliştiricileri (varsa) büyükçe olan ses kümesinden kendi amaçlarına uygun olan kayıtları seçip modellerini iyileştirebiliyorlar.
Örnek uygulamalar (basitten karmaşığa):
- Uyandırma kelimeleri: Tek bir kelime ile cihazın uyanmasını sağlama (OK Google ya da Hey Siri gibi)
- Komut sistemleri: Çok kısıtlı bir sözlükle (rakamlar, başlat, durdur, önceki, sonraki, evet, hayır, vb) bir cihazın (ör. otomobil ses sistemi) kontrolü.
- Kişisel asistanlar: Genelde uyandırma kelimesi ile başlatılan yazılıma belli sorular sormak, belli komutlar vermek. Bunlar tek tek kelimelerden karmaşık olmayan doğal konuşma cümlelerine kadar bir şeyleri anlayıp yanıt veriyor. (Google Assistant ya da Siri, ya da bazı banka gibi şirketlerin ilk karşılama robotları)
- Yazıyı sese dönüştürme (ör. uzun zamandır Windows’da var, chat programları yapabiliyor vb).
- Otomatik altyazı üretimi (ör. Youtube şu anda yapıyor)
- Otomatik sesli çeviri
- Makine-insan arasında karşılıklı sohbet
- …
Yukarıdaki ilk iki uygulamada aynı kelimenin 1000 ayrı kişi tarafından okunması istenirken, geniş sözlük kullanan metotlarda ise her cümlenin farklı kişiler tarafından tek kaydedilmesi daha yüksek başarım için tercih edilebilmektedir (aslında zorunludur).
Derin Öğrenme’ye dayalı sistemler için genel bir kural olarak da “Ne kadar ÇOK ve ÇEŞİTLİ veri varsa, veri kalitesi ne kadar yüksekse, oluşturulan modeller o kadar başarılı olacaktır” diyebiliriz.
Her model için geçerli olmamakla birlikte makine öğrenmesinde veri kümesindeki farklılıklar önemli. Basitleştirirsek, güncel teknikleri yeni doğan bir insanın dil öğrenmesi ile karşılaştırmamız mümkün.
- Yeni doğanda donanım (beyin/sinir sistemi) ve algoritma (biyokimyasal süreçler) var
- Bu algoritma çevreden alınan veri ile öğrenmeyi gerçekleştiriyor (sinir hücreleri sinapslar oluşturuyor).
- Çevrede Almanca konuşuluyorsa Almanca öğreniyor/konuşuyor, Türkçe konuşuluyorsa da Türkçe. Türkçe’nin sadece belli bir ağzı/lehçesi konuşuluyorsa o lehçede uzmanlaşıyor beyin. Ama zaman içinde farklı söyleyişleri duydukça onları da anlıyor, adapte oluyor. Ama bir kere Karadeniz ya da Güneydoğu ağzı oturursa, bunu değiştirmek pek kolay olmuyor (gırtlağımızdaki kasların istemsiz kontrolü).
Makine öğrenmesi de pek farklı değil… Öğretirken onu beslediğimiz veri kümesi onun gelecekte ne olacağını tanımlıyor. Buna “bias” (önyargı) diyoruz. Örneğin:
- Sadece erkek sesleri ile eğitirsek kadınları anlamakta zorlanacak, ör. ileride çamaşır makinesini sesle çalıştırmakta zorlanacaklar.
- Sadece “çok doğru Türkçe” (ör. diksiyon eğitimi almış spiker sesi) ile eğitirsek, Doğu Anadolulu biri o çamaşır makinesi ile sorun yaşayabilecek.
- Sadece “ev” kelimesini öğretmişsek “mesken” kelimesini anlamayacak.
- Ya da çok fazla x lehçesi kullanırsak, y lehçesini anlamayacak.
İngiliz-İskoç aksanı arasındaki farkı vurgulayan ünlü sesle kumanda edilen asansör parodisi sorunu çok iyi anlatır…
Yaygın olarak kullanılan makine öğrenme sistemleri şu işlemleri gerçekleştirebilirler (terminolojiyi basitleştiriyoruz burada):
- Kaydetmek
- Ön İşleme: Yeniden örneklemek (re-sample), bazen filtrelerden geçirerek gürültüleri (arka plan sesleri, çıtırtılar vb) temizlemek, bu arada başta/sonraki boşlukları da atmak, ve/veya sesi normalize etmek (kısık ya da yüksek seslerin düzeyi), hatta temiz kayıtlara arka plan sesleri eklemek, ya da sesin “rengini” değiştirmek (hız, ton/frekans vb - buna “augmentation” deniyor).
- Fonemlerden harfleri / harf gruplarını çıkarmak
- Kelimeleri ayırmak.
- Matematiksel formüllerle (sinyal işleme algoritmaları) frekans grafikleri çıkarmak (yaşa, cinsiyete, lehçeye vb göre her insanda farklı sonuç elde edilir, amaç hepsini kapsayacak bir kümeyi öğretmektir).
- Bu örüntüleri sembollerle eşleştirmek.
Öğrenirken belli parametreler hesaplanıyor, kullanımdayken de duyulan ses için aynı analiz yapılıp hangi harfin söylenmiş olduğu (belli hata payları ile), “o parametrelerin içinde kalıyor mu?” diye bakılıyor.
Bu basitleştirilmiş süreci anlamışsak şu çıkarımları yapabiliriz:
- Cümleler dilbilgisi ve yazım kuralları açısından doğru cümleler olmalı ki hem doğru okunabilsin, hem de ses ile doğru kelime eşleştirilebilsin.
- Noktalama işaretleri doğru ve yerinde olsun ki okuyan doğru yerlerde boşluklar verebilsin, ya da emir ve soru cümlelerinin vurgularını aktarabilsin.
- Cümlelerde fazla yabancı dil ve aşırı eski sözcükler olmasın ki gönüllüler bunları telaffuz etmekte zorlanmasın, sistem de çok az karşısına çıkacak Türkçe’de olmayan kelimelerle şişmesin (ör. İngilizce bir adın Türkçedeki gibi ya da İngilizcedeki gibi farklı farklı okunması da gereksiz yere YZnın kafasını karıştırır).
- Ses tam ve anlaşılabilir kaydedilmeli ki tüm süreç işlesin, baskın çatırtılar, eksik/yanlış kelime/okuma olmasın.
- Öğretilen sesler sadece stüdyo kaydı gibi olmasın ki mesela araba kullanırken motorun sesi sistemi kullanılmaz hale getirmesin.
- Kelimeler tek tek anlaşılabilsin ki ayrılıp eşleştirilebilsin.
- Zamanla dilde geçen tüm kelimeleri içerebilmeliyiz ki sistem “sizi anlamadım” demesin.
- Vurguları doğru kullanmalıyız ki soru mu soruluyor, komut mu veriliyor fark edilebilsin.
- Farklı okunuşlara izin verilsin ki (ör. “r” harfinin yutulması) günlük konuşma dilini, farklı insanları anlayabilsin.
Kullanım amaçlarına bakarsak asıl veri kümesinin edebi metinlerden ziyade günlük kullanılan konuşma, sohbet dili (conversational) olmasının iyi olacağını da anlarız. Yapay cümleler, şiirler, makine konuşması gibi şeyler çocuğa yanlış şeyler öğretecektir. Ama veri seti belli bir büyüklüğe eriştikten sonra (ki Türkçe’yi o noktaya yaklaştırıyoruz) daha edebi şeyleri baskın olmamak kaydıyla eklemek mümkün.
Aşağıda süreçleri detaylandırırken doğru-yanlış ya da kabul edilebilir-edilemez olanları örnekleri ile vereceğiz…
Common Voice Süreçleri
Süreç temel olarak ikiye ayrılıyor, sonra her biri de yeniden iki aşamalı.
- Külliyata cümle ekleme (text corpus)
1.1. CC0 (üzerinde hiç bir telif olmayan) cümleler bulma, aralarından seçme ve ekleme (bir kitabı hazırlamak boyuna göre değişmekle birlikte 1-2 gün sürebilir).
1.2. Bu cümlelerin anadili Türkçe olan iki ayrı kişi tarafından kontrol edilip onaylanması ya da reddedilmesi. (bu daha hızlı bir işlem, ama vakit ayırırsanız; biriktirirseniz toplu bakmak günler, haftalar sürüyor. Bir kişi cümlelerin uzunluğuna/zorluğuna ve okuma hızına göre saatte 400-500 cümle kontrol edebilir). - Ses kayıtlarını oluşturma (voice corpus)
2.1. Cümleleri okuyarak ses kaydetme (şu anda veri kümesinde ortama ses kaydı ~3.6 saniye - yani epey düşük, işlemleri doğru uygularsak saatte 200 kayıt yapılabilir; ama artık uzunca cümlelerimiz var, bazen emin olmak için dinlemek, yeniden kaydetmek gerekiyor, bunlar da hızı 100-150 kayıt/saate düşürüyor)
2.2. Kaydedilen seslerin iki ayrı kişi tarafından onaylanması ya da reddedilmesi (alışkın bir kişi bir saatte 400-500 kadar cümle dinleyebiliyor).
Görüldüğü gibi ekleme/kayıt işleminin iki katı kadar onay işlemi ortaya çıkıyor - ama onay işlemi daha hızlı. Cümle eklerken, ses kaydederken olduğu kadar onaylarken/reddederken de bir önceki bölümde anlattığımız nedenlerle dikkatli olmak gerekiyor. Onaylayanın sorumluluğunun daha fazla olduğunun, dolayısı ile süreç hakkında daha bilgili olmasının faydası olacağını da vurgulamak lazım.
Burada bir şeyin daha altını çizmek gerekli: Veri kümesi incelendiğinde onay almış cümlelerin bir kısmında hatalı onay olduğunu görüyoruz. Daha dikkatli olmak, aşağıda anlatılan kuralları takip etmek gerek bunları azaltmak için.
Külliyata tek tek ya da küçük gruplarla eklenen ve onaylanan cümleler anında bir sonraki sürece aktarılıyor. Toplu dosya olarak eklenen cümleler ise epey uzun bir süreçten sonra sisteme ekleniyor.
Ses kayıtları da onaylanmış, onaylanmamış ya da hatalı oldukları bildirilmiş olarak gruplanarak yılda 4 kere (eskiden 2) Corpus (külliyat) olarak derleniyor (genelde Mart, Haziran, Eylül ve Aralık aylarında).
Reddedilen cümleler/kayıtlar da çöp oluyor - ama onlar da veri kümesi ile yayımlanıyor, ve ne tür hatalar olduğunu oradan inceleyebiliyoruz…
Kayıt olmanın ve demografik bilgileri vermenin faydaları
Common Voice’a üye olup herhangi bir bilgi vermeden de kayıt yapabiliyorsunuz. Bir tarayıcıda bir sekme açarak siteye geldiğinizde ona özel bir oturum kimliği yaratılıyor bunun için (cryptographic hash). Yani değişik cihazlardan, değişik tarayıcılardan, ya da tarayıcı öncelleğini temizledikten sonra, 10 kere girip beşer kayıt yaptığınız zaman sizi beş ayrı kişi gibi algılayabilir. Cinsiyet, yaş, varyant (değişke/lehçe), aksan gibi bilgiler de bulunamıyor kayıtlarda.
Öte yandan modellerin doğru dengelenmesi için idealde her yaştan ve her cinsiyetten yaklaşık eşit insan alınması lazım. Türkçe Corpus v7’yi analiz ettiğimizde yaklaşık %24’ün bu bilgileri vermeden ses kaydettiği görülüyor. Tüm veri kümelerinin analizi için tarafımdan tüm diller için üretilen Common Voice Dataset Analyzer yazılımını kullanabilirsiniz (ör. Türkçe v19.0 analizi şurada).
Kaydolur ve bu temel bilgileri verirseniz modellerin daha başarılı olmasını sağlayacaksınız. Üstelik kaç kayıt yaptığınızı, kaçına onay verdiğinizi görebilecek, daha sonra kayıtlarınızı indirebilecek, vazgeçtiyseniz silinmesini talep edebileceksiniz.
Bu faydaları şu şekilde özetleyebiliriz:
- Anonim demografik veriler sağlayarak, gönderdiğiniz verileri mümkün olduğunca zenginleştirin. Verileri dış kullanıcılarla paylaşmadan önce tüm demografik verileri anonimleştiriyoruz.
- Profil bilgileri, konuşma tanıma doğruluğunu eğitirken kullanılan ses verilerini iyileştirir.
- Farklı dillerdeki ilerleme durumunuzu ve ölçümlerinizi takip edebilirsiniz.
- Katkılarınızı dünyanın her yerindeki diğer gönüllülerle karşılaştırabilirsiniz.
- Kişisel hedeflerinize ve proje hedeflerine ne kadar yaklaştığınızı görebilirsiniz.
- İsterseniz e-posta listemize katılarak projeyle ilgili gelişmelerden haberdar olabilirsiniz.
Açık kaynak olan ve herkes tarafından indirilebilen veri setinde ise sizi tanımlayacak bir şey yok. Sizin kimliğiniz şöyle bir şey oluyor
026eeac891913f2364d3a89af31d5b50344d61ab7c021855f4688cd6b13e0911f8bb741c3a9bc65ae967be70c61d88a5bfd1b121675e966bc010ef285f32f8cb
Ek bilgi için lütfen Hakkında sayfasını okuyunuz…
Kendimi daha fazla nasıl koruyabilirim?
2023 itibarı ile ortaya çıkan gelişkin modellerle bir insanın 3 saniyelik sesinden “ona benzeyen” bir ses çıkarmak mümkün (Microsoft VALL-E). Ama ikna edecek derecede gerçekten benzemesi için kaliteli birkaç saatlik kayıt gerekiyor hâlâ. Sesinizin kopyalanmasını zorlaştırmak için şu adımları öneriyorum:
- Öncelikle profilinizde kendi adınızı kullanmayın, bir “rumuz” (nickname) seçin.
- Özellikle istemiyorsanız dil sayfanızda en çok kayıt yapan/dinleyen bölümlerinde görünürlüğünüz kapalı olsun.
- Kaliteli stüdyo ekipmanı ile kayıt yapmayın, ya da sınırlı yapın.
- Net kayıtları diğerleri ile karıştırın. Örneğin değişik cihazlar kullanın (webcam mikrofonu, mobil cihaz), mikrofondan uzaklığı değiştirin (buna bağlı olarak sesinizi yükseltip azaltın), baskın olmayan arka plan sesi açın (ör. müzik, anlaşılmayan derecede TV sesi).
- Profiliniz üzerinden çok kayıt yapıyorsanız birden fazla e-posta hesabı kullanarak farklı kullanıcılar açın, bunların client_id’leri farklı olacaktır (önerilmez).
- Özellikle kendi sesinizi indirmek istemiyorsanız, demografik bilgi de vermek istemiyorsanız, kullanıcı açmayın (ya da sistemden çıkın), farklı cihazlarda, farklı tarayıcılarda, farklı sekmeler kapatıp açarak farklı client_id ile kayıt yapılmasını sağlayın (önerilmez). Not: Bu doğal olarak kaç farklı ses olduğunu bilemememizi, farklı seslerin değişik eğitim gruplarında (train/dev/test) olmasını garanti edemeyeceğimizi getirecektir. Bu doğru bir model oluşturmanın önünde ciddi bir engeldir, çünkü “voice bias” en önemlisi - kendi sesimizle eğittiğimizi kendi sesimizle test etmemeliyiz!
Çok fazla kayıt yapmanın sonuçları
Başka yerlerde de bahsettiğimiz gibi tek kişinin çok fazla kayıt yapması şu an kullanılan modeller için boşa giden emek olabilir. Şu an kullanılan tekniklerde birkaç kişinin baskın olmasına izin vermememiz gerekiyor. Yoksa yapay zeka onların sesine (dolayısı ile cinsiyet/yaş/lehçe/aksan da devreye girecek) adapte olacak, gerçek yaşamda karşılaştıklarını anlamayacak. Ama sağlam (robust) bir modeli iyileştiriyorsanız (ör. OpenAI Whisper multilingual modeli fine-tuning ile Türkçe’ye özelleştirme), bir kişinin diğerlerinin 2-3 katı kayıt yapmış olması pek etkilemeyecektir, ayrıca augmentation yöntemleri ile tek tek seslerin rengini de değiştirebiliyoruz.
Onaylı kayıtlar (validated) üçe ayrılıyor: train, dev, test.
Burada “validated” dosyası onay almış her kaydı, “train” dosyası yapay zekayı eğitmek için kullandığımız veri setini, “dev” eğitim sırasında iç testi, “test” dosyası ile başarımı ölçmek için kullanacağımız seti gösteriyor.
İdeal bir dünyada, her cümleyi her cinsiyetten, her yaş grubundan, her lehçe/ağızdan okumak mümkün olsaydı sistem en iyi başarıma ulaşacaktı. Çünkü eğitim için aldığımız ratgele küme dengeli olacaktı. Ama bunun kontrolü pek mümkün değil tabii. O yüzden çok fazla kayıt yapan genç bir erkeğin lehçesinin dengeleri bozmaması için her kişiden olabildiğince dengeli gitmek iyi olur.
Sıfırdan eğitilen bir modelde dengeyi sağlamaya kalktığınızda da o çok fazla kayıt yapan kişinin/kişilerin emekleri kullanılmamış oluyor. Aslında boşa gitmiyorlar tabii, başka araştırmalar, sistemler için kullanılabilecekler. CV tarafından yaratılan orijinal bölünmelerde yer almıyorlar ama başka algoritmalarda kullanılabilirler. Ayrıca ileriki yıllarda başkaları o kişiye yetişebilir ve dengeleyebilir.
İkinci bir sorun kaynakların tüketilmesi. Burada kaynak text corpus, yani cümleler. Epey emekle ve zar zor bulunarak elde edilen cümleler listenin en tepesine çıkmak için yarışan bir gönüllü tarafından tüketildiği zaman çeşitlilik sağlamak gene mümkün olmuyor. Sistem şu anda en az kayda sahip olan cümleleri kaydedilmek üzere insanların önüne getiriyor, yeni eklenenler bir kere kaydedilen diğerleri arasında yeniden sırasını bekler hale geliyor.
Dolayısı ile belki on binlerce kayıt yapmak yerine cümle üretme/bulma, cümleleri kontrol etme, başkalarının kayıtlarını dinleme, tanıtıma katkıda bulunma ve en önemlisi yeni gönüllüler bulma gibi konularda emek harcamak en iyisi…