Как выделить из текста ключевые слова по определенной тематике
Всем добрый день! Я новичок в ML, поэтому буду благодарна любой помощи.
Передо мной стоит следующая задача: перед обучением модели, требуется обработать данные - вычленить из текста (описание вакансии) ключевые слова, по которым можно будет понять, что это за профессия.
Вот как выглядят мои данные для обучения:

Пример:
- Соответствующая профессия: повар
- Название вакансии: Повар-универсал
- Описание вакансии после предобработки (см. ниже): обязанность приготовление пф блюдо холодного цех работа с выпечка мелко штучка требование опыт работа умение работать ттк наличие мед книжка условие заработный плата руб час ежемесячный премии график работа до питание униформа мед осмотр счёт компания
- Пример массива слов, который я хочу получить (для дальнейшего обучения модели): ['блюдо', 'выпечка']
Но проблема заключается в том, что в датасете для обучения содержится свыше 50.000 текстов с описаниями вакансий. И пока что я не вижу никакого другого решения, кроме как создать массив с незначащими словами, по которому в дальнейшем будет проходить поиск и удаление слов, что содержатся в тексте. Также я не уверена, что такой подход можно считать верным, так как отбор слов вручную подразумевает субъективность, что плохо, наверное.
"""Пример реализации моей идеи"""
# массив незначащих слов, которые не помогут определить профессию по описанию вакансии
word_filter = ['работа', 'обязанность', 'умение', 'наличие'] # и т.д.
# массив всех слов из описания вакансии
description = ['обязанность', 'приготовление', 'блюдо', 'цех', 'работа', 'выпечка'] # и т.д.
for word in description:
if word in word_filter:
description.remove(word)
До этого, в качестве обработки сырого текста мной было предпринято следующее:
- удалены все html-теги, что остались после парсинга
- удалены все знаки препинания, лишние символы, emoji
- Удалены все цифры (они не играют роли для определения профессии по описанию вакансии)
- Удалены такие части речи как: наречия, сравнительные формы слов, причастия, деепричастия, местоимения, предлоги и пр.
- Все слова поставлены в начальную форму
Если у вас есть какие-либо идеи или замечания по поводу данной задачи, то пишите, с радостью всё поясню:) Заранее спасибо!
Ответы (1 шт):
Погодите, но ведь речь о машинном обучении, верно? И данные у вас, похоже, размечены (ну, или хотя бы их часть). Так почему бы не применить машинное обучение для вашей задачи? Для начала возьмите какой-нибудь простой CountVectorizer, преобразуйте слова в векторное представление, обучите какую-то модель, у которой можно посмотреть важность фич (для LR это абсолютная величина коэффициентов, у большинства других моделей тоже есть механизмы подсчёта важности фич). Ну и у каких слов больше важность - те и важны для определения профессии. А у каких важность по мнению модели слабая - попробуйте убирать эти слова и посмотрите, что будет с качеством предсказаний модели. Если слова действительно не значащие, то качество не ухудшится, а то и улучшится. Ну, там есть ещё детали, но в общих чертах можно подойти к проблеме так.
Я пробовал подобный подход применять к текстам судебных решений, чтобы определить их тип, он вполне работает. Возможно только придётся использовать не одиночные слова, а n-граммы из слов (обычно достаточно одиночных слов, плюс сочетаний из 2-х слов), а то и эмбеддинги word2vec для улучшения качества моделей, но это вполне рабочий подход.