Одна из задач, стоящих перед потенциальными создателями искусственного интеллекта, заключается в обучении электронного мозга распознаванию образов. Это умение не просто видеть множество объектов окружающего мира, но классифицировать их и адекватно реагировать. Чтение — это тоже подраздел распознавания образов. Какие технологии позволят ИИ понимать написанное?
Шаг к искусственному интеллекту: Разум
В рамках технологии ICR используется метод Intelligent Field Recognition (IFR). Например, анализируя платежный документ, программа в соответствии с созданным шаблоном находит печатную надпись «Сумма», затем – вертикальную черту справа от нее. По логике процесса рукописные символы на той же строке справа от черты в первую очередь распознаются как цифры

…И не просто написанное. Представьте себе, что потенциальный ИИ смотрит видеофрагмент, в котором мелькает вывеска с надписью «Абыр-валг». Человек ловит взглядом характерное словосочетание, тут же понимает, что это вывеска из булгаковского «Собачьего сердца», делает соответствующие выводы — в зависимости от того, знаком ли он с книгой, смотрел ли он фильм и т. д. Но для искусственного интеллекта проблемы начинаются с момента появления словосочетания на экране. Робот должен понять, что это текст, опознать графические контуры букв независимо от использованного шрифта, перевести их в понятный для него цифровой вид и далее уже искать ассоциации. А если текст на экране — рукописный? Мы более или менее легко читаем разные почерки, а как это сделать ИИ?

Конечно, видеопример — одна из наиболее сложных для решения задач. Даже обычный текст на бумаге для робота становится серьезным испытанием. Но технологии, решающие эту проблему, уже существуют и используются в программах распознавания текста. Многие полагают, что все достигается простым сравнением значков на листе с заложенными в память программы контурами. Но это справедливо от силы на 10%. Распознавание текстовых образов — и печатных, и рукописных — это целая наука.

В самом начале

Трудно поверить, но первые машины для оптического распознавания знаков появились задолго до компьютерной эры. В 1914 году химик Эммануэль Голдберг (к слову, русский эмигрант, бежавший в Германию из-за антисемитских настроений в царской России), специалист по фотохимии и изобретатель ряда фотокамер, сконструировал прообраз оптической машины, способной переводить напечатанные буквы в телеграфный код. Примерно в то же время ирландский химик Эдмунд Фурнье д’Альбе создал и запатентовал «оптофон» — прибор, умеющий переводить написанное в систему низких и высоких звуков. Оптофон предназначался для того, чтобы слепые могли «читать».

Чуть позже, в 1929 году, австрийский электротехник Густав Таушек запатентовал метод оптического распознавания текста с помощью фотодетектора и набора шрифтовых шаблонов — именно его официально считают пионером OCR (optical character recognition, оптическое распознавание символов). Коммерческое производство подобных систем начал другой изобретатель — американец Дэвид Шепард, военный специалист по криптоанализу. Его машина, запатентованная в 1953 году, понимала буквы латинского алфавита, азбуку Морзе и музыкальную нотацию. Проанализировав текст, она могла выполнить то или иное требуемое действие. Первая машина Шепарда, построенная компанией IMR, была продана журналу Reader’s Digest в 1955 году — с ее помощью машинописные статьи корреспондентов переводились в общую базу для верстки и последующей обработки. Вторую купила компания Standard Oil для чтения с печатных чеков информации о кредитных картах. С 1960-х машины для распознавания использовались повсеместно — в почтовой системе США и Канады, в правительственных структурах Великобритании. А в 1974 году известный изобретатель и футуролог Рэймонд Курцвейл запатентовал систему, состоящую из OCR-машины и синтезатора человеческой речи, таким образом создав первый читающий вслух механизм. Надо сказать, что в те годы распознаватель чаще всего представлял собой именно отдельное устройство, а не программу-приложение для компьютера. Но компьютерная эра наступала неотвратимо.

Рынок OCR

Сегодня на рынке систем оптического распознавания работает множество компаний разного технологического и финансового уровня. Программ для работы с текстом — еще больше, поскольку практически все компании предлагают не одно решение, а несколько — для разного типа задач. Наиболее известны универсальная ABBYY FineReader, разрабатываемый Tesseract от Google, браузерные LiveOCR и OnlineOCR, а также узкоспециализированные разновидности: SmartScore для нотной записи, HOCR для иврита, Persian Reader для фарси и т. д. Мы обратимся к ABBYY FineReader именно по причине универсальности этой программы: на ее примере можно показать целый спектр технологий, применяемых при распознавании текстовых образов.

Обычный печатный документ отличается от голого текста целым рядом параметров, в частности, версткой. Даже простейшее заявление сотрудника об отпуске имеет напечатанную в определенном месте листа (да еще и другим шрифтом) шапку, может быть обременено логотипами компании, печатями, рукописными пометками, подписями. Распознавание превращается в квест. Поэтому первым делом OCR-программа структурирует документ, разделяя его на блоки в соответствии с иерархией, верхним элементом которой является страница, затем следует блок текста, таблица или картинка, затем абзац (или ячейка), затем строка, слово и символ. Здесь-то и начинается разница в подходах.

Грубо говоря, OCR системы делятся на два типа. Первые начинают анализировать «сверху вниз». То есть сначала выделяют блоки, затем абзацы и, доходя до символов, распознают их. Вторые — «снизу вверх», то есть сначала делят документ на множество отдельных символов, распознают их, складывают в слова и абзацы, а затем анализируют результат. FineReader работает по принципу MDA (multilevel document analysis), то есть исходник считывается «сверху вниз», а электронная копия воссоздается «снизу вверх». Это позволяет обнаружить ошибку на нижнем уровне — и исправить за счет нее верхний. Поясняем на примере: программа определила некий блок как текст, разделила на слова — и тут обнаружила, что промежутки между этими словами подозрительно одинаковы. Программа определяет тот же блок как таблицу без разделителей — и бинго!

