Применение аугментаций к датасету
Created on February 4|Last edited on February 5
Comment
Цель: определить, как влияют аугментации и их количество на оптимизацию. Улучшаются или нет итоговые метрики.
Код: 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-AWQserver_type = vllmn_evolutions = 10evolutions = [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
Add a comment