Извлечение признаков

Зачем и как извлекать признаки из текста

Дано несколько текстов. Преобразуйте их в бинарные вектора.

Казнить нельзя, помиловать.

Казнить, нельзя помиловать.

Нельзя не помиловать.

Обязательно освободить.

При токенизации текстов был построен следующий словарь: казнить не нельзя обязательно освободить помиловать.

Ответ (вектора для приведённых выше текстов) запишите в следующем формате:

  • Одна строка соответствует одному тексту.

  • Значения признаков следует разделять пробелами

  • Порядок значений признаков должен соответствовать порядку слов в словаре (приведён выше).

Пример ответа для первых двух текстов:

1 0 1 0 0 1 1 0 1 0 0 1

Многие задачи решаются классификаторами, основанными на машинном обучении.

Такие классификаторы принимают на вход объекты, представленные в определённом виде:

  • вектора или матрицы (тензоры)

  • графы (деревья)

Зачем извлекать признаки?

  • не нужна разметка — можно использовать больше данных

  • одни и те же признаки могут подходить для нескольких задач

  • можно выделать признаки без машинного обучения

Методы извлечения признаков

  • Двоичный вектор, описывающий встречаемость слов в документе

  • Вектор вещественных чисел, двоичный вектор с учётом частотности

  • N-граммы символов и токенов, словосочетания

  • Плотные векторные представления слов, предложений и текстов (word/doc embeddings)

  • Ядерные методы (kernel methods) и графовые ядра

Двоичный вектор

"Днём мама мыла раму. Вечером мы пошли гулять."

Слово

Вектор

и

0

мы

1

мама

1

велосипед

0

...

...

рама

1

Преимущества:

  • простота

  • подходит для разных по длине текстов

  • размерность вектора очень большая -> простые линейные модели хорошо работают

Недостатки:

  • значимость (вес) специальных слов такая же, как и частотных общеупотребимых

  • чувствителен к шуму

  • близкие по смыслу слова ("кружка" и "чашка") кодируются не зависящими друг от друга элементами вектора -> теряется обобщение

  • рамерность вектора ведёт к переобучению на небольших обучающих выборках

Вектор вещественных чисел

"Днём мама мыла раму. Вечером мы пошли гулять."

Слово

TF-IDF

и

0

мы

0.01

мама

0.1

велосипед

0

...

...

рама

2

Term Frequency - Inverse Document Frequecy (TF-IDF)

Преимущества:

  • простота

  • хорошо описывает особенности тематики текстов

  • размерность вектора очень большая -> простые линейные модели хорошо работают

  • легко заложить в модель знания о тематике (корректировкой весов)

Недостатки:

  • чувствителен к шуму

  • близкие по смыслу слова ("кружка" и "чашка") кодируются не зависящими друг от друга элементами вектора -> теряется обобщение

  • рамерность вектора ведёт к переобучению на небольших обучающих выборках

N-грамма

N-грамма — объект, состоящий из нескольких подряд идущих базовых элементов

"Днём мама мыла раму. Вечером мы пошли гулять."

  • Символьные 3-граммы: днё, нём, ём_, м_м, _ма, мам

  • Словные 2-граммы: день мама, мама мыть, мыть рама

Применение

  1. Вместе с TF-IDF

  2. В дистрибутивной семантике, FastText word embeddings

Преимущества:

  • простота

  • работа с флективными зыками без полноценной морфологии и POS-теггинга

  • более специфичные признаки, чем отдельные слова

Недостатки

  • высокая размерность и разреженность

  • близкие по смыслу слова ("кружка" и "чашка") кодируются не зависящими друг от друга элементами вектора -> теряется обобщение

  • рамерность вектора ведёт к переобучению на небольших обучающих выборках

Вектора можно сжать!

Пример матричного разложения
  • Матричные разложения и тематическое моделирование (SVD, pLSA, LDA, ARTM)

  • Предиктивные дистрибутивно-семантические модели (Word2Vec, FastText)

  • Предиктивные модели текста (language model - BERT, ELMo, OpenAI Transformer)

Преимущества:

  • нет необходимости в размеченной выборке

  • state-of-art качество для некоторых задач

  • позволяет учитывать совместную встречаемость слов и отношения их смыслов

  • multitask learning — настройка представлений с учётом прикладных задач

Недостатки:

  • намного дороже в вычислениях

  • требуются гигантские массивы текстов для обучения

  • для некоторых задач нет существенного преимущества перед более простым частотным векторным представлением

  • сложность управления процессом обучения

Скалярное произведение — оценка сходства двух векторов:

<a,b>=iNaibiiNai2iNbi2< a, b > = \frac{\sum^N_i a_i b_i}{\sqrt{\sum^N_i a^2_i} \sqrt{\sum^N_i b^2_i}}

Однако текст сложно закодировать вектором, ничего не потеряв!

Можно определить операцию скалярного поизведения так, чтобы она работала на графах

  • случайные обходы различной длины

  • обучаемые ядра (tree recursive neural network)

Когда ядро определено, можно применять простые классификаторы — Support Vector Machine, Kernel Nearest Neighbor и т.п.

Преимущества:

  • нет необходимости в размеченной выборке

  • state-of-art качество для некоторых задач

  • позволяет учитывать очень сложные отношения слов

  • позволяет абстрагироваться от порядка слов

Недостатки:

  • дорого в вычислениях

  • зависимость от ядра

Last updated

Was this helpful?