오뚝이개발자

WISENUT 2021 AI 텍스트 요약 온라인 해커톤 참가 후기 본문

Contest

WISENUT 2021 AI 텍스트 요약 온라인 해커톤 참가 후기

땅어 2021. 12. 11. 19:46
728x90
300x250

 

 

대회 개요


11월 19일 ~ 12월 3일까지 열린 WISENUT이 주최한 2021 AI 텍스트 요약 해커톤에 참가했다. 해당 대회는 온라인으로 이루어졌는데 AI factory(http://aifactory.space/)측에서 운영을 담당하여 해당 사이트를 통해 참가 접수가 가능했다.

간단히 말하면 주어진 데이터셋을 가지고 모델을 학습 시켜 텍스트 요약 성능을 겨루는 대회였다. 데이터는 소설, 문화, 뉴스, 브리핑, 드라마, 역사 텍스트로 이루어져 있었다.

제출한 요약문의 성능은 Rouge-L F1 score의 평균 값으로 채점되었다. 쉽게 말하면 핵심적인 내용들은 담겨 있으면서도 원문의 내용과 긴 시퀀스로 겹치는 부분이 많은 요약문을 생성해내는 것이 관건이었다.

 

1차 시도


우선 주어진 학습 데이터를 살펴보았다. 데이터는 orginal 원문과 summary 요약문의 여러 쌍으로 이루어져 있었다. 여기서 나는 summary가 어떻게 이루어져 있는지를 살펴보면 좀 더 높은 점수를 받는데 도움이 될 거라 생각했다. 대부분의 경우가 그렇지만 사실상 데이터로부터 해답을 얻어낼 수 있는 경우가 많다. 특히나, 단기적인 시점에서의 극한의 성능향상을 요구하는 경진대회 같은 경우는 더더욱.

데이터를 잘 살펴보니 2~3문장의 요약으로 이루어져 있었고, 각 문장들은 원문에 있는 문장과 동일하였다. 이를 통해 나는 추출 요약(Extractive summary) 방식으로 하는 것이 생성 요약(Abstractive summary) 방식보다 높은 스코어를 얻기에 유리하다고 판단했다.

나는 사전훈련된 임베딩을 사용하고자 했었다. 선택했던 것이 가자 최신 버전의 한국어 GloVe였다. 임베딩을 한 뒤 text rank 알고리즘을 사용해 추출 요약을 생성하려고 했었다. 데이터 전처리도 하고 여차저차 복잡한 과정을 거치고 나니 문득 생각이 든 것이, "과연 대회에서 주어진 데이터셋 내의 단어들에 대한 임베딩 벡터가 GloVe에 잘 반영이 되어있을까?" 였다.

뉴스기사나 브리핑과 같은 경우 최신 데이터들도 많았는데 거기엔 '코로나'라는 단어가 많이 등장하였고, 이와 유관한 '질병청', '화이자', '모더나' 등의 단어들도 많았다. 바로 GloVe 임베딩 파일에서 서치를 해보니 해당 단어들에 대한 벡터 변환 정보가 없었다.

선택지는 이제 두 가지가 되는데, 직접 임베딩을 만들어 사용할 것인가 아니면 사전 훈련된 모델을 사용해 생성요약 방법을 시도해볼 것인가였다. 남은 시간이 많지 않았기에 나는 두번째 방법을 택했다.

 

2차 시도


내가 사용한 사전 훈련된 모델은 SKT에서 발표한 한국어 BART 모델 KoBART였다.(좋은 모델을 공개로 풀어준 SKT에게 감사하다 ㅎㅎ. 모델을 비공개로 해두는 기업들도 생각보다 많다.) 해당 모델의 구체적인 사용법은 Ju-ing's Blog를 참고하였다.

나의 계획은 이미 사전 훈련된 KoBART 모델에 대회에서 주어진 데이터셋을 활용해 Fine-tuning을 시키자는 것이었다. Fine-tuning을 통해 전체 layer를 모두 훈련시킬 필요가 없어 조금 더 학습 시간을 절약할 수 있을거라고 생각했기 때문이다.

데이터 전처리가 우선 선행되었어야 했는데....하... 여기서 애를 많이 먹었다. 항상 느끼는 거지만 요즘은 대부분 사전 훈련된 모델들이 많고 이들을 많이 사용하기 때문에 사실상 많은 시간을 할애하게 되는 부분이 데이터 전처리인 것 같다. 더구나 한국어는 영어에 비해 전처리가 많이 복잡하다...Pandas에서 무수한 에러가....

어쨋거나 우여곡절 끝에 학습을 시켜서 요약문 결과를 생성해냈다. 여기까지 했을 때가 마감을 1시간 정도 남겨두었을 시점이었다 ㅋㅋㅋㅋ 채점을 위해 데이터를 대회에서 요구하는 양식으로 정리도 해서 제출해야 했기 때문에 마음이 급했다.

하이퍼 파라미터 튜닝이나 다른 기법들을 시도해보고 싶었는데 시간이 없었다. ㅜㅜㅜ

 

결과


어찌되었든 부랴부랴 마감을 해서 제출을 했고 점수를 보니 41점 정도가 나왔다. 제출 당시 리더보드의 1등 성적이 53점이었다. 점수 차이가 약 12점 정도였다. fine tuning만을 마쳤는데 이 정도 차이면 하이퍼 파라미터 튜닝이라던가 구조적인 측면에서의 다른 변화를 주어 재학습을 시키면 분명 성능을 더 올릴 수 있었을 것 같은데 아쉬웠다. 그렇게 50여명이 참가한 대회에서 나는 8등의 성적으로 마쳤다.

 

대회를 마치며


금번 대회 참가는 재미있는 경험이었다. 우선, 내가 해오던 대부분의 실습이나 NLP 분야의 다른 대회들이 주로 영어를 대상으로 하는 반면 본 대회는 한국어 데이터셋을 대상으로 했다. 그래서 뭔가 결과를 보면서도 더 재미있게 구현했던 것 같다. (사실 영어 긴 문장 요약하는 것도 해봤는데 막상 결과 보면 이게 요약이 잘 된건지 Human evaluation으로 평가해보기 힘들다 ㅋㅋㅋㅋ 영어 긴 글 보고 원문 잘 요약했는지 빨리 빨리 평가하기가 어려우니까....) 방학 기간을 통해서 NLP 분야 다른 대회들도 나가봐야징~ ㅎㅎ

 

 

 

728x90
300x250

'Contest' 카테고리의 다른 글

2022 Google kickstart Round A 참가 후기  (0) 2022.03.25
Comments