NL-025, Language Models are Unsupervised Multitask Learners (2018-OpenAI)
이 논문은 OpenAI-GPT2로 2019년 2월 14일에 나온 논문이다..
읽고서 드는 생각은 Unsupervised learning으로 여러 task들을 pre-training할 수 있다는 것인데, supervision없이 즉 label없이 pre-training을 할 수 있다는 점이 신기하다고 볼 수 있다.보통 lanugage processing에서는 word embedding정도만 unsupervised learning 하고 task에 따라 모델을 뒤에 붙여서 fine-tunning하거나 LM model을 pre-training하여서 가져다 쓰거나..
어쨌든 이 정도였는데 GPT2는 unsupervised LM model 자체가 학습의 끝이다.
즉 이것으로 zero-shot, 즉 처음 보는 데이터들에 대해 test를 할 수 있다는 것에 대해서 신기하였다.
---------------------------------------------------------------------------------------------------
0. Abstract
- WebText이라는 수백만 데이터세트로 LM을 학습한다. 여기서 WebText는 이 논문에서 만든 데이터 세트임.
- 이것을 이용하여 question answering, machine translation, reading comprehension, summarization 등을 테스트 해봄.
- LM의 capacity는 zero-shot task에 필수적이라고 볼 수 있다.
zero-shot task는 학습 때 보지 못한 새로운 task들에 모델을 적용하는 것이라 이해했음. 즉 LM을 학습하면서 수 많은 corpus를 이용할텐데, 이렇게 학습한 LM을 가지고 보지 못한 task에 적용할 수 있다는 것임. - GPT-2는 1.5B parameter Transformer이고 LM dataset 8개중 7개에서 SOTA임.
(여기서 모델을 4개 제시함. 모델의 차이는 parameter 차이. 구성은 같은 듯)
1. Introduction
- 많은 데이터로 supervised learning은 데이터 분포에 민감하다.
즉 모델이 학습한 데이터가 아닌, 새로운 데이터에 대해서는 잘 작동하지 않을 수 있다는 거 같음(narrow expert). - 저자가 하고싶은 것은 general system의 방향이다. 이것으로 많은 task에 적용하고 싶은데, 새로운 labeling을 통한 dataset 작업은 없이...
- 보통은 데이터를 수집하여 train/test로 나눠(I.I.D를 만족한다고 생각) 학습과 평가를 하는게 일반적인데, 이러한 방법은 test시 다양한 변화, 변형된 입력이 오는 것에 대한 단점이 존재한다. (학습 데이터와 분포가 다르니까 ㅇㅇ)
- 즉 단일 task 학습은 일반화에 부족하다. (실제 같은 task여도 데이터세트가 다르면 어려울 듯)
- robust system은 GLUE와 decaNLP를 통하여 평가된다.
- Multi-task learning 관점도 있다. 그러나 초기 단계라고 함. 여러 MTL(multi-task learning) 시도가 있고 reference들은 논문을 참조.
- 하지만 MTL을 하려면, 결국엔 많은 효과적인 학습 데이터가 필요할 것이므로 scale을 크게 하기가 어렵다.(task가 추가할 때 마다, 새롭게 학습도 해야하고 데이터도 만들어야 하는 등...)
- 따라서 우리가 제시한 방법이 MTL 측면에서도 성능 향상에 도움이 될 거다.
- 현재는 여러 language task에서 pre-trained + supervised fine-tunning이 SOTA이다.(BERT도 그렇듯..)
- 여기에는 역사가 있는데...
- 학습된 Word-vector + task-specific 모델 학습
- Contextual representation 이용
- BERT 방식
- 이러한 방법은 어쨋든 supervised learning으로 특정 task에서 성능 높이는데는 효과가 높다.
2. Approach
- Language modeling 방법으로 접근하였다. (근데 생성에서 Language modeling 말고 다른 방법은 있나...?)
- 보통 조건부 확률로 sequential하게 단어를 예측한다. conditional probablities 개념
- 즉 p(output | input)을 하는 것인데.. 만약 general system에서 여러 개의 task를 해야 한다면? -> p(output | input, task)가 되어야 한다.
- 어떤 task를 해야 할지를 모델의 조건으로 넣어준다는 것인데.. 어떻게 넣어줘야 할까? 이전 연구 중 Multi-task learning 논문을 ref 방법을 소개하였다.(McCann)
이 논문말고도 다른 논문 ref도 있는데 task 특화 encoder-decoder을 하는 거 같은데..? 잘 몰겠음 - 아무튼 McCann은 (translate to french, english text, french text) / (answer the question, document, question, answer) 식으로 처음에 무슨 task를 하는 지를 언급해주고 그 다음 input들이 들어가서 출력으로 원하는 결과 (french text or answer)을 하는 방식이다.
- McCann 예시:
- 이것보면, 무조건 원하는 task를 question식으로 해준다.(이 방법이 그렇다는 것임)
- 아무튼 McCann에서 이런 것이 된다는 것을 보여주었고 OpenAI에서도 시도하였다.(뒤에서 설명)
- McCann과 다른 것은, McCann은 multi-task learning으로 실제 여러 개의 데이터 세트를 가져와서 학습한 것인데.. GPT2는 LM을 unsupervised-learning으로 한 것이 다르다.
- 즉 fine-tunning의 과정이 없다고 보면 되고 어떤 task도 적용해볼 수 있다는 점이 대단함. 그러나 실제 학습해보면, MTL에 비해 수렴도 상당히 잘 안되고 학습이 엄청 느리다고 함.
(뒤에서 실험보면, 학습된 모델이 실제 underfitting이라고 함. overfitting이라는게 가능한지도 모르고 가능하려면 엄청 오래걸린다는 것일듯) - 또 적용할 수 있는 방법은, 대화를 이용하는 것인데, 대화 시스템은 너무 제한적이라 적절하지 않나봄.
- 아무튼 충분한 capacity가 있으면 모델은 general system을 가질 수 있고 LM을 통하여 unsupervised multi-task learning을 할 수 있다!!
2.1 Training Dataset
- 이전의 LM 모델에서는 single domain text를 썼다.
- 대표적으로 1. News articles, 2. Wikipedia, 3. Fiction blocks 등이 있다.
- 다양한 도메인의 데이터세트로는 4. Common Crawl이 있는데 이 데이터 세트는 문제가 있다고 함. 이것으로 연구한 어떤 ref논문이 말하길 4 데이터의 많은 부분이 이해할 수 없는 내용이라고 하고 실제로 openai가 4 데이터로 연구를 시작했는데 비슷한 문제점을 봤다고 함.
- 그래서 결국에는 Web scrape을 하여 데이터 제작함. 제작 방식은 논문에 나와 있음.. 대충만 보자면
- Reddit의 limk 사용
- 이 중 Karma(페북 좋아요 같은거?) 3개이 상 받은 것만 사용
- Text subset이 4천5백만개 link가 있는데 HTML의 text를 추출하여, Dragnet + Newspaper이랑 combination 했다는 듯
- 2017년 12월 전 post만 가져왔고
- 40GB text, 총 8백만 문서가 생성
- Wikipedia 문서랑 겹치는 부분은 제거한 듯(일반적 데이터이기 때문? 굳이 필요없다고 생각한 듯)
- Reddit의 limk 사용
- 이 중 Karma(페북 좋아요 같은거?) 3개이 상 받은 것만 사용
- Text subset이 4천5백만개 link가 있는데 HTML의 text를 추출하여, Dragnet + Newspaper이랑 combination 했다는 듯
- 2017년 12월 전 post만 가져왔고
- 40GB text, 총 8백만 문서가 생성
- Wikipedia 문서랑 겹치는 부분은 제거한 듯(일반적 데이터이기 때문? 굳이 필요없다고 생각한 듯)
2.2 Input Representation
- 이 부분은 아직 완벽히 이해 못함
- Byte 단위가 UTF-8 보다 좋기 때문에 byte 단위로 사용하였다.
- BPE는 charcater과 word level 사이에 있는 느낌이다.
- word-level은 자주 발생하는 symbol을 처리하는 느낌?
- character level은 자주 발생하지 않는 symbol도 처리하는 느낌?
- 여기서는 정확히 BPE가 아니고 Unicode code points을 사용했다고 하는데... 이게 먼지는 모르겠음
- BPE를 사용한 경우 vocab이 32,000~64,000개의 token vocab을 처리할 수 있는데 Unicode symbol을 사용하게 되면 130,000개의 multi-symbol token이 추가가 된다는 거 같다.
- 그 뒤에 설명 들이 막 있는데 이해하면 수정해봄.
- 어쨋든 일반적으로 byte-level 접근이 generality 측면에서 좋고 Unicode string은 pre-processing, tokenization, vocab size에 대한 걱정없이 LM에 적용할 수 있다.
2.3 Model
- 모델 부분은 사실 OpenAI GPT-1과 큰 구조는 같은데 사소한? 부분이 변경된 느낌이였음.
- 자세한 건 논문 참조.
- Layer normalization
- pre-activation residual network
- modified initialization
- 총 제시한 모델은 4개 인데, (모델은 방식은 Transformer로 같고) layer의 개수가 다름으로써 파라미터의 수가 다른 것임.
3. Experiments
실험 부분은, 간단히만... 정리하기엔 참 많군..
- WebText가지고 실험하니까 underfit됨을 알 수가 있다.
3.1 Language Modeling
3.2 Children's Book Test
- 생략
3.3 LAMBADA
- 생략
3.4 Winograd Schema Challenge
- 생략
3.5 Reading Comprehension
- CoQA가지고 실험 해봄.
- [Paragraph, QA history, final Q, token A] 이렇게 들어가는 듯.
- token A가 answer하라는 의미를 담고 있나봄.
- Unsupervised learning에도 불구하고 dev set에서 base-line system 3개보다 좋다고 하는데 CoQA 리더보드에 있는 BERT 기반 모델들에 비하면 현저히 떨어지는 성능임.
3.6 Summarization
- CNN and Daily Mail dataset으로 실험 함.
- [Paragraph, TL, DR] 이게 입력인 거 같음.
- TL: Too long
- DR: didn't read
- TL;DR이 보통 summarization에서 많이 쓰는 token 인데 Webtext corpus 중 이런 걸 의미하는 글들이 있었으니 summarization 하라는 의미를 받아들일 수 있다는 거 같음.
- 그 다음에 LM으로 생성할 때, beam-search 처럼 Top-2 확률 word중 random sampling해가면서 100개의 token을 생성.
- 생성된 것에서 처음 3개의 문장이 요약된 결과라고 지정함.
- 성능은 classic neural baseline보다 살짝 좋은 정도라고 함. 즉 실제 이것만을 위한 모델들에 비하면 부족하다는 거다.
3.7 Translation
- TL: Too long
- DR: didn't read
- 이것은 앞에서 말한 McCann 처럼 무슨 task인지를 처음에 알려줌.
- 영어->프랑스어 task를 하려면 [Example sample pair, english sentence] 처럼 입력을 넣으면 된다고 함.
- 프랑스어->영어도 마찬가지.
- 그런데 Eng->French는 성능이 안좋고(단순 word를 번역한 것보다 안좋다는 거 보면 엄청 구진 듯), French->Eng는 좋은 편이라고 함(다른 unsupervised 번역기 몇 개 보다, 즉 SOTA는 아님).
- 그런데 신기하다고 한 것이, openai가 데이터 만들 때, 영어가 아닌 문서들을 제거하는 작업을 했는데 됐다는 것임.
- 알고보니 10MB에 해당하는 french language가 남아있음을 발견했다고 함.
- 즉 적은 프랑스어가 있었기 때문에 가능했다. 어떻게 보면, 많은 프랑스어가 있었다면 더 잘됐다는 거겠지..
3.8 Question Answering
- Translation처럼 example을 통해 알려줌.
- Natural Question dataset을 쓰면 믿을만하다고 함. 이 데이터는 여기서 처음봤는데 open domain을 말하는 거 같음. MRC와 다른 거인 듯.
- SQuAD에서도 실험 해봄.
- 이것도 번역 처럼, example을 앞에 넣어줘서 입력으로 했음.
- 실험 결과는 논문 참조... Calibration이 잘 됐다는 것이 의미가 있을 듯
4. Generalization vs Memorization
- 요즘에 데이터 세트에 문제가 있었다고 함..
- CIFAR-10에는 train과 test간의 이미지에 3.3% overlap이 되는 것을 발견했다고 함.(2019년 어떤 논문에) 그래서 CIFAIR라는 새로운 데이터 세트가 나왔음..
- 그래서 자칫하면, generalization performance가 over-reporting, 즉 과하게 평가될 수 있다고 함.
- 즉 WebText 만들 때 이런 걸 주의하면서 만들어야 했음.
- 그래서 만드는 과정과 데이터간의 분석?등이 설명되어 있는데 논문을 보시길..
- Bloon filter을 사용하였음
- 8-gram 겹치는 정도를 데이터 간에 비교를 해서 측정해봄.
- 많은 데이터에 overlap 문제점이 있다.
- CoQA와 같은 경우는, document(pargraph)는 15%가 겹치지만, QA는 겹치는 게 없다.
- 이러한 overlap, similar text 가 학습에 끼치는 영향을 알아내는 것은 중요하다.
- 어떻게 overlap을 검출 혹은 정의? 하는지도 중요하다고 언급하는데, 현재는 n-gram 방법을 쓰는 것을 추천한다고 함.
- Memorization 성능을 평가하는 방법은 자체 데이터에서 실험을 해보면 되고 다음의 그림을 보자.
- 이것을 보면 LM 파라미터가 늘어날 수록, train과 test 모두 perplexity가 떨어진다. 즉 GPT-2조차 아직 underfitting이 됨을 알 수가 있다.
5. Related Work
- 생략
6. Discussion
- Unsupervised task learning 영역도 중요
- Supervision 없이 task를 배우는 pre-training 기술도 가능성 있다.
- GPT-2가 아직은 summarization과 같은 것에서는 기초적이고 실제로 사용하기에는 아직 멀었다.
- 평가 task는 훨씬 더 많고(application 에서) GPT-2보다 좋은 성능의 모델들은 여지 없이 많다.
- 현재 상태는 충분한 capacity가 있을 때, 사소한 몇 개의 baseline보다 좋은 것이다.
- GPT-2로 많은 zero-shot task에 성능을 측정해보았을 때, 포텐셜은 있다. 하지만 이것의 fine-tunning ceiling은 명확하지 않다.
- MRC 같은 것에서 일반적으로 pointer network 같은 기법을 사용하는데 여기서는 생성 기반이니까 기존과는 큰 차이가 있다.
- GPT-2를 이용하여 GLUE, decaNLP 등에서 fine-tunning할 계획이 있다. (GPT-1처럼)
- 하지만 BERT에서 언급했듯이, uni0directional representation은 비효율적이라 했는데 GPT-2에서 이런 것을 극복할 방법에 대해서는 불분명.
- GPT-2는 transformer의 decoder을 쓰기 때문에, LM의 특성상 sequential한 상황으로 쓰는 거 같다. 즉 이렇게 하면 uni-direction이 되니까 BERT처럼 bi-direction embedding이 안되니까 말하는 것 같다.
7. Conclusion
- 이때까지 계속 말하던 거임. 생략
Reference
- 논문: paper
- 블로그: openai 블로그
- 깃허브: 깃허브, 코드
댓글
댓글 쓰기