프로젝트/2021 한이음(probono)

[프로보노프로젝트/딥러닝] 텍스트 데이터 양 늘리기 (Text Data Augmentation)

pxatd 2021. 8. 9. 15:57
728x90

팀장님께서 공유해주신 아규멘테이션 관련 멘토님 답변

데이터 전처리 개발을 어느정도 완료하고 다음 단계인 머신러닝 trian_data 학습과정으로 넘어가려 하니, 보이스피싱과 관련된 데이터 셋 개수가 너무 적었다. 우리가 사용할 수 있는 금융감독원에 공개된 보이스피싱 텍스트 데이터 셋은 168개 정도인데, 멘토님께 여쭤보니 머신러닝을 학습시킬 때 1만개 이하의 데이터는 의미가 없다고 하셨다.

따라서 현재까지는 머신러닝(딥러닝RNN) 엔진 개발 (1) 데이터 전처리 개발 (2)로 나누었던 팀원의 역할을 재분배하였는데, 그 중 나는 보이스피싱 데이터 셋의 양을 늘리는 프로그램 개발을 맡게 되었다.

*또한, 기존 모델 RNN에서 우리의 프로젝트 진행 상황에 따라 로지스틱 회귀 모델로 변경하기로 하였다.

모든게 처음이라.. 잘 할 수 있을지 모르겠지만 우선 구글링을 통해 딥러닝에서 생각보다 많은 사람들이 Data Augmentation을 필요로 한다는 것을 알 수 있었다. 당연한 것이 1만개의 서로 다른 데이터를 구하기란.. 쉽지 않은 일이기 때문이다.

내가 찾은 대부분의 아이디어는 주로 CNN에서의 이미지 데이터에 관한 자료였는데 더 구글링을 해보니 Github에서 Ko. 한국어 텍스트 증량에 관한 오픈소스를 찾을 수 있었다.
우리의 프로젝트에 적용시킬 수 있을진 미지수지만 한국어 자연어 처리라는 점에서 우선 참고할만하다고 판단했다.
*참고할 블로그와 깃헙
github - https://github.com/catSirup/KorEDA/blob/master/eda.py
Tistory - https://fish-tank.tistory.com/95

우선 본격적으로 개발을 시작하기전에 어규먼테이션 관련 내용을 정리해보려 한다.


공부하면서 읽어본 블로그
1 - https://www.kakaobrain.com/blog/64
(카카오에서도 어그먼테이션 동향에 대한 블로그를 발행했길래 흥미롭게 읽었다. 밑에 적은 글은 카카오의 블로그 중 일부를 발췌하여 정리한 것)
2 - https://tykimos.github.io/2017/06/10/CNN_Data_Augmentation/
(CNN 모델에 대한 github. 우리의 프로젝트에 적용하기에는 무리가 있어 그냥 읽어보고 넘겼다. 잘 정리되어있어서 나중에 CNN 프로젝트를 진행하게 된다면 다시 참고할 계획이다.)

3- https://fish-tank.tistory.com/95

(자연어 처리에 관해 작성한 어규멘테이션, 텍스트 어규멘테이션에 대해 적혀있어서 공부하기 좋았다.)

 

데이터 셋의 양이 적으면 왜 안되는가?

매개변수를 훈련할 충분한 학습 데이터를 확보하지 않으면 모델의 성능을 저해하는 과적합 문제가 상대적으로 더 쉽게 발생한다. 과적합은 모델이 훈련 데이터에만 지나치게 적응해 테스트 데이터 또는 새로운 데이터에는 제대로 반응하지 못하는 현상을 가리킨다.
좀 더 쉽게 설명하자면, 고양이의 정면 사진만 학습한 네트워크는 고양이의 옆면 사진을 입력받으면 이를 고양이로 인식하지 못하는 것과 비슷하다. 어떤 사진으로도 고양이를 잘 인식할 수 있도록 하기 위해선 다양하고 많은 데이터로 네트워크를 훈련하는 게 무엇보다 중요한 이유이다.

하지만 양질의 데이터를 대량 확보하는 데 비용이 큰 걸림돌이 될 때가 많다. 데이터 종류에 따라서는 확보할 수 있는 분량에도 제약이 따를 수도 있다. 대표적으로, 의료 영상 데이터는 의사가 의료영상에서 어느 부분이 장기이고 종양인지를 일일이 기록한 정답 데이터(ground truth data) 획득 비용이 많이 들어 다량의 학습 데이터셋을 구축하기가 쉽지 않다.

어그먼테이션(Augmentation) 이란?

이처럼 딥러닝 모델을 충분히 훈련하는 데 필요한 데이터를 확보하는 기법 중 하나로 어그먼테이션(Augmentation)이 소개되고 있다. 어그먼테이션은 [그림 1]에서처럼 적은 양의 훈련 데이터에 인위적인 변화를 가해 새로운 훈련 데이터를 대량 확보하는 방법론을 의미한다. 예를 들어, 이미지를 상하좌우로 뒤집거나(flipping) 자르는(cropping) 방식으로 새로운 이미지 데이터를 확보하는 식이다. 현실 세계에서도 실제로 존재할 법한 데이터를 생성함으로써 좀 더 일반화된 모델을 얻는 걸 목표로 한다.

[그림 1]

데이터에 최적화된 어그먼테이션 방법론이란?

데이터에 최적화된 어그먼테이션 방법론을 탐색하기가 하늘의 별 따는 수준만큼 힘들다는 데 있다. 현실과 너무 동떨어지거나 기존 특징을 왜곡할 수도 있는 기법은 오히려 학습 난이도와 성능에 좋지 않은 영향을 끼칠 수도 있다. 예를 들어, 글자를 인식하는 문제에서는 글자 이미지를 좌우 또는 상하로 뒤집는 기법은 적당하지 않다. 글자가 지닌 의미가 왜곡될 가능성이 크기 때문이다. 마찬가지 이유로 심장을 촬영한 영상도 뒤집기 기법은 적절치 않다. 반면, 일반 이미지에서는 이미지가 지닌 의미를 바꾸지 않는 좌우로 뒤집기 기법은 매우 효과적이다. 이처럼 데이터 셋에 적합한 어그먼테이션 방법론을 적용하는게 중요하다.

현재로써는, 경험과 지식을 갖춘 머신러닝 엔지니어조차 데이터에 적합한 어그먼테이션 기법을 탐색하는 데 큰 비용과 시간을 쏟아 붓는다. 데이터 취득 방식에 따른 데이터 속성을 심층적으로 분석할 수 있는 일에도 어려움이 따르기 때문이다. 심지어 이렇게 많은 시간과 비용을 들여서 찾은 어그먼테이션 기법이 최고라는 확신도 없다.

(나는 카카오의 이 블로그를 읽으면서 이런게 머신러닝의 묘미인가? 생각했다. 물런 내가 해당 어그먼테이션 방법론을 연구하는 프로젝트 담당자라면 최적의 방법론을 찾느라 힘이 다 빠지겠지만 블로그를 읽는 나로서는.. 정답이 정해지지 않았다는 말이 흥미롭게 들렸다.)

그래서 현재 연구 동향은?

이런 문제를 해결하고자 업계에서는 머신러닝으로 데이터 수를 늘리는 자동화 방법을 찾는 연구에 관심을 기울이고 있는데, 지난해 구글(Google)이 발표한 AutoAugment가 대표적인 선행 연구이다. AutoAugment는 강화학습(reinforcement learning)을 통해 이미지 데이터셋에 가장 적합한 어그먼테이션 정책(policy)을 자동으로 찾아주는 알고리즘이다. 대단히 많은 GPU 자원을 토대로 어그먼테이션 방법을 최적화했을 때 다양한 태스크에서 SOTA 성능을 내는 결과를 보였다.

*어규멘테이션에 대한 정의를 학습한 것으로 충분하다고 생각했기 때문에 해당 연구내용에 대해서는 더 적지 않겠다.

 

텍스트 어규멘테이션엔 어떤 종류가 있는가?

1. SR

특정 단어를 유의어로 교체하는 방식.

2. RI, RD

임의의 단어를 삽입(Insertion)하거나 삭제(Deletion)하는 방식

3. RS

문장 내 임의의 두 단어의 위치를 바꾸는 것.

 

텍스트에 어규멘테이션을 적용시키는건 어려운 일일까?

(https://fish-tank.tistory.com/95)의 "Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks" 논문 요약 글 발췌

 

학습 데이터가 부족한 상황에서 현재 보유하고 있는 데이터를 변형시켜 데이터 양을 증가시키는 Data Augmentation (이하 DA) 은 이미 컴퓨터 비전 등의 분야에서 활발하게 사용되고 있는 기법이다. 그러나 이미지를 뒤집거나, 방향을 살짝 트는 등의 변형을 가해도 라벨 값에 큰 영향을 미치지 않는 비전 분야와 달리 텍스트에서는 단어 하나를 변화시키는게 문장 전체의 의미를 변화시킬 수 있기 때문에 DA를 적용하는게 쉽지 않다고 널리 알려져 있다. 자연어 처리에서의 DA는 정말 불가능한 것일까?

2019년 EMNLP에서 발표된 "Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks" 논문에서는 자연어 처리에서 쉽게 떠올릴 수 있는 DA 테크닉들이 실제로 성능 향상에 유의미한 영향을 미칠 수 있으며, Augmentation 과정을 통해 생성된 문장들이 원 라벨의 성질을 잘 따른다는 연구 결과를 발표하였다.

논문의 저자진이 텍스트 DA에 사용한 기법은 총 네 가지이다. 특정 단어를 유의어로 교체하는 SR, 임의의 단어를 삽입하거나 삭제하는 RI와 RD, 그리고 문장 내 임의의 두 단어의 위치를 바꾸는 RS까지.

유의어 대체를 통한 DA는 어느 정도 Make sense 하지만 임의로 단어에 변형을 가하는 기법들을 통해 생성된 데이터들도 원문의 라벨을 그대로 유지할 수 있을까? [첨부 그림 2]가 그 결과를 보여준다.

DA를 통해 증폭시킨 데이터셋을 RNN을 통한 분류 모델에 훈련시킨 뒤, 모델의 마지막 레이어에서의 인스턴스 분포를 t-SNE를 통해 시각화해보니 새로이 생성된 문장들이 원문의 라벨 성질을 대체로 잘 따른다는 것을 확인할 수 있었다. 특히 본 논문에서 제시한 기법은 오버피팅이 쉽게 발생할 수 있는, 훈련 데이터가 충분치 않은 상황에서 성능 향상에 유의미한 도움을 줄 수 있다. DA 기법으로 생성된 데이터들이 어느 정도의 노이즈를 모델에 부여함에 따라 모델의 일반화에 보다 도움을 줄 수 있기 때문이다.

 

더 참고할 것

https://catsirup.github.io/ai/2020/04/21/nlp_data_argumentation.html

https://catsirup.github.io/ai/2020/04/28/nlp_data_argumentation_code.html

http://wordnet.kaist.ac.kr/

 

Korean Wordnet

 

wordnet.kaist.ac.kr

내가 개발할 프로그램의 wordNet은 카이스트에서 제작한 KWN 

728x90