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

Горячее кодирование
Это просто — каждое слово или символ получает число, а числа представлены в виде вектора единиц и нулей. Например, фраза ниже состоит из трех слов:

Inga goes hiking

Каждое слово можно преобразовать в число (1, 2, 3), а каждое число — в однократный вектор [1 0 0], [0 1 0], [0 0 1]. У нас есть словарь 3, поэтому никакие другие слова не могут быть закодированы этими векторами. Теперь мы можем составить новое предложение:

Hiking inga - [0 0 1], [1 0 0]

Это просто, но плохо для больших словарей, так как векторы становятся огромными.

Набор слов
Обычный для задач классификации текста набор слов представляет рассматриваемый текст как набор слов, игнорируя порядок и контекст. Каждое слово получает уникальное целое число, и каждый документ представлен вектором чисел, представляющих количество слов. Таким образом, фраза «Инга идет в поход» может быть представлена ​​как [1 1 1], а фраза «Инга в поход идет в поход» — [1 1 3].

Сумка слов проста для понимания и реализации, хорошо работает для сравнения текстовых документов по общим признакам (обе эти статьи о спорте?), но размеры векторов становятся большими с большим словарным запасом, числа не отражают сходства между значениями слов. , и отношения между словами теряются («человек ест собаку» трактуется так же, как «собака ест человека»).

Мешок N-грамм
Вместо того, чтобы разбивать текст на слова, пакет n-грамм разбивает текст на фразы. Каждая фраза или фрагмент из n смежных слов называется n-граммой. Словарь становится набором n-грамм, и, подобно набору слов, вектор для каждого документа содержит набор количества раз, когда каждая n-грамма появляется в словаре.

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

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

Частота термина, TF, — это частота появления слова в документе.
Обратная частота документа — IDF – это важность слова в корпусе. Произведение как TF, так и IDF дает нам оценку TF-IDF для слова, и каждый документ кодируется как вектор оценок TF-IDF для всех слов в документе.

Оценки TF-IDF отлично подходят для расчета сходства между документами и часто используются для поиска информации и классификации текста. Как и предыдущие методы, он содержит слишком большие векторы и не может обрабатывать слова за пределами заданного словаря.

Внедрение слов
Встраивание слова предназначено для лучшего отражения его значения в низкоразмерном пространстве. Word2vec, представленный в 2013 году, по существу ввел встраивание слов в НЛП и позволил зафиксировать отношения аналогии слов, такие как

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

Вложения слов, как правило, предварительно обучены, и их можно загрузить, не тратя ресурсы на обучение таким вещам, как Википедия. Вложения надежны и практичны. Тем не менее, они по-прежнему сталкиваются с проблемой нехватки словарного запаса — вновь введенные слова не соответствуют модели. Это можно исправить, используя n-граммы символов и слов вместе, чтобы новые слова строились из существующих частей. Это хорошо работает для portmanteaus (слов, составленных из других слов), одним из примеров является алгоритм fastText Facebook (как неуклюжий портмоне, так и алгоритм символьной n-граммы!).

Тем не менее, встраивание слов не учитывает порядок слов при обобщении документа.

Внедрение документов
Такие инструменты, как Doc2vec, основаны на встраивании слов для создания вложений целых абзацев, сохраняя, таким образом, контекст слов. Этот метод применялся в классификации текстов, маркировке документов, системах текстовых рекомендаций и простых чат-ботах (дерьмовых, которые лишь читают FAQ).

Встраивания — это мощный инструмент, но у него та же проблема, что и у многих других методов машинного обучения. Они в значительной степени полагаются на данные, на которых они предварительно обучены — например, в зависимости от того, с чем вы обучались, Apple может быть больше связана с Microsoft или с апельсином. Тем не менее, встраивания — это инструмент, на котором строятся многие из последних и самых мощных моделей. А теперь иди и напиши код!

  • и не забудьте подписаться на меня в твиттере @SaladZombie