Otomatik konuşma tanıma ("ASR") alanına ayak basıyorsanız, Meta AI Research'ün wav2vec 2.0 ("wav2vec2") ile karşılaşmış olma ihtimaliniz yüksektir. Makine öğrenimi ("ML") modelinin nasıl çalıştığını açıklayan orijinal wav2vec2 makalesinin kendisi de dahil olmak üzere bazı mükemmel teknik kaynaklar bulunmaktadır. Ayrıca Meta AI Araştırma ekibinin web sitesinde wav2vec2 hakkında güzel bir genel bakış var.
Akademik makalenin güzel bir özetini sunduğu ve bu makaledeki wav2vec2 modeli çizimleri bu sayfadan alındığı için bir göz atmanızı tavsiye ederim. Öncekileri akılda tutarak, wav2vec2'yi "sade İngilizce" ile açıklayan çok fazla yazı yok gibi görünüyor. Bu yazıyla tam da bunu yapmaya çalışıyorum.
Bu makale, bazı temel makine öğrenimi kavramlarını anladığınızı ve wav2vec2'nin "yabani otların derinliklerine inmeden" yüksek düzeyde nasıl çalıştığını anlamakla ilgilendiğinizi varsayar.
Buna göre, sonraki bölümlerde basit açıklamalar ve yeri geldiğinde yararlı benzetmeler yerine birçok teknik ayrıntıdan kaçınılmaya çalışılmaktadır.
Bununla birlikte, wav2vec2'nin 3 ana bileşenden oluştuğunu önceden bilmek yararlı olacaktır: Özellik Kodlayıcı , Niceleme Modülü ve Transformer .
Her biri, tartışmaya bazı temel fikirlerle başlarken daha karmaşık (ama yine de sindirilebilir) noktalara doğru ilerlerken tartışılacaktır. wav2vec2'nin ASR'nin ötesinde başka amaçlar için de kullanılabileceğini unutmayın.
Bununla birlikte, burada aşağıda belirtilenler modeli ASR'ye özgü bir bağlamda tartışmaktadır.
2020'de tanıtıldığı sırada wav2vec2, ASR sistemleri oluşturmak için yeni bir çerçeve sunuyordu. Bunda bu kadar özel olan neydi? wav2vec2'den önce ASR sistemleri genellikle etiketli veriler kullanılarak eğitiliyordu. Yani önceki modeller, her örneğin ilgili bir transkripsiyona sahip olduğu birçok konuşma sesi örneği üzerinde eğitilmişti. Fikri açıklamak için şu dalga formunu göz önünde bulundurun:
Sadece bakıldığında bu dalga formunun neyi temsil ettiği tam olarak belli değil. Ancak size bu sesi üreten konuşmacının "merhaba dünya" kelimelerini söylediği söylenirse, muhtemelen dalga formunun hangi bölümlerinin onu temsil eden metne karşılık geldiği konusunda bazı akıllı tahminler yapabilirsiniz.
Dalga formunun ilk bölümünün "merhaba" kelimesiyle ilişkili olduğunu -doğru olarak- tahmin edebilirsiniz. Benzer şekilde ASR modelleri, konuşulan ses dalga biçimi bölümleri ile yazılı metin arasında nasıl ilişki kurulacağını öğrenebilir.
Bununla birlikte, orijinal wav2vec2 araştırmacılarının makalelerinde belirttiği gibi, "[birçok] konuşma tanıma sistemi, dünya çapında konuşulan yaklaşık 7.000 dilin büyük çoğunluğu için mevcut olmayan, kabul edilebilir performansa ulaşmak için binlerce saatlik konuşmanın yazıya geçirilmesini gerektirir."
Böylece wav2vec2 araştırmacıları, sistemi eğitmek için "binlerce saatlik konuşmanın yazıya geçirilmesinin" gerekli olmadığı yeni bir model icat etti. Yararlı bir insan benzetmesine gönderme yapıyorlar: Bebekler konuşmayı bir kelimeyi duyup hemen o kelimenin metin temsilini görerek öğrenmezler .
Konuşma temsillerini çevrelerindeki kişileri (ebeveynleri, kardeşleri vb.) dinleyerek öğrenirler. wav2vec2 de benzer şekilde öğrenir: önce dinleyerek .
Elbette bunun nasıl başarıldığı bu makaledeki tartışmanın amacıdır. wav2vec2'nin genel olarak 2 şeyi başarmak için tasarlandığını unutmayın:
Etiketlenmemiş ses örneklerinin hangi konuşma birimlerine verilmesi gerektiğini öğrenin.
Doğru konuşma birimlerini tahmin edin.
Bu noktada bu noktaların ne anlama geldiğini tam olarak anlamanıza gerek yok. Aşağıda açıklanacaktır. Şimdilik onları aklınızın bir köşesinde tutun.
Diyelim ki bazı İngilizce konuşanlar için çok büyük bir ses örnek veri kümeniz olduğunu hayal edin. Fonetik konusunda resmi bir geçmişiniz olmasa bile, İngilizce dilinin kelimeler, cümleler vb. oluşturmak için "bir araya getirilen" bir dizi temel ses kullanılarak seslendirildiğini sezgisel olarak anlayabilirsiniz.
Elbette, eğer İngilizce konuşuyorsanız, bu şekilde konuşmayı düşünmezsiniz ve söylemek istediğiniz her şeyi seslendirmeniz aşağı yukarı otomatiktir! Ancak mesele şu ki, konuşulan İngilizce dili - ve gerçekte herhangi bir konuşulan dil - daha temel, ayrık seslere ayrıştırılabilir.
Eğer bir ASR modelini bu temel sesleri "çıkarmaya" bir şekilde ikna edebilirsek, bu, konuşulan dilin herhangi bir ses örneğini bunları kullanarak kodlamamıza olanak tanır. wav2vec2'nin ses verileri üzerinde ön eğitim yaparak yaptığı şey budur.
Bu bağlamda ön eğitim, belirli bir ses verisi seti için temel seslerin ne olması gerektiği açıkça "söylenmediği" sürece, model eğitiminin ilk bölümünün kendi kendine denetlendiği anlamına gelir.
Biraz daha aşağıya inersek, sistem çok sayıda yalnızca ses örneğiyle "beslenir" ve bu örneklerden bir dizi temel konuşma birimini öğrenebilir.
Bu nedenle, her ses örneği etkili bir şekilde bu konuşma birimlerinin bazı kombinasyonlarından oluşur; aynı şekilde, konuşulan bir ses örneğini bir fonem dizisine bölebilirsiniz.
Daha da önemlisi, wav2vec2'nin öğrendiği temel konuşma birimleri fonemlerden daha kısadır ve uzunlukları 25 milisaniyedir.
Bu noktada ortaya çıkan soru şu: wav2vec2 bu konuşma birimlerini yalnızca sesten nasıl öğreniyor?
Konuşma birimlerini öğrenme süreci Özellik Kodlayıcı ile başlar. wav2vec2 "konuşma sesini çok katmanlı bir evrişimsel sinir ağı aracılığıyla kodlar."
Evrişimli sinir ağları veya CNN'ler, belirli bir girdiden özellikleri, bu özellikler önceden açıkça tanımlanmadan öğrenmemize olanak tanıyan modellerdir.
Bir CNN'nin her katmanının , bir girdiden özelliklerin çıkarılması olarak düşünülebilir; bu özellikler, siz daha yüksek katmanlara çıktıkça giderek daha karmaşık hale gelir.
Ses verileri söz konusu olduğunda, bir CNN'deki ilk katmanın ses bilgisi pencerelerini incelediğini ve ilkel sesler gibi düşük seviyeli özellikleri çıkardığını hayal edebilirsiniz.
Aynı CNN'deki daha sonraki bir katman, daha önceki katmanlarda çıkarılan alt düzey özelliklerden yararlanarak, ses birimlerine yaklaşan sesler gibi daha yüksek düzey özellikleri kodlayacaktır.
Bu fikri takiben wav2vec2, her ses örneğinin zaman dilimlerini Özellik Kodlayıcıya geçirerek ve her dilimin gizli bir temsilini oluşturarak "konuşma birimlerine hangi etiketlenmemiş ses örneklerinin verilmesi gerektiğini öğrenmeye" başlayabilir.
Ancak gizli temsillerin toplamı ayrık konuşma birimlerini temsil etmez. Bu temsillerin bir şekilde ayrıklaştırılması gerekir. Bu, Özellik Kodlayıcının çıktısının bir Niceleme Modülüne geçirilmesiyle gerçekleştirilir.
Niceleme Modülü , Özellik Kodlayıcı tarafından oluşturulan tüm farklı ses temsillerini etkili bir şekilde alır ve bunları sınırlı sayıda konuşma birimine indirger. Bu noktada wav2vec2'nin tek bir dil üzerinde mi yoksa çeşitli diller üzerinde mi önceden eğitilmesi gerektiğini sormak faydalı olacaktır.
Mantık bize, birçok dilde kullanılabilecek ASR sistemlerini tasarlarken, tek bir dil yerine birden çok dili temsil eden konuşma birimlerini yakalamanın muhtemelen daha yararlı olacağını söylüyor.
Bu amaçla, wav2vec2'nin çok dilli ses örneklerinden oluşan bir seçkiyle önceden eğitilmesi, modelin aslında birden çok dili yakalayabilen konuşma birimleri üretmesini sağlar.
wav2vec2 araştırmacıları bu yaklaşımın arkasındaki değere dikkat çekti çünkü "bazı diller için [ses] verileri bile sınırlıdır." Orijinal bulguları , "bazı birimlerin yalnızca belirli bir dil için kullanıldığını, diğerlerinin ise benzer dillerde ve hatta bazen çok benzer olmayan dillerde kullanıldığını" belirledi.
Konuşma birimlerinin envanteri, konuşma dilindeki ses örneklerini kodlayabilme yolunda ilk adımdır. Ancak asıl yapmak istediğimiz şey wav2vec2'yi bu birimlerin birbirleriyle nasıl ilişkilendiği konusunda eğitmektir.
Başka bir deyişle, hangi konuşma birimlerinin birbiriyle aynı bağlamda ortaya çıkmasının muhtemel olduğunu anlamak istiyoruz. wav2vec2 bu görevi Transformer katmanı aracılığıyla gerçekleştirir.
Transformer temel olarak wav2vec2'nin istatistiksel anlamda konuşma birimlerinin çeşitli ses örnekleri arasında nasıl dağıtıldığını öğrenmesine olanak tanır. Bu anlayış, modelin ön eğitimden sonra "göreceği" ses örneklerinin kodlanmasını kolaylaştırır.
Sonuçta bir ASR sisteminin, daha önce "görmediği" belirli bir ses dizisi için bir metin transkripsiyonunu oluşturabilmesi gerekir. Yukarıda açıklanan adımlarla ön eğitimden sonra wav2vec2'ye bu amaç için ince ayar yapılır . Bu sefer model, ses örneklerinin ve bunlarla ilişkili transkripsiyonların örneklerini açıkça gösteriyor.
Bu noktada model, ses örneklerini konuşma birimleri dizileri olarak kodlamak ve bu konuşma birimleri dizilerini sözcük dağarcığında transkripsiyonları temsil eden ayrı ayrı harflerle (yani "a" ile " arasındaki harfler) eşlemek için ön eğitim sırasında öğrendiklerini kullanabilir. z" İngilizce durumunda).
İnce ayar sırasındaki öğrenme, wav2vec2 modelinin eğitimini tamamlar ve ince ayar sırasında eğitiminin parçası olmayan yeni ses örnekleri için metni tahmin etmesine olanak tanır.
Elbette wav2vec2'nin düşük seviye mekaniği yukarıda sunulanlardan çok daha karmaşıktır. Ancak tekrarlamak gerekirse, bu makalenin amacı size modelin nasıl çalıştığına ve nasıl eğitildiğine ilişkin basit, kavramsal bir anlayış sağlamaktır.
wav2vec2, ASR sistemleri oluşturmak için çok güçlü bir makine öğrenimi çerçevesidir ve 2021'in sonlarında tanıtılan XLS-R varyasyonu 128 dilde eğitilmiştir, böylece ASR modellerini birden fazla dilde tasarlamak için gelişmiş bir platform sağlar.
Giriş bölümünde de belirtildiği gibi, daha fazla bilgi edinmenize yardımcı olacak çok sayıda mükemmel teknik kaynak mevcuttur. Özellikle Hugging Face tarafından sağlananların özellikle yararlı olduğunu görebilirsiniz.