Магия преобразования текста в числа

В этом посте вы познакомитесь с основами векторизации текста, которая заключается в преобразовании текста в векторы (список чисел). В этом посте мы представляем пакет слов (BOW) и его разновидности: векторы частот, одно горячее кодирование (OHE) и частоту термина / обратную частоту документа (TF / IDF).

Почему векторизация текста?

Представление текста числами имеет много преимуществ, в основном:

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

Мешок слов (ЛУК)

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.

Ресурсы: