Bạn có một bộ dữ liệu chứa:
- hình ảnh I1, I2, ...
- văn bản sự thật mặt đất T1, T2, ... cho các hình ảnh I1, I2, ...
Vì vậy, tập dữ liệu của bạn có thể trông giống như thế:
Mạng thần kinh (NN) đưa ra điểm số cho từng vị trí nằm ngang có thể (thường được gọi là bước thời gian t trong tài liệu) của hình ảnh. Điều này trông giống như thế này đối với một hình ảnh có chiều rộng 2 (t0, t1) và 2 ký tự có thể ("a", "b"):
| t0 | t1
--+-----+----
a | 0.1 | 0.6
b | 0.9 | 0.4
Để huấn luyện NN như vậy, bạn phải chỉ định cho từng hình ảnh trong đó một ký tự của văn bản sự thật mặt đất được định vị trong hình ảnh. Ví dụ, nghĩ về một hình ảnh có chứa văn bản "Xin chào". Bây giờ bạn phải xác định nơi "H" bắt đầu và kết thúc (ví dụ "H" bắt đầu ở pixel thứ 10 và đi đến pixel thứ 25). Tương tự với "e", "l, ... Nghe có vẻ nhàm chán và là một công việc khó khăn cho các bộ dữ liệu lớn.
Ngay cả khi bạn quản lý để chú thích một bộ dữ liệu hoàn chỉnh theo cách này, vẫn có một vấn đề khác. NN đưa ra điểm số cho từng nhân vật ở mỗi bước, xem bảng tôi đã trình bày ở trên để biết ví dụ về đồ chơi. Bây giờ chúng ta có thể lấy nhân vật có khả năng nhất theo từng bước, đây là "b" và "a" trong ví dụ về đồ chơi. Bây giờ nghĩ về một văn bản lớn hơn, ví dụ "Xin chào". Nếu nhà văn có phong cách viết sử dụng nhiều không gian ở vị trí nằm ngang, mỗi nhân vật sẽ chiếm nhiều bước thời gian. Lấy ký tự có thể xảy ra nhất trong mỗi bước thời gian, điều này có thể cung cấp cho chúng tôi một văn bản như "HHHHHHHHeeeellllllllloooo". Làm thế nào chúng ta nên chuyển đổi văn bản này thành đầu ra chính xác? Xóa từng ký tự trùng lặp? Điều này mang lại "Helo", không chính xác. Vì vậy, chúng ta sẽ cần một số xử lý hậu kỳ thông minh.
CTC giải quyết cả hai vấn đề:
- bạn có thể huấn luyện mạng từ các cặp (I, T) mà không cần phải xác định vị trí xảy ra của một ký tự bằng cách sử dụng mất CTC
- bạn không phải xử lý hậu kỳ đầu ra, vì bộ giải mã CTC biến đổi đầu ra NN thành văn bản cuối cùng
Làm thế nào đạt được điều này?
- giới thiệu một ký tự đặc biệt (CTC-blank, ký hiệu là "-" trong văn bản này) để chỉ ra rằng không có ký tự nào được nhìn thấy tại một bước thời gian nhất định
- sửa đổi văn bản sự thật mặt đất T thành T 'bằng cách chèn khoảng trắng CTC và bằng cách lặp lại các ký tự theo tất cả các cách có thể
- chúng tôi biết hình ảnh, chúng tôi biết văn bản, nhưng chúng tôi không biết văn bản được định vị ở đâu. Vì vậy, chúng ta hãy thử tất cả các vị trí có thể có của văn bản "Hi ----", "-Hi ---", "--Hi--", ...
- chúng ta cũng không biết mỗi nhân vật chiếm bao nhiêu không gian trong hình ảnh. Vì vậy, chúng ta cũng hãy thử tất cả các sắp xếp có thể bằng cách cho phép các ký tự lặp lại như "HHi ----", "HHHi ---", "HHHHi--", ...
- bạn có thấy vấn đề ở đây không? Tất nhiên, nếu chúng ta cho phép một nhân vật lặp lại nhiều lần, làm thế nào để chúng ta xử lý các ký tự trùng lặp thực như "l" trong "Xin chào"? Chà, chỉ luôn luôn chèn một khoảng trống ở giữa trong những tình huống này, ví dụ: "Hel-lo" hoặc "Heeellll ------- llo"
- tính điểm cho mỗi T 'có thể (nghĩa là cho mỗi phép biến đổi và mỗi kết hợp của các phép biến đổi này), tính tổng trên tất cả các điểm mang lại tổn thất cho cặp (I, T)
- giải mã rất dễ dàng: chọn nhân vật có số điểm cao nhất cho mỗi bước thời gian, ví dụ: "HHHHHH-eeeellll-lll - oo ---", vứt bỏ các ký tự trùng lặp "H-el-lo", vứt bỏ khoảng trống "Xin chào" và chúng tôi xong rồi
Để minh họa điều này, hãy xem hình ảnh sau đây. Đó là trong bối cảnh nhận dạng giọng nói, tuy nhiên, nhận dạng văn bản là như nhau. Giải mã mang lại cùng một văn bản cho cả hai loa, mặc dù căn chỉnh và vị trí của nhân vật khác nhau.
Đọc thêm: