텍스트 데이터 증강에 대해 느낀 나의 생각들

용가리·2024년 9월 27일
1

반갑습니다.
텍스트 데이터 증강에 대해 얘기해볼까 합니다.
최근 텍스트 증강을 할 일이 있어서 다양한 시도를 했습니다.
그 경험속에서 배운 부분들을 제 주관과 섞어 글을 써봅니다.
제 글을 읽은 다른 분들에게 도움이 됐으면 좋겠습니다.

텍스트 증강 ?

기존의 원본 텍스트 데이터를 약간의 변형을 통해 새로운 데이터를 증강하는 것을 의미합니다.
데이터가 적은 상황에서 모델의 성능을 크게 향상시킬 수 있습니다.

모델을 훈련시킬 때 많은 분들이 고려하시는 데이터 증강입니다.
다양한 방법론들이 있는데 .. 일단 제가 아는 방법대로 설명해보겠습니다.

텍스트 데이터를 어떻게 늘려?

예시 문장 : 왠지 애잔하고 아련하고 마음속이 뜨거워지는 감동

1. Random Insertion

문장의 단어 중 임의의 단어를 골라 그 단어의 동의어를 임의의 자리에 추가합니다.

ex) 왠지 애잔하고 아련하고 마음속이 뜨거워지는 묵직한 감동

2. Random Swap

문장 내 두 단어의 순서를 임의로 교체합니다.

ex) 왠지 아련하고 애잔하고 마음속이 뜨거워지는 감동
의미가 조금 이상해 질 수도 있기에 조심해야 합니다.

3. Random Deletion

문장의 임의의 단어를 삭제합니다.

ex) 아련하고 애잔하고 마음속이 뜨거워지는 감동

4. Synonym Replacement

특정 단어를 유의어로 교체합니다.

ex) 뭔가 아련하고 애잔하고 마음속이 따뜻해지는 감동

'
'
'

이 네 가지는 EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks 논문에서 소개된 방법론들입니다.
Easy라는 이름에 걸맞게 직관적이고 구현하기 쉬운 증강 방법들이죠.
https://github.com/kyle-bong/K-TACC 에서는 BERT-based 모델을 활용하여 문장을 더 자연스럽게 증강하는 모델을 만들었습니다.
저도 사용했었는데, 같은 부스트캠프 선배님이 만드셨더군요 ㅎㅎ

5. Back Translation

문장을 다른 언어로 번역한 뒤, 원래 언어로 다시 되돌립니다.

뭔가 아련하고 애잔하고 마음속이 뜨거워지는 감동

➡️ There's something faint and sad and a feeling that warms my heart.

➡️ 뭔가 아련하고 슬프고 마음이 따뜻해지는 느낌이 있어요.

의미는 같지만 언어의 특성에 따라 말투가 많이 달라질 수 있습니다.

내생각

리더보드에 점수를 올리기 위해 했던 텍스트 데이터 증강에 따른 결과는 다음과 같습니다.
원본 : 10000개
50000개 : 점수가 떨어짐
45000개 : 점수가 떨어짐
20000개 : 점수가 오름

데이터가 많고 Epoch이 높을수록 학습에서의 로스는 0.001까지 떨어지지만, 그것은 좋은 신호가 아닙니다.
데이터 증강은 결국 가지고 있는 패턴의 수를 늘리는 것입니다.
점묘법으로 생각해보면 틀 안의 점을 더 빼곡히 찍는것이죠.
하지만 우리가 가지고 있는 데이터가 전체 모집단을 대표한다고 볼 수 없습니다.
그렇기에 우리의 궁극적 목표는 현재 데이터를 얼마나 잘 활용해서 최대한 모집단과 비슷한 일반성을 기르는 것입니다.

데이터 증강에 대해 생각해봅시다.
데이터 증강이란, 부족한 Train 데이터와 비슷한 형태를 가진 데이터를 추가합니다.
하지만 Label을 손상시키지 않게 위해서 너무 비슷한 형태로 가공하는 것은 그저 원본 데이터를 중복해서 사용하는 것과 크게 다르지 않습니다.

긍/부정을 나누는 모델을 예로 들어보면
1. 그 문제는 너무 쉬웠다. (긍)
2. 그 문제는 너무나도 쉬웠다. (긍)

이런 데이터만 학습하면 데이터가 많다 해도 결국 같은 데이터를 중복으로 사용하는 것과 비슷한 방향으로 가게 됩니다.
Train Data에 오버피팅이 되는 길이라고 생각하시면 될 것 같습니다.

그럼 어떻게 해야할까
Label을 손상시키지 않으면서 아주 다양한 Variation을 갖는 데이터를 만들어야합니다.
좀 더 궁극적인 목표는
모델이 최대한 어렵게 배워야 한다
는 말이 되겠습니다.

ex) 기타치는것은 어렵지만 아주 재미있다. (긍)
➡️ 기타를 치는것은 힘들 때도 있지만 정말 재미있습니다. (긍)
이정도의 Variation은 줘야 한다는 말이죠.
말투, 단어의 배열, 단어 전부가 원본 데이터와 다르면서 의미를 갖게 만들어야 합니다.
그래야 모델은 기타 얘기가 나오더라도 아주 다양한 문장 형태의 기타 얘기를 포용할 수 있게 됩니다.
일반성이 높아지는 것이지요.

결국 제가 하고싶은 말은
데이터 증강을 고려할 때는
20000개를 한다면
다양한 방법으로 하셔야 한다는 것입니다.
5000개는 Synonym Replacement
5000개는 Back Translation
5000개는 Random Insertion
5000개는 Random Swap
이렇게 말이죠.

경험상 로스가 높고 수렴이 잘 안되면 그만큼 어려운 Task를 학습하고 있는 것 같습니다.

'
'
'

이번에 참여한 프로젝트의 리더보드에서는 만족할 만한 점수를 얻지 못해 아쉽습니다.
다음에 또 기회가 생긴다면 이번에 배운 점을 바탕으로 더 잘해봐야겠습니다.
감사합니다 !

0개의 댓글