распознавание текста машинное обучение

Python + OpenCV + Keras: делаем распознавалку текста за полчаса

После экспериментов с многим известной базой из 60000 рукописных цифр MNIST возник логичный вопрос, есть ли что-то похожее, но с поддержкой не только цифр, но и букв. Как оказалось, есть, и называется такая база, как можно догадаться, Extended MNIST (EMNIST).

Если кому интересно, как с помощью этой базы можно сделать несложную распознавалку текста, добро пожаловать под кат.

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Примечание: данный пример экспериментальный и учебный, мне было просто интересно посмотреть, что из этого получится. Делать второй FineReader я не планировал и не планирую, так что многие вещи тут, разумеется, не реализованы. Поэтому претензии в стиле «зачем», «уже есть лучше» и пр, не принимаются. Наверно готовые OCR-библиотеки для Python уже есть, но было интересно сделать самому. Кстати, для тех кто хочет посмотреть, как делался настоящий FineReader, есть две статьи в их блоге на Хабре за 2014 год: 1 и 2 (но разумеется, без исходников и подробностей, как и в любом корпоративном блоге). Ну а мы приступим, здесь все открыто и все open source.

Для примера мы возьмем простой текст. Вот такой:

HELLO WORLD

И посмотрим что с ним можно сделать.

Разбиение текста на буквы

Первым шагом разобьем текст на отдельные буквы. Для этого пригодится OpenCV, точнее его функция findContours.

Откроем изображение (cv2.imread), переведем его в ч/б (cv2.cvtColor + cv2.threshold), слегка увеличим (cv2.erode) и найдем контуры.

Мы получаем иерархическое дерево контуров (параметр cv2.RETR_TREE). Первым идет общий контур картинки, затем контуры букв, затем внутренние контуры. Нам нужны только контуры букв, поэтому я проверяю что «родительским» является общий контур. Это упрощенный подход, и для реальных сканов это может не сработать, хотя для распознавания скриншотов это некритично.

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Следующим шагом сохраним каждую букву, предварительно отмасштабировав её до квадрата 28х28 (именно в таком формате хранится база MNIST). OpenCV построен на базе numpy, так что мы можем использовать функции работы с массивами для кропа и масштабирования.

В конце мы сортируем буквы по Х-координате, также как можно видеть, мы сохраняем результаты в виде tuple (x, w, letter), чтобы из промежутков между буквами потом выделить пробелы.

Убеждаемся что все работает:

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

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

Нейронная сеть (CNN) для распознавания

Исходный датасет EMNIST имеет 62 разных символа (A..Z, 0..9 и пр):

Нейронная сеть соответственно, имеет 62 выхода, на входе она будет получать изображения 28х28, после распознавания «1» будет на соответствующем выходе сети.

Создаем модель сети.

Как можно видеть, это классическая сверточная сеть, выделяющая определенные признаки изображения (количество фильтров 32 и 64), к «выходу» которой подсоединена «линейная» сеть MLP, формирующая окончательный результат.

Обучение нейронной сети

Переходим к самому продолжительному этапу — обучению сети. Для этого мы возьмем базу EMNIST, скачать которую можно по ссылке (размер архива 536Мб).

Для чтения базы воспользуемся библиотекой idx2numpy. Подготовим данные для обучения и валидации.

Мы подготовили два набора, для обучения и валидации. Сами символы представляют собой обычные массивы, которые несложно вывести на экран:

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Также мы используем лишь 1/10 датасета для обучения (параметр k), в противном случае процесс займет не менее 10 часов.

Запускаем обучение сети, в конце процесса сохраняем обученную модель на диск.

Сам процесс обучения занимает около получаса:

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

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

Распознавание

Для распознавания мы загружаем модель и вызываем функцию predict_classes.

Как оказалось, изображения в датасете изначально были повернуты, так что нам приходится повернуть картинку перед распознаванием.

Окончательная функция, которая на входе получает файл с изображением, а на выходе дает строку, занимает всего 10 строк кода:

Здесь мы используем сохраненную ранее ширину символа, чтобы добавлять пробелы, если промежуток между буквами более 1/4 символа.

Результат:
распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Забавная особенность — нейронная сеть «перепутала» букву «О» и цифру «0», что впрочем, неудивительно т.к. исходный набор EMNIST содержит рукописные буквы и цифры, которые не совсем похожи на печатные. В идеале, для распознавания экранных текстов нужно подготовить отдельный набор на базе экранных шрифтов, и уже на нем обучать нейросеть.

