"Hey Siri" özelliği, kullanıcıların Siriʼyi eller serbest olarak çağırmasına olanak tanır. Çok küçük bir konuşma tanıyıcı her zaman çalışır ve yalnızca bu iki kelimeyi dinler. "Hey Siri" algıladığında, Siriʼnin geri kalanı aşağıdaki konuşmayı bir komut veya sorgu olarak ayrıştırır. "Hey Siri" dedektörü, sesinizin akustik modelini her an konuşma sesleri üzerinden bir olasılık dağılımına dönüştürmek için bir Derin Sinir Ağı (DNN) kullanır. Ardından, söylediğiniz ifadenin "Hey Siri" olduğuna dair bir güven puanı hesaplamak için geçici bir entegrasyon işlemi kullanır. Skor yeterince yüksekse, Siri uyanır. Bu makale, temel teknolojiye bir göz atmaktadır. Öncelikle makine öğrenimi hakkında bir şeyler bilen, ancak konuşma tanıma hakkında daha az bilgi sahibi olan okuyuculara yöneliktir.
Siriʼnin yardımını almak için "Hey Siri" deyin. "Hey Siri", Siriʼyi eller serbest hale getirdiği için bir düğmeye basmaya gerek yok. Basit görünüyor, ancak Siriʼyi hızlı ve verimli bir şekilde uyandırmak için perde arkasında oldukça fazla şey oluyor. Donanım, yazılım ve İnternet hizmetleri, harika bir deneyim sağlamak için birlikte sorunsuz bir şekilde çalışır.
Siriʼyi düğmelere basmadan kullanabilmek, özellikle yemek pişirirken veya araba kullanırken ya da Apple Watch kullanırken eller meşgulken kullanışlıdır. Şekil 1ʼde gösterildiği gibi, tüm sistemin birkaç parçası vardır. Ana otomatik konuşma tanıma, doğal dil yorumlama ve çeşitli bilgi hizmetleri de dahil olmak üzere, Siri uygulamasının çoğu "Bulutta" dır. Dedektörün kullandığı akustik modellere güncelleme sağlayabilen sunucular da bulunmaktadır. Bu makale, iPhone veya Apple Watch gibi yerel aygıtınızda çalışan kısma odaklanmaktadır. Özellikle, dedektöre odaklanır: her zaman yalnızca uyandırma cümlesini dinleyen özel bir konuşma tanıyıcı ("Hey Siri" özelliği etkinleştirilmiş yeni bir iPhoneʼda).
Bir iPhone veya Apple Watchʼtaki mikrofon, sesinizi saniyede 16000 hızında bir anlık dalga biçimi örnekleri akışına dönüştürür. Bir spektrum analiz aşaması, dalga biçimi örnek akışını, her biri yaklaşık 0,01 saniyelik ses spektrumunu tanımlayan bir dizi çerçeveye dönüştürür. Bir seferde bu çerçevelerin yaklaşık yirmisi (0,2 saniyelik ses) akustik modele, bu akustik kalıpların her birini bir dizi konuşma sesi sınıfı üzerinde bir olasılık dağılımına dönüştüren bir Derin Sinir Ağıʼna (DNN) beslenir: Toplam yaklaşık 20 ses sınıfı için "Hey Siri" ifadesi, ayrıca sessizlik ve diğer konuşmalar. Şekil 2ʼye bakın.
DNN, çoğunlukla matris çarpımlarından ve lojistik doğrusal olmayanlardan oluşur. Her "gizli" katman, filtre bankası girdilerini sağlam sınıflara dönüştürmek için eğitimi sırasında DNN tarafından keşfedilen bir ara temsildir. Nihai doğrusal olmayanlık esasen bir Softmax işlevidir (diğer bir deyişle genel lojistik veya normalleştirilmiş üstel), ancak log olasılıkları istediğimiz için gerçek matematik biraz daha basittir.
Akustik modelin çıktısı, her çerçeve için fonetik sınıflar üzerinden puanların dağılımını sağlar. Bir fonetik sınıf, tipik olarak, " /s/ʼnin ilk bölümünden önce yüksek bir ön sesli harf gelir ve ardından bir ön sesli harf gelir" gibi bir şeydir.
Akustik modelin çıktıları, hedef cümle için doğru sırada yüksekse "Hey Siri" algılamak istiyoruz. Her çerçeve için tek bir puan üretmek için bu yerel değerleri zaman içinde geçerli bir sırayla topluyoruz. Bu, Şekil 2ʼnin son (üst) katmanında, aynı birime ve sırayla bir sonrakine bağlantıları olan tekrarlayan bir ağ olarak gösterilmektedir. Her birimin içinde bir maksimum işlem ve bir ek vardır:
nerede
Hem s i hem de m i , eğitim verilerinde ilgili etiketlere sahip segmentlerin sürelerinin analizine dayanmaktadır. (Bu prosedür, dinamik programlamanın bir uygulamasıdır ve Gizli Markov Modelleri—HMMʼler hakkındaki fikirlere dayalı olarak türetilebilir.)
"Hey Siri" dedektöründeki hesaplamaların neredeyse tamamı akustik modeldedir. Zamansal entegrasyon hesaplaması nispeten ucuzdur, bu nedenle büyüklük veya hesaplama kaynaklarını değerlendirirken bunu göz ardı ederiz.
En küçük DNNʼyi kullandığımızı varsayarak akustik sinyali çeşitli aşamalarda gösteren Şekil 4ʼe bakarak dedektörün nasıl çalıştığı hakkında daha iyi bir fikir edinebilirsiniz. En altta mikrofondan gelen dalga formunun bir spektrogramı bulunur. Bu durumda birisi "Hey Siri ne..." diyor. Daha parlak kısımlar ifadenin en gürültülü kısımlarıdır. Hey Siri deseni dikey mavi çizgiler arasındadır.
H1ʼden H5ʼe kadar etiketlenmiş alternatif yeşil ve mavi yatay şeritler, beş gizli katmanın her birindeki birimlerin sayısal değerlerini (aktivasyonları) gösterir. Her katmandaki 32 gizli birim, benzer çıktılara sahip birimleri bir araya getirecek şekilde bu şekil için düzenlenmiştir.
Bir sonraki şerit (sarı köşegen ile) akustik modelin çıktısını gösterir. Her çerçevede, cümledeki her konum için bir çıkış, ayrıca sessizlik ve diğer konuşma sesleri için başka çıkışlar vardır. En üstte gösterilen nihai puan, Denklem 1ʼe göre parlak köşegen boyunca yerel puanların toplanmasıyla elde edilir.
Siriʼyi etkinleştirip etkinleştirmemeye karar vermek için puanı bir eşikle karşılaştırırız. Aslında eşik sabit bir değer değildir. Yanlış aktivasyonların sayısını önemli ölçüde artırmadan, zor koşullarda Siriʼyi etkinleştirmeyi kolaylaştırmak için biraz esneklik oluşturduk. Bir birincil veya normal eşik ve normalde Siriʼyi tetiklemeyen daha düşük bir eşik vardır. Puan alt eşiği aşıyor ancak üst eşiği geçmiyorsa, gerçek bir "Hey Siri" etkinliğini kaçırmış olabiliriz. Skor bu aralıktayken sistem birkaç saniyeliğine daha hassas bir duruma girer, böylece kullanıcı daha fazla çaba harcamadan cümleyi tekrarlarsa Siri tetiklenir. Bu ikinci şans mekanizması, sistemin kullanılabilirliğini önemli ölçüde artırır, Yanlış alarm oranını çok fazla arttırmadan, çünkü sadece kısa bir süre için bu ekstra hassas durumda. (Daha sonra doğruluk için test etmeyi ve ayarlamayı tartışırız.)
"Hey Siri" dedektörü yalnızca doğru olmakla kalmaz, aynı zamanda hızlı olması ve pil ömrü üzerinde önemli bir etkisi olmaması gerekir. Ayrıca bellek kullanımını ve işlemci talebini, özellikle de en yüksek işlemci talebini en aza indirmemiz gerekiyor.
Ana işlemciyi yalnızca tetikleyici ifadeyi dinlemek için tüm gün çalıştırmaktan kaçınmak için, iPhoneʼun Her Zaman Açık İşlemcisi (AOP) (küçük, düşük güçlü bir yardımcı işlemci, yani tümleşik Hareket Yardımcı İşlemcisi) mikrofon sinyaline (açık) erişime sahiptir. 6S ve sonrası). Akustik modelin (DNN) küçük bir versiyonuna sahip bir dedektörü çalıştırmak için AOPʼnin sınırlı işlem gücünün küçük bir kısmını kullanıyoruz. Puan bir eşiği aştığında, hareket yardımcı işlemcisi, sinyali daha büyük bir DNN kullanarak analiz eden ana işlemciyi uyandırır. AOP destekli ilk versiyonlarda, ilk dedektör 5 katmanlı 32 gizli birimli bir DNN kullanıyordu ve ikinci dedektör 5 katman 192 gizli birimliydi.
Apple Watch, çok daha küçük pil nedeniyle bazı özel zorluklar sunuyor. Apple Watch, diğer iOS aygıtlarında birinci ve ikinci geçişler için kullanılanlar arasında orta büyüklükte bir akustik modele sahip tek geçişli bir "Hey Siri" dedektörü kullanır. "Hey Siri" dedektörü, yalnızca saat hareket yardımcı işlemcisi ekranı açan bir bilek kaldırma hareketi algıladığında çalışır. Bu noktada, WatchOSʼun yapması gereken çok şey var (güç açma, ekranı hazırlama, vb.) bu nedenle sistem "Hey Siri"yi oldukça sınırlı bilgi işlem bütçesinin yalnızca küçük bir kısmını (~%5) ayırıyor. Tetikleyici ifadenin başlangıcını yakalamak için zamanında ses yakalamayı başlatmak bir zorluktur, bu nedenle dedektörü başlatma şeklimizde olası kesme için izinler veririz.
Her zaman açık olan "Hey Siri" dedektörünü, çevredeki herhangi biri tetikleyici cümleyi söylediğinde yanıt verecek şekilde tasarladık. Yanlış tetikleyicilerin sıkıntısını azaltmak için kullanıcıyı kısa bir kayıt oturumundan geçmeye davet ediyoruz. Kayıt sırasında kullanıcı, her biri "Hey Siri" ile başlayan beş cümle söyler. Bu örnekleri cihaza kaydediyoruz.
Herhangi bir olası yeni "Hey Siri" ifadesini, saklanan örneklerle aşağıdaki gibi karşılaştırırız. (İkinci geçiş) detektörü, her duruma hizalanmış çerçeveler üzerinden ortalama alarak akustik deseni sabit uzunlukta bir vektöre dönüştürmek için kullanılan zamanlama bilgilerini üretir. Ayrı, özel olarak eğitilmiş bir DNN, bu vektörü, tasarım gereği aynı konuşmacıdan gelen kalıpların yakın olma eğilimindeyken, farklı konuşmacılardan gelen kalıpların daha uzak olma eğiliminde olduğu bir "hoparlör alanına" dönüştürür. Dedektörü tetikleyen sesin kayıtlı kullanıcı tarafından konuşulan "Hey Siri" olup olmadığına karar vermek için kayıt sırasında oluşturulan referans modellerine olan mesafeleri başka bir eşikle karşılaştırırız.
Bu işlem yalnızca başka bir kişi tarafından konuşulan "Hey Siri"nin iPhoneʼu tetikleme olasılığını azaltmakla kalmaz, aynı zamanda benzer sesli diğer ifadelerin Siriʼyi tetikleme hızını da azaltır.
iPhoneʼdaki çeşitli aşamalar bunu iletirse, dalga biçimi Siri sunucusuna ulaşır. Ana konuşma tanıyıcı bunu "Hey Siri" (örneğin "Hey Cidden") dışında bir şey olarak duyarsa, sunucu Şekil 1ʼde gösterildiği gibi telefonu tekrar uyku moduna almak için bir iptal sinyali gönderir. daha önce ekstra bir kontrol sağlamak için ana tanıyıcının kısaltılmış bir sürümünü cihazda çalıştırın.
DNN akustik modeli, "Hey Siri" dedektörünün kalbinde yer alır. Şimdi onu nasıl eğittiğimize bir göz atalım. Hey Siri özelliği bulunmadan çok önce, kullanıcıların küçük bir kısmı, düğmeye basarak başlayan bir isteğin başlangıcında "Hey Siri" derdi. ABD İngilizcesi dedektör modeli için ilk eğitim seti için bu tür "Hey Siri" ifadelerini kullandık. Ana konuşma tanıyıcıyı eğitmek için kullanılan genel konuşma örneklerini de dahil ettik. Her iki durumda da eğitim ifadelerinde otomatik transkripsiyon kullandık. Siri ekip üyeleri, çeviri yazıların bir alt kümesini doğruluk açısından kontrol etti.
"Hey Siri" ifadesinin dile özgü bir fonetik özelliği oluşturduk. ABD İngilizcesinde, biri "ciddi" diğeri "Suriye"de olduğu gibi "Siri"de farklı ilk sesli harflerle iki varyantımız vardı. Ayrıca, özellikle ifade genellikle virgülle yazıldığından, iki kelime arasında kısa bir ara ile başa çıkmaya çalıştık: "Hey, Siri." Her fonetik sembol, her biri akustik modelden kendi çıktısına sahip olan üç konuşma sesi sınıfı (başlangıç, orta ve son) ile sonuçlanır.
Ana Siri tanıyıcının her kare için bir ses sınıfı etiketi sağladığı DNNʼyi eğitmek için bir konuşma topluluğu kullandık. Ana tanıyıcı tarafından kullanılan binlerce ses sınıfı vardır, ancak hedef cümleyi (ilk sessizlik dahil) açıklamak için yalnızca yirmi kadarı ve diğer her şey için bir büyük sınıf sınıfı gerekir. Eğitim süreci, yalnızca yerel ses düzenine dayalı olarak ilgili durumlar ve telefonlarla etiketlenmiş çerçeveler için 1ʼe yaklaşan DNN çıktıları üretmeye çalışır. Eğitim süreci, standart geri yayılım ve stokastik gradyan inişi kullanarak ağırlıkları ayarlar. Theano, Tensorflow ve Kaldi dahil olmak üzere çeşitli sinir ağı eğitim yazılımı araç setlerini kullandık.
Bu eğitim süreci, yerel akustik gözlemler verilen telefonların ve durumların olasılıklarına ilişkin tahminler üretir, ancak bu tahminler, eğitim setindeki (öncelikler) telefonların frekanslarını içerir, bunlar çok düzensiz olabilir ve bu frekansla çok az ilgisi olabilir. dedektörün kullanılacağı koşullar, bu nedenle akustik model çıktıları kullanılmadan önce öncelikleri telafi ediyoruz.
Bir modelin eğitimi yaklaşık bir gün sürer ve genellikle herhangi bir zamanda eğitimde birkaç model vardır. Genelde üç versiyonu eğitiriz: yardımcı hareket işlemcisinde ilk geçiş için küçük bir model, ikinci geçiş için daha büyük bir model ve Apple Watch için orta boy bir model.
"Hey Siri", Siriʼnin desteklediği tüm dillerde çalışır, ancak "Hey Siri" mutlaka Siriʼyi dinlemeyi başlatan ifade değildir. Örneğin, Fransızca konuşan kullanıcıların "Dis Siri" demesi gerekirken, Korece konuşan kullanıcıların "Siri 야" ("Siri Ya" gibi ses çıkarır) demesi gerekir. ve Tayca "หวัดดี Siri". ("Wadi Siri" gibi geliyor.)
İdeal bir dedektör, kullanıcı "Hey Siri" dediğinde ateşlenir ve diğer zamanlarda ateşlemez. Dedektörün doğruluğunu iki tür hatayla tanımlarız: yanlış zamanda ateşleme ve doğru zamanda ateşlememe. Yanlış kabul oranı (FAR veya yanlış alarm oranı), saat başına (veya aktivasyonlar arasındaki ortalama saat) yanlış aktivasyon sayısıdır ve yanlış reddetme oranı (FRR), başarısız olan aktivasyon girişimlerinin oranıdır. (FARʼı ölçmek için kullandığımız birimlerin FRR için kullandıklarımızla aynı olmadığını unutmayın. Boyutlar bile farklıdır. Dolayısıyla eşit bir hata oranı kavramı yoktur.)
Belirli bir model için, etkinleştirme eşiğini değiştirerek iki tür hata arasındaki dengeyi değiştirebiliriz. Şekil 6, erken geliştirme modellerinin iki boyutu için bu değiş tokuşun örneklerini göstermektedir. Eşiğin değiştirilmesi eğri boyunca hareket eder.
Geliştirme sırasında, toplanması ve hazırlanması oldukça pahalı olan ancak gerekli olan büyük bir test seti kullanarak sistemin doğruluğunu tahmin etmeye çalışıyoruz. "Olumlu" veriler ve "olumsuz" veriler vardır. "Pozitif" veriler, hedef kelime öbeğini içerir. "Hey Siri" sistemi tarafından alınan ifadeleri kullanabileceğimizi düşünebilirsiniz, ancak sistem tetiklenemeyen girişimleri yakalamaz ve sistemi bu tür başarısız girişimleri mümkün olduğunca içerecek şekilde geliştirmek istiyoruz.
İlk başta, bazı kullanıcıların Ana Sayfa düğmesine basarken söylediği "Hey Siri" sözlerini kullandık, ancak bu kullanıcılar Siriʼnin dikkatini çekmeye çalışmıyorlar (düğme bunu yapıyor) ve mikrofon bir kolun erişebileceği mesafede olmalı, oysa "Hey Siri"nin bir odada çalışmasını da istiyoruz. Mutfak (hem yakın hem uzak), araba, yatak odası, restoran gibi çeşitli koşullarda her dilin anadili tarafından özel olarak kayıtlar yaptık.
Yanlış aktivasyonları (ve yanlış uyanmaları) test etmek için "negatif" verileri kullanırız. Veriler, hem arka plan seslerini (özellikle konuşma) hem de bir kullanıcının diğerine söyleyebileceği ifade türlerini temsil etmek için, birçok dilde Siriʼye yapılan podcastʼler ve "Hey Siri" olmayan girişler dahil olmak üzere çeşitli kaynaklardan binlerce saatlik kaydı temsil eder. kişi. Bu kadar çok veriye ihtiyacımız var çünkü yanlış alarm oranlarını haftada bir gibi düşük bir oranda tahmin etmeye çalışıyoruz. (Negatif verilerde hedef ifadenin herhangi bir tekrarı varsa, bunları bu şekilde etiketliyoruz, böylece onlara verilen yanıtları hata olarak saymıyoruz.)
Ayarlama, büyük ölçüde hangi eşiklerin kullanılacağına karar verme meselesidir. Şekil 6ʼda, daha büyük model için alt takas eğrisi üzerindeki iki nokta, olası normal ve ikinci şans eşiklerini göstermektedir. Daha küçük (ilk geçiş) model için çalışma noktası sağ tarafta olacaktır. Bu eğriler yalnızca dedektörün iki aşaması içindir ve kişiselleştirilmiş aşamayı veya sonraki kontrolleri içermez.
Test setinde daha iyi performans gösteren modellerin muhtemelen gerçekten daha iyi olduğundan emin olsak da, çevrimdışı test sonuçlarını kullanıcı deneyimine ilişkin yararlı tahminlere dönüştürmek oldukça zordur. Bu nedenle, daha önce açıklanan çevrimdışı ölçümlere ek olarak, yanlış alarm oranlarını (kullanıcı "Hey Siri" demeden Siri açıldığında) ve taklitçi kabul oranlarını (detektörü eğiten kullanıcı dışında biri açıldığında Siri açıldığında) tahmin ederiz. "Hey Siri"), en son iOS aygıtlarında ve Apple Watchʼta üretim verilerinden örnek alarak haftalık olarak "Hey Siri" diyor. Bu bize ret oranları vermez (sistem geçerli bir "Hey Siri"ye yanıt vermediğinde) ancak ret oranlarını, geçerli eşiğin hemen üzerindeki aktivasyonların oranından tahmin edebiliriz,
Burada açıklanan yaklaşımın varyasyonlarını kullanarak eğitim ve test yaparak "Hey Siri"yi ve ona güç veren modeli sürekli olarak değerlendiriyor ve iyileştiriyoruz. Birçok farklı dilde eğitim veriyoruz ve çok çeşitli koşullar altında testler yapıyoruz.
Bir dahaki sefere "Hey Siri" dediğinizde, bu ifadeye yanıt vermek için devam eden her şeyi düşünebilirsiniz, ancak bunun "sadece işe yarayacağını" umuyoruz.