해당 포스팅은 네이버 부스트캠프 P-stage를 위해 개인 학습 내용을 정리했습니다.
1. 목표
- 오늘의 Further Question 살펴보기
- Baseline 코드 1회 이상 제출해보기
- 데이터 살펴보기
2. 진행 내용
1) Further Question
임베딩 평가 방법
임베딩 평가 방법에는 유사도 검사와 유추 평가가 있습니다. 먼저, 유사도 검사는 대표적으로 wordsim353이 존재합니다. Wordsim353은 353개의 영어 단어쌍과 해당 단어쌍의 유사도/관련도를 소수의 영어화자가 평가한 점수의 평균으로 구성됩니다. 예를 들면, Tiger-cat은 7.35로 유사하다고 판단하고 있습니다. 이처럼 각 단어쌍에 해당하는 2가지 단어 벡터의 코사인 유사도의 분포와 이 유사도/관련도 점수의 분포가 얼마나 유사한지 평가합니다. 다만, Wordsim353은 영어 단어 임베딩 모델의 극히 제한적인 측면만 평가한다는 단점이 있습니다. 대략적인 성능은 점검이 가능하지만, 하이퍼 파라미터의 최적화에 필요한 미세성능 비교에는 부적합합니다. 지금 저희처럼 한국어 자연어 모델의 경우에는 한국어로 이뤄진 평가방법을 사용해야 합니다. 그래서 wordsim 353을 번역해서 만들어놓은 테스트 셋도 존재합니다.
유추 평가는 벡터 공간에 임베딩 된 단어 벡터들이 의미론적/문법적 관계를 잘 반영하고 있는지를 확인하는 검사입니다. 대표적으로 GATS(Google Analyst Test Set)이 있습니다.
피어슨 상관계수와 스피어만 상관계수
피어슨 상관계수는 선형 관계의 크기 측정을 할 때 주로 사용합니다. 선형성과 단조성이 높을수록 상관성이 크다는 특징이 있습니다. 여기서, 단조성이 높다는 것은 하나의 변수가 커짐에 따라 다른 하나의 변수도 커지는 현상을 말합니다. 피어슨 상관계수는 항상 -1과 1사이의 값을 가지며, X, Y가 서로 독립이면 상관계수는 0이 됩니다.
$$ \rho = Cor(X,Y) = \frac{\sqrt{Cov(X, Y)}}{\sqrt{Var(X)Var(Y)}} $$
스피어만 상관계수는 주로 순서형, 명목형 변수를 순위로 변경해서 측정하는 상관계수입니다. 피어슨 상관계수와 다르게 비선형관계도 측정이 가능하다는 특징이 있습니다. 두 변수를 순위로 변환한 뒤 피어슨 상관계수를 구하면 됩니다.
Vanila Transformer의 문제
기존의 Transformer는 입력으로 들어오는 sequence의 길이의 제곱에 비례해서 메모리와 계산량이 늘어난다는 단점이 있습니다. 물론, Bert 모델도 최대 길이를 512로 제한했습니다. 이러한 문제를 해결하기 위해,Longformer라는 논문에서는 3가지 방법을 제안했습니다. sliding windows attention, Dilated sliding window, Global+sliding window 방법을 제안했습니다. 이를 통해, 층을 깊게 쌓을 수록 점차 넓은 범위를 attention 할 수 있도록 제안했습니다.
두 번째로는 sequence 길이에 따라 증가하는 시간에 대한 문제가 있습니다. 기본적으로 Transformer는 $O(n^{2})$의 시간이 걸리고 있습니다. Linformer라는 논문에서는 Low Rank의 행렬로 근사해서 $O(n^{2})$의 문제를 $O(n)$으로 줄이는 방법을 제안했습니다. 이러한 방법을 제안해서 시간 효율성과 메모리에서의 이점을 얻을 수 있었습니다.
Reformer이라는 논문에서도 기존의 Transformer는 긴 sequence에 대해 많은 비용이 필요하다는 것을 언급했습니다. 이를 해결하기 위해 위의 논문에서는 LSH(locality-sensitive hashing)이라는 방법을 활용해 기존 $O(n^{2})$의 시간 복잡도를 $O(nlogn)$으로 낮췄습니다. 추가적으로, 기존의 residuals 대신 reversible residual layer를 사용해서 메모리 사용량을 줄이는 방법을 제안했습니다.
2) Baseline 코드 1회 이상 제출해보기
Baseline 코드를 한번 돌려보고 제출하는 과정을 시도했습니다. 특별하게 다른 요소를 바꿔주지는 않았고, 4에폭, 10에폭, 20에폭으로 학습량만 늘렸습니다. 결과는 10에폭에서 가장 좋은 결과를 얻었습니다. 아마 그랬던 이유는 4에폭에서는 학습이 부족했다고 생각했고, 20에폭은 너무 train data에 fitting된 것이 아닐까 추측해봅니다. 추가적으로, 토론방을 통해서 다양한 EDA결과를 봤는데, 데이터 imbalanced가 있어서 아마 이 부분도 크게 작용했다고 생각했습니다.
3) 데이터 살펴보기
오늘 논문들을 공부하다보니, Transformer가 입력받는 길이가 길어질수록 영향을 많이 받는 것을 확실히 알 수 있었습니다. 주어진 데이터에서는 생각보다 길이가 긴 데이터가 존재했습니다. 최대 길이는 약 500자를 넘었고, 최소는 15자였습니다. 하위 90%는 약 160정도에서 끊겼으나, entity의 끝길이가 벗어날 경우가 있을 것 같습니다.
3. 회고
P-stage 1에서는 실험 관리에 대해서 신경을 못썼지만, 지금은 노션에 빠짐없이 잘 기록하고 있습니다. 앞으로 2주 동안 끝날 때까지 잘 작성할 수 있었으면 좋겠습니다. 최근, 다양한 사람들과 줌스터디를 진행하고 있는데, 생각보다 공부에 집중이 잘되는 것 같습니다. 혹시 이 글을 캠퍼분이 계시다면 꼭 한번쯤은 줌스터디를 해보시는 것을 추천드립니다! 오늘 남은 시간은 데이터와 코드를 보며 마무리하겠습니다. 읽어주셔서 감사합니다.