Aşağıdakileri içeren bir veri kümeniz var:
- görüntüleri I1, I2, ...
- zemin gerçeği metinleri T1, T2, ... görüntüler için I1, I2, ...
Böylece veri kümeniz şöyle görünebilir:
Bir Sinir Ağı (NN) , görüntünün olası her yatay konumu (genellikle literatürde zaman adımı t olarak adlandırılır) için bir puan verir . Bu, genişliği 2 (t0, t1) ve 2 olası karakteri ("a", "b") olan bir resim için şöyle görünür:
| t0 | t1
--+-----+----
a | 0.1 | 0.6
b | 0.9 | 0.4
Böyle bir NN'yi eğitmek için, zemin gerçeği metninin bir karakterinin görüntüde nereye yerleştirileceğini her görüntü için belirtmelisiniz. Örnek olarak, "Merhaba" metnini içeren bir resim düşünün. Şimdi "H" nin nerede başlayıp biteceğini belirtmelisiniz (örn. "H" 10. pikselde başlar ve 25. piksele kadar gider). Aynı "e", "l, ... Bu sıkıcı geliyor ve büyük veri kümeleri için zor bir iş.
Tam bir veri kümesine bu şekilde açıklama ekleseniz bile başka bir sorun daha vardır. NN, her bir zaman adımında her bir karakterin puanlarını verir, bir oyuncak örneği için yukarıda gösterdiğim tabloya bakın. Artık zaman adımı başına en olası karakteri alabiliriz, bu oyuncak örneğinde "b" ve "a" dır. Şimdi daha büyük bir metin düşünün, örneğin "Merhaba". Yazarın yatay konumda çok yer kaplayan bir yazma stili varsa, her karakter birden fazla zaman adımını işgal eder. Zaman adımı başına en olası karakteri alarak, bu bize "HHHHHHHHeeeellllllllloooo" gibi bir metin verebilir. Bu metni nasıl doğru çıktıya dönüştürmeliyiz? Her yinelenen karakter kaldırılsın mı? Bu doğru olmayan "Helo" verir. Bu yüzden, biraz zekice işlemeye ihtiyacımız olacak.
CTC her iki sorunu da çözer:
- CTC kaybını kullanarak bir karakterin hangi konumda meydana geldiğini belirtmek zorunda kalmadan ağı çiftlerden (I, T) eğitebilirsiniz
- CTC kod çözücüsü NN çıkışını son metne dönüştürdüğü için çıktıyı sonradan işlemek zorunda değilsiniz
Bu nasıl başarılır?
- Belirli bir zaman adımında hiçbir karakterin görülmediğini belirtmek için özel bir karakter (CTC boş, bu metinde "-" ile gösterilir)
- CTC boşlukları ekleyerek ve karakterleri mümkün olan her şekilde tekrarlayarak temel doğruluk metnini T'den T 'ye değiştirin
- görüntüyü biliyoruz, metni biliyoruz, ancak metnin nereye yerleştirildiğini bilmiyoruz. Şimdi, "Merhaba ----", "-Hi ---", "-Hi--" metninin tüm olası konumlarını deneyelim ...
- biz de her karakterin görüntüde ne kadar yer kapladığını bilmiyoruz. Öyleyse karakterlerin "HHi ----", "HHHi ---", "HHHHi--" gibi tekrarlamalarına izin vererek olası tüm hizalamaları deneyelim.
- burada bir problem görüyor musun? Tabii ki, bir karakterin birden çok kez tekrarlanmasına izin verirsek , "Merhaba" daki "l" gibi gerçek yinelenen karakterleri nasıl ele alırız ? Eh, bu durumlarda arasına her zaman boşluk koyun, yani "Hel-lo" veya "Heeellll ------- llo"
- olası her T 'için skoru hesaplayın (her bir dönüşüm ve bunların her kombinasyonu için), çift için kayıp veren (I, T) tüm puanları toplayın
- kod çözme kolaydır: her zaman adımı için en yüksek puanı alan karakteri seçin, örneğin "HHHHHH-eeeellll-lll - oo ---", yinelenen karakterleri "H-el-lo" atın, boşlukları "Merhaba" atın ve biz yapılır.
Bunu göstermek için aşağıdaki resme bir göz atın. Konuşma tanıma bağlamındadır, ancak metin tanıma aynıdır. Kodlama, karakterin hizalaması ve konumu farklı olsa da, her iki hoparlör için aynı metni verir.
Daha fazla okuma: