คุณมีชุดข้อมูลที่มี:
- ภาพ I1, I2, ...
- พื้นความจริงตำรา T1, T2, ... สำหรับภาพ I1, I2, ...
ดังนั้นชุดข้อมูลของคุณอาจมีลักษณะดังนี้:
Neural Network (NN) เอาท์พุทคะแนนสำหรับตำแหน่งแนวนอนที่เป็นไปได้ (มักเรียกว่าขั้นตอนเวลาในวรรณคดี) ของรูปภาพ นี่เป็นภาพสำหรับรูปภาพที่มีความกว้าง 2 (t0, t1) และ 2 ตัวอักษรที่เป็นไปได้ ("a", "b"):
| t0 | t1
--+-----+----
a | 0.1 | 0.6
b | 0.9 | 0.4
ในการฝึกอบรม NN คุณต้องระบุสำหรับแต่ละภาพที่มีตัวละครของข้อความจริงพื้นอยู่ในภาพ ยกตัวอย่างเช่นนึกภาพที่มีข้อความ "Hello" ตอนนี้คุณต้องระบุตำแหน่งที่ "H" เริ่มต้นและสิ้นสุด (เช่น "H" เริ่มต้นที่พิกเซลที่ 10 และไปจนถึงพิกเซลที่ 25) เช่นเดียวกับ "e", "l, ... ฟังดูน่าเบื่อและเป็นงานที่ยากสำหรับชุดข้อมูลขนาดใหญ่
แม้ว่าคุณจะสามารถใส่คำอธิบายประกอบชุดข้อมูลที่สมบูรณ์ด้วยวิธีนี้มีปัญหาอื่น NN ส่งออกคะแนนสำหรับตัวละครแต่ละตัวในแต่ละขั้นตอนดูตารางที่ฉันได้แสดงไว้ด้านบนสำหรับตัวอย่างของเล่น ตอนนี้เราสามารถใช้ตัวละครที่เป็นไปได้มากที่สุดในแต่ละขั้นตอนนี่คือ "b" และ "a" ในตัวอย่างของเล่น ตอนนี้ให้คิดถึงข้อความที่ใหญ่ขึ้นเช่น "สวัสดี" หากผู้เขียนมีสไตล์การเขียนที่ใช้พื้นที่มากในตำแหน่งแนวนอนอักขระแต่ละตัวจะใช้เวลาหลายขั้นตอน รับตัวละครที่น่าจะเป็นไปได้มากที่สุดต่อขั้นตอนนี้อาจทำให้เรามีข้อความเช่น "HHHHHHHHHeeeellllllllloooo" เราควรแปลงข้อความนี้เป็นผลลัพธ์ที่ถูกต้องได้อย่างไร? ลบอักขระที่ซ้ำกันแต่ละรายการหรือไม่ สิ่งนี้ให้ผล "Helo" ซึ่งไม่ถูกต้อง ดังนั้นเราจะต้องมีการประมวลผลที่ชาญฉลาด
CTC แก้ปัญหาทั้งสอง:
- คุณสามารถฝึกอบรมเครือข่ายจากคู่ (I, T) โดยไม่ต้องระบุตำแหน่งที่ตัวละครเกิดขึ้นโดยใช้การสูญเสีย CTC
- คุณไม่จำเป็นต้องประมวลผลเอาต์พุตภายหลังเนื่องจากตัวถอดรหัส CTC แปลงเอาต์พุต NN เป็นข้อความสุดท้าย
สิ่งนี้สำเร็จได้อย่างไร
- แนะนำตัวละครพิเศษ (CTC-blank เขียนเป็น "-" ในข้อความนี้) เพื่อระบุว่าไม่มีตัวอักษรใด ๆ ถูกมองในเวลาที่กำหนด
- ปรับเปลี่ยนข้อความจริงพื้นดิน T เป็น T โดยการใส่ CTC-blanks และโดยการทำซ้ำตัวอักษรด้วยวิธีที่เป็นไปได้ทั้งหมด
- เรารู้ภาพเรารู้ข้อความ แต่เราไม่รู้ว่าตัวอักษรอยู่ที่ไหน ดังนั้นเรามาลองตำแหน่งที่เป็นไปได้ทั้งหมดของข้อความ "สวัสดี ----", "-Hi ---", "- สวัสดี -", ...
- เรายังไม่ทราบว่าแต่ละอักขระมีพื้นที่ว่างเท่าใดในภาพ ดังนั้นให้ลองการจัดแนวที่เป็นไปได้ทั้งหมดโดยอนุญาตให้ตัวละครซ้ำเช่น "HHi ----", "HHHi ---", "HHHHi--", ...
- คุณเห็นปัญหาที่นี่ไหม แน่นอนว่าถ้าเราอนุญาตให้ตัวละครซ้ำหลาย ๆ ครั้งเราจะจัดการตัวละครที่ซ้ำกันอย่างแท้จริงเช่น "l" ใน "Hello" ได้อย่างไร? ในกรณีเหล่านี้ให้ใส่ช่องว่างไว้เสมอนั่นคือ "Hel-lo" หรือ "Heeellll ------- llo"
- คำนวณคะแนนสำหรับแต่ละ T ที่เป็นไปได้ (นั่นคือสำหรับการเปลี่ยนแปลงแต่ละครั้งและการรวมกันของเหล่านี้), รวมคะแนนทั้งหมดที่ให้ผลขาดทุนสำหรับคู่ (I, T)
- การถอดรหัสเป็นเรื่องง่าย: เลือกตัวละครที่มีคะแนนสูงสุดในแต่ละขั้นตอนเช่น "HHHHHHH-eeeellll-lll - oo ---", ทิ้งตัวละครที่ซ้ำกัน "H-el-lo" ทิ้งช่องว่าง "Hello" และเรา เสร็จแล้ว.
เพื่ออธิบายสิ่งนี้ดูภาพต่อไปนี้ มันอยู่ในบริบทของการรู้จำเสียงอย่างไรก็ตามการรู้จำข้อความจะเหมือนกัน การถอดรหัสจะให้ข้อความเหมือนกันสำหรับลำโพงทั้งคู่แม้ว่าการจัดตำแหน่งและตำแหน่งของอักขระจะแตกต่างกัน
อ่านเพิ่มเติม: