Git의 다양한 머지 전략 비교 - 우리 팀은 어떤 전략을 도입해야 할까?
Git은 한 브랜치에서 작업한 내용을 Main 브랜치에 병합(Merge)할 수 있는 다양한 방법들을 제공한다. 이러한 방법들을 Merge 전략이라고 부르는데, 다양한 방법들 중에서도 이번 글에서는 가장 많이 사용되는 방법인 1) Merge Commit, 2) Squash and Merge, 3) Rebase and Merge에 대해 소개하려고 한다.
Git은 한 브랜치에서 작업한 내용을 Main 브랜치에 병합(Merge)할 수 있는 다양한 방법들을 제공한다. 이러한 방법들을 Merge 전략이라고 부르는데, 다양한 방법들 중에서도 이번 글에서는 가장 많이 사용되는 방법인 1) Merge Commit, 2) Squash and Merge, 3) Rebase and Merge에 대해 소개하려고 한다.
최근에 pytorch로 간단한 모듈을 재구현하다가 loss와 dev score가 원래 구현된 결과와 달라서 의아해하던 찰나, tensor 차원을 변경하는 과정에서 의도하지 않은 방향으로 구현된 것을 확인하게 되었다. 그리고 그 이유는 transpose
와 view
의 기능을 헷갈려했기 때문이었다. 두 함수의 차이는 contiguous
를 이해해야 알 수 있는 내용이었고, 혹시 이 개념이 헷갈리는 사람들을 위해 간단한 예시를 바탕으로 정리해보았다.
PyTorch 1.2 이상부터 torch.utils.data
에서는 크게 map-style dataset (torch.utils.data.Dataset
) 과 iterable dataset (torch.utils.data.IterableDataset
) 의 두 종류의 데이터 클래스를 지원하고 있다. 데이터 사이즈가 클 때는 IterableDataset
을 사용하는 것이 좋은데, Dataset
과는 딜리 아직 개발되어야 할 기능이 더 필요한 클래스라서 사용할 때에 유의할 점이 있어 정리해보게 되었다.
pandas
는 데이터를 다루는 사람들이라면 누구나 쓸 수 밖에 없는 오픈소스 라이브러리이다. table 형식의 데이터를 다루기에 편리하지만 오픈소스라는 특징과 다양한 기능 지원 때문에 속도 면에서는 최적화되어 있지 않은 편이다. 이번 글에서는 pandas
의 여러 기능 중에서 iteration
하는 여러 방법을 속도와 사용성 측면에서 비교해본 내용을 아주 간단하게 정리해 보았다.
2020년의 연말은 그 어느 때보다도 연말같지 않았다. 일 년을 주기로 움직였던 학생 때나 회사의 근로자일 때와는 처한 상황이 다르기도 했고, 코로나로 인한 고요함도 한 몫했던 것 같다. 새롭게 회사를 만들고 멤버들과 align되어 달려나갈 준비를 마친 시점이 11월 정도였고, 한창 KLUE 프로젝트가 달리고 있던 시기가 12월이었으니 12월 말이 연말보다는 월말의 느낌이었다. 게다가 코로나로 사회적 거리두기 단계가 격상되면서 연말파티를 하며 사람들과 강제로라도 일년을 회고하고 마무리하는 것조차 어려웠다. 따로 시간을 내서 마무리하기에는 체력적으로도, 정신적으로도 휴식이 더 필요했기 때문에 "나의 연말은 이 프로젝트가 마무리되는 시점으로 유예한다!"고 자기 합리화를 하며 연말과 연초를 보냈다.
요즘 등장하는 NLP model 페이퍼들은 주로 GLUE 벤치마크에 성능을 report 하면서 아주 미세한 성능 개선을 근거로 "우리 방법론은 효과적이었다!"를 주장하고 있다. 과연 이 결과가 실제로 그 모델이 더 나은 모델임을 주장할 수 있을만큼 근거가 탄탄할까?
이번에 소개하는 논문에서는 NLP research에서 모델의 성능 개선을 주장하는 실험 결과에 대해 그 결과가 "정말 유의미한 모델의 성능 개선을 보장할 수 있는가?"에 대해 분석한다. 더불어, 분석 결과를 통해 발견된 문제점을 개선할 수 있는 간단한 overview 까지 제안하고 있다.
다양한 출처의 데이터로 학습한 pretrained model이 NLP task에서 좋은 성능을 보여주고 있다. 하지만 아직 주어진 labeled data 의 크기나 target domain의 코퍼스와 사전학습 코퍼스의 유사도가 특정 task의 결과에 얼마나 영향을 미치는지에 대해 알려진 바가 없다. 또한 RoBERTa와 같은 LM이 정말 다양한 task에 generalize될만큼의 다양한 source로 학습되었는지도 확실하지 않다. 이 논문에서는 pretrained model을 풀고자 하는 특정 task의 domain에 tailor시켜서 추가로 학습시키면 더 좋은 성능을 보일 수 있을까? 라는 질문에 대한 답을 하고 있다.
한 스타트업에서 개발한 인공지능 채용솔루션(a.k.a. AI 면접관)을 벌써 여러 기업에서 사용하고 있다는 뉴스기사를 접하게 되었다. 해당 기업은 "성별이나 학력 등에 따른 차별 방지와 정확한 역량 추정"을 위해 5만 2천여명의 데이터를 확보하여 학습했다고 말한다. 5만 2천여명의 데이터와 차별 방지가 어떤 관련이 있는지는 모르겠지만, 많은 양의 데이터를 사용한다는 걸 내세우고 싶었다면 대량의 데이터가 편향성을 줄이는 것과는 무관하다고 말하고 싶다. 5만 2천개보다 더 많은 데이터로 학습한 Language Model 도 편향성 문제가 있으며 이 이슈는 아직도 연구자들에 의해 활발히 연구되고 있다.
최근 NLP task에서 좋은 성능을 보이는 모델은 대량의 monolingual corpus를 통해 unsupervised pre-training을 한 LM을 task에 맞게 supervised fine-tuning을 하는 transfer learning에 기반하고 있다. 같은 transfer learning framework 안에서도 다양한 모델이 존재한다. 우리가 아는 모델만 하더라도 BERT, GPT, ELMO 등이 있고, GLUE benchmark에 대해서 테스트한 점수가 있다.
하지만 과연 점수가 더 높다고 더 좋은 모델이라고 할 수 있을까? 우리가 모델이라고 부르는 것 안에는 학습 방식 외에도 학습에 사용한 데이터셋, optimizer, 모델의 크기 등 많은 내용이 함축되어 있다. 그래서 각 모델의 아이디어 중 과연 **“어떤 특징이 좋은 모델 성능을 내는데에 도움이 되었을까?”**라고 묻는다면 쉽게 대답하기 어렵다.
이 논문에서 소개하는 Text-to-Text Transfer Transformer (T5) 는 그 답을 찾기 위해 고안한 framework이다.
제로투원. 해석하면 0에서 1. 즉, 무에서 유를 창조한다는 의미다. 책의 제목에 걸맞게 주변에 스타트업에 다니는 분들에게 자주 추천받았던 책이다.