Вопрос или проблема
Предположим, у меня есть набор уже размеченных документов — некоторые из них являются описаниями вакансий (это документы интереса), а некоторые нет. Мне интересно, какой метод позволит мне построить модель, которая сможет обобщать на новые данные, в частности, новые описания вакансий, которые могут значительно отличаться от уже размеченных описаний вакансий.
Что я сделал до сих пор (на Python):
(1) Попытка 1: Я попробовал классический метод мешка слов + TfidfVectorizer
+ бинарная классификация (в частности, LogisticRegression
). При настройке параметров на обучающем + валидационном наборах, точность и полнота на тестовом наборе смогли достичь более 98%. Однако после того, как я построил модель, я собрал новый набор документов (опять же, некоторые из них являются объявлениями о вакансиях, а другие — нет) и попросил аннотаторов размечать эти новые данные. Затем я использовал модель для классификации этих новых документов. Как можно было ожидать, точность и полнота значительно упали до примерно 65% и 40% соответственно.
(2) Попытка 2: Я подумал, что использование только tfidf может вызвать некоторое переобучение, поэтому я попробовал применить TruncatedSVD
(с 100 компонентами) к TfidfVectorizer (мешок слов + TfidfVectorizer
+ TruncatedSVD
+ бинарная классификация). Снова я настроил параметры, используя обучающий и валидационный наборы, и точность и полнота были аналогично высокими на тестовом наборе. Когда я применил эту новую модель к вновь собранным данным, полнота немного улучшилась, с 40% до 50%, но точность немного снизилась, до 58%.
Итак, мой вопрос: существует ли способ использовать начальный набор размеченных документов для построения модели, которая может лучше обобщать на новый набор данных? Мой конкретный интерес заключается в определении описаний вакансий. Это не обязательно должно быть задачей бинарной классификации, так как описания не-вакансий могут быть гораздо более разнообразными, чем описания вакансий.
Вам стоит хотя бы попробовать использовать предобученные векторные представления. TfidVectorizer особенно чувствителен к словам, которые отсутствуют в словаре, а такие слова, скорее всего, появятся, если вы применяете трансферное обучение в новой области. Векторные представления GloVe [1] имеют словарь из 400 тысяч векторов, и, если вы не работаете с документами из технической области, они должны дать некоторое улучшение. Также подумайте о проведении дополнительной обработки признаков, слова сами по себе не предоставляют много информации. Почему бы не попробовать добавить n-граммы и извлечение зависимостей, распознавание сущностей и т. д. в качестве этапов предварительной обработки?
Ответ или решение
Для решения задачи идентификации новых описаний вакансий из набора документов, имея уже размеченные описания, можно применять несколько подходов и методов, которые помогут улучшить обобщающую способность модели на новых данных.
1. Использование предварительно обученных векторных представлений
Как уже упомянуто, использование векторных представлений слов, таких как GloVe или Word2Vec, может значительно повысить качество классификации. В отличие от TfidfVectorizer
, который чувствителен к словам вне словаря, предварительно обученные векторы обеспечивают более богатое представление слов и контекста, что позволяет вашему алгоритму лучше понимать семантику текста.
2. Расширение признаков
В дополнение к векторным представлениям, стоит рассмотреть возможность добавления дополнительных признаков:
- n-граммы: Использование биграмм и триграмм может помочь захватить контекст и взаимосвязи между словами.
- Извлечение зависимостей: Анализ синтаксических зависимостей (например, с помощью библиотеки spaCy) поможет выявить структуру предложений и отношений между сущностями.
- NER (распознавание именованных сущностей): Выделение таких сущностей, как должности и компании, может быть весьма полезным, особенно в контексте описания вакансий.
3. Классификация с использованием современных моделей
Поскольку задача не обязательно является бинарной, можно рассмотреть использование многоклассовой классификации:
- Трансформеры (например, BERT): Модели на основе трансформеров хорошо справляются с различными текстовыми задачами благодаря своей способности учитывать контекст. Использование классификатора на основе BERT может значительно улучшить результаты на новом наборе данных.
- Состояние последовательно обученных моделей: Использование техник fine-tuning на вашей размеченной выборке позволит модели адаптироваться к специфике ваших данных.
4. Повышение устойчивости к новым данным
Чтобы обеспечить модель устойчивостью к новым и разнообразным данным, можно:
- Аугментация данных: Попробуйте создать вариации начальных описаний (например, синонимизация слов) для расширения обучающего набора.
- Обучение на нескольких категориях: Если ваши неразмеченные документы относительно разнообразны, рассмотрите возможность обучения модели на нескольких категориях или более сложных метках, чтобы захватить больше признаков.
5. Регуляризация и валидация
Использование методов регуляризации (например, L1/L2 регуляризация) может помочь предотвратить переподгонку. Также важным аспектом является:
- Кросс-валидация: Разделите ваши размеченные данные на несколько частей и обучайте модель на разных подмножествах, что поможет вам оценить ее производительность и уменьшить риск переобучения.
Заключение
Вам следует пробовать различные комбинации вышеупомянутых методов, тщательно настраивая и тестируя модели. После успешного обучения и тестирования модели на новых данных важно продолжать адаптацию и улучшение подхода по мере получения новых данных и обратной связи. Удачи в вашем проекте по идентификации описаний вакансий!