Во время работы над проектом, который связан с проблемой классификации текста по нескольким классам. Идея заключалась в том, чтобы научить модель прогнозировать категорию (из 16 возможных категорий) отчета на основе произвольного текста.

Для подготовки данных я использовал CountVectorizer и TfIdfVectorizer из scikit-learn.

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

3378
{'main': 1914,
 'breaker': 718,
 'put': 2351,
 'position': 2275,
 'loco': 1866,
 'ableunable': 392,
...
}

«3378» — это общая длина словарного запаса корпуса. Это означает, что в корпусе присутствует 3378 уникальных слов/строк.

В приведенном выше примере; «main» соответствует идентификатору «1914» в словаре, «break» соответствует идентификатору «718» и так далее.

Далее, чтобы понять, какие токены имеют более высокий балл на основе частоты терминов — оценка обратной частоты документов (TfIdf) каждого класса. Мы можем преобразовать данные в разреженный набор данных/матрицу, выполнив следующие действия:

Вышеприведенный вывод показывает оценку 3378 токенов (столбцов) для каждого документа (строки) в корпусе, а также связанный с ним класс.

После этого мы можем суммировать баллы для каждого из 3378 токенов по 16 классам в нашем наборе данных.

Вооружившись этой информацией, мы теперь можем начать понимать важность каждого токена в идентификации определенного класса. Более высокий балл TfIdf может означать 1 из 2 вещей.

  1. Токен имеет высокую частоту появления в документе
  2. Токен редко встречается в корпусе

В приведенном выше примере выделенное значение 2,155245 для идентификатора токена «3376» может означать, что присутствие этого токена в конкретном документе будет означать более высокую вероятность того, что документ относится к классу «COMS».

Но что это за слово с идентификатором токена «3376»?

С помощью этой функции ниже мы можем получить первые n слов каждого класса и отобразить их.

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

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

Общие слова, такие как «неисправный», «тестирование», которые я знал интуитивно, не указывали на какой-либо конкретный класс. Выполнение этого дополнительного шага по «разработке функций» помогло повысить точность прогнозирования некоторых неэффективных классов.

Надеюсь, это было полезно для некоторых из вас.

Спасибо за прочтение и поделитесь со мной своими мыслями!