Шаг 181.
Введение в машинное обучение с использованием Python.
Работа с текстовыми данными. Строковые типы данных

    На этом шаге мы более подробно остановимся на этом типе данных.

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

    На практике можно встретить четыре типа строковых данных:

    Категориальные данные (categorical data) представляют собой данные, которые берутся из фиксированного списка. Например, вы собираете данные с помощью онлайн-опроса, в ходе которого просите людей назвать их любимый цвет и для регистрации ответов используете выпадающий список из 8 значений ("красный", "зеленый", "синий", "желтый", "черный", "белый", "фиолетовый" и "розовый"), позволяющий респондентам выбрать нужный вариант. В итоге мы получим восемь различных возможных значений, которые явно можно закодировать в виде категориальной переменной. Чтобы удостовериться в том, что строковые данные можно закодировать в виде категориальной переменной, достаточно взглянуть на них (если вы увидите очень много различных строковых значений, то скорее всего эти значения не являются категориальной переменной) и подтвердить свои предположения, вычислив количество уникальных значений по всему набору данных и, возможно, построив гистограмму частот встречаемости каждого значения. Кроме того, вам, возможно, потребуется проверить, соответствуют ли полученные категории интересущим вас категориям. Возможно в ходе опроса кто-то обнаружит, что слово "черный" написано с ошибкой как "ченый" и внесет соответствующую правку. В результате ваш набор данных будет содержать как значения "черный", так и значения "ченый", которые имеют одно и то же смысловое значение и должны быть объединены в одну категорию.

    Теперь представьте себе, что вместо выпадающего меню вы позволите пользователям самим заполнять текстовое поле, отвечая на вопрос о любимом цвете. Многие, возможно, напишут ответы типа "черный" или "синий". Другие могут допустить орфографические ошибки, использовать различные варианты написания, например, "черный" или "чёрный", либо использовать более запоминающиеся и специфические названия типа "полуночно-синий". Кроме того, будут и вовсе странные названия. Несколько хороших примеров можно привести из XKCD Color Survey, где люди должны были назвать цвета и придумывали названия типа "VelociRaptor cloaka" и "оранжевый, как кабинет моего стоматолога. Я до сих пор вспоминаю его перхоть, медленно залетающую в мой широко раскрытый рот", которые довольно трудно автоматически (или вообще) сопоставить определенным цветам. Ответы, записанные в текстовом поле, относятся ко второй категории списка, неструктурированным строкам, которые по смыслу можно сгруппировать в категории (free strings that can be semantically mapped to categories). Вероятно, лучшее всего закодировать их в виде категориальной переменной. Вы можете выбрать категории, выявив часто встречающиеся записи или задав категории, которые включат в себя содержательные ответы. Возможно, вам потребуется задать несколько категорий и для вполне стандартных цветов, например, категорию "несколько цветов" для людей, которые дали ответы типа "зеленые и красные полоски", а также категорию "другое" для ответов, которые не могут быть закодированы иным способом. Предварительная обработка строковых данных может быть очень трудоемкой и ее сложно автоматизировать. Если у вас есть возможность повлиять на процесс сбора данных и требуется проанализировать понятия, которые лучше всего описываются с помощью категориальных переменных, настоятельно рекомендуем вам отказаться от ручной фиксации данных.

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

    Последняя категория строковых данных - это текстовые данные (text data), которые состоят из фраз или предложений. Примерами таких данных могут быть твиты, логи чата или отзывы о гостинице, а также собрание сочинений Шекспира, содержание Википедии или проекта "Гутенберг", включающего 50000 электронных книг. Все эти коллекции содержат информацию, представленную преимущественно в виде предложений, составленных из слов.


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

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


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

    С точки зрения анализа текста набор данных часто называют корпусом (corpus) и каждая точка данных, представленная в виде отдельного текста, называется документом (document). Эти термины берут свое начало из информационного поиска (information retrieval, IR) и обработки естественного языка (natural language processing, NLP), которые главным образом применяются при анализе текстовых данных.

    На следующем шаге мы рассмотрим пример применения изложенного материала.




Предыдущий шаг Содержание Следующий шаг