Заключение

Как можно видеть, не боги горшки обжигают, и то что казалось когда-то «магией», с помощью современных библиотек делается вполне несложно.

Поскольку Python является кроссплатформенным, работать код будет везде, на Windows, Linux и OSX. Вроде Keras портирован и на iOS/Android, так что теоретически, обученную модель можно использовать и на мобильных устройствах.

Для желающих поэкспериментировать самостоятельно, исходный код под спойлером.

Источник

Аннотирование текста для машинного обучения

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Что такое аннотирование текста?

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

Почему это важно?

Зачем мы вообще аннотируем текст? Последние прорывы в сфере NLP выявили нарастающую потребность в текстовых данных для таких областей, как страхование, здравоохранение, банковское дело, телекоммуникации и так далее. Аннотирование текстов необходимо, поскольку оно гарантирует, что целевая считывающая система, в данном случае — модель машинного обучения (ML), сможет воспринимать предоставленную информацию и делать выводы на её основе. Ниже мы подробнее рассмотрим конкретные способы использования, а пока вам следует помнить то, что текстовые данные всё равно остаются данными, почти как изображения или видео, и они так же используются для обучения и тестирования.

Как аннотируется текст: аннотирование текстов для NLP

Список задач, которые учатся выполнять компьютеры, стабильно растёт, однако некоторые области остаются нетронутыми: NLP не является в этом исключением. Без аннотаторов-людей модели не поймут глубины, естественности и сленга, при помощи которых люди управляют и манипулируют языком. Поэтому компании постоянно пользуются помощью живых аннотаторов для обеспечения достаточного качества данных для обучения. К современным ИИ-решениям на основе NLP относятся голосовые помощники, машинные переводчики, умные чат-боты, альтернативные поисковых движки, и список систем продолжает расширяться параллельно с повышением гибкости, обеспечиваемой типами аннотирования текста.

Аннотирование текста для распознавания текста

Визуальное распознавание текста (optical character recognition, OCR) — это извлечение текстовых данных из отсканированных документов или изображений (PDF, TIFF, JPG) в понимаемые моделью данные. Системы OCR предназначены для упрощения доступности информации пользователям. Они помогают в ведении бизнеса и в рабочих процессах, экономят время и ресурсы, которые были бы необходимы для управления данными. После преобразования обработанная OCR текстовая информация может более удобно и просто использоваться компаниями. Достоинствами распознавания текста являются отсутствие необходимости ручного ввода данных, снижение ошибок, повышение продуктивности и т.д.

Подробнее об OCR и областях его применения мы поговорим в отдельной статье. А пока главный вывод будет таким: OCR вместе с NLP — две основные области, сильно зависящие от аннотирования текста.

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Типы аннотирования текста

Наборы данных аннотирования текста обычно представлены в виде выделенного или подчёркнутого текста, по краям которого оставлены заметки. В этом посте мы рассмотрим следующие основные типы аннотирования текста:

Аннотирование сущностей

Аннотирование сущностей служит для разметки неструктурированных предложений важной информацией; часто оно применяется в наборах данных для обучения чат-ботов. Этот тип аннотирования можно описать как нахождение, извлечение и разметка сущностей в тексте одним из следующих способов:

Распознавание именованных сущностей (named entity recognition, NER): NER лучше всего подходит для разметки в тексте ключевой информации, будь то люди, географические точки, часто встречающиеся объекты или персонажи. NER является фундаментальной основой NLP. Google Translate, Siri и Grammarly — прекрасные примеры NLP, использующего NER для понимания текстовых данных.

Разметка частей речи: как понятно из названия, разметка частей речи помогает парсить предложения и распознавать грамматические единицы (существительные, глаголы, прилагательные, местоимения, наречия, предлоги, союзы и т.п.).

Разметка ключевых фраз: этот способ можно описать как поиск и разметку ключевых слов или фраз в текстовых данных.

Хотя аннотирование сущностей является сочетанием распознавания сущностей, частей речи и ключевых фраз, оно часто идёт рука об руку с сопоставлением сущностей, что помогает моделям в более глубокой контекстуализации сущностей.

Сопоставление сущностей

