hchang 14 Feb 2023
해당 깃헙
작년 이 맘때 즈음에 운 좋게도 교육기관 AIFFEL에서 기업 TUNiB과 함께 프로젝트를 진행했다. 함께 진행했다고 하기엔, 튜닙에서 제시한 과제에 참여한 방향이기는 하지만, 그 주제가 상당히 흥미롭고 재미있는 편이었다. 당장 정리해서 블로깅을 하고 싶었지만, 개발 속도가 받쳐주지 않아 스스로 크게 만족할 수 있는 지점에 도달하지 못했었던 것 같다. 당시 NLP 언어모델이 수학문제를 풀게 만들기 위해서 얼마나 삽질을 했는지 모른다. 지도해주는 퍼실님 말도 다 무시하고, 혼자서 삽질만 계속하는 편이었다.(지금 돌아보면, 해당 퍼실님의 의견을 들었으면 무조건 성능이 더 좋았을 것이다. Prompt tuning, DSPT등의 이야기를 해주셨었는데, 다 무시했다.. 그 당시에는 논문을 보고도 무슨이야기인지 모르기도 했다.)
TUNiB 블로그: TUNiB-x-AIFFEL-DKTC-KMWP-컴피티션
감사하게도 튜닙에서 블로그를 정리해서 기업 블로그에 실리게 되었다. 아무튼 간에 해당 내용을 조금 다뤄볼까 한다.
KMWP(Korean Math Word Problems), 한국어 수학문제 데이터는 양적 추론문제의 하나로, 논리적이고 연역적인 풀이과정이 필요한 일종의 Open Domain QnA Task이다. 결국 모델이 수학문제를 풀 수 있도록 만들면 좋겠다는 의미인데, 해당 분야에서는 아직까지 인공지능 자연어 모델이 그리 뛰어난 성능을 내지못하고 있다. 하지만 해당 분야는 자연어 분야 중에서도 명확한 정답이 있는 몇 안되는 분야로, 충분히 잘 해결 될 경우 수많은 잠재력을 가지고 있는 것으로 판단된다. 현재로서는 다른 분야와 마찬가지로 거대 모델로 해결하는 접근법이 많이 사용되고 있는 것으로 보이지만, 어떻게 할 경우 적절한 크기의 모델로 해당 테스크를 잘 풀 수 있을지 많은 고민을 하게된다.
인공지능이 아직까지는 그리 뛰어난 성능을 보이지 못하고 있다고 말했지만, 이미 사람의 평균적인 점수는 뛰어넘은 상황이기는 하다. papers with code 사이트에 들어가보면, MWP분야에서 Minerva라는 인공지능이 50점 정도의 성능을 보이고 있는 것을 확인할 수 있다. 하지만 다른 분야의 인공지능들은 거의 오답율 1%대에서 경쟁중인 것을 볼때, 범지능 인공지능의 개발을 위해서라면 어서 빨리 더욱 개발되어야하는 분야이다.
MWP task는 Quntitative resolving task의 일종으로 가장 명확하게 정답이 있는 테스크이다. 이는 범 지능 인공지능이 나온다고 할 때, 매우 중요한 분야 중 하나이지만, 언어모델의 특성상 잘 학습되지 않는 부분 중 하나이다. 그도 그럴 것이 수학 문제의 정답은 명확히 하나일지언정 풀이는 여러가지 일 수 있기 때문에, 어떻게 적절한 풀이를 가려낼 것인지 아직도 명확한 모범 답안이 나오지 않은 상황이다. 현재로서는 정답 자체가 맞았을 경우 그 풀이 또한 맞은 것으로 접근하는 수 뿐이 없지만, Verifier로 풀이가 적절한지 가려내려는 시도가 계속 되고 있다. 해당 접근이 유효할 경우, 자연어 모델은 여러 학습 분야에서 채점을 지원해주는 매우 편리한 도구로 진화할 여지가 충분할 것으로 보인다. 또 이러한 수치적인 계산에 명확한 해결법에 도달한다면, 다양한 분야에서 인공지능에게 업무를 맡길 수 있을 것이다.
필자는 google에서 지원해주는 TPU를 힘입어 이것저것 실험을 해보고 있다.
TPU 무료지원!
위 링크에서 Apply Now를 누르면 구글폼으로 간단한 설문을 하게 되는데, 해당 설문을 진행하면, 메일이 와서 무표로 TPU를 사용한 방안에 대해서 알려준다. 무료로 지원 받는 서버는 사용해보면 어마어마 하다는 것을 알 수 있다. 성능과 가격면에서 둘다. 서버는 특정 클라우드 서버를 이용해본 사람이라면 문제없이 쓸 수 있겠지만, 그렇지 않은 사람은 처음에는 쓰는데, 조금 버벅일 수 있다. 그래도 조금씩 배워가면서, 인공지능을 공부하기에는 너무 좋은 서버이기 때문에, 자연어 모델을 공부하고 연구할 사람은 꼭 사용하길 추천한다. 최근에는 v3-8서버는 사용량이 많아 서버가 잘 대여되지 않는데, 아쉬운대로 v2-8 서버를 사용해주면 되겠다.
일단 이해가 되고 사용 가능한 내용들은 모두 사용해보았다. 이해가 되는 내용이 적어서 그리 많지는 않았지만, 일단 정리를 해본다. 가지고 있는 데이터셋을 기준으로 한국어 자연어로 되어있는 수학문제를 파이썬 코드로 번역하여, 문제를 해결한다는 전략을 택하였다.
위 내용 중 GPT2모델에 숫자를 임의로 변경하는 데이터 증강을 적용하였을 경우 가장 의미있는 결과(60%acc)를 얻을 수 있었고, 다른 모델은 충분한 성능을 얻을 수 없었다.
최근 자연어 모델을 공부하려 논문 스터디를 진행중이다. 주말마다 정신없이 논문을 읽어가는 중이다. 인공지능을 처음 배울 때 보다는 조금 더 이해도가 좋아진 것일지, 요즘 논문을 읽으면서는 과거에 이해가 안되었던 내용도 더 깊은 이해가 되는 것 같다. 그리하여 당장 적용해보려 하는 기술은 아래와 같다.
차차 정리해서 아래 목록을 링크로 바꿔보도록 하겠다.