3.9 KiB
LLM Training
Tokenizing
Tokenizing은 데이터를 특정 청크로 분리하고 각 청크에 특정 ID(숫자)를 할당하는 것입니다.
텍스트에 대한 매우 간단한 토크나이저는 텍스트의 각 단어를 개별적으로 가져오고, 구두점 기호도 포함하여 공백을 제거하는 것일 수 있습니다.
따라서, "Hello, world!"
는: ["Hello", ",", "world", "!"]
가 됩니다.
그런 다음 각 단어와 기호에 토큰 ID(숫자)를 할당하기 위해 토크나이저 어휘를 생성해야 합니다. 예를 들어 책을 토크나이징하는 경우, 이는 책의 모든 다른 단어를 알파벳 순서로 나열하고 몇 가지 추가 토큰을 포함할 수 있습니다:
[BOS] (Beginning of sequence)
: 텍스트의 시작 부분에 배치되어 텍스트의 시작을 나타냅니다(관련 없는 텍스트를 구분하는 데 사용됨).[EOS] (End of sequence)
: 텍스트의 끝에 배치되어 텍스트의 끝을 나타냅니다(관련 없는 텍스트를 구분하는 데 사용됨).[PAD] (padding)
: 배치 크기가 일반적으로 1보다 클 때, 이 토큰은 해당 배치의 길이를 다른 배치와 같게 늘리는 데 사용됩니다.[UNK] (unknown)
: 알려지지 않은 단어를 나타냅니다.
예를 따라, 텍스트를 토크나이징하여 각 단어와 기호에 어휘에서의 위치를 할당한 경우, 토크나이징된 문장 "Hello, world!"
-> ["Hello", ",", "world", "!"]
는 다음과 같이 될 것입니다: [64, 455, 78, 467]
라고 가정할 때 Hello
는 위치 64에, ","
는 위치 455
에... 결과 어휘 배열에서.
그러나 어휘를 생성하는 데 사용된 텍스트에 "Bye"
라는 단어가 존재하지 않는 경우, 이는 다음과 같은 결과를 초래합니다: "Bye, world!"
-> ["[UNK]", ",", "world", "!"]
-> [987, 455, 78, 467]
라고 가정할 때 [UNK]
의 토큰이 987에 있습니다.
BPE - Byte Pair Encoding
모든 가능한 단어를 토크나이징해야 하는 문제를 피하기 위해, LLMs는 BPE를 사용합니다. 이는 기본적으로 빈번한 바이트 쌍을 인코딩하여 텍스트의 크기를 더 최적화된 형식으로 줄이는 것입니다. 더 이상 줄일 수 없을 때까지 진행됩니다(자세한 내용은 wikipedia를 확인하세요). 이 방법에서는 어휘에 "알려지지 않은" 단어가 없으며, 최종 어휘는 발견된 빈번한 바이트 세트가 가능한 한 많이 그룹화된 것입니다. 빈번하게 연결되지 않은 바이트는 자체적으로 토큰이 됩니다.
Data Sampling
LLMs는 이전 단어를 기반으로 다음 단어를 예측하여 작동하므로, 훈련을 위한 데이터를 준비하기 위해서는 데이터를 이와 같이 준비해야 합니다.
예를 들어, 텍스트 "Lorem ipsum dolor sit amet, consectetur adipiscing elit,"를 사용하여,
모델이 다음 단어를 예측하도록 학습하도록 준비하기 위해(각 단어가 매우 기본적인 토크나이저를 사용하여 토큰이라고 가정하고), 최대 크기를 4로 하고 슬라이딩 윈도우를 1로 사용하여, 텍스트는 다음과 같이 준비되어야 합니다:
Input: [
["Lorem", "ipsum", "dolor", "sit"],
["ipsum", "dolor", "sit", "amet,"],
["dolor", "sit", "amet,", "consectetur"],
["sit", "amet,", "consectetur", "adipiscing"],
],
Target: [
["ipsum", "dolor", "sit", "amet,"],
["dolor", "sit", "amet,", "consectetur"],
["sit", "amet,", "consectetur", "adipiscing"],
["amet,", "consectetur", "adipiscing", "elit,"],
["consectetur", "adipiscing", "elit,", "sed"],
]
슬라이딩 윈도우가 2였다면, 입력 배열의 다음 항목이 1개가 아니라 2개의 토큰 후에 시작된다는 것을 의미합니다. 그러나 목표 배열은 여전히 1개의 토큰만 예측할 것입니다. pytorch에서 이 슬라이딩 윈도우는 매개변수 stride
로 표현됩니다.