Тексты кажутся неподходящими для анализа данных — но это не так. На основе текстовых данных работают чат-боты (Алиса), фильтры спама в электронной почте, поисковые системы, программы для перевода и исправления ошибок, инструменты для генерации текстов и многое другое.
В этой главе мы поговорим о базовых принципах работы с текстовыми данными, научимся извлекать данные из текста и узнаем, что такое анализ тональности.
Текст для человека и компьютера
Текстовая информация содержится в книгах, статьях, постах в социальных сетях, документах, расшифровках аудио- и видеозаписей.
К автоматическому анализу прибегают, когда нельзя проанализировать тексты вручную. Например, можно прочитать несколько десятков постов в социальных сетях, академических статей или одну художественную книгу, чтобы сделать какие-то общие выводы. Мы можем сказать о чём эти тексты, короткие они или длинные, интересные или нет.
Но, например, если мы захотим узнать какие слова чаще всего использует Лев Толстой в тексте «Войны и мира» или какие самые популярные темы были в 2022 году у пользователей Твиттера, то сделать это вручную с помощью карандаша и бумаги будет очень сложно. Нам пришлось бы разобраться в тысячах слов книги и десятках тысячах постов в Твиттере. Это сложно и очень трудозатратно.
Однако есть проблема: компьютер не может обработать текст так же как человек. Даже самые современные чат-боты основаны на специальных алгоритмах, которые только отчасти имитируют человеческое мышление. Чтобы разобраться в чем разница, нам нужно вернуться назад, к первой главе, где мы говорили о том, что информация в компьютере закодирована.
🔍 Символ — это знак (например, изображение или слово), которое указывает на идею, объект или отношение между объектами.
Например, красный сигнал светофора (символ) указывает водителям на необходимость остановки. Автобусный билет — сообщает контроллеру, что у вас есть право на проезд. Аналогично каждое из слов указывает на какой-то факт в реальном мире. Все становится ещё сложнее, если подумать о том, что одни и те же знаки в зависимости от контекста обозначают разные факты. Простой пример из первого класса: лук — это и растение, и стрелковое оружие.
А ведь ещё в тексте могут быть знаки препинания, пробелы, эмодзи, буквы в верхнем и нижнем регистре, цифры и многое другое. Все эти элементы создают дополнительные элементы смысла, которые сложно «объяснить» компьютеру. Хотя стоит честно сказать, что сарказм, ирония, метафоры — вещи, которые вызывают сложности не только при автоматическом анализе, но и при ручном.
Поэтому существует мнение, что уж в том, что касается анализа текстов компьютер не сможет заменить человека. Но это не совсем так — всё зависит от того, какой алгоритм использует компьютер. Это отдельная сфера в анализе данных и компьютерных науках.
🔍 Автоматическая обработка естественного языка (Natural Language Processing или NLP) – это отрасль компьютерных наук и искусственного интеллекта, основной целью которой является разработка технологий для взаимодействия человека и компьютера с использованием естественных языков.
Не надо путать обработку естественного языка с нейролингвистическим программированием (neuro-linguistic programming), которое тоже сокращают как NLP. Второе — это ненаучный подход о том, что человеком якобы можно манипулировать с помощью определенных фраз и структур в речи.
Далее мы разберёмся, как именно анализировать тексты с помощью компьютера.
Предобработка текстовых данных
Тексты не унифицированы сами по себе: они могут быть написаны на разных языках, состоять из эмодзи, иметь ошибки, сокращения, цифры и знаки препинания. Разнообразие элементов делает текст более сложным для анализа. Для работы с текстовыми данными их необходимо упростить и привести к стандартной форме, которая подходит для используемого алгоритма.
Тут важно понимать, что технически, текстовые данные — это просто последовательный набор символов произвольной длины. Обычно этот набор включает в себя цифры, буквы, знаки препинания и пробелы. Поэтому все манипуляции мы совершаем с ними.
Сама логика предобработки очень простая: мы исключаем из текста все элементы, которые не можем проинтерпретировать с помощью применяемого алгоритма. В результате обычно у нас получается что-то вроде набора слов, где слово — это последовательность символов, разделенных пробелами в исходном тексте.
Вот примерный список того, что нужно или можно (в зависимости от алгоритма) сделать:
- удалить знаки препинания;
- заменить заглавные буквы на строчные;
- удалить лишние переносы, табуляцию и знаки переноса;
- удалить стоп-слова;
- лемматизировать слова (об этом подробнее ниже);
- токенизация текста (об этом тоже).
🔍 Стоп-слово — обычно это служебная часть речи, которая употребляется так часто, что отдельное её употребление не вносит в текст какой-то отдельный особенный смысл.
Все эти операции вместе и называют предобработкой естественного языка
. Вот для сравнения два примера: текст до и после обработки.
Поезд был практически полный. Пассажиры занимались своими делами: смотрели кино, читали книги или просто спали.
поезд практический полный пассажир занимать дело смотреть кино читать книга просто спать
Прежде чем переходить к анализу нам нужно разобраться с более сложными методами предобработки: токенизацией, лемматизацией и удалением стоп-слов.
Токенизация
Мы уже сказали, что нам нужно унифицировать и структурировать текст. Обычно для этого нам нужно разделить текст на более мелкие единицы анализа. Это могут быть слова, слоги, словосочетания, предложения или отдельные буквы. Если мы знаем, какие токены встречаются в тексте, то мы можем оценить их разнообразие (частотный анализ) или сравнить встречаемость аналогичных текстовых единиц (или слов) между разными текстами.
🔍 Токенизация — это разделение текста на единицы, которые будут анализироваться в ходе текстового анализа.
В зависимости от задачи текстового анализа вам может понадобиться разделить текст на токены из отдельных слов или словосочетания.
Словосочетания называют N-граммами. N-граммы – последовательность из определенного количества элементов. В зависимости от задачи, последовательность может состоять из букв, слогов или слов. В этом параграфе мы будем говорить о последнем варианте. Для слов обычно используются:
- униграммы (одно слово);
- биграммы (два);
- триграммы (три).
Вот пример разных N-грамм из текста Надеюсь, дождь не помещает веселью
. Для простоты мы сразу убираем запятую:
Название N-грамм |
Токенизация по разным видам N-грамм |
Униграммы |
'Надеюсь', 'дождь', 'не', 'помешает', 'веселью' |
Биграммы |
'Надеюсь дождь', 'дождь не', 'не помешает', 'помешает веселью' |
Триграммы |
'Надеюсь дождь не', 'дождь не помешает' 'не помешает веселью' |
Выше мы уже приводили похожий пример, но остановимся подробнее вот на каком нюансе. Предложения Учебник анализа текстовых данных
и Текстовые данные: учебник по анализу
, станут двумя наборами токенов: учебник, анализа, текстовых, данных
и текстовые, данные, учебник, по, анализу
. Это очень похожие наборы, которые сообщают нам одно и тоже, но из-за разных окончаний получаются разные наборы токенов. Давайте разберемся как их унифицировать.
Лемматизация
Лемматизация помогает сократить количество токенов в документе. Идея в том, чтобы привести разные уникальные формы слов к начальной, исходной форме.
Лемматизацию используют в поисковых системах. Люди по-разному задают одни и те же вопросы. Например, где снимают квартиру
, снять квартиру
. сайт с объявлениями о сдаче квартир
, аренда квартир
— это один и тот же вопрос, который можно заменить леммой снять квартиру
. Это делает поиск проще.
У каждой части речи начальная форма имеет свои признаки. Например, у прилагательных начальная форма — это мужской род, единственное число, именительный падеж, а у глаголов — инфинитив. В таблице пара примеров.
Лемма |
Исходные варианты |
купить |
['купить', 'куплю', 'покупать', 'покупали'] |
дом |
['дома', 'дом', 'домик', 'домишко'] |
Редкие слова, которые могут остаться не преобразованными:
- выдуманные автором слова (чайист)
- устаревшие слова (кушак, бражничать)
- диалектизмы (мультифора, стигать)
- книжная лексика (сибарит, энигматичный, трюизм)
- слова, написанные с ошибками (атвет, съюжет)
- специализированная лексика (репозиторий, идиосинкразия)
О том, что делать если лемматизация оказалась неудачной расскажем в следующем пункте.
Закон Ципфа и стоп-слова
Выше мы сказали, что у нас могут быть сложности с очень редкими словами. Но у нас может быть противоположная проблема: очень частые, но не очень осмысленные слова. В обоих случаях можно просто удалить такие слова. Давайте разберемся, почему это осмысленное действие. Эта идея основывается на законе Ципфа, который работает для любого достаточно большого текста.
Закон Ципфа работает для любого корпуса текста.
🔍 Закон Ципфа — частота слова обратно пропорциональная его рангу.
Частота – встречаемость слова в исследуемом тексте (корпусе текста или документе), а ранг — позиция, которую занимает слово, если упорядочить все имеющиеся слова по частоте. Частота обратно пропорциональна рангу, второе слово будет встречаться реже, чем первое, а третье слово будет встречаться реже, чем второе.
Получается, что самых частых слов — очень-очень много, но обычно они оказываются не особо информативны. Это могут быть:
- местоимения (Например: "я", "ты")
- числительные (Например: "1", "2", "3", "4", "5")
- предлоги (Например: "к", "на", "в", "с")
- союзы (Например: "а", "но", "или")
- частицы (Например: "вот", "именно", "едва ли")
Они не могут помочь вам при анализе, так как не особо информативны. Например, при подсчете количества слов в тексте возникает проблема: слова с наибольшей частотностью имеют наибольшую оценку, но ничего не говорят нам о том, что это за текст.
Вам не нужно выписывать частотные слова для их удаления. В пакетах для анализа текстовых данных есть списки таких слов для разных языков. Можно просто удалить слово, если оно встречается в списке.
С редкими словами чуть сложнее. Обычно удаляют слова, которые встречаются меньше, чем в определенном проценте анализируемых текстов.
И с тем, и с другим списком слов стоит ознакомиться до того как вы удалите слова. Там может быть что-то, что вы не захотите удалять Например, в большинстве списков стоп-слов находится частица не
, но её удаление может повлиять при анализе тональности. То есть: отрицательная фраза не люблю смотреть фильмы
изменит смысл на положительный и станет люблю смотреть фильмы
.
В этом параграфе мы попробовали разобраться с тем, как структурировать тексты и сделать их подходящими для текстового анализа. Давайте попробуем суммировать, что нужно сделать для начала работы. У нас будет три варианта: от простого к сложному:
- Приведение всего текста к нижнему регистру, разделение на разные виды токенов и очистка от знаков препинания;
- То же что и в первом, плюс удаление самых частотных и самых редких слов;
- То же что и во втором, плюс исправление ошибок и преобразование эмодзи в слова.
В следующем параграфе мы поговорим о двух методах, которые пригодятся для работы с текстовыми данными — извлечение именованных сущностей и анализ тональности