Методов для работы с текстовыми данными слишком много, мы могли бы написать второй учебник об этом, поэтому расскажем только о двух — это извлечение именованных сущностей и анализ тональности.
Извлечение именованных сущностей
Когда вы пишете запрос в поисковой системе Кто написал Мертвые души?
, то сразу видите правильный ответ Николай Гоголь
, и вам не приходится искать его внутри страниц. Ответ не зависит от формулировки: можно было написать автор мертвых душ
или чье произведение мертвые души
. В данном случае имя классика – это извлеченная именованная сущность, которая отвечает на этот вопрос. В следующем параграфе покажем как это делается, сейчас пока просто теория.
🔍 Именованные сущности (named entities) – уникальные идентификаторы сущностей, упомянутых в тексте.
Список сущностей, которые могут упоминаться в текстах точно будет неполным. Скажем грубо: если что-то — это имя собственное, то почти наверняка это уникальный идентификатор какой-то сущности в этом и в других текстах. Вот несколько примеров:
- имена;
- названия;
- даты;
- адреса.
🔍 Извлечение именованных сущностей (named entity recognition, NER) – это извлечение конкретной информации из текстовых данных.
Дальше именованные сущности могут, например, использоваться как категориальные переменные в исследованиях, где единица наблюдения — это текст, а именованные сущности — это одна из возможных характеристик текста. Понятно, что в таком случае данные будет нужно организовать в табличной форме:
Лекарство |
Действующее вещество |
Показания |
Вентолин |
Сальбутамол |
Бронхиальная астма |
Цетрин |
Цетиризин |
Аллергический ринит |
АЦЦ |
Ацетилцистеин |
Бронхит |
В тексте могут быть не только имена, но и названия, даты, адреса, и многое другое. Например, если мы продолжим анализировать инструкции к медицинским препаратам, то было бы классно уметь извлекать из них:
- причины назначения лекарств;
- сроки и дозировки;
- диагнозы;
- противопоказания.
Заметим, что мы выделяем не названия, например, в нашем примере Вентолин
или АЦЦ
), а группы — названия или показания, поэтому необходимо сохранить деление в данных. В дальнейшем вы можете работать только с одним или несколькими интересующими вас группами. Например, с названиями организаций или именами людей. Все остальные можно либо не выделять вовсе, либо использовать для проверки правильности выделения. На случай, если вы что-то пропустили или ошибочно решили, что это данные из другой группы.
Бывают случаи, когда данные должны остаться обезличенными, тогда извлечение сущностей используется для их удаления из текста. Например, имена из медицинских карт, даже если они попали к исследователю легально стоит извлечь и сразу удалить их из текста.
Выделяют два этапа при извлечении именованных сущностей:
- выделение из текста слова или словосочетания;
- определение класса, к которому он относится.
Для примера возьмем предложение: Николай Гоголь – выдающийся писатель, написавший «Мертвые души»
. На первом этапе выделяется словосочетание Николай Гоголь
, а на втором этапе определяется, что эта сущность относится к именам людей.
Выделение и распределение обычно происходит с помощью предварительно составленного словаря, который исследователь дополняет необходимыми ему дополнительными сочетаниями. Альтернативный способ — это использование правил, которые позволяют находить именованные сущности в соответствии их положению. Например, инструкции к медицинским препаратам стандартны, поэтому сразу после фразы Действующее вещество
действительно будет указан нужный нам элемент.
Сложность извлечения именованных сущностей связана с определением границ: из скольких слов состоит одна именованная сущность. Например, если в тексте присутствовало полное имя Гоголя, то отчество могло быть определено отдельной именованной сущностью Васильевич
. И таким образом, у нас из одной именованной сущности Гоголь Николай Васильевич
были определены две: Гоголь Николай
и Васильевич
.
Дело в том, что слова или словосочетания могут иметь разные значения в зависимости от контекста. Например, Алиса может быть именем персонажа из «Алисы в стране чудес», и названием голосового помощника Яндекса, именем девушки или названием города. Если заранее не прописать нужный алгоритм, стандартные пакеты для извлечения именованных сущностей из названия произведения Алиса в стране чудес
извлекут только имя персонажа.
Ещё в извлеченные именованные сущности обычно попадают слова, написанные с большой буквы. Например, из-за наличия верхнего регистра слова «Отстань» и «Больной» определились в качестве имен людей.
Не существует универсальной формулы для извлечения всех необходимых именованных сущностей из текстов. Что делать, если у вас определяются в качестве именованных сущностей слова, которые к ним не относятся? Обычно вы можете задать пользовательский набор именованных сущностей и классов в дополнение к тому, на который опираетесь.
В любом случае это важный и полезный способ, который позволяет расширить диапазон доступных вам данных. Вы можете искать их буквально в любых текстах, с которыми работаете.
Анализ тональности
Представим ситуацию, когда вы спрашиваете своего друга о его самочувствии. В ответ он может сказать, что «все хорошо» или «я устал и плохо себя чувствую». И то, и другое – это примеры эмоционально-окрашенных фраз и слов, по которым люди понимают эмоции друг друга. Обе фразы могут быть сказаны серьёзно или с сарказмом. Учесть это в алгоритме анализа тональности может быть довольно непросто.
Сформулировать алгоритм, который бы позволил делать аналогичную оценку не так просто. Анализ тональности — одна из задач обработки естественного языка. Базовая задача определения тональности — это понять отрицательный текст или положительный.
🔍 Анализ тональности (sentiment analysis) – выявление эмоциональной оценки авторов текстов (тональности) или эмоционально-окрашенных слов по отношению к объектам, предметам или явлениям, о которых идет речь в текстах.
Как и любая другая переменная, тональность сообщения должна быть измерена с помощью какой-то шкалы. Самый простой вариант — это бинарный классификатор, состоящий из двух типов тональности: положительной и отрицательной.
Но это не единственный вариант. Например, мы можем кодировать тональность пятью категориями по степени согласия (ликертова шкала):
- крайне положительная;
- положительная;
- нейтральная;
- отрицательная;
- крайне отрицательная.
Более продвинутые методы определяют шкалы, связанные с эмоциональным состоянием: радость, грусть, злость и так далее. Однако все усложнения бинарного классификатора делают алгоритм сложнее и менее надежным.
При анализе тональностей нужно определить единицу, у которой мы оцениваем тональность: предложение, абзац, полный текст. Для анализа тональностей рекомендуется разбивать текст на отдельные предложения и определять тональность каждого предложения. Например, комментарий из социальных сетей делят на отдельные предложения и определяют тональность каждого предложения, после высчитывается оценка тональности всего комментария.
Давайте попробуем разобраться в простом примере: Граф отлично провел время
. В предложении присутствует одно окрашенное положительно слово отлично
. Поэтому мы можем сказать, что и у предложения скорее положительная, чем отрицательная тональность.
Для анализа тональностей хорошо подойдут сообщения из социальных сетей, отзывы на продукты и сервисы, новости из медиа, тексты произведений и тексты с веб-страниц. С помощью анализа тональности в социальных сетях описывают реакции пользователей на определенные события. Например, реакции на выпуск новой книги известного автора.
Мы собрали несколько примеров источников, оцениваемых единиц и примеров исследований в таблице ниже.
Источник |
Единица анализа |
Пример исследования |
Социальные сети |
Комментарий или пост |
Цифровая реакция на выход новой главы одноименной книги N |
Отзывы на продукты и сервисы |
Отзывы |
Мнение пользователей об электронной книге марки N |
Книги, произведения |
Глава, страница |
Как меняется тональность произведения на протяжении всех глав |
СМИ |
Статья, страница статьи |
Как аудитория газеты N воспринимает новости об возвращении писателя M |
Веб-страницы |
Предложение, абзац |
Какая тональность преобладает в тексте на веб-страничке |
Не советуем проводить анализ тональности для текстов с формальной лексикой. Например, юридические документы или отчеты о проделанной работе предполагают небольшое количество эмоционально-окрашенной лексики, поэтому в них сложно вычленить тональность.
Большой сложностью для анализа тональности является определение иносказания, иронии, сарказма, метафор и шуток. Тональность слов может изменяться из-за наличия частиц, таких как не
, наверное
или хорошо
. Поэтому перед анализом тональности рекомендуется не удалять стоп-слова в ваших данных. Наличие или отсутствие частицы может полностью поменять тональность единицы текстового анализа.
На этом всё. Пора переходить к практике: в следующем параграфе мы реализуем извлечение именованных сущностей и анализ тональности с помощью Python.