Представление текстовых данных
Рассмотрим задачу обработки текстовых документов из некоторого набора текстов, называемого корпусом. Эта задача часто возникает на практике, например, в следующих задачах:
-
классификация новостей;
-
фильтрация спама в почте;
-
анализ тональности пользовательских отзывов на товар или компанию;
-
определение ожидаемой зарплаты по тексту резюме.
Сложность задачи заключается в том, что документы представляют собой последовательности дискретных объектов (слов/символов) переменной длины. А модели машинного обучения умеют работать лишь в векторами вещественных чисел, длина которых фиксирована.
Последнее ограничение можно обходить двумя способами:
-
В моделях мешка слов (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) учитывается счётчик или частота слова в документе. Простейшая форма — это счётчик встречаемости слова в документе:
В целях уменьшения влияния слишком частых слов, популярно применение логарифмического масштабирования к частоте:
Для сопоставимости документов разной длины используют не счётчик, а частоту слова в документе:
TF-IDF-кодирование
TF‑IDF кодирование (TF-IDF encoding [2]) является перемасштабированным TF-представлением документа на величины (inverted document frequency) для каждого слова словаря.
В TF‑IDF каждая компонента вектора получается как произведение TF на IDF:
где
- отражает степень представленности слова в рассматриваемом документе ,.
- отражает редкость слова в коллекции документов, снижая вес часто встречающихся слов и усиливая значение редких, а следовательно и более информативных слов.
Простейший базовый вариант считается по формуле
откуда видно, что чем реже слово встречается в документах, тем выше его IDF. Недостаток этого подхода заключается в том, что значения IDF будут оказываться слишком большими для редких слов, поэтому чаще применяется его логарифмированный вариант:
Это стандартный вариант IDF, используемый в большинстве практических с истем.
Также существует сглаженный вариант IDF, использованный, например, в поисковой системе BM25 [3]:
Добавление 0.5 в знаменателе предотвращает деление на ноль, а в числителе выравнивает значения IDF по всем словам.
Бинарное, TF и TF-IDF представление оказываются очень разреженными (sparse), поскольку даже длинные документы содержат лишь малую часть всех уникальных слов языка. Поэтому для эффективного хранения таких признаковых описаний используются разреженные матрицы (sparse matrices [4]), которые хранят лишь ненулевые элементы. Для обработки разреженных данных используются алгоритмы, поддерживающие работу с такими данными, например, линейные модели в scikit-learn [5].
Дополнительно о способах кодирования документов в виде TF и TF-IDF представлений вы можете прочитать в [2].
N-граммы слов
N-граммой слов называют последовательность из подряд идущих слов в тексте. Если , то такую последовательность называют биграммой, а если , то триграммой.
Например, в предложении «машина быстро набирает скорость» можно выделить биграммы «машина быстро», «быстро набирает», «набирает скорость» и триграммы «машина быстро набирает», «быстро набирает скорость».
N-граммы фиксируют локальную структуру языка, позволяя модели учитывать контекст, который не отражён в отдельных словах.
Например, учёт фразы «машинное обучение» как единой сущности более информативен, чем информация о встрече отдельных слов «машинное» и «обучение».
Поэтому стандартное TF или TF-IDF представление документа на уровне слов имеет смысл дополнить TF или TF-IDF представлением составляющих документ N-грамм.
Вычислительные соображения
Уникальных слов языка , встречавшихся в коллекции текстов, уже довольно велико - несколько десятков или даже сотен тысяч. Добавление N-грамм существенно увеличивает словарь, поэтому если они и используются, то чаще только на уровне биграмм. Причём рассматриваются варианты не всех возможных биграмм, а лишь тех из них, которые реально встречались в обучающем корпусе текстов. Их существенно меньше, поскольку не все пары слов сочетаются в языке. Но и этих биграмм оказывается достаточно много.
Разумным компромиссом является учёт не всех встреченных биграмм, а лишь коллокаций (collocations), то есть устойчивых словосочетаний, которые встречаются чаще, чем можно было бы ожидать при случайном совместном появлении отдельных слов.
Примеры коллокаций: искусственный интеллект, машинное обучение, держать слово, бить баклуши, Российская Федерация.
Популярным подходом для извлечения коллокаций является мера взаимной информации PMI (pointwise mutual information) [6], вычисляемая для пары слов по правилу
где
-
- частота встречи слова сразу после в корпусе текстов;
-
- частоты встреч слов и по отдельности.
По сути, в PMI оценивается отношение фактической вероятности появления слова сразу после к произведению , отражающему вероятность встречи слова сразу после при гипотезе их независимого появления. Чем выше это отношение, тем более неслучайно появление -го слова сразу за -м и тем больше оснований считать эту пару коллокацией.
Отношение вероятностей в мере PMI ведёт себя нестабильно для редких слов. Например, два редких слова могли встретиться единожды в тексте, причём сразу друг за другом. Для исключения подобных случайных совпадений необходимо дополнительно потребовать, чтобы сама пара слов встречалась не ниже определённого порога либо использовать модифицированную версию [7]:
где - гиперпараметр. Возведение числителя в степень будет снижать вклад редко встречающихся пар слов в общую оценку неслучайности их совместного появления.
N-граммы символов
Иногда TF/TF-IDF представление документов на уровне слов можно дополнить TF/TF-IDF представлением на уровне N-грамм символов.
Пример разбиения фразы "мама мыла раму" на триграммы тремя способами:
| режим | триграммы |
|---|---|
| вся строка (включая пробелы) | мам, ама, ма␣, а␣м, ␣мы, мыл, ыла, ла␣, а␣р, ␣ра, рам, аму |
| только внутри слов без перехода через пробел | мам, ама, мыл, ыла, рам, аму |
| только внутри слов с учётом границ слова | <ма, мам, ама, ма>, <мы, мыл, ыла, ла>, <ра, рам, аму, му> |
Учитывать N-граммы символов имеет смысл при обработке текстов с опечатками, а также со сложными составными терминами, например, в биомедицинской, химической или технической области (примеры: триметиламин, дезоксирибонуклеиновая кислота, сердечно-сосудистая система). Также N-граммы символов полезны при обработке нерегулярных текстов, включих URL, электронную почту, имена файлов и коды программ.
Как мы выяснили, текст можно обрабатывать не только на уровне слов, но также и на уровне составляющих его N-грамм слов и даже символов. Базовые сущности, на которые текст разбивается, называются токенами, а сам процесс разбиения - токенизацией.
Мы рассмотрели базовые методы представления текстов для классических моделей машинного обучения вида "мешка слов" (bag-of-words models), игнорирующих порядок появления токенов в тексте. Учитывать этот порядок позволяют более продвинутые нейросетевые модели - рекуррентные сети и трансформеры, которые описываются во второй часть учебника.
Литература
- Wikipedia: Bag-of-words model.
- Wikipedia: tf–idf.
- Wikipedia: Okapi BM25.
- Wikipedia: Sparse matrix.
- Документация sklearn: Linear Models.
- Wikipedia: Pointwise mutual information.
- Role F., Nadif M. Handling the impact of low frequency events on co-occurrence based measures of word similarity-a case study of pointwise mutual information //International conference on knowledge discovery and information retrieval. – Scitepress, 2011. – Т. 2. – С. 218-223.