Представление текстовых данных
Рассмотрим задачу обработки текстовых документов из некоторого корпуса текстов. Эта задача часто возникает на практике, например, в следующих задачах:
-
классификация новостей;
-
фильтрация спама в почте;
-
анализ тональности в пользовательских отзывах на товар или компанию;
-
определение ожидаемой зарплаты по тексту резюме
и т.д.
Сложность задачи заключается в том, что документы же представляют собой последовательности дискретных объектов (слов), и могут иметь переменную длину.
Рассмотрим основные этапы обработки текста для кодирования документов векторами вещественных чисел фиксированной длины, пригодном для их последующей обработки алгоритмами классического машинного обучения.
Нормализация и очистка текста
Приведение к нижнему регистру
Приведение всех символов к нижнему регистру позволяет объединить разные варианты одного и того же слова («Дом» и «дом», «Страны» и «страны» и т.д.).
Это полезно, поскольку сужает круг уникальных слов, упрощая признаковое пространство и облегчая настройку моделей. Такое преобразование имеет смысл в большинстве случаев, когда регистр не несёт смысловой нагрузки (новости, письма, диалоги). Однако в ряде приложений регистр важен, и это преобразование может привести к потере информации, например, при классификации эмоций, распознавании именованных сущностей и анализе программного кода.
Удаление стоп-слов
Стоп-слова — служебные слова языка, такие как
-
союзы («и», «но», «или», «что», «потому что»),
-
предлоги («в», «на», «под», «над», «из», «к»),
-
частицы («бы», «же», «ли», «ведь», «то»),
-
местоимения («я», «ты», «он», «она», «они», «кто», «что»),
которые не несут содержательной информации.
Их полезно отбрасывать из текста, поскольку такие слова встречаются очень часто и своим влиянием задавливают влияние более редких, но более содержательных терминов.
Фильтровать стоп слова можно по известным словарям стоп-слов для каждого языка, а также на основе статистических критериев, удаляя, например, слова, которые встречаются равномерно часто во всех документах.
В ряде задач, однако, некоторые стоп-слова несут информацию и их удалять не нужно:
-
в анализе тональности нельзя удалять предлог «не», поскольку он несёт информацию об отношении («мне фильм понравился» / «мне фильм не понравился»);
-
в распознавании именованных сущностей нельзя удалять местоимения, которые могут относиться к извлекаемым объектам;
-
при использования синтаксического разбора предложений оказываются важными все стоп-слова.
Удаление слов частоте
Стандартной практикой при обработке документов является фильтрация всех слов, которые слишком часто и слишком редко встретились в коллекции документов.
Слишком частые слова, скорее всего являются неучтёнными стоп-словами, которые не несут дополнительной информации.
А учёту слишком редких слов модель машинного обучения всё равно не сможет адекватно обучиться из-за малого числа примеров их употребления. Имеет смысл удалять слова, которые встретились реже 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), согласно которому каждый документ рассматривается как множество слов без учёта их порядка. Это является очевидным упрощением, поскольку, например, следующие два разных по смыслу предложения будут состоять из одного множества слов:
-
Мне фильм не понравился, пропущу продолжение.
-
Мне фильм понравился, продолжение не пропущу.
Однако оно позволяет эффективно закодировать документы разной длины вещественными векторами фиксированного размера и поэтому часто используется на практике.
Пусть:
- - словарь всех токенов размера ,
- - документ,
- - число вхождений -го слова в документ ,
- - длина документа ,
- - число документов, содержащих -ое слово словаря хотя бы раз,
- - общее число документов в коллекции.
Документ представляется вектором
где определяет степень представленности -го слова словаря в документе, которое может быть различным.