"Aç" dediğinizde ağzınızdan çıkan şey bir hava dalgasıdır. Mikrofon onu bir sayı dizisine çevirir. Sonra bir yerde, o sayı dizisinin "aç" anlamına geldiğine karar verilir. Arada olan şey, bilgisayarın dili anlaması değil — çok daha mütevazı ve çok daha zekice bir şey.
Önce ses nedir?
Nefes verirken ciğerlerden gelen hava gırtlaktaki ses tellerini titreştirir. Bu titreşim erkeklerde saniyede yüz ilâ yüz elli, kadınlarda iki yüz ilâ iki yüz elli kez olur. Ortaya çıkan ham vızıltı, boğaz, burun boşlukları ve ağız tarafından biçimlendirilir.
Bu ayrım önemli: ses tellerinin ürettiği kaynak ile ağzın uyguladığı filtre farklı şeylerdir. Bir sesli harfi diğerinden ayıran şey titreşimin hızı değil, ağzın o anda aldığı şekildir. Makineye öğretilecek olan da budur.
Dalgadan sayılara
Sürekli bir dalgayı bilgisayara sokmak için onu belli aralıklarla örneklemek gerekir. Buradaki klasik kural şunu söyler: örnekleme sıklığı, sinyaldeki en yüksek frekansın iki katından fazlaysa, orijinal dalga örneklerden eksiksiz geri kurulabilir. Yeterince sık bakarsanız hiçbir şey kaybolmaz.
Ardından sinyal temizlenir: pencereleme ile küçük parçalara bölünür, filtrelerden geçirilir. Amaç, kayıt sırasında bulaşan gürültüyü azaltmak ve elde daha durgun bir sinyal bırakmak.
Konuşma nerede başlıyor?
Mikrofon sürekli kayıt yapar, ama söylenen şey kaydın küçük bir parçasıdır. Gerisi sessizlik ve oda gürültüsüdür. Sistemin önce nerede konuşma olduğunu bulması gerekir.
Bunun için iki basit ölçü yeter: parçanın enerjisi ve sinyalin sıfır çizgisini kaç kez kestiği. Sessizlikte enerji düşüktür. Tıslamalı seslerde enerji düşük ama sıfır geçişi yüksektir. İkisine birden bakınca konuşma, gürültüden şaşırtıcı derecede iyi ayrılır.
Sesi birkaç sayıya sıkıştırmak
Bir saniyelik ses binlerce örnek demektir. Bunları doğrudan karşılaştırmak hem ağır hem anlamsızdır. Bunun yerine her küçük parça, ağzın o andaki şeklini betimleyen bir avuç katsayıya indirgenir. Bu yönteme doğrusal öngörücü kodlama deniyor.
Arkasındaki fikir güzel: her örneği, kendinden önceki birkaç örneğin ağırlıklı toplamı olarak tahmin etmeye çalışın. Tahminin ne kadar iyi olduğu değil, hangi ağırlıklarla iyi olduğu bilgi taşır. O ağırlıklar, ses yolunun geometrisini kodlar. Böylece binlerce sayı, birkaç katsayıya iner.
Aynı kelime, farklı hız
Şimdi asıl sorun: aynı kişi "aç" kelimesini iki kez farklı hızda söyler. İki kayıt farklı uzunluktadır, tepeleri farklı yerlere düşer. Nokta nokta karşılaştırma işe yaramaz.
Çözüm dinamik zaman bükmesi: zamanı esnetmeye izin verin. Algoritma, iki dizinin başını başına, sonunu sonuna bağlayan ve aradaki toplam uyuşmazlığı en aza indiren yolu arar. Bir kaydın uzattığı hece, diğerinin kısa hecesine eşlenebilir.
Sezgi Zamanı esnetmek
İki lastik şeridi düşünün; üzerlerine aynı şarkı yazılmış ama biri gerilmiş. Şeritleri yan yana koyup, harfleri eşleştirmek için gereken en az germeyi bulun. Dinamik zaman bükmesi tam olarak bunu, sayılarla yapar.
Sistem her komut için önceden kaydedilmiş bir şablon tutar. Yeni bir söz geldiğinde onu her şablonla karşılaştırır, en düşük maliyeti bulur. Maliyet belirlenen eşiğin altındaysa komut tanınmış sayılır; değilse sistem dürüstçe "bilmiyorum" der.
Bugün nerede duruyor?
Bu mimari on beş Türkçe komutu — sıfırdan dokuza kadar rakamlar, ayrıca aç, kapat, sil, iptal, ara — tanıyacak şekilde kuruldu. Küçük, kapalı bir sözcük dağarcığı için hâlâ fazlasıyla yeterli bir yaklaşım.
Bugünkü ses asistanları ise şablon karşılaştırması yapmıyor; milyonlarca saatlik konuşmayla eğitilmiş sinir ağları kullanıyor. Fark yalnızca ölçek değil: yeni sistemler sözcük dağarcığıyla sınırlı değil, hiç duymadıkları cümleleri de çözebiliyorlar.
Yine de zincirin ilk halkaları değişmedi. Konuşmanın nerede başladığını bulmak, sinyali anlamlı katsayılara indirmek, zamandaki kaymaları hoş görmek — bunlar hâlâ her ses sisteminin içinde, bir biçimde duruyor.
Bu yazı neye dayanıyor?
Yazı, Selim Kusursuz'un Türkçe Ses Tanıma başlıklı derlemesine (2019) ve orada incelenen modele dayanıyor.
- Rabiner, Schafer, Digital Processing of Speech Signals.
- Baygün, Türkçe komutları tanıyan bir ses tanıma sistemi geliştirilmesi, yüksek lisans tezi, Pamukkale Üniversitesi, 2006.
- LeCun, Bengio, Hinton, Deep learning, Nature, 2015.