본문 바로가기

PROJECT

2023 AIFFEL DLTON NLP 과정 후기

2023 AIFFEL DLTON NLP 과정 후기

1. 대회 주제 및 데이터 소개

지난 9월 29~31일에 열린 모두의 연구소 DLTON에 참가했다.

주제는 DKTC 데이터셋 다중분류 모델 제작하기였다!

 

https://github.com/tunib-ai/DKTC

 

GitHub - tunib-ai/DKTC: Dataset of Korean Threatening Conversations

Dataset of Korean Threatening Conversations. Contribute to tunib-ai/DKTC development by creating an account on GitHub.

github.com

 

일반 클래스를 제외한 협박, 갈취, 직장내 괴롭힘, 기타 괴롭힘 총 4개의 클래스를 분류하는 모델을 제작하는 것이 과제였다.

팀원들끼리 이야기한 결과 다음과 같은 계획으로 프로젝트를 진행하기로 하였다.

 

day1) 각자 모델 돌려보기
 day2) 가장 성능이 좋은 모델 튜닝해보기, 앙상블

 

끝나고나서 생각해보니 좀 더 구체적으로 계획하고, 결과와 인사이트를 중간중간 공유했으면 더 좋은 결과가 나왔을 것 같다는 생각이 들었다.


2. 프로젝트 진행 과정 및 회고

a. 클래스별 분포, 텍스트 데이터 길이 확인 등의 EDA

EDA 일부

- 클래스별 데이터 분포가 고르므로 오버샘플링/언더샘플링 할 필요 없음

- 데이터 개수가 적은 편이므로 Text Data Augmentation을 진행할 필요가 있음

- 텍스트 데이터의 길이가 긴 편이므로 장기 기억 손실을 고려해야 함

 

b. okt, mecab, sentence piece를 활용해 토큰화 진행

DLTON을 진행하면서 성능 향상을 위해 이 부분을 중점적으로 생각했는데 이 부분에 대해서 심사위원님께 질문을 드렸을 때, 내가 생각했던 것과 다른 방향의 답변을 받았다.

 

데이터에 맞는 모델을 제작하는 것은 데이터셋에서 캡쳐해야 하는 통계적 패턴을가장 잘 표현할 수 있는 모델을 선택하는 것이고, 이를 위해 baseline 모델을 기준으로 모델 후보 몇개를 선정해서 하이퍼파라미터 튜닝을 해야한다. 이 때, 전처리의 경우 corpus의 도메인에 따라 다르게 선택하는 것으로 모델에 따라 달리 선택하는 것이 아니다.

 

라는 답변을 받았다. 사실 그동안 머신러닝을 공부하면서 도메인이 중요하다는 말을 여러번 들었지만 잘 납득이 가지 않았는데 이 말을 듣고 어느 정도 납득하게 되었다. 결국 여러 종류의 데이터셋을 다뤄보는 게 가장 좋은 방법일 것 같다.

 

c. 불용어 사전을 이용한 불용어 제거

구글링, 챗지피티에게 물어봤을 때의 불용어 사전, 그리고 토큰화 진행시 빈도수가 높지만 의미없어 보이는 토큰들을 불용어 사전에 추가하였다. 불용어 제거를 할 때에도 불용어 사전에 따라 모델 성능이 영향을 받기 때문에 실험적으로 접근할 수 있다고 한다. 

 

d. LSTM

e. klue BERT

klue BERT의 경우, 다른 팀원분의 의견에 따라 선택

 

다른 사람의 발표를 듣고 얻은 점
prompting을 활용해 실제 데이터
grid search
pre-trained 모델 활용
데이터셋에 맞는 모델을 만든다라는 건

 

배운 점

앙상블 사용해보기
EDA: N-GRAM, 빈출 용어
BACK TRANSLATION
데이터 증강 방법
GPT를 활용하기
RS RDS RIhttps://nlp.gluon.ai/api/notes/data_api.html#bucketing-and-dataloader

개체명 인식
협박, 폭언, 욕설 등 
TOKEN CLASSIFICATION이 중요

 

프로젝트 깃헙 링크

https://github.com/hongseoi/DLTON                                                                                                                                        

 

GitHub - hongseoi/DLTON: DKTC (Dataset of Korean Threatening Conversations) 데이터를 활용한 테스트 데이터 다중분

DKTC (Dataset of Korean Threatening Conversations) 데이터를 활용한 테스트 데이터 다중분류 프로젝트 - GitHub - hongseoi/DLTON: DKTC (Dataset of Korean Threatening Conversations) 데이터를 활용한 테스트 데이터 다중분류

github.com

1. 데이터 소개
2. 데이터 전처리
-  토큰화, 불용어 제거 등
3. 데이터 탐색 및 분석
- 데이터 탐색을 통한 각 클래스 분포 확인으로 불균형 여부 파악
- 데이터 시각화
4. 데이터 분할
5. 토크나이징, 패딩
- 텍스트 데이터 토큰화: konlpy mecab, sentence piece
- 패딩
6. 모델 구성
- LSTM

7. 모델 컴파일
- 손실함수, 최적화 알고리즘, 평가지표 설정
8. 모델 학습
9. 모델 평가
10. 하이퍼파라미터 튜닝
- 배치 크기, 에포크 수, LSTM 층의 유닛 수 등을 조정
11. 모델 저장 및 배포

 

얻은 점
prompting을 활용해 실제 데이터
grid search
pre-trained 모델 활용
데이터셋에 맞는 모델을 만든다라는 건

데이터셋에서 캡쳐해야하는 통계적인 패턴이 무엇이어야 하는가

그 패턴인식을 가장 잘 하는 모델 아키텍쳐가 무엇인가?

라는 질문에 대한 답을 내리는 거라고 생각이들고요.

그래서 대부분 문장임베딩 가능한 버트류를 쓰신거라고 생각이 들어요.

여기서 제 개인적인 생각들 첨언하면

가장 성능이 좋은 모델을 처음부터 선택할 순 없는거 같고요,

베이스 라인모델 (NB나 random guess)를 기준으로

위에 쓴 것 처럼 가장 데이터의 패턴을 잘 잡아낼 것이라 판단된 모델 후보 몇개를 선정해서

최적의 하이퍼파라미터를 찾아 튜닝하는게 일반적인 흐름이라고 생각합니다.

별개로 전처리는 말뭉치의 도메인에 따라 다르게 접근하는거라고 봐요. 모델을 타는게 아니라요.