Магия преобразования текста в числа
В этом посте вы познакомитесь с основами векторизации текста, которая заключается в преобразовании текста в векторы (список чисел). В этом посте мы представляем пакет слов (BOW) и его разновидности: векторы частот, одно горячее кодирование (OHE) и частоту термина / обратную частоту документа (TF / IDF).
Почему векторизация текста?
Представление текста числами имеет много преимуществ, в основном:
- Компьютеры не понимают текст и отношения между словами и предложениями, поэтому вам нужен способ представления этих слов числами, которые понимают компьютеры.
- Такие векторы могут использоваться во многих приложениях, таких как системы ответов на вопросы, системы рекомендаций, анализ тональности, классификация текста, а также упрощает поиск, возврат синонимов и т. Д.
Мешок слов (ЛУК)
BOW - это метод анализа характеристик документа. Значения характеристик - это характеристики и свойства, которые вы можете использовать для принятия решения (чтобы купить дом, вам нужно обратить внимание на несколько характеристик, таких как количество комнат и его расположение). Характеристики текста - это количество уникальных слов в корпусе, вхождение каждого слова и т. Д. BOW - это метод извлечения признаков, при котором выходными данными является векторное пространство, представляющее каждый документ в корпусе. Длина этого вектора (размерности) соответствует количеству уникальных слов в корпусе (без повторений, каждое слово встречается только один раз). Модель BOW имеет разные вкусы, каждая из которых расширяет или изменяет базовый BOW. Далее будут рассмотрены три различных вектора: векторы частоты (векторы счета), одно горячее кодирование и частота термина / обратная частота документа.
Векторы частот
Это простейший метод кодирования, но он все же эффективен в некоторых случаях использования. Просто мы заполняем вектор документа счетчиком того, сколько раз каждое слово появлялось в документе. В качестве примера предположим, что в нашем корпусе есть два документа. В то время как первый документ содержит «Алиса любит пасту», второй документ содержит «Алиса любит рыбу. Алиса и Боб - друзья ». Чтобы представить счетчик, мы можем использовать таблицу или нотацию объектов JavaScript (JSON), как показано ниже:
Table representation:
+-------+-------+-------+-------+------+-----+-----+-----+---------+ | | Alice | loves | pasta | fish | and | Bob | are | friends | +-------+-------+-------+-------+------+-----+-----+-----+---------+ | doc1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | +-------+-------+-------+-------+------+-----+-----+-----+---------+ | doc2 | 2 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | +-------+-------+-------+-------+------+-----+-----+-----+---------+
JSON representation: doc1: {"Alice":1, "loves":1, "pasta":1} doc2: {"Alice":2, "loves":1, "fish":1, "and":1, "Bob":1, "are":1, "friends":1} You can combine them: {"Alice":3, "loves":2, "pasta":1, "fish":1, "and":1, "Bob":1, "are":1, "friends":1}
Как видите, в нашем корпусе 8 уникальных слов. Следовательно, наш вектор будет иметь размер 8. Чтобы представить документ 1, мы просто берем первую строку в нашей таблице [1, 1, 1, 0, 0, 0, 0, 0]. Этот вектор помогает сравнивать документы. Хотя этот метод полезен в некоторых случаях использования, он имеет некоторые ограничения, такие как: не сохраняет структуру документа (не сохраняет порядок слов, а просто считает), а также имеет проблему разреженности (большинство значений в вектор - нули, что увеличивает временную сложность и добавляет смещения модели, а останавливающие слова (такие как 'и', 'или', 'is', 'the' и т. д.) появляются во много раз чаще, чем другие слова. Поэтому мы используем некоторые методы, такие как выделение основы и лемматизация. Мы также удаляем останавливающие слова и редкие слова, которые встречались всего несколько раз во всем корпусе.
Одно горячее кодирование
Как обсуждалось в частотных векторах, токены, которые появляются часто, имеют большую величину, чем другие, которые появляются меньше. Следовательно, вектор OHE предоставляет логический вектор в качестве решения этой проблемы, когда мы заполняем вектор только единицами и нулями. Мы ставим 1, если слово появляется в документе (1 вместо счетчика), и 0 в противном случае. Документ 2 может быть представлен как [1, 1, 0, 1, 1, 1, 1, 1].
Одна горячая кодировка также может использоваться для представления слов. 1 для слова, которое мы хотим представить, и 0 для остальных. Слово «Алиса» может быть представлено как [1, 0, 0, 0, 0, 0, 0, 0], или мы также можем добавить счетчик, так что «Алиса» может быть представлена как [3, 0, 0, 0, 0, 0, 0, 0] (подробнее об этом мы поговорим во второй части этого блога).
Частота термина / обратная частота документа
До сих пор мы рассматривали каждый документ как отдельный объект, не обращая внимания на контекст корпуса. TF / IDF - один из распространенных методов нормализации частоты токенов в документе по отношению к контексту корпуса. TF / ID представляет собой две вещи:
1. Частота термина tf (t, d): как часто термин (t) встречается в документе (d). Если мы обозначим исходное количество как f(t, d)
, тогда простейшая схема tf будет tf(t, d) = f(t, d)
(другие методы, обсуждаемые ниже), и позвольте нам обозначить общее количество слов появляется в документе d по len(d)
. Например, чтобы ранжировать документы, которые больше всего связаны с запросом «голубое небо», мы подсчитываем, сколько раз каждое слово встречается в каждом документе. Однако, поскольку каждый документ отличается по размеру, нечестно сравнивать, сколько раз слово встречается в документе с 10 словами и в документе с 1 млн слов. Поэтому мы масштабируем tf, чтобы предотвратить смещение длинных документов следующим образом :
tf(t, d) = f(t, d) / len(d)
Другие методы tf, которые регулируют и уменьшают количество наиболее повторяющихся слов в документе:
- Логическая частота:
tf(t, d) = 1
, если t встречается в d, и 0 в противном случае. - Срок действия с поправкой на длину документа:
tf(t, d) = f(t, d)/len(d)
- Логарифмически масштабированные частоты:
tf(t, d) = log( 1 + f(t, d))
- Расширенная частота:
tf(t, d) = 1 * f(t, d) / m
, где m - наиболее часто встречающееся слово в d.
2) Обратная частота документов: измеряет, насколько важен термин. IDF снижает ценность общих слов, встречающихся в разных документах. В нашем предыдущем примере «голубое небо» слово «the» является обычным словом, и поэтому термин «частота» имеет тенденцию неправильно выделять документы с повторяющимися словами с меньшим количеством значений, такими как «the». В качестве решения мы вычисляем log () для общего количества документов (D), деленное на n, которое представляет собой количество документов с t появился в:
idf(t, D) = log(D / n)
и, наконец, TF / IDF можно рассчитать как:
tf-idf(t, d, D) = t(t, d) . idf(t, D)
Наконец, мы просто добавляем оценки TF-IDF в векторы вместо подсчета частоты или OHE.