Если аннотирование сущностей помогает находить и извлекать сущности из текста, то сопоставление сущностей, часто называемое сопоставлением именованных сущностей (named entity linking, NEL) — это процесс соединения этих именованных сущностей с более крупными наборами данных. Возьмём для примера предложение «Summer loves ice cream». Задача заключается в том, чтобы определить, что Summer — это имя девушки, а не время года или любая другая сущность, которую потенциально можно назвать Summer. Сопоставление сущностей отличается от NER тем, что NER находит именованную сущность в тексте, но не указывает, что это за сущность.

Классификация текста

Задача аннотирования сущностей заключается в аннотировании конкретных слов или фраз, а задача классификации текста — в аннотировании фрагмента текста или строк одной меткой. Примерами и специализированными типами классификации текста являются классификация документов, разбиение продуктов на категории, аннотирование эмоционального настроя текста и так далее.

Классификация документов: присвоение документу одной метки может быть полезным для интуитивной сортировки больших объёмов текстового содержимого.

Разбиение продуктов на категории: процесс сортировки продуктов или сервисов на классы и категории может улучшить поисковые результаты для электронной коммерции, например, оптимизировать SEO и повысить видимость продукта на странице ранжирования.

Аннотирование эмоционального настроя

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

Способы применения аннотирования текста

Способы применения аннотирования текста почти столь же повсеместны, как и способы применения аннотирования изображений и видео. Почти каждая область, содержащая текстовые данные, может быть аннотирована и использована для обучения модели:

Здравоохранение

Аннотирование текста меняет правила игры в здравоохранении, где оно заменяет кропотливые ручные процессы высокопроизводительными моделями. В частности, оно влияет на следующие операции:

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Страхование

Как и в здравоохранении, в области страхования аннотирование текста обеспечивает множество преимуществ.

Банковское дело

Повышение персонализации, улучшение автоматизации, снижение ошибок и адекватное использование ресурсов — всё это становится возможным благодаря модели, способной выполнять следующие задачи:

Телекоммуникации

Аннотированный текст автоматизирует человеческий труд в следующих областях:

Источник

Основы Natural Language Processing для текста

Обработка естественного языка сейчас не используются разве что в совсем консервативных отраслях. В большинстве технологических решений распознавание и обработка «человеческих» языков давно внедрена: именно поэтому обычный IVR с жестко заданными опциями ответов постепенно уходит в прошлое, чатботы начинают все адекватнее общаться без участия живого оператора, фильтры в почте работают на ура и т.д. Как же происходит распознавание записанной речи, то есть текста? А вернее будет спросить, что лежит в основе соврменных техник распознавания и обработки? На это хорошо отвечает наш сегодняшний адаптированный перевод – под катом вас ждет лонгрид, который закроет пробелы по основам NLP. Приятного чтения!

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Что такое Natural Language Processing?

Natural Language Processing (далее – NLP) – обработка естественного языка – подраздел информатики и AI, посвященный тому, как компьютеры анализируют естественные (человеческие) языки. NLP позволяет применять алгоритмы машинного обучения для текста и речи.

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

Сегодня у многих из нас есть смартфоны с распознаванием речи – в них используется NLP для того, чтобы понимать нашу речь. Также многие люди используют ноутбуки со встроенным в ОС распознаванием речи.

Примеры

Cortana

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

В Windows есть виртуальный помощник Cortana, который распознает речь. С помощью Cortana можно создавать напоминания, открывать приложения, отправлять письма, играть в игры, узнавать погоду и т.д.

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Siri это помощник для ОС от Apple: iOS, watchOS, macOS, HomePod и tvOS. Множество функций также работает через голосовое управление: позвонить/написать кому-либо, отправить письмо, установить таймер, сделать фото и т.д.

Gmail

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

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

Dialogflow

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Платформа от Google, которая позволяет создавать NLP-ботов. Например, можно сделать бота для заказа пиццы, которому не нужен старомодный IVR, чтобы принять ваш заказ.

Python-библиотека NLTK

NLTK (Natural Language Toolkit) – ведущая платформа для создания NLP-программ на Python. У нее есть легкие в использовании интерфейсы для многих языковых корпусов, а также библиотеки для обработки текстов для классификации, токенизации, стемминга, разметки, фильтрации и семантических рассуждений. Ну и еще это бесплатный опенсорсный проект, который развивается с помощью коммьюнити.
Мы будем использовать этот инструмент, чтобы показать основы NLP. Для всех последующих примеров я предполагаю, что NLTK уже импортирован; сделать это можно командой import nltk

Основы NLP для текста

В этой статье мы рассмотрим темы:

