Masz zestaw danych zawierający:
- obrazy I1, I2, ...
- teksty prawdy gruntowej T1, T2, ... dla obrazów I1, I2, ...
Twój zestaw danych może wyglądać mniej więcej tak:
Sieć neuronowa (NN) generuje wynik dla każdej możliwej pozycji poziomej (często w literaturze nazywanej krokiem czasu t). Wygląda to mniej więcej tak dla obrazu o szerokości 2 (t0, t1) i 2 możliwych znakach („a”, „b”):
| t0 | t1
--+-----+----
a | 0.1 | 0.6
b | 0.9 | 0.4
Aby wytrenować taki NN, musisz określić dla każdego obrazu, w którym na obrazie umieszczony jest znak tekstu prawdy. Jako przykład pomyślmy o obrazie zawierającym tekst „Cześć”. Musisz teraz określić, gdzie zaczyna się i kończy „H” (np. „H” zaczyna się od 10 piksela i przechodzi do 25 piksela). To samo dla „e”, „l, ... To brzmi nudno i jest ciężką pracą dla dużych zestawów danych.
Nawet jeśli udało Ci się w ten sposób opatrzyć adnotację kompletny zestaw danych, istnieje inny problem. NN wypisuje wyniki dla każdej postaci na każdym kroku czasowym, zobacz tabelę, którą pokazałem powyżej, na przykład zabawki. Możemy teraz wybrać najbardziej prawdopodobną postać na krok czasu, w przykładzie zabawki jest to „b” i „a”. Pomyśl teraz o większym tekście, np. „Cześć”. Jeśli pisarz ma styl pisania, który zajmuje dużo miejsca w pozycji poziomej, każda postać zajmuje wiele kroków czasowych. Biorąc najbardziej prawdopodobny znak na krok czasu, może to dać nam tekst w stylu „HHHHHHHeeeellllllllloooo”. Jak powinniśmy przekształcić ten tekst we właściwy wynik? Usunąć każdy zduplikowany znak? To daje „Helo”, co nie jest poprawne. Potrzebowalibyśmy więc sprytnego przetwarzania końcowego.
CTC rozwiązuje oba problemy:
- możesz trenować sieć z par (I, T) bez konieczności określania, w której pozycji występuje znak przy użyciu utraty CTC
- nie musisz przetwarzać danych wyjściowych, ponieważ dekoder CTC przekształca dane wyjściowe NN w końcowy tekst
Jak to się osiąga?
- wprowadzić znak specjalny (pusty CTC, oznaczony w tym tekście jako „-”), aby wskazać, że żaden znak nie jest widoczny w danym przedziale czasowym
- zmodyfikuj tekst prawdy od T do T ', wstawiając odstępy CTC i powtarzając znaki na wszystkie możliwe sposoby
- znamy obraz, znamy tekst, ale nie wiemy, gdzie jest on umieszczony. Wypróbujmy więc wszystkie możliwe pozycje tekstu „Cześć ----”, „-Hi ---”, „-Hi--”, ...
- nie wiemy również, ile miejsca zajmuje każda postać na obrazie. Spróbujmy też wszystkich możliwych wyrównań, umożliwiając powtarzanie się znaków, takich jak „HHi ----”, „HHHi ---”, „HHHHi--”, ...
- widzisz tutaj problem? Oczywiście, jeśli pozwolimy postaci powtarzać się wiele razy, jak radzimy sobie z prawdziwymi zduplikowanymi znakami, takimi jak „l” w „Cześć”? Cóż, po prostu zawsze wstaw puste miejsce w takich sytuacjach, np. „Hel-lo” lub „Heeellll ------- llo”
- oblicz wynik dla każdej możliwej T '(czyli dla każdej transformacji i każdej ich kombinacji), zsumuj wszystkie wyniki, które dają stratę dla pary (I, T)
- dekodowanie jest łatwe: wybierz znak z najwyższym wynikiem dla każdego kroku czasowego, np. „HHHHHH-eeeellll-lll - oo ---”, wyrzuć duplikaty znaków „H-el-lo”, wyrzuć puste pola „Cześć”, a my są skończone.
Aby to zilustrować, spójrz na poniższy obrazek. Odbywa się to w kontekście rozpoznawania mowy, jednak rozpoznawanie tekstu jest takie samo. Dekodowanie daje ten sam tekst dla obu głośników, mimo że wyrównanie i położenie znaku są różne.
Dalsza lektura: