Selamlar dostlar, bu konuda sizlere yeni projem olan OPUS (Organizing-Partitioning-Unknown-Speakers)'dan bahsedeceğim. Bu bahsetme biraz soru cevap tarzında olacak. Hadi başlayalım!
OPUS nedir?
OPUS Osman Rauf Uçar tarafından geliştirilmiş bir ses verisi düzenleme aracıdır.
Konuşmacısı ortak olmayan büyük ses verilerini konuşmacılarına göre ayırarak ortaya TTS (Text-to-Speech) modelleri eğitiminde kullanılabilecek bir veri çıkartır.
OPUS nasıl ortaya çıktı?
16 yaşında bir genç olarak kabul edersiniz ki yazılım konusunda tecrübem gerçekten de az. Son dönemlerdeki projem olan Capricorn Assist üzerinde çalışırken, projenin ses motorunun gerçekten rezalet durumda olduğuna kanaat getirdim. Sonuç olarak bir ses motoru geliştirmeye karar verdim. Ancak proje üzerinde çalışırken önümdeki en büyük problemin geliştirme süreci değil, veri seti oluşturma süreci olduğunu fark ettim.
Uzun bir süre veri seti araştırdıktan sonra elimde bulunan büyük veri setlerinin hiçbirinin sesleri tek bir kişiye okutmadığını fark ettim. Bu tarz büyük veri setleri genellikle ya gönüllü kişilerin okuduğu verilerden oluşuyor (örneğin Mozilla'nın Common Voice projesi) ya da haber ve belgesel kanalları gibi kaynaklardan alınmış oluyor (örneğin ISSAI Turkish Speech Corpus).
Bu yüzden bu setleri doğrudan alıp ses motoru eğitiminde kullanma imkânınız yok. Ya oturup kendiniz okuyacaksınız ya da bu veri setlerini düzenleyeceksiniz.
OPUS nasıl çalışır?
Öncelikle elimizde bir ses veri seti olması gerekiyor ve bu verilerin wav dosyası formatında olması lazım. OPUS, elimizdeki verileri alarak sayısal verilere dönüştürür. Bu işleme embedding diyoruz.
Embedding çalışma mantığı için şöyle düşünebilirsiniz: Ses dosyalarından çıkarılan özellikler, matematiksel sayılarla ifade edilir. Bu sayılar, seslerin birbirine benzerliğini ölçmemizi sağlar.
Embedding çalışma mantığı için bir görsel:
Görselin alıntılandığı site: The Best Embedding Models for Retrieval-Augmented Generation (RAG)
Sonrasında bu sayısal değerlerden birbirine benzer olanlar, kümeler oluşturacak şekilde gruplanır ve klasörlenir.
Ama bu işlemlerden önce elimizde konuşmacı sayısı olması gerekir. OPUS, konuşmacı sayısını bulmak için embedding değerlerini kullanarak Elbow Method (Dirsek Yöntemi) denilen bir işlem yapar.
Bu yöntem şöyle çalışır:
Bu teknik çalıştıktan sonra OPUS, tahmin ettiği konuşmacı sayısıyla kümeleme işlemine başlar ve işi tamamlar.
OPUS nasıl test edildi?
ASUS ROG RTX2070 Super
Intel I7 12700K
Samsung 970 EVO PLUS 500GB
MSI PRO Z690A
Elimde ISSAI'nin ISSAI_TSC_218 adındaki Türkçe bir veri seti vardı. Bu veri setinin Train klasörünün içerisinde 179.258 ses dosyası ve yaklaşık 22,5 GB boyutunda veri bulunuyordu. Bu ses dosyalarının transkripsiyonları da mevcut, ancak metin dosyaları oldukları için çok az yer kaplıyorlar.
Bu veri seti üzerinde konuşmacı tahmini işlemi yapmaya karar verdim. İlk olarak, tahmini konuşmacı sayısının 50 ile 1500 arasında olabileceğini öngördüm. Daha sonra bu aralıkta 5'er 5'er artarak tüm olasılıkları denemesini söyledim.
Konuşmacı sayısı tahminini oluşturmak yaklaşık 13 saat sürdü. Elbette bu süre; sistem özelliklerine, ses sayısına ve verdiğiniz minimum-maksimum konuşmacı sayısına göre değişkenlik gösterebilir. Benim sistemim yeterince güçlü olmasına rağmen bu kadar sürdü. Eğer daha düşük donanıma sahip bir sistemde çalışacaksanız bu işlem çok daha uzun sürebilir.
Devamında görsel olarak bu görsel oluşturuldu:
Sonrasında da bu görselle klasörleme işlemi (Kısa sürdü) yapıldı:
Ve bu şekilde OPUS görevi tamamladı.
OPUS verileri nasıl?
Veriler gerçekten harika. Bu kadar büyük bir veri setinde hata yapsa bile aynı klasöre koyduğu sesler birbirine gerçekten de benzeyen sesler TTS eğitiminde sorun çıkarmaz diye umuyorum.
Konum bu kadardı okuduğunuz için çok teşekkür eder iyi günler dilerim.
Github: GitHub - Airlemur/Airlemur-OPUS-Organizing-Partitioning-Unknown-Speakers: OPUS is a Python tool that automatically detects speakers in audio archives and organizes the files for each speaker into separate folders.
Geliştirmeciler için not: Python 9.x sürümlerini kullanın ve wikiye göz atın. Projede en çok zorlandığım şey kütüphaneleri birlikte kullanmaktı.
OPUS nedir?
OPUS Osman Rauf Uçar tarafından geliştirilmiş bir ses verisi düzenleme aracıdır.
Konuşmacısı ortak olmayan büyük ses verilerini konuşmacılarına göre ayırarak ortaya TTS (Text-to-Speech) modelleri eğitiminde kullanılabilecek bir veri çıkartır.
OPUS nasıl ortaya çıktı?
16 yaşında bir genç olarak kabul edersiniz ki yazılım konusunda tecrübem gerçekten de az. Son dönemlerdeki projem olan Capricorn Assist üzerinde çalışırken, projenin ses motorunun gerçekten rezalet durumda olduğuna kanaat getirdim. Sonuç olarak bir ses motoru geliştirmeye karar verdim. Ancak proje üzerinde çalışırken önümdeki en büyük problemin geliştirme süreci değil, veri seti oluşturma süreci olduğunu fark ettim.
Uzun bir süre veri seti araştırdıktan sonra elimde bulunan büyük veri setlerinin hiçbirinin sesleri tek bir kişiye okutmadığını fark ettim. Bu tarz büyük veri setleri genellikle ya gönüllü kişilerin okuduğu verilerden oluşuyor (örneğin Mozilla'nın Common Voice projesi) ya da haber ve belgesel kanalları gibi kaynaklardan alınmış oluyor (örneğin ISSAI Turkish Speech Corpus).
Bu yüzden bu setleri doğrudan alıp ses motoru eğitiminde kullanma imkânınız yok. Ya oturup kendiniz okuyacaksınız ya da bu veri setlerini düzenleyeceksiniz.
OPUS nasıl çalışır?
Öncelikle elimizde bir ses veri seti olması gerekiyor ve bu verilerin wav dosyası formatında olması lazım. OPUS, elimizdeki verileri alarak sayısal verilere dönüştürür. Bu işleme embedding diyoruz.
Embedding çalışma mantığı için şöyle düşünebilirsiniz: Ses dosyalarından çıkarılan özellikler, matematiksel sayılarla ifade edilir. Bu sayılar, seslerin birbirine benzerliğini ölçmemizi sağlar.
Embedding çalışma mantığı için bir görsel:
Görselin alıntılandığı site: The Best Embedding Models for Retrieval-Augmented Generation (RAG)
Sonrasında bu sayısal değerlerden birbirine benzer olanlar, kümeler oluşturacak şekilde gruplanır ve klasörlenir.
Ama bu işlemlerden önce elimizde konuşmacı sayısı olması gerekir. OPUS, konuşmacı sayısını bulmak için embedding değerlerini kullanarak Elbow Method (Dirsek Yöntemi) denilen bir işlem yapar.
Bu yöntem şöyle çalışır:
- Konuşmacı sayısını 2’den başlayıp belirli bir üst sınıra kadar (örneğin 30) dener.
- Her konuşmacı sayısı için KMeans algoritması çalıştırılır ve “küme içi hata” yani inertia hesaplanır.
- Inertia, kümeler içindeki noktaların merkezlerine olan uzaklıklarının toplamıdır.
- K değeri büyüdükçe inertia azalır (küme içindeki noktalar merkeze daha yakın olur) ama bu azalma bir noktadan sonra yavaşlar.
- Grafik çizildiğinde bu “yavaşlama” bir dirsek gibi görünür.
- İşte o dirsek noktası, optimal K yani konuşmacı sayısı olarak seçilir.
Bu teknik çalıştıktan sonra OPUS, tahmin ettiği konuşmacı sayısıyla kümeleme işlemine başlar ve işi tamamlar.
OPUS nasıl test edildi?
ASUS ROG RTX2070 Super
Intel I7 12700K
Samsung 970 EVO PLUS 500GB
MSI PRO Z690A
Elimde ISSAI'nin ISSAI_TSC_218 adındaki Türkçe bir veri seti vardı. Bu veri setinin Train klasörünün içerisinde 179.258 ses dosyası ve yaklaşık 22,5 GB boyutunda veri bulunuyordu. Bu ses dosyalarının transkripsiyonları da mevcut, ancak metin dosyaları oldukları için çok az yer kaplıyorlar.
Bu veri seti üzerinde konuşmacı tahmini işlemi yapmaya karar verdim. İlk olarak, tahmini konuşmacı sayısının 50 ile 1500 arasında olabileceğini öngördüm. Daha sonra bu aralıkta 5'er 5'er artarak tüm olasılıkları denemesini söyledim.
Konuşmacı sayısı tahminini oluşturmak yaklaşık 13 saat sürdü. Elbette bu süre; sistem özelliklerine, ses sayısına ve verdiğiniz minimum-maksimum konuşmacı sayısına göre değişkenlik gösterebilir. Benim sistemim yeterince güçlü olmasına rağmen bu kadar sürdü. Eğer daha düşük donanıma sahip bir sistemde çalışacaksanız bu işlem çok daha uzun sürebilir.
Devamında görsel olarak bu görsel oluşturuldu:
Sonrasında da bu görselle klasörleme işlemi (Kısa sürdü) yapıldı:
Ve bu şekilde OPUS görevi tamamladı.
OPUS verileri nasıl?
Veriler gerçekten harika. Bu kadar büyük bir veri setinde hata yapsa bile aynı klasöre koyduğu sesler birbirine gerçekten de benzeyen sesler TTS eğitiminde sorun çıkarmaz diye umuyorum.
Konum bu kadardı okuduğunuz için çok teşekkür eder iyi günler dilerim.
Github: GitHub - Airlemur/Airlemur-OPUS-Organizing-Partitioning-Unknown-Speakers: OPUS is a Python tool that automatically detects speakers in audio archives and organizes the files for each speaker into separate folders.
Geliştirmeciler için not: Python 9.x sürümlerini kullanın ve wikiye göz atın. Projede en çok zorlandığım şey kütüphaneleri birlikte kullanmaktı.