1. Токенизация по предложениям

Токенизация (иногда – сегментация) по предложениям – это процесс разделения письменного языка на предложения-компоненты. Идея выглядит довольно простой. В английском и некоторых других языках мы можем вычленять предложение каждый раз, когда находим определенный знак пунктуации – точку.

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

Возьмем небольшой текст про настольную игру нарды:

Чтобы сделать токенизацию предложений с помощью NLTK, можно воспользоваться методом nltk.sent_tokenize

На выходе мы получим 3 отдельных предложения:

2. Токенизация по словам

Токенизация (иногда – сегментация) по словам – это процесс разделения предложений на слова-компоненты. В английском и многих других языках, использующих ту или иную версию латинского алфавита, пробел – это неплохой разделитель слов.

Тем не менее, могут возникнуть проблемы, если мы будем использовать только пробел – в английском составные существительные пишутся по-разному и иногда через пробел. И тут вновь нам помогают библиотеки.

Давайте возьмем предложения из предыдущего примера и применим к ним метод nltk.word_tokenize

3. Лемматизация и стемминг текста

Обычно тексты содержат разные грамматические формы одного и того же слова, а также могут встречаться однокоренные слова. Лемматизация и стемминг преследуют цель привести все встречающиеся словоформы к одной, нормальной словарной форме.

Приведение разных словоформ к одной:

То же самое, но уже применительно к целому предложению:

Лемматизация и стемминг – это частные случаи нормализации и они отличаются.

Стемминг – это грубый эвристический процесс, который отрезает «лишнее» от корня слов, часто это приводит к потере словообразовательных суффиксов.

Лемматизация – это более тонкий процесс, который использует словарь и морфологический анализ, чтобы в итоге привести слово к его канонической форме – лемме.

Отличие в том, что стеммер (конкретная реализация алгоритма стемминга – прим.переводчика) действует без знания контекста и, соответственно, не понимает разницу между словами, которые имеют разный смысл в зависимости от части речи. Однако у стеммеров есть и свои преимущества: их проще внедрить и они работают быстрее. Плюс, более низкая «аккуратность» может не иметь значения в некоторых случаях.

4. Стоп-слова

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Стоп-слова – это слова, которые выкидываются из текста до/после обработки текста. Когда мы применяем машинное обучение к текстам, такие слова могут добавить много шума, поэтому необходимо избавляться от нерелевантных слов.

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

Рассмотрим, как можно убрать стоп-слова из предложения:

Если вы не знакомы с list comprehensions, то можно узнать побольше здесь. Вот другой способ добиться того же результата:

Тем не менее, помните, что list comprehensions быстрее, так как оптимизированы – интерпретатор выявляет предиктивный паттерн во время цикла.

Вы можете спросить, почему мы конвертировали список во множество. Множество это абстрактный тип данных, который может хранить уникальные значения, в неопределенном порядке. Поиск по множеству гораздо быстрее поиска по списку. Для небольшого количества слов это не имеет значения, но если речь про большое количество слов, то строго рекомендуется использовать множества. Если хотите узнать чуть больше про время выполнения разных операций, посмотрите на эту чудесную шпаргалку.

5. Регулярные выражения.

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Регулярное выражение (регулярка, regexp, regex) – это последовательность символов, которая определяет шаблон поиска. Например:

Мы можем использовать регулярки для дополнительного фильтрования нашего текста. Например, можно убрать все символы, которые не являются словами. Во многих случаях пунктуация не нужна и ее легко убрать с помощью регулярок.

Модуль re в Python представляет операции с регулярными выражениями. Мы можем использовать функцию re.sub, чтобы заменить все, что подходит под шаблон поиска, на указанную строку. Вот так можно заменить все НЕслова на пробелы:

Регулярки – это мощный инструмент, с его помощью можно создавать гораздо более сложные шаблоны. Если вы хотите узнать больше о регулярных выражениях, то могу порекомендовать эти 2 веб-приложения: regex, regex101.

6. Мешок слов

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Алгоритмы машинного обучения не могут напрямую работать с сырым текстом, поэтому необходимо конвертировать текст в наборы цифр (векторы). Это называется извлечением признаков.

Мешок слов – это популярная и простая техника извлечения признаков, используемая при работе с текстом. Она описывает вхождения каждого слова в текст.

Чтобы использовать модель, нам нужно:

Интуиция подсказывает, что схожие документы имеют схожее содержимое. Также, благодаря содержимому, мы можем узнать кое-что о смысле документа.

Пример:
Рассмотрим шаги создания этой модели. Мы используем только 4 предложения, чтобы понять, как работает модель. В реальной жизни вы столкнетесь с бОльшими объемами данных.

1. Загружаем данные

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Представим, что это наши данные и мы хотим загрузить их в виде массива:

Для этого достаточно прочитать файл и разделить по строкам:

2. Определяем словарь

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Соберем все уникальные слова из 4 загруженных предложений, игнорируя регистр, пунктуацию и односимвольные токены. Это и будет наш словарь (известные слова).

Для создания словаря можно использовать класс CountVectorizer из библиотеки sklearn. Переходим к следующему шагу.

3. Создаем векторы документа

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Далее, мы должны оценить слова в документе. На этом шаге наша цель – превратить сырой текст в набор цифр. После этого, мы используем эти наборы как входные данные для модели машинного обучения. Простейший метод скоринга – это отметить наличие слов, то есть ставить 1, если есть слово и 0 при его отсутствии.

Теперь мы можем создать мешок слов используя вышеупомянутый класс CountVectorizer.

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Это наши предложения. Теперь мы видим, как работает модель «мешок слов».

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Еще пару слов про мешок слов

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Сложность этой модели в том, как определить словарь и как подсчитать вхождение слов.

Когда размер словаря увеличивается, вектор документа тоже растет. В примере выше, длина вектора равна количеству известных слов.

В некоторых случаях, у нас может быть неимоверно большой объем данных и тогда вектор может состоять из тысяч или миллионов элементов. Более того, каждый документ может содержать лишь малую часть слов из словаря.

Как следствие, в векторном представлении будет много нулей. Векторы с большим количеством нулей называются разреженным векторами (sparse vectors), они требуют больше памяти и вычислительных ресурсов.

Однако мы можем уменьшить количество известных слов, когда используем эту модель, чтобы снизить требования к вычислительным ресурсам. Для этого можно использовать те же техники, что мы уже рассматривали до создания мешка слов:

N-грамма это последовательность каких-либо сущностей (слов, букв, чисел, цифр и т.д.). В контексте языковых корпусов, под N-граммой обычно понимают последовательность слов. Юниграмма это одно слово, биграмма это последовательность двух слов, триграмма – три слова и так далее. Цифра N обозначает, сколько сгруппированных слов входит в N-грамму. В модель попадают не все возможные N-граммы, а только те, что фигурируют в корпусе.

Рассмотрим такое предложение:

Оценка (скоринг) слов

Когда создан словарь, следует оценить наличие слов. Мы уже рассматривали простой, бинарный подход (1 – есть слово, 0 – нет слова).

Есть и другие методы:

7. TF-IDF

У частотного скоринга есть проблема: слова с наибольшей частотностью имеют, соответственно, наибольшую оценку. В этих словах может быть не так много информационного выигрыша для модели, как в менее частых словах. Один из способов исправить ситуацию – понижать оценку слова, которое часто встречается во всех схожих документах. Это называется TF-IDF.

TF-IDF (сокращение от term frequency — inverse document frequency) – это статистическая мера для оценки важности слова в документе, который является частью коллекции или корпуса.

Скоринг по TF-IDF растет пропорционально частоте появления слова в документе, но это компенсируется количеством документов, содержащих это слово.

Формула скоринга для слова X в документе Y:

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение
Формула TF-IDF. Источник: filotechnologia.blogspot.com/2014/01/a-simple-java-class-for-tfidf-scoring.html

TF (term frequency — частота слова) – отношение числа вхождений слова к общему числу слов документа.

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

IDF (inverse document frequency — обратная частота документа) — инверсия частоты, с которой некоторое слово встречается в документах коллекции.

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

В итоге, вычислить TF-IDF для слова term можно так:

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Можно использовать класс TfidfVectorizer из библиотеки sklearn, чтобы вычислить TF-IDF. Давайте проделаем это с теми же сообщениями, что мы использовали в примере с мешком слов.

распознавание текста машинное обучение. Смотреть фото распознавание текста машинное обучение. Смотреть картинку распознавание текста машинное обучение. Картинка про распознавание текста машинное обучение. Фото распознавание текста машинное обучение

Заключение

В этой статье были разобраны основы NLP для текста, а именно:

Если вы хотите увидеть все описанные концепции в одном большом примере, то вам сюда.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *