Нужно ли препроцессить текст в машинном обучении при использовании готовой модели
При создании моделей машинного обучения чтобы качество ее было выше обычно применяются различные техники препроцессинга - токенизация, стоп-слова, лемматизация и.т.д. Причем современные инструменты типа spaCy могут дать возможность глубокого анализа, вплоть до коренных словв, например для слова "Кошка" он может предложить коренное слово "Кот", а не "Окошко"(которое побуквенно будет ближе к слову кошка).
Мой вопрос заключается в следующем, если я создал модель машинного обучения для текстовой мультиклассовой классификации, которая очень сильно обработана препроцессингом, не нужно ли для того, чтобы эта модель корректно работала проводить такой же препроцессинг и при работе с моделью?
Приведу пример. Пусть мы разрабатываем модель, которая исходя из текста комментария относит его к различным категориям. Предположим часть обучающей выборки после препроцессинга выглядит следующим образом:
Сэмпл | Класс
Кот шерсть серый | Животные. Коты
При этом очевидно предполагается, что пользователь будет писать комментарий типа "У моего котика такая серая шерстка, просто чудо!". Моя гипотеза заключается в следующем: если мы этот запрос пользователя перед передачей ее на вход готовой модели машинного обучения предварительно прогоним через тот же пайплайн препроцессинга, и получим вместо той фразы, что было написано фразу "кот серый шерсть чудо", не приведет ли это к росту качества данной модели?
Ответы (1 шт):
Даю универсальный ответ, даже безотносительно конкретики вашего вопроса.
При использовании моделей машинного обучения должна быть в точности такая же подготовка данных (препроцессинг), как и при обучении модели. Если вы не будете готовить данные так же как при обучении, у вас на выходе модели будет вообще неизвестно что. И неправильные предсказания могут быть, и ошибки. Потому что модель ожидает специально подготовленные данные в определённом формате. Если вы ей скармливаете что-то другое, как минимум от этого ухудшается качество, а как максимум модель может вообще отказаться работать.
С текстами всё тоже самое, да. Особенно с текстами. Но вообще это универсальный принцип машинного обучения.
В вашем примере скорее всего получится, что модель просто не знает, что такое "котика" и что такое "шерстка". Она этих слов просто не распознает, потому что она их не видела при обучении. Она видела только слова "кот" и "шерсть". А те слова, которые вы ей скормили теперь, она их просто не знает и ничего по ним предсказать не сможет.
Ещё раз резюмирую. Процесс предобработки данных - необходимый этап в машинном обучении, он должен быть абсолютно одинаковым и при обучении модели и на этапе использования модели. Вообще с нейросетями там есть некоторые дополнительные нюансы, но в целом лучше железно придерживаться этого правила.
P.S. Например, библиотека FastText
при обучении учится не только на словах из предоставленного ей текста, но и на отдельных буквах текста и их сочетаниях. Поэтому она может лучше работать, чем более простые модели, даже на тех словах, которые она не видела при обучении. Вот она возможно "котика" и "шерстку" распознает правильно. Но я бы на это не полагался.