Вопрос или проблема
Я пытаюсь создать модель NER, которая может называть сущности в “Описание работы”.
Сущности:
- Обязательные навыки (Обязательные навыки, такие как java, python, c++ и т.д.)
- Желательные навыки (кандидат “может” или “может не иметь” эти навыки, оба варианта допустимы.)
- Степень (бакалавр, магистр…)
- Сертификация
- Должность
Я подготовил набор данных, аннотировал их и обучил модель spacy V2.0. Модель работает хорошо (в диапазоне 70-90%) по всем меткам, кроме “желательных”. Она либо классифицирует неправильно, либо совсем не предсказывает. Поэтому я пытаюсь поймать предложения с желаемыми навыками и “вручную переклассифицировать их на основе определенных эвристик.
Однако здесь есть некоторые сложности. Например:
Обязательные навыки:
Знания в python, c++
Обязательно иметь знания по matlab
Желательные навыки:
Знания в CAD – это плюс
Обязательно иметь знания по CATIA V5
В приведенном выше примере навыки из Обязательные навыки до слова matlab являются обязательными, а из желательных навыков: до CATIA V5 все должно быть желательными. Также есть вероятность, что в некоторых описаниях работы порядок может измениться (желательные навыки упоминаются первыми, за которыми следуют обязательные навыки)
И также возможно, что
Сначала даны обязательные навыки, затем желательные, затем снова обязательные. И множество других комбинаций.
Так как же мне подойти к этой ситуации? Я открыт для любых идей, предложений..
Предполагая, что почти всегда есть четкие маркеры в начале перечисления, т.е. либо “обязательные навыки”, либо “желательные навыки” (или любая их вариация), я бы предложил попытаться добавить кастомные функции, например:
- последний видимый маркер с текущей позиции, категориальное значение для “желательных” или “обязательных навыков” (на самом деле две булевские функции с OHE)
- расстояние в количестве слов от текущей позиции до последнего видимого маркера
Получение значений для этих функций потребует предварительной обработки, где маркеры извлекаются и/или аннотируются, вероятно, с помощью простого сопоставления строк (при условии, что маркеров не слишком много).
Ответ или решение
Для успешного построения модели распознавания именованных сущностей (NER), которая будет классифицировать навыки в описаниях вакансий, критически важно учитывать определенные эвристики, особенно когда дело касается категорий "обязательные навыки" и "желательные навыки". Создание точной модели – это комплексный процесс, который требует углубленного понимания структуры данных и семантики языка. Вот несколько ключевых шагов и стратегий, которые помогут вам улучшить точность вашей модели, особенно в отношении "желаемых навыков".
1. Анализ структуры данных
Первым шагом является детальный анализ структуры ваших данных. Часто описания вакансий имеют формализованные шаблоны, которые можно использовать для выявления важных элементов. Обычные метки, такие как "Обязательные навыки" и "Желательные навыки", могут варьироваться, что необходимо учитывать. Это может быть как простое текстовое совпадение, так и использование регулярных выражений для нахождения синонимов и различных формулировок.
2. Извлечение маркеров с помощью препроцессинга
На следующем этапе вы можете использовать методы препроцессинга для извлечения маркеров. В частности, следующие подходы будут полезны:
-
Текстовое сопоставление: Создайте список возможных вариаций маркеров (например, "Обязательные навыки", "Необходимые навыки", "Желательные навыки"). Использование алгоритмов для поиска совпадений этих маркеров позволит вам определить границы секций.
-
Контекстный анализ: Учитывайте предыдущий и следующий контекст, чтобы выделить секции, помогая вашему алгоритму лучше распознавать, какие навыки относятся к какой категории.
3. Создание пользовательских признаков
Следующим важным шагом является создание пользовательских признаков:
-
Последний видимый маркер: Добавьте признак, который фиксирует последний обнаруженный маркер ("обязательные" или "желательные"). Это может быть реализовано через бинарные переменные, что поможет модели воспринимать контекст.
-
Расстояние до последнего маркера: Введите признак, отражающий расстояние в словах от текущей позиции до последнего маркера. Чем ближе к маркеру, тем выше вероятность правильной классификации.
4. Обучение модели
Используйте комбинацию оригинальных признаков и созданных вами пользовательских признаков для вывода модели. Часто более устойчивые модели основаны на ансамблированных подходах, таких как случайные леса или градиентный бустинг, которые могут лучше справляться с разнообразием входных данных.
5. Итеративное дообучение
Обучение и тестирование модели должны проходить в итеративном режиме. Используйте полученные результаты для анализа ошибок и дообучения модели на конкретных примерах, где система дала сбой, особенно в области "желательных навыков". Это критически важно, поскольку разные вакансии могут иметь разные паттерны, и модель должна адаптироваться к этим изменениям.
6. Печать и оценка
Наконец, важно периодически проверять производительность модели и вносить необходимые корректировки. Используйте метрики, такие как точность, полнота и F-мера, для объективной оценки работы вашей модели на тестовых данных.
Заключение
Адаптация моделей NER к специфическим требованиям, таким как распознавание "желательных" навыков в описаниях вакансий, требует применения целого ряда стратегий. Объединение алгоритмического подхода с ручной корректировкой данных с высокой вероятностью поможет вашему проекту значительно повысить точность. Внедрение грамотной практики позволит получать высококачественные результаты и, в конечном счете, удовлетворить потребности пользователей в правильной сегментации информации.