ArXiv, PDF
- COLING 2022 Accepted
Github
무슨 문제를 풀기 위한 페이퍼인가?
WordPiece 토크나이저는 BERT 등에서 굉장히 자주 사용되는 max-match 알고리즘이다. 하지만 Max-match 류의 알고리즘의 한계점은 → OOV에 대해서 대응하는 것이 어려워 진다는 점이 있다.
OOV에 대응하기 어려워 진다는 점은, OOV가 생긴다는 뜻이 아니라, 만약 ‘word’라는 단어가 → ‘w/or/d’로 나누어질 때 해당 부분에 대해 모델의 Knowledge가 없기 때문에 적절한 방향으로의 Embedding이 이루어지지 않는다는 의미이다.
이를 방지하기 위해 유사한 알고리즘인 BPE, SentencePiece 토크나이저에서는 Subword Regularization이라는 방법을 도입해, 신규 OOV에 대해서도 기존 토큰으로 좀 더 유연하게 대응할 수 있도록 학습 단계에서 토크나이징을 max match 이외의 방법으로 (위의 예시처럼, word 한 단어 대신 w, or, d로 임의로 쪼개는 등) 일종의 Data Augmentation을 노림과 동시에 OOV에 강건한 모델을 만든다.
한편, Wordpiece 알고리즘에 대해서는 이러한 Subword Regularization을 도입하지 않았다.
즉, 이 페이퍼는 가장 단순하게 설명하면 ‘Wordpiece + Subword Regularization’ 이다.
기존 연구
Subword Regularization이라는 연구는 NMT에서 모델의 아키텍쳐 변경 없이 Data Augmentation 효과를 주는 Regularization 방법론을 제안했다.
위 연구에서 아래와 같이 SentencePiece에서 사용할 수 있도록 방법론을 제공했다.
>>> import sentencepiece as spm >>> s = spm.SentencePieceProcessor() >>> s.Load('spm.model') >>> for n in range(5): ... s.SampleEncodeAsPieces('New York', -1, 0.1) ... ['▁', 'N', 'e', 'w', '▁York'] ['▁', 'New', '▁York'] ['▁', 'New', '▁Y', 'o', 'r', 'k'] ['▁', 'New', '▁York'] ['▁', 'New', '▁York']
이후 2020 ACL에서 BPE-Dropout: Simple and Effective Subword Regularization 이라는 이름으로 BPE 알고리즘에 위와 유사한 기법을 적용한 연구가 등장해 NMT에서 해당 방법론이 잘 동작한다는 것을 보였다.
NMT 외에도 텍스트 분류기법에서도 위와 같은 토크나이징 기법이 유의미하다는 Stochastic Tokenization with a Language Model for Neural Text Classification 연구도 있었다.
이러한 Regularizaion 기법들은 기본적으로 특정 토크나이저에 맞춰져서 개발되기 때문에, 한 방법론을 다른 토크나이저에 일률적으로 적용하는 것이 어렵다.
이 페이퍼에서는 WordPiece를 위한 새로운 dropout 방법으로 “MaxMatch-Dropout”을 제안한다.
MaxMatch-Dropout
이 페이퍼에서 제안한 MaxMatch-Dropout 기법은 심플하게 아래와 같다.
WordPiece 토크나이저가 Greedy 하게 최대 길이로 자른 토큰들을 반환하면, 해당 토큰들 중에 일부 단어를 Drop하는 과정을 추가해, 해당 drop한 단어들을 다시 세부 토큰으로 자르는 과정을 진행한다.
실제로 적용해보았는데..? 🤔
실제로 성능이 올라가는지 확인해 보기 위해서 코드를 추가로 작성해보았다.
NSMC with KcELECTRA: w/ MMD and w/o MMD
- 모델: KcELECTRA(v1)
- 데이터: NSMC
위 그래프에서 확인할 수 있는 것 처럼, Train Acc는 epoch을 많이 진행한 MMD 추가 학습에서 높게 나타났지만, 실제 Validaiton Accuracy에서는 기본 Tokenizer(w/o MMD)를 사용한 학습에서 약 2%p 높은 best score를 보였다.
초기 학습에서는 MMD가 일종의 Regularizer로 동작한다는 점에서 적은 epoch 단계에선 (상대적으로) 낮은 성능을 보일 수도 있다고 판단하였으나, 실제로 약 2배 넘는 epoch 학습 이후에도 여전히 낮은 혹은 Overfitting 되는 모습을 보인다는 점에서 오히려 NSMC와 같은 간단하고 쉬운 Task에 대해서는 큰 의미가 없나? 싶은 의문이 든다.
+ 추가 실험, p=0.3
추가적인 실험을 통해서 위 그래프의 진한 주황색 (val acc 기준 위에서 두 번째 line) 실험에서는 p=0.3(=Dropout 30%)를 두고 실험을 진행하니 상대적으로 더 높은 점수가 나오긴 했지만, p=0.0인 기본 KcELECTRA 실험결과보다는 낮은 값이 나왔다.