2장 배울 내용
- 대규모 언어모델을 위한 텍스트 준비
- 텍스트를 단어와, 단어의 부분단어인 토큰으로 분할
- 고급 텍스트 토큰화 - 바이트 페어 인코딩
- 슬라이딩 윈도 방식으로 훈련 데이터 샘플링
- 언어모델에 주입하기 위해 토큰을 벡터로 변환하는 법
데이터 처리
- 임베딩(embedding) : 데이터를 벡터로 표현하는것
- 대표적인 임베딩 모델은 Word2Vec
- 현재 대부분의 대규모 언어모델은 자체적인 임베딩 방식이 있다.
- LLM 텍스트 처리 단계
- 입력 텍스트를 토큰화된 텍스트로 분해 (공백이나 특수문자 기준)
- 각 텍스트를 토큰 ID 로 매핑 → 어휘사전 { 토큰 : 토큰ID }, 역 어휘사전
- 어휘사전을 통해 토큰 → 토큰ID 리스트로 변환 (tokenizer model 을 사용)
특수 문맥 토큰
- 기존 어휘 사전에 없는 단어가 들어오는 경우,
unknown token, token ID 으로 임의로 처리한다.
- [BOS],[EOS],[PAD] 등. 패딩 토큰의 경우 토큰 길이를 맞추기 위해 추가하기도 한다.
- GPT-3 에서는 여러개의 텍스트를 길게 붙여놓은 하나의 학습데이터소스를 사용하게 된다. 이때 여러개의 각각의 텍스트 간에 이질적인 텍스트임을 보이기 위해
end of text (<|endoftext|>) 사용한다.
바이트 페어 인코딩(BPE)
- GPT계열에서 사용하는 토큰화 방법 - tiktoken 라이브러리로 구현됨
- 개별 문자를 어휘사전에 등록 후 자주 등장하는 문서 조합을 부분단어로 등록
슬라이딩 윈도우로 데이터 학습
- 훈련단계에서, LLM은 target(예측할 토큰) 이후 단어를 참조하지 못하게 한다.
- 첫 토큰 제외한 모든 토큰은 타겟으로 사용된다.
- 마지막 토큰 제외한 모든 토큰은 입력으로 사용된다.
- 슬라이딩 윈도 크기를 N 이라고 하고, 입력 데이터 텐서(슬라이드) 를 정했다고 하면 해당 데이터의 타겟은 바로 한 토큰 다음 슬라이딩 윈도 가 된다.
- 예 ) 입력 : [N, N+4] , 출력 : [N+1, N+5]
토큰 임베딩 만들기
- 텍스트를 토큰ID(정수)로 변환했다고 하면, 이 토큰ID 를 고정 크기의 실수벡터(임베딩) 으로 바꾼다.
- 토큰 → 토큰ID : tokenizer
- 토큰ID → 단어 임베딩 : LLM Model
- 보통 수백~수천 차원의 임베딩 벡터를 사용한다.
- nn.Embdding
Token Size X 각 토큰 차원 수 만큼의 가중치 행렬을 만들어 두고, 각 입력텍스트의 토큰ID의 인덱스에 해당하는 행을 다음 입력층으로 넘긴다.
단어 위치 인코딩하기