Skip to main content

Применение аугментаций к датасету

Created on February 4|Last edited on February 5
Цель: определить, как влияют аугментации и их количество на оптимизацию. Улучшаются или нет итоговые метрики.
Код: https://github.com/deeppavlov/AutoIntent/tree/dev/autointent/generation/utterances + МР с асинхронными аугментациями
Скрипты и итоговые датасеты собраны в этом МР: https://github.com/Darinochka/AutoIntent-experiments/pull/2/files
Аугментации работают следующим образом:
У нас есть запущенная LLM. Она может быть запущена локально как openai сервер или мы можем напрямую обращаться к openai-моделям. Для модели определены промпты, а также генерация происходит в few-shot.
На вход приходит датасет и мы начинаем итерироватьсяя по utterances этого датасета. Для каждого utterances мы рандомно выбираем способ эволюций: добавить похожий utterance в веселом, формальном, неформальном, абстрактном тоне и тд. Также мы выбираем количество эволюций n_evolutions для каждого utterances. Далее LLM генерирует похожий utterance в выбранном тоне.

Эксперименты

Начальные значения

LLM = Qwen/Qwen2.5-7B-Instruct-AWQ
server_type = vllm
n_evolutions = 10
evolutions = [funny, formal, informal, abstract, concertizing, foogy, reasoning]
search_space = [
{
"node_type": "embedding",
"target_metric": "retrieval_hit_rate",
"search_space": [
{
"module_name": "retrieval",
"k": [10],
"embedder_name": [
"avsolatorio/GIST-small-Embedding-v0",
"infgrad/stella-base-en-v2",
"sentence-transformers/all-MiniLM-L6-v2",
"BAAI/bge-reranker-base"
],
}
],
},
{
"node_type": "scoring",
"target_metric": "scoring_roc_auc",
"search_space": [
{
"module_name": "knn",
"k": [5, 10],
"weights": ["uniform", "distance", "closest"],
},
{"module_name": "linear"}
],
},
{
"node_type": "decision",
"target_metric": "decision_accuracy",
"search_space": [
{"module_name": "threshold", "thresh": [0.5]},
],
},
]
В экспериментах участвовали следующие датасеты:
Но оригинальные датасеты потерпели изменения. Для каждого интента было ограничнное количество utterances - только 10 на интент. Это было сделано с целью того, чтобы проверить как аугментации улучшают маленькие датасеты, где они как раз и нужны. Для какой-то адекватной оптимизации необходимо 10 utterances на intent. По крайней мере к этому выводу пришел Илья Алексеев.
Итого 2 датасета на английском и 3 на русском.
Я проведу анализ по группам: сначала посмотрю что получилось в русских датасетах, а далее в английских.
Аугментация проводилась 1 раз для каждого датасета с n_evolutions = 10, а далее эволюции для каждого utterances удалялись. Это позволило проверить, сколько аугментации (эволюций) достаточно для адекватного качества.

Русские датасеты

snips_ru

Что можно заметить:
  • любое количество аугментаций лучше чем их отсутствие
  • количество аугментаций 1 и 10 очень похожие
  • количество аугментаций кратных 3 показывают одни из самых низких результатов




clinc_ru

  • количество аугментаций больше 2 ухудшают качество. Это может быть связано с переобучением
  • лучшее качество получаем с 2 аугментациями



banking77_ru

  • аугментации ухудшают качество на кейсах где количество равно 1, 7 и 9
  • в остальных кейсах заметен рост
  • самое лучшее количество на 5



Выводы

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

Английские датасеты

snips

  • количество аугментации всегда лучше чем их отсутствие
  • метрика перестает значительно расти после количества агументаций равного 3



banking77

  • снова любое количество аугментации лучше чем их отсутствие
  • лучший результат при кол. аугментации равное 8