[필수 과제 3] Subword-level Language Model

210909

과제2와 매우 비슷하므로 코드 분석은 패스하고 한 가지 주제만 다루고자 한다.

tokenization의 방법은 세 가지 정도로 말할 수 있다. 예를 들어 다음과 같은 문장이 있다고 하자

I love my pet very much

이 때, 토크나이징 방법에 따라 다음의 토큰이 생성된다.

  • word : I, love, my, pet, very, much

  • subword : I, lo, ##ve, my, pet, ve, ##ry, muc, ##h

    • 이러한 subword 방식은 한 단어에서만 이루어지며 두 단어의 일부 알파벳이 이어지는 경우는 없다.

  • character : I, l, o, v, e, m, y, ...

word 기반 tokenization의 파라미터 개수는 다음과 같다.

subword 기반 tokenization의 파라미터 개수는 다음과 같다.

  • 이 때의 tokenizer는 BertTokenizer.from_pretrained("bert-base-cased") 를 사용했다.

이상하지 않은가? subword 기반은 생성되는 token이 더 많아졌을텐데, 어째서 파라미터 수가 더 줄어들은 것일까?

  • 사실 나만 이상하게 생각했을 수도 있다. 데이터셋이 작다면 당연히 subword의 토큰이 더 많은 것은 사실이다.

  • 애초에 elephant 라는 단어 하나만 있다고 해보자.

  • word : elephant

  • subword : ele ph ant

  • character : e l p h a n t

character가 제일 많지 않은가? 그러나, 데이터가 많아질수록 character는 26개의 token으로 모두 표현할 수 있게된다.

이와 마찬가지로 subword도 단순히 당장에는 많아보이지만 dataset의 크기가 늘어날수록 word보다 더 작은 vocab을 구성할 수 있다.

Last updated

Was this helpful?