끝 표시와 그 밖의 특수 토큰
글이 끝났다는 것을 모델에게 어떻게 알릴까요?
문제
글을 이어 붙이면 경계가 사라집니다
훈련할 때는 글 여러 편을 한 줄로 이어 붙여 모델에게 읽힙니다. 표시가 없으면 모델은 남남인 두 글을 이어진 문장으로 배웁니다.
해법
글 사이에 끝 표시를 끼웁니다
<|endoftext|>는 end of text, '글의 끝'이라는 뜻입니다. 여기서 앞 글이 끝나고 새 글이 시작된다고 알려 줍니다.
앞뒤의 <|와 |>는 보통 글과 헷갈리지 않게 하려고 붙인 모양입니다.
사전에 넣기
특수 토큰 둘을 사전 맨 뒤에 붙입니다
끝 표시가 1130번, 앞 편에서 본 모르는 단어 표시 <|unk|>가 1131번입니다.
어휘 사전은 토큰과 번호를 짝지은 표입니다. 줄 세우기를 마친 뒤에 덧붙였으므로 두 토큰은 맨 끝에 놓입니다.
함께 쓰면
두 글이 번호 한 줄이 됩니다
사전에 없던 Hello와 palace는 1131번으로, 글의 경계는 1130번으로 들어갔습니다.
다른 표시들
특수 토큰은 더 있습니다
[BOS]는 시작 표시, [EOS]는 끝 표시, [PAD]는 채움 표시입니다. 채움 표시는 짧은 글 뒤의 빈자리를 메웁니다. 여러 글을 한꺼번에 처리하려면 길이가 같아야 하기 때문입니다.
beginning of sequence(줄의 시작), end of sequence(줄의 끝), padding(채움)에서 온 이름입니다.
GPT의 선택
GPT는 끝 표시 하나만 씁니다
시작 표시 [BOS], 끝 표시 [EOS], 채움 표시 [PAD]를 따로 두지 않습니다. 끝 표시가 다음 글의 시작 표시를 겸하고, 빈자리도 끝 표시로 채웁니다. 채운 자리는 모델이 무시하므로 무엇으로 채워도 결과가 같습니다.
GPT는 챗GPT의 바탕이 된 LLM입니다. <|unk|>를 쓰지 않는 이유는 다음 편에 나옵니다.
다음 편