Представление текстовых данных
Рассмотрим задачу обработки текстовых документов из некоторого набора текстов, называемого корпусом. Эта задача часто возникает на практике, например, в следующих задачах:
-
классификация новостей;
-
фильтрация спама в почте;
-
анализ тональности пользовательских отзывов на товар или компанию;
-
определение ожидаемой зарплаты по тексту резюме.
Сложность задачи заключается в том, что документы представляют собой последовательности дискретных объектов (слов/символов) переменной длины. А модели машинного обучения умеют работать лишь в векторами вещественных чисел, длина которых фиксирована.
Последнее ограничение можно обходить двумя способами:
-
В моделях мешка слов (bag-of-words models [1]) текст представляется как неупорядоченное множество слов, а вектор признаков вычисляется на основе частот встречаемости каждого отдельного слова языка. Такие модели про сты в настройке и использовании, но из-за потери информации о порядке будет происходить потеря информации об исходном тексте.
Пример: "Интервью про кино" / "Кино про интервью" будут представляться такими моделями одинаково, хотя предложения несут разный смысл!
Частично обходить это ограничение позволяет сохранение форм слов, встретившихся в тексте, а также разбиение текста не на отдельные слова, а на группы из N подряд идущих слов, называемые N-граммами.
-
Более продвинутые модели, такие как рекуррентные сети и трансформеры, представляют текст как последовательность токенов (соответствующих словам / символам / последовательностям слов и символов), а каждый подобный токен заменяется на вектор фиксированного размера, называемый эмбеддингом, который либо настраивается отдельно, либо берётся преднастроенным из словаря. Подобные модели гибче, поскольку сохраняют информацию о порядке встречи слов в тексте.
Далее будут рассмотрены основные этапы предобр аботки текста и его кодирование в виде, пригодном для простых моделей мешка слов. Представление текста для рекуррентных сетей и трансформеров будет описано в главах, посвящённых соответствующим моделям во второй части учебника.
Нормализация и очистка текста
Приведение к нижнему регистру
Приведение всех символов к нижнему регистру позволяет объединить разные варианты одного и того же слова ("Дом" и "дом", "Страны" и "страны" и т.д.).
Это полезно, поскольку сужает круг уникальных слов, упрощая признаковое пространство и облегчая настройку моделей. Такое преобразование имеет смысл в большинстве случаев, когда регистр не несёт смысловой нагрузки (новости, письма, диалоги).
Однако в ряде приложений регистр важен, и это преобразование может привести к потере информации, например, при классификации эмоций и анализе программного кода.
Удаление стоп-слов
Стоп-слова - служебные слова языка, такие как
-
союзы ("и", "но", "или", "что", "потому что");
-
предлоги ("в", "на", "под", "над", "из", "к");
-
частицы ("бы", "же", "ли", "ведь", "то");
-
местоимения ("я", "ты", "он", "она", "они", "кто", "что")
-
и т.д.,
которые не несут содержательной информации, но при этом, из-за повышенной частоты встречаемости, "задавливают" влияние других более редких, но более содержательных терминов.
Фильтровать стоп-слова можно по известным словарям стоп-слов для каждого языка, а также на основе статистических критериев, удаляя, например, слова, которые встречаются равномерно часто во всех документах.
В ряде задач, однако, некоторые стоп-слова несут информацию и их удалять не нужно. Например, в анализе тональности нельзя удалять предлог "не", поскольку он несёт информацию об отношении.
Пример: "мне фильм понравился" / "мне фильм не понравился".
Удаление слов по частоте
Стандартной практикой предобработки документов перед подачей их в модели мешка слов является фильтрация всех слов, которые встретились в коллекции документов слишком часто и слишком редко.
Слишком частые слова, скорее всего являются неучтёнными стоп-словами, которые не несут дополнительной информации.
А учёту слишком редких слов модель машинного обучения всё равно не сможет обучиться из-за малого числа примеров их употребления. Имеет смысл удалять слова, которые встретились реже 3-5 раз во всех документах, что существенно сокращает словарь используемых слов и длину признакового описания документов.
Обработка пунктуации
Знаки препинания могут удаляться или учитываться как отдельные токены в зависимости от задачи. При анализе общего смысла и тематики текстов текстов пунктуация обычно не важна. Но она становится значимой при анализе тональности, эмоций и авторского стиля текста.
Стемминг и лемматизация
Слова в языке употребляются в различных словоформах в зависимости от падежа,
числа, рода, времени и других характеристик. Например, одному и тому же глаголу "читать" отвечает много словоформ: читаю, читаешь, читает, читаем, читаете, читают и т.д.
Нормализация слов приводит слово в разных формах к единому токену. Это позволяет существенно уменьшить размер словаря уникальных токенов и упростить модель.
Существует два подхода нормализации - стемминг и лемматизация.
Стемминг - это алгоритмическое усечение слова до его основы (стема). Например, слова "читаю", "читаешь", "читает", "читаем", "читаете", "читают" будут усечены до единой основы "чит". Однако алгоритмы стемминга агрессивно усекают различающиеся окончания слов, что может привести к тому, что и другие слова преобразуются в тот же стем, например, слово "читатель", что приведёт к потере информации.
Лемматизация заключается в приведении слова к нормальной форме по словарю. Она, в отличие от стемминга, лучше сохраняет смысл слов, например, "читаю" переведётся в "читать", а "читатели" переведётся в "читатель". Для более точной лемматизации может потребоваться предварительное сопоставление каждому слову его части речи.
Примеры для английского языка:
| контекст | слово | лемма |
|---|---|---|
| I saw a bird. | saw | see |
| This saw cuts poorly. | saw | saw |
| The tree has green leaves. | leaves | leaf |
| He leaves home at 6 PM. | leaves | leave |
Представление документа в виде вектора признаков
В классическом машинном обучении используется предположение мешка слов (bag-of words assumption [1]), согласно которому каждый документ рассматривается как множество слов без учёта их порядка. Это является очевидным упрощением, поскольку, например, следующие два разных по смыслу предложения будут состоять из одного множества слов:
-
Мне фильм не понравился, пропущу продолжение.
-
Мне фильм понравился, продолжение не пропущу.
Однако оно позволяет эф фективно закодировать документы разной длины вещественными векторами фиксированного размера и поэтому часто используется на практике.
Введём следующие обозначения:
- - словарь всех токенов размера ,
- - документ,
- - число вхождений -го слова в документ ,
- - длина документа ,
- - число документов, содержащих -ое слово словаря хотя бы раз,
- - общее число документов в коллекции.
Документ представляется вектором
где определяет для документа степень представленности в нём -го слова словаря, состоящего из всех слов языка, которые встречались в изучаемой текстовой коллекции.
Бинарное кодирование
В бинарном кодировании (binary representation) , то есть фиксируется только факт наличия слова в документе независимо от степени его встречаемости.
TF-кодирование
В TF-кодиров ании (term frequency, TF-encoding) учитывается счётчик или частота слова в документе. Простейшая форма - это счётчик встречаемости слова в документе: