Как улучшить точность при классификации коротких текстов с ограниченным контекстом

Вопрос или проблема

Мой случай использования заключается в классификации названий должностей по функциональным областям. Я дообучил all-mpnet-base-v2 с помощью Setfit, предоставив около 10 примеров для каждого класса (функциональные области).

Я получил 82% точности при оценке на моем тестовом наборе. Я заметил, что некоторые простые и очевидные названия должностей ошибочно классифицировались с меткой 0.6.

Например:

Запрос: SDET
Предсказанная метка: Big Data / DWH / ETL
Оценка уверенности:
Метка: Бухгалтерский учет / Финансы, Уверенность: 0.0111
Метка: Разработка Backend, Уверенность: 0.0140
Метка: Big Data / DWH / ETL, Уверенность: 0.6092

Здесь SDET должен был быть помечен как QA / SDET, но классифицирован как Big Data / DWH / ETL с оценкой 0.62. Примеры с несколькими образцами для обоих классов не имеют ничего общего, что могло бы сбить с толку модель, за исключением одного примера с названием Data Quality Engineer, который относится к Big Data / DWH / ETL.

Примеры с несколькими образцами (добавлены только 2)

{    "QA / SDET": [
        "Инженер по обеспечению качества",
        "Инженер по разработке программного обеспечения в тестировании (SDET)",
        "Инженер по автоматизации QA",
        "Тест-инженер",
        "Аналитик QA",
        "Ручной тестировщик",
        "Автоматизированный тестировщик",
        "Инженер по нагрузочному тестированию",
        "Инженер по тестированию безопасности",
        "Мобильный QA-инженер",
        "API-тестировщик",
        "Инженер по нагрузочному и стресс-тестированию",
        "Старший QA-инженер",
        "Архитектор автоматизации тестирования",
        "Руководитель QA",
        "Менеджер QA",
        "Тестировщик полного цикла",
        "Тестировщик игр QA",
        "Тестировщик UI/UX",
        "Инженер по интеграционному тестированию",
        "Инженер по контролю качества",
        "Инженер по тестовым данным",
        "QA-инженер DevOps",
        "Тестировщик непрерывной интеграции (CI)",
        "Консультант по тестированию программного обеспечения"
    ],
    
    "Big Data / DWH / ETL": [
        "Инженер по большим данным",
        "Разработчик хранилищ данных",
        "Разработчик ETL",
        "Разработчик Hadoop",
        "Разработчик Spark",
        "Инженер по данным",
        "Специалист по интеграции данных",
        "Инженер конвейера данных",
        "Архитектор данных",
        "Администратор баз данных",
        "Архитектор ETL",
        "Инженер озера данных",
        "Разработчик Informatica",
        "Инженер DataOps",
        "Разработчик BI",
        "Специалист по миграции данных",
        "Архитектор хранилищ данных",
        "Тестировщик ETL",
        "Инженер платформы больших данных",
        "Инженер Apache Kafka",
        "Разработчик Snowflake",
        "Инженер по качеству данных",
        "Инженер по поглощению данных",
        "Консультант по большим данным",
        "Менеджер ETL"
    ]
}

TrainingArgs

args = TrainingArguments(
    batch_size=16,
    num_epochs=1,
    evaluation_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
)

Вот полный набор функциональных областей.

functional_areas = [
    "Бухгалтерский учет / Финансы",
    "Разработка Backend",
    "Big Data / DWH / ETL",
    "Управление брендом",
    "Копирайтинг",
    "Обслуживание клиентов",
    "Анализ данных / Бизнес-аналитика",
    "Наука о данных / Машинное обучение",
    "Администрирование / Разработка баз данных",
    "DevOps / Облако",
    "Встраиваемая / Ядерная разработка",
    "Управление мероприятиями",
    "Разработка Frontend",
    "Полноценная разработка",
    "Функциональное / Техническое консультирование",
    "Общее управление / Стратегия",
    "Управление ИТ / ИТ-поддержка",
    "ИТ-безопасность",
    "Мобильная разработка",
    "Сетевое администрирование",
    "Онлайн-маркетинг",
    "Управление операциями",
    "PR / Коммуникации",
    "QA / SDET",
    "SEO / SEM",
    "Продажи / Развитие бизнеса"
]

Мое предположение в том, что точность низкая из-за короткого текста (который является только названием должности). Пожалуйста, предложите несколько вариантов, которые я могу попробовать, чтобы повысить точность модели.

Ответ или решение

Для улучшения точности классификации коротких текстов, таких как названия вакансий, в функциональные области, вы можете рассмотреть следующие стратегии:

  1. Увеличение обучающего набора данных:

    • Ваша модель работает на ограниченном наборе примеров (всего 10+ для каждого класса). Попробуйте увеличить количество примеров, особенно для классов, которые вызывают путаницу (например, между "QA/SDET" и "Big Data/DWH/ETL"). Примеры могли бы включать слабо представленные наименования должностей или региональные варианты названий.
    • Используйте методы аугментации текста. Например, можно парафразировать названия вакансий, чтобы генерировать больше обучающих данных.
  2. Оптимизация архитектуры модели:

    • Попробуйте использовать более мощные модели, такие как distilbert-base-uncased или roberta-base, особенно если они предварительно были обучены на релевантных данных. Проведите дополнительные эксперименты с настройкой их параметров (например, количество слоев).
    • Вы можете также попробовать модели, специализированные на NLP-задачах классификации, такие как textattack/roberta-base-rotten-tomatoes.
  3. Углубленное исследование представления данных:

    • Посмотрите, как вы представляете данные вашей модели. Иногда полезно добавить дополнительные метаданные, такие как описание компании или разрешения (если такие данные имеются).
    • Рассмотрите возможность использования векторов слов (word embeddings) для более точного представления названий должностей.
  4. Тонкая настройка гиперпараметров:

    • Проверьте различные параметры обучения, такие как скорость обучения, количество эпох, и размер пакета, чтобы найти оптимальные значения для вашей задачи.
    • Попробуйте различные стратегии регуляризации, чтобы избежать переобучения.
  5. Кросс-валидация и оценка:

    • Используйте кросс-валидацию для более надежной оценки модели. Это поможет понять, как модель будет показывать себя на новых данных.
  6. Постобработка и правила:

    • Добавьте правила, основанные на знаниях доменной области, в качестве постобработки. Например, если ваш ввод содержит "SDET", всегда присваивайте ему категорию "QA/SDET".
  7. Классификационные метрики:

    • В дополнение к использованию точности рассмотрите использование других метрик, таких как F1-мера, точность и полнота. Они могут дать вам лучшее представление о работе модели, особенно в случае несбалансированных данных.
  8. Использование дополнительных ресурсов:

    • Исследуйте возможность использования готовых классификаторов, созданных для схожих задач, и интегрируйте их в вашу модель для создания ансамбля.
  9. Обратная связь и улучшение модели:

    • Соберите обратную связь от пользователей, чтобы понять, какие ошибки в классификации наиболее критичны, и используйте эту информацию для дальнейшего улучшения модели.

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

Оцените материал
Добавить комментарий

Капча загружается...