Первые системы автоматического распознавания печатного текста появились достаточно давно — примерно тогда же, когда возникла необходимость оцифровывать все то, что было написано человечеством на бумаге. Почти сразу же выяснилось, что методы, применяемые для строго выверенных шрифтов вроде Times New Roman, совершенно не подходят для текста рукописного. Вот почему задача распознавания текстов, написанных от руки, до сих пор не решена окончательно. Как сегодня распознают рукописи, улучшились ли методы распознавания за последние несколько лет и нужно ли вообще автоматическое распознавание рукописного текста? Обо всем этом мы поговорили с участниками Global Innovation Forum 2019, прошедшего в Ереване в октябре этого года, — основателем компании ABBYY Давидом Яном и исследователем компании DeepMind Алексом Грейвзом.
Простая и сложная оптика
Практически все известные и нужные человеку тексты сегодня существуют в цифровом виде: так к ним проще получить доступ и использовать для каких-то задач помимо чтения (например, для быстрого поиска информации).
Учитывая гигантский объем книг и периодических изданий, накопленных со времен изобретения книгопечатания, с этой задачей можно было справиться только с помощью автоматических методов.
Поэтому ближе к концу XX века появились и стали активно развиваться технологии оптического распознавания символов (англ. optical character recognition, сокращенно — OCR). Самый простой и до сих пор применяемый метод — матричное сопоставление: каждая буква в исходном изображении разбивается на пиксельные матрицы, а затем сопоставляется с матрицами, имеющимися у компьютера. При совпадении матриц буква считается распознанной.
Чтобы такой метод распознавания работал, для каждого языка достаточно иметь сравнительно небольшое количество данных — образцов написания букв, по которым и делаются попиксельные матрицы. Так, если у системы оптического распознавания есть матрицы всех 33 букв русского алфавита с учетом возможных регистров, а также всех знаков препинания, то она сможет распознать любой русскоязычный текст.
Все, однако, не так просто. Этот метод контекстно-зависим и не может сделать шаг в сторону от имеющейся у него матрицы: если пиксели в букве на исходном изображении расположены чуть иначе, то система в лучшем случае распознает ее с ошибкой (например, вместо п в тексте внезапно появится л), а в худшем — не распознает совсем.
Грубо говоря, программа, которая умеет распознавать текст, набранный шрифтом Times New Roman, не распознает текст, набранный Arial, и наоборот.
Разумеется, технологии распознавания текста, основанные исключительно на матричном сопоставлении, сейчас достаточно универсальны и могут работать со всеми известными типографам шрифтами и всеми языками (поэтому они до сих пор широко используются).
Проблема возникает тогда, когда программе приходится иметь дело со шрифтами, для которых достоверной пиксельной матрицы нет или ее очень трудно создать, — речь идет, в первую очередь, о текстах, написанных человеком от руки.
В случае с рукописным текстом (или другими редкими или нетипичными шрифтами) вариант с обычным сопоставлением пиксельных матриц может вовсе не работать. В таком случае используется немного другой способ — распознавание отдельных образов (впрочем, оно тоже оптическое).
Каждая буква, несмотря на то, что пишется разными людьми по-разному, все же состоит из одинаковых частей: в прописной р — длинная палочка, а в в — две фигуры, похожие на капельки. В случае с распознаванием отдельных образов также используется попиксельное сравнение, но вариантов того, как могут выглядеть буквы, у системы гораздо больше — просто потому, что там используются отдельные их части.
В таком случае каждый отдельный знак — это уже вектор характерных для буквы графических признаков, а задача сводится к тому, чтобы найти их в исходном тексте: например, с помощью метода k-ближайших соседей, используемого для решения задач классификации и кластеризации.
Работа подобных алгоритмов требует большого количества размеченных данных, но сегодня эта предварительная работа во многих случаях уже проделана. Например, в датасете MNIST содержится около 70 тысяч изображений написанных от руки цифр, и точность распознавания у обученных на нем алгоритмов очень высока — для сверточных нейросетей она составляет более 99 процентов.
Мысль на кончике пера
При автоматическом распознавании текста может возникнуть и другая сложность: между распознаванием рукописного текста прямо в процессе написания (своего рода режим «онлайн») и распознаванием уже готового текста («офлайн») есть большая разница.
В первом случае на помощь приходят дополнительные данные — фиксируемый процесс письма: благодаря тому, что у компьютера есть данные о ведении пера (то есть о том, как выводятся буквы на экране), он может распознать их сразу же.
Например, рукописное о выводится, начиная почти с самой верхней точки буквы, а похожая петля у рукописного а начинается с другого места, и даже в том случае, если в слове «поинтереснее» первые две гласные расположить очень близко друг к другу так, что ои сольются и будут напоминать рукописное а с лишней палочкой, проблемы не возникнет: система, следившая за процессом написания, отметила, с какой точки перо начало выводить первую букву.
Кроме того, во время письма случаются паузы — это тоже вспомогательная и весьма полезная информация. Так, если мы возьмем слово «дышишь», — известный пример того, насколько неразборчивым может быть русский рукописный текст даже для человека, — то компьютеру легче будет прочитать его, ориентируясь на микропаузы, возникающие между написанием отдельных букв.
Хорошим материалом для сравнения двух методов распознавания почерков могут послужить врачебные рецепты, которые, как известно, практически нечитаемы. Наблюдая за тем, как врач выводит каждую отдельную букву, мы скорее поймем, что он пишет, чем глядя на уже готовые каракули.
С «офлайн»-распознаванием, таким образом, все непросто — оно имеет дело с уже написанным текстом, без какой-либо информации о том, как именно его писали. В целом, программу для распознавания таких текстов обучают примерно так же, как и в случае с «онлайн»-распознаванием, но приходится учитывать, что доступная информация, необходимая для правильного узнавания букв, здесь очень ограничена.
Алекс Грейвз, исследователь из компании DeepMind, для решения этой задачи использует мультипространственные рекуррентные нейросети со слоем долгой краткосрочной памяти. Его алгоритм на вход также берет попиксельные данные из написанного текста, но при этом в ходе обучения не опирается на какой-то конкретный алфавит, что сильно облегчает задачу по сбору данных.
Другими словами, такая система не просто универсальна для любого шрифта (из-за чего может справиться с рукописным текстом), но также годится для любого языка, а, например, рукописную арабскую вязь распознает с точностью выше 91 процента.
Повседневное и исследовательское
Методы автоматического распознавания рукописного текста, таким образом, уже существуют — они не всегда работают идеально, но все же сегодня дают куда более надежный результат, чем те, что были предложены, например, 30 лет назад.
Возникает, однако, вопрос, нужны ли они вообще — по крайней мере, обычному человеку в его повседневной жизни.
«Алгоритм для распознавания рукописного текста, который я разработал, использовался для автоматической сортировки писем канадской почтой. Не знаю, так ли это до сих пор, но методы, которые применялись для создания подобных алгоритмов, подходили и для решения другой задачи — распознавания устной речи», — говорит Алекс Грейвз.
Алгоритмы для распознавания рукописного текста, разумеется, необходимы и сейчас. Хотя бы для того, например, чтобы разбирать те же врачебные рецепты. Но у программ OCR есть задачи и другого рода — исследовательские.
В распоряжении человечества имеется множество разнообразных рукописей — как сравнительно новых, так и древних, написанных на малопонятных и малознакомых языках. Их затруднительно оцифровать даже с помощью оператора-человека — ведь зачастую надо не просто распознать каждый отдельный символ или слово, необходимо восстановить смысл текста, некогда очевидный для современников.
Трудности часто возникают уже на уровне грамматики — ведь автор или переписчик вполне мог писать с ошибками, и они сами по себе представляют для историков языка интерес, поскольку позволяют «услышать» давно замолкшую живую речь. Подключение словаря или даже корпуса для языка распознавания не всегда дает результат, так как словарь ошибок не фиксирует, а корпус может не знать именно этой ошибки.
Впрочем, умное распознавание рукописного текста способно значительно помочь в работе и с такими текстами.
Например, в случае, если качество оцифрованного материала не очень хорошее, классическое сопоставление матриц с опорой на словарь, ограниченный возможными для языка (или чуть уже — для этого текста) словами, позволяет исключить из распознаваемого текста заведомо неверные варианты и даже заменить их верными.
А если такую систему на большом корпусе текстов обучить еще и грамматике распознаваемого языка (или, например, использовать n-граммы, чтобы ограничить варианты слов, которые в тексте могут идти друг за другом), то она и вовсе сможет работать практически без ошибок.
Чтение исчезнувшего текста
Однако в рукописях встречаются трудности и совершенно другого рода. Например, какие-то куски текста могут быть попросту утеряны.
«Если взять текст и замазать все черной краской, такой текст никто никогда не распознает. Но если взять текст и провести черные полосы так, чтобы не были видны лишь какие-то куски, человек это прочитает — наверное, в 98 процентах случаев», — рассуждает Давид Ян.
«Откуда вы возьмете отсутствующую информацию? — продолжает он. — Из головы. То есть вы дополните отсутствующую информацию знаниями, которые у вас уже были. Так же и машина. Раз человек прочитает, то и машина рано или поздно прочтет».
Обычно компьютеру для выполнения этой задачи данных хватает — в том случае, если они есть у обучившего его человека. Так, недавно исследователи из DeepMind представили алгоритм PYTHIA, способный восстанавливать все возможные варианты утерянных древнегреческих надписей на античных памятниках.
При этом PYTHIA опирается на большой объем ранее собранных данных, например на оцифрованный корпус древнегреческих текстов, по которому можно делать поиск.
Сначала на основании данных этого корпуса происходит распознавание текста, сохранившегося на памятнике, а затем решается основная задача PYTHIA — дешифровка всех возможных вариантов утраченных фрагментов на основе составленного из текстов словаря.
Получается, что любая задача, связанная с распознаванием рукописного текста, — узкая или более масштабная, связанная с необходимостью восстановить утраченные фрагменты, — все равно сводится к тому, чтобы собрать и разметить максимально большое количество данных.
Это довольно сложно и по-прежнему требует долгого и кропотливого человеческого труда, поэтому многие задачи, требующие чтения и анализа старинных рукописей, до сих пор — даже с учетом быстрого развития технологий — решаются исследователями вручную.
Давид Ян, в свою очередь, уверен, что в будущем эта задача так или иначе будет автоматизирована: «Если кому-то надо восстанавливать древние надписи, кто-то будет их восстанавливать — или люди, или машина. Что-то мне подсказывает, что машина именно вот в таких вещах будет лучше, чем люди: она будет подходить к задаче точнее и гораздо внимательнее относиться к деталям, чем это делает человек».
Елизавета Ивтушок