Одна из самых непростых задач при использовании данных из социальных сетей и текстовых сообщений для NLP (Natural Language Processing  —  обработки естественного языка) заключается в том, что язык в интернете сильно отличается от литературного языка. Сленг, акронимы, сложносокращённые слова, инициальные аббревиатуры, эмоджи, хэштеги, URL-адреса, а ещё орфографические ошибки в постах в Reddit, твитах, сообщениях в WhatsApp и т. д.  —  всё это не закреплено в языковых нормах.

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

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

Общие шаги предварительной обработки данных

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

Преобразование текста в нижний регистр

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

  • «Я сдал экзамен по вождению».
  • «Я СДАЛ экзамен по вождению».
  • «Я СДАЛ ЭКЗАМЕН ПО ВОЖДЕНИЮ».

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

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

Удаление знаков препинания

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

  •  «Я сдал экзамен по вождению».
  • «Я сдал экзамен по вождению!!!!!!!!».

Знаки препинания также могут передавать разные чувства через смайлики, такие как “:-)” и “(>_<)”. Не стоит слепо выбрасывать всю эту информацию.

Рекомендация: Сконструируйте признаки для разных способов использования знаков препинания, особенно для тех случаев, когда стоит нескольких знаков подряд. Для смайлов можно либо разработать новые признаки, либо заменить их словами. Например, заменить “:-)” на «улыбающееся лицо». 

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

Удаление чисел

Числа играют очень интересную роль в обработке естественного языка. Для таких задач, как ответы на вопросы, они определённо важны. В то же время для выделения именованных объектов они не имеют значения, если не являются частью их названия, например баскетбольная команда Philadelphia 76ers. Для анализа тональности числа обычно не нужны.

При этом всегда есть исключения, на которые нужно обращать внимание. «1984» в политическом разделе на Reddit  —  уже не просто число, а отсылка к роману-антиутопии. А «1–7» выражает негативные чувства бразильских футбольных фанатов.

Всё это применимо как к интернет-языку, так и к литературному языку. Но в интернет-сленге есть дополнительная сложность. Например, символьно-цифровые фразы «+1» и «+100500», которые выражают согласие с идеей или мнением, или использование цифр вместо части слова: «1цово» вместо «Одинцово». Если в русском языке это не так распространено, то в английском встречается гораздо чаще. Например, «10q» вместо «thank you» (спасибо) или «2mr» вместо «tomorrow» (завтра).

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

Расшифровка сложносокращённых слов, акронимов, инициальных аббревиатур и сленга

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

Рекомендация: Во время исследовательского анализа данных соберите все часто встречающиеся термины, которые не относятся к литературному языку. Создайте словарь с их расшифровками. При необходимости смягчите уровень преувеличения и/или оскорбления.

Этапы предварительной обработки данных для интернет-языка

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

URL-адреса, упоминания пользователей и хэштеги

URL-адреса неактуальны для большинства задач, и их можно спокойно удалить. Однако для тематической модели и тематической классификации очень важно понимать, о чём URL-адреса. Один из простых способов использовать эту информацию  —  заменить URL-адреса на их заголовки. Для этого сначала выполните HTTP-запрос методом GET, а затем проанализируйте HTML-ответ.

То же применимо к упоминаниям пользователей и хэштегам. Тем не менее при работе с ними гораздо сложнее решить, какой текст использовать для замены, и этот процесс потребует большого количества ручных проверок. Для примера возьмём «@ManCity» в Twitter, у которого имя пользователя  —  «Manchester City». Вместо него можно использовать «Manchester City Football Club» (Футбольный клуб Манчестер Сити), чтобы лучше проиллюстрировать суть упоминания этого пользователя.

Эмоджи

Этап предварительной обработки эмоджи в основном такой же, как и для эмотиконы. Например, мы можем заменить 😀 на «ухмыляющееся лицо». Значение разных смайликов можно узнать на сайте emojipedia (на англ. яз.) или emojio.top (на рус. яз.).

Обратите внимание, что иногда эмоджи используются вместо букв. В этом случае значение эмоджи можно добавить в конец предложения. Например, «г⚽л» преобразовано в «гол футбол».

Орфографические ошибки

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

  • Опечатка. Это самый простой вариант, поскольку нужно только пропустить текст через библиотеку проверки орфографии. Но имейте в виду, что ни одна библиотека проверки орфографии неидеальна, и всегда надо быть готовым подключить дополнительную логику.
  • Повторяющиеся буквы. Повторяющиеся буквы, как в слове «гооолллл», полезны для анализа тональности и подходят для конструирования признака. Обратите внимание, что большинство библиотек проверки орфографии используют расстояние Левенштейна. Поэтому повторяющиеся буквы могут навредить процессу исправления ошибок. Для решения этой проблемы сначала используйте регулярное выражение, чтобы уменьшить количество повторяющихся букв до 2 (поскольку в литературном языке слова содержат не более двух повторяющихся букв). После этого примените библиотеку проверки орфографии.
  • Другое. Пользователи могут передавать смысл в сообщении, искажая написание слов множеством способов: от «хахахахахахахаха» до «Г О Л». Практический подход состоит в том, чтобы выявить наиболее распространённые закономерности в наборе данных с помощью исследовательского анализа данных и сосредоточиться только на них.

Дополнительные материалы

Tokenizer Summary. Материал по преобразователям для токенизатора на сайте HuggingFace  —  отличное введение в эту тему (на англ. яз.). В частности, в нём даётся множество примеров, а также ссылки для различных типов токенизаторов. Если вы хотите использовать предварительно обученную модель, такую как BERT, то сначала необходимо понять, как предварительно обработать данные, чтобы они хорошо работали с токенизатором BERT.

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Wanshun Wong: How to preprocess social media data and text messages.

Предыдущая статьяБенчмарки в Golang: тестируем производительность кода
Следующая статьяМы снова написали самый быстрый JS-фреймворк UI