Shazam tam olarak nasıl çalışıyor?
(perthirtysix.com/how-the-heck-does-shazam-work)- Müzik tanıma, mikrofonun aldığı hava titreşimlerini bir dalga formuna dönüştürdükten sonra bunu spektrograma ve az sayıdaki güçlü frekans tepesine sıkıştırıp şarkının parmak izini üretme yöntemiyle gerçekleşir
- Ham dalga formu ses seviyesi ve çalma ortamına göre kolayca değiştiği için tanımlama ölçütü olarak kullanmak zordur; kısa bölümlerin her birine FFT uygulanarak zamana göre frekans yapısı ortaya çıkarılmalıdır ki kararlı bir karşılaştırma mümkün olsun
- Geriye kalan tepeler tekil noktalar olarak değil, anchor ve target zone çiftleri halinde eşlenip hash'e dönüştürülür; bu kombinasyonlar belirli bir kaydı ayırt edecek kadar özgül birer parmak izi hash'i işlevi görür
- Arama, şarkıları tek tek karşılaştırmak yerine hash'i anahtar olarak doğrudan bulan hash-first yapısını kullanır; son aşamada da eşleşen hash'lerin zaman aralıklarının da uyuşup uyuşmadığı kontrol edilerek güven artırılır
- Sunucu tabanlı büyük ölçekli veritabanlarıyla cihaz üstü yöntemler ölçek ve kısıtlar bakımından farklı olsa da, özünde çoğu bilgiyi atıp yalnızca landmark peak'leri bırakarak kısa ve gürültülü kliplerde bile şarkıyı hızlıca bulmak yatar
Sesi tersine çözümleme süreci
- Telefon mikrofonu, çok ince bir diyafram ile hava titreşimlerini ölçer ve bunları zaman içindeki hava basıncını gösteren sayı dizisi olan dalga formuna çevirip kaydeder
- Kulağın kulak zarı da aynı basınç dalgalarını alır, ancak telefon bunu sesin kendisi olarak değil, sayısal bir dizi olarak ele alır
- Gelen ses saniyede on binlerce kez örneklenir; genellikle 44,100 Hz kullanılır
- Ham dalga formuyla şarkıyı tanımak zordur; aynı şarkı daha yüksek sesle çalındığında tamamen farklı bir dalga formuna dönüşebilir, farklı şarkılar da benzer dalga formları üretebilir
- Çalma ortamı değiştiğinde aynı şarkının dalga formu da değişebileceğinden, dalga formunun kendisi tanımlama ölçütü olmaya uygun değildir
- Bu sorunu azaltmak için dalga formunu küçük parçalara ayırıp her parçaya FFT uygulayarak her anda hangi frekansların bulunduğunu ayrıştırmak gerekir
- Bunu soru biçimine çevirirsek, "Bu kısa ses parçasını yeniden oluşturmak için hangi saf tonları toplamak gerekir?" anlamına gelir
- Her parçanın sonucunu yan yana dizdiğinizde zaman ekseni, frekans ekseni ve parlaklık ekseninden oluşan bir spektrogram elde edilir
- FFT, ne kadar karmaşık olursa olsun her dalga formunun farklı frekans, genlik ve fazlara sahip sinüs dalgalarının toplamı olarak ifade edilebilmesini kullanır
- Örneğin 1,024 örnek verdiğinizde, her frekansta ne kadar enerji bulunduğunu gösteren bir spektrum döndürür
- Her frekans bin'i için tüm örnekler o frekanstaki sinüs dalgasıyla çarpılıp toplanır; ilgili frekans gerçek sinyalde varsa toplam büyür, yoksa birbirini götürür
- FFT'nin kilit noktası hızdır; naif bir ayrıştırma her parça için milyonlarca işlem gerektirirken FFT bunu matematiksel simetrileri kullanarak kabaca n log n düzeyine indirir
- Bu hız sayesinde telefonda bile saniyede yüzlerce kez çalıştırılabilir
- Cihaz bu pencereyi ses üzerinde sürekli kaydırır, her parçaya FFT uygular ve sonuçları biriktirerek spektrogramı oluşturur
- Basit örnekler tek bir saf frekanstan oluşan sentetik sesler olduğu için anlamayı kolaylaştırır, ancak gerçek müzik çok daha karmaşıktır
- Gerçek müziği veya mırıldanmayı mikrofondan verdiğinizde spektrogram çok daha karmaşık görünür, ama FFT bunun içindeki yapıyı yine gerçek zamanlı olarak ortaya çıkarır
- Tarayıcı örneğinde tüm ses tarayıcı içinde işlenir; kayıt yapılmaz ve dışarı gönderilmez
Azaldıkça güçlenen parmak izi
- Sistem tüm spektrogramı saklamaz; yalnızca en büyük tepeleri bırakıp bunu seyrek bir nokta kümesine sıkıştırır
- Zayıf sinyalleri atıp yalnızca en güçlü noktaları bıraktığınızda akustik açıdan önemli işaret noktaları kalır
- Bu kadar çok şeyi atmanın nedeni, tüm spektrogramı saklayıp aramanın bilgisayarlar için bile aşırı yavaş olmasıdır
- Eşik yükseldikçe silik sinyaller kaybolur ve yalnızca büyük tepeler ayakta kalır
- Bu yöntem gürültüye dayanıklılığı artırır
- Arka plan gürültüsü spektrogramın geneline düşük enerji ekler, ancak genellikle belirli bir bölgedeki en güçlü tepeyi oluşturamaz
- Geriye kalan işaret noktaları, gürültüyü delip geçen baskın frekanslardır
- Buna karşılık bu parmak izi yöntemi, şarkıyı doğrudan sizin söylemeniz durumunda performans kaybetmeye daha yatkındır
- Çok iyi söyleseniz bile orijinal kayıtla aynı hash'lerin oluşmama ihtimali yüksektir
- Bu yüzden daha yeni makine öğrenimi tabanlı sistemler, tam frekanslar yerine melodiyi temel alarak mırıldanma ve şarkı söylemeyi işler
Noktaları bağlayıp hash üretmek
- Tek bir noktanın ayırt ediciliği düşüktür, ama iki noktanın birleşimi çok daha az rastlantısal olduğu için parmak izi hash'i olarak kullanıma daha uygundur
- Örneğin belirli bir andaki tek başına 1,200 Hz, binlerce şarkıda yer alabilir; fakat 1,200 Hz'den 0.3 saniye sonra gelen 2,400 Hz kombinasyonu çok daha özeldir
- Algoritma her tepeyi sırayla bir anchor olarak alır ve onun sağında zaman ve frekans aralığı tanımlı bir target zone belirleyerek içindeki tüm tepelerle eşleştirir
- Her çift, iki frekans ve zaman farkı olmak üzere toplam üç sayıdan kısa bir hash üretir
- Hash, aynı girdide her zaman aynı sonucu veren ve girdi çok az değiştiğinde bile tamamen farklı bir değere dönüşen kısa bir kod gibi çalışır
- Shazam benzeri sistemler küçük sapmaları ele alacak yapılara sahiptir, ancak temel olarak hash tam frekans ve zamanlamadan üretilir
- Sonuç olarak bu hash, şarkının kendisinden çok belirli bir kayıt sürümünün parmak izi gibi davranır
- Bu nedenle cover veya remix'leri eşleştirmek daha zordur
- 3 dakikalık tek bir şarkıdan bile binlerce böyle parmak izi hash'i üretilebilir ve veritabanı bunların hepsini saklar
- Telefon, 5 saniyelik klipten elde ettiği az sayıdaki hash ile gelir; veritabanı ise çok sayıda şarkıdan çıkarılmış milyonlarca hash ile eşleştirme aşamasına geçer
Doğru eşleşmeyi bulmak
- Her hash bir tür adres gibi kullanılır ve sistem, klipten elde edilen her hash için devasa tabloda doğrudan arama yaparak o hash'i içeren şarkıları bulur
- Şarkıları tek tek taramak yerine hash'in kendisi anahtar olarak kullanılır
- Sezgisel song-first yaklaşımı, tüm şarkıları tek tek kontrol edip hash örtüşmelerini doğrulamayı gerektirir; bu yüzden şarkı sayısı arttıkça yavaşlar
- Metin bunu O(N) zaman olarak ifade eder
- Örnek veritabanı ve 5 saniyelik klip hash listesi üzerinden bu verimsizlik görselleştirilir
- Bilgisayar bunu tersine çevirip hash-first yaklaşımıyla işleyebilir
- Her hash için doğrudan "Bu hash'i hangi şarkılar içeriyor?" diye sorar
- Bu yapı, kitabın sonundaki dizin gibi çalışır: tüm sayfaları yeniden okumak yerine doğrudan belirli kelimenin girişine gidersiniz
- Bu yaklaşım aramayı neredeyse O(1) düzeyine yaklaştırır
- İster 100 şarkı olsun ister 100 milyon, işlem kabaca benzer sürede tamamlanır
- Olası hash sayısı çok büyük olduğu için, milyonlarca şarkı olsa bile her adreste genellikle yalnızca az sayıda kayıt bulunur
- Aynı hash'i paylaşmak tek başına yeterli değildir; son doğrulama zaman aralıkları üzerinden yapılır
- Örneğin klip içinde 17403C ile 19A998 arasında 1.2 saniye varsa, aday eşleşmedeki aynı iki hash de 1.2 saniye arayla görünmelidir
- Eşleşen hash'lerin zaman farkları birbirini tutuyor ve sayıları da yeterince fazlaysa, eşleşmenin güveni yükselir
- Tüm sistem, bilgisayarların özellikle iyi yaptığı işlere göre tasarlanmıştır
- Sayı karşılaştırmaları ve adres tabanlı aramalar merkezde yer alır
- Bu yüzden milyonlarca şarkı üzerinde bile tüm arama 1 saniyeden çok daha kısa sürede tamamlanabilir
Daha modern yaklaşımlar
- Shazam benzeri birçok şarkı tanıma servisi ses klibini sunucuya gönderir ve eşleştirmeyi sunucudaki büyük parmak izi veritabanında yapar
- Veritabanı çok büyük olduğu, sürekli değiştiği ve arama için ciddi hesaplama kaynağı gerektiği için bu yapı kullanılır
- Buna karşılık Apple'ın cihaz üstü tanıması ve Google Pixel'in Now Playing özelliği her şeyi telefonda yerel olarak çalıştırır
- Daha küçük ve seçilmiş bir veritabanı ile optimize edilmiş modeller kullanırlar
- Tam kapsayıcılık yerine hızı tercih ederler ve gürültü ile ses dönüşümlerine daha dayanıklı gelişmiş makine öğrenimi yaklaşımlarını da içerirler
- Cihaz üstü yaklaşım daha hızlıdır ve internet bağlantısı olmadan da çalışır, ancak eşleştirilebilecek şarkı veritabanının çok daha küçük olması gibi bir kısıtı vardır
- Yeni şarkıların eklenmesi de genellikle daha yavaştır
- Konum değişikliği algılandığında yeni verilerin yeniden indirilmesi gerekebilir
- Bölgelere göre popüler şarkı farkları da cihaz üstü veri bileşimini etkiler
- Japonya'daki hit şarkılar ile ABD'deki hit şarkılar farklı olabilir
- Eşleşme ister sunucuda ister cihaz içinde yapılsın, temel teknik aynıdır
- Bilginin çoğunu atıp yalnızca birkaç landmark peak bıraktığınızda, gürültülü bir kafede alınan 5 saniyelik klip bile milyonlarca şarkı arasından tek birini işaret edecek kadar hassas bir koordinat kümesine dönüşür
- Tanımanın özü, çok şey duymaktan çok neyin göz ardı edileceğini doğru biçimde atmak gibidir
Temel alınan makale
- Metnin önemli bir bölümü Avery Wang'ın 2003 tarihli An Industrial-Strength Audio Search Algorithm makalesine dayanır
- Sinyal işleme ve sistem tasarımına daha derin bakmak isterseniz, doğrudan başlangıç noktası bu makaledir
- Genel akış; dalga formu dönüşümü, tepe seçimi, tepe çifti hash'leme, ters dizin araması ve zaman hizalama doğrulamasından oluşur
- Bu adımlar birleşerek kısa ve gürültülü kliplerde bile hızlı şarkı tanımayı mümkün kılar
1 yorum
Hacker News yorumları
Birlikte bakmak için Shazam ile ilgili kaynaklar iyi olur https://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf orijinal makale; gerçekten ilgileniyorsanız yazarın YouTube sunumunu da aramaya değer https://news.ycombinator.com/item?id=18069968 içinde bir Shazam çalışanının yazısı var, https://news.ycombinator.com/item?id=38538996 içinde ortak kurucunun onayladığı bir açıklama var, https://news.ycombinator.com/item?id=41127726 içinde ise algoritmanın Go ile yapılmış bir yeniden uygulaması var Sonuçta ML'de de çoğu zaman asıl değer kodun kendisinden çok veri tarafında oluyor diye düşünüyorum
Benim son tahminim, bunun hiç de öyle olmayabileceği yönünde Pop müzikte genel olarak iyi sonuç veriyordu ama buz pateni yarışmasının arasındaki molalarda çalan epey iyi synth müzikleri birkaç kez Shazam'ladım, hiçbirini doğru bulamadı Henüz yayımlanmamış parçalardı ya da aşırı niş müziklerdi belki, ama Shazam'ın ciddi biçimde başarısız olmuş olması da mümkün görünüyor
Bu, elbette TV'deki ACR için de kullanılan aynı aileden bir teknoloji Ama Shazam'ın internette çok daha iyi bir itibara sahip olmasının sebebi, kullanıcının niyetine ve rızasına saygı göstermesi gibi duruyor TV'de de benzer bir uygulama yapılıp veriler yalnızca reklam satışına gitmese, tüketiciye gerçekten fayda sağlayan bir biçim mümkün olmaz mı diye düşünüyorum
Bu yazı muhtemelen 2003 tarihli Shazam makalesindeki orijinal ses parmak izi algoritmasını görsel olarak anlatan en iyi kaynaklardan biri Yine de şimdiye kadar bir noktada ML modeli kullanmaya geçmiş olmaları da muhtemel gibi geliyor
DTW(dynamic time warping) diye bir algoritma var ve sık sık gözden kaçıyor İçgüdüme göre Shazam'da da bunun bir ölçüde kullanılmış olması muhtemel
Aynı kaydı tanımak o kadar da zor değil Aynı kayıt söz konusu olduğunda akor ilerleyişi ve zamanlama tam olarak tekrar edilebilir olduğu için, bu tür tanıma teknolojileri zaten 10 yıldan da uzun süre önce vardı Buna karşılık cover versiyon gibi farklı bir kayıttan aynı şarkıyı tanımak çok daha zor Audible Magic, https://www.audiblemagic.com/2024/02/07/identifying-cover-songs-live-performances-ai-clones-and-more/ içinde aynı parçanın farklı performanslarını hatta parodilerini bile tanıyabildiğini iddia ediyor; tabii bu, AI ve daha fazla hesaplama kullanan bir yaklaşım
Yine bu konu mu diye düşündüm ama meğer SCP'ymiş Bu alan adı biraz şüpheli görünüyor CameronMacLeod'un 2022 tarihli yazısından daha kapsamlı bir analiz olarak https://news.ycombinator.com/item?id=38531428 var, Slate'in 2009 tarihli yazısı ise https://news.ycombinator.com/item?id=893353
Bunu proje listeme eklemeliyim Dinosaur game yapıp zıplamayı tuşla değil ü-ürü-üü sesiyle yaptırmak eğlenceli olabilir
Shazam benzeri uygulamaların algılamasını engellemenin bir yolu var mı diye merak ediyorum Mesela gürültü karıştırmak ya da başka teknikler mümkün mü?
1986'da Apple ][c üzerinde bunu bir bilim projesi olarak yapmıştım