Собственно, последний пример демонстрирует так называемый принцип адаптивности, то есть способность программы к самообучению. Помимо него OCR-системы используют принцип целостности (рассматривая объект как целое, но при этом разделяя его на составные части, — об этом мы уже говорили) и принцип целенаправленности (выдвижение гипотез об объекте и их проверку). Но все это общие слова и принципы. Попытаемся углубиться в процесс распознавания образов.

Работа с символом

Мы можем отсканировать любой документ — от простой бумаги с машинописным текстом до цветастого рекламного проспекта со сложной версткой. Но тут стоит сразу заметить: подавляющее большинство OCR-программ не работают с цветным изображением, а переводят его в монохром (это называется бинаризацией). Существуют и более сложные алгоритмы, например адаптивная бинаризация, когда программа исследует яркость, насыщенность и прочие параметры подложки под каждым фрагментом изображения и не просто «обесцвечивает» его, а подбирает оптимальные сочетания контрастности итак далее.

После разбиения страницы на логические элементы в дело вступают классификаторы. Классификатор — это элемент программы, который анализирует некий блок (абзац, строку, символ), а затем выдает ряд гипотез относительно того, что данный блок собой представляет. Например, классификатор может выдать для какого-то объекта две гипотезы:

 — это абзац текста (вероятность 0,65);

 — это таблица (вероятность 0,35).

Сначала проверяется гипотеза с большей долей вероятности. Гипотез может быть не две, а двадцать и даже сто. Классификаторы бывают самые разные, каждая разновидность характеризуется рядом параметров и применима к определенной ситуации. Самый простой и распространенный — это растровый классификатор, то есть программа, сравнивающая символ на изображении с неким эталоном. Собственно, первые системы распознавания работали исключительно на растровом принципе: вычленил символ, сравнил с образцом. Точность этого классификатора согласно лабораторным исследованиям весьма высока: в 99,29% случаев верной для объекта оказывается одна из первых трех выдвинутых гипотез, в 97,57% - первая же. Точность как характеристика таким образом и измеряется: процентом попадания в первую тройку и процентом попадания «в яблочко».

Но растр работает не всегда. Рукописный текст, например, с эталоном не сравнишь, а распознавать его тоже необходимо. В таком случае вступает в действие признаковый классификатор. В отличие от растрового, он не анализирует элемент целиком, а разбивает его на ряд характеристик. Ими могут служить, например, угол наклона «ножки» буквы A или расстояние между вертикальными элементами буквы Ш… Для каждого отдельного признака выдвигается ряд гипотез, затем подтвержденные гипотезы по определенным признакам суммируются, и получается результат. Правда, есть и минусы: признаковые классификаторы «дробят» элементы, и информация о целом утрачивается. Кроме того, в случае дефектов печати признаковые классификаторы если не бессильны, то функционируют крайне плохо. Но в любом случае их точность по первым трем гипотезам — 99,81%, то есть выше, чем у растровых.

Существует несколько подвидов признаковых классификаторов. Например, контурные (выделяющие на поверхности элемента некий контур из векторов), признаково-дифференциальные (предназначенные для распознавания схожих элементов вроде m и rn), структурно-дифференциальные (аналогичны признаково-дифференциальным, но более точны и медлительны; используются, если первые не справляются).

Работа с текстом

Но даже если все символы программе понятны, это не значит, что на выходе получится связный текст. На каждом уровне анализа документа (абзац, строка, слово, символ) выдвигается большое количество гипотез. В целях быстродействия их выгодно структурировать, то есть объединять по группам-моделям, и отсекать неподходящие целыми «штабелями». Модели могут быть самые разные: словарное или несловарное слово, имя собственное или устоявшееся выражение. Правильность слов ABBYY FineReader проверяет по словарям — и не только. Дело в том, что если опираться исключительно на словари (подобные распознаватели существуют), резко снижается количество поддерживаемых языков, поскольку словарей, включающих все словоформы, для множества языков просто не существует, не говоря уже о жаргонных или местных словечках, авторских неологизмах и т. д. Например, как распознавать при необходимости текст из классического романа Джеймса Джойса «Поминки по Финнегану», где одних только выдуманных автором слов порядка 50000? Тут есть два пути: во‑первых, использование модели «несловарное слово», а во-вторых — составленные лингвистами компании словари, способные генерировать словоформы по аналогии. Это значительно повышает точность распознавания.

Важнейшая задача программы-распознавателя — возможность получить на выходе электронный документ, в точности соответствующий бумажному оригиналу, вплоть до взаиморасположения таблиц и абзацев. Этому способствует целый ряд заложенных методик и шаблонов. Например, существуют технологии, позволяющие по характерным формам и оборотам определять назначение документа (заявления, контракта, отчета) и структурировать его в соответствии с принятыми на этот счет правилами. В частности, технология адаптивного распознавания документов (ADRT) строит структуру документа: распознает типы форматирования и воспроизводит логические отношения между ними. Благодаря этому программа может рассматривать многостраничный документ как единое целое со всей его структурой и версткой и анализировать содержимое, исходя из этой целостности. А мы в свою очередь можем получать на выходе полноценную цифровую копию документа.

Так или иначе, распознавание текстов — это важный элемент программного обеспечения будущего искусственного интеллекта. Казалось бы, прикладная технология, используемая нами ежедневно, а на самом деле — один из маленьких шажков в будущее.

Статья «» опубликована в журнале «Популярная механика» (№8, Август 2012).