langchain 공부

Tokenizer와 embedding(LLM 역사와 발전4)

필만이 2024. 9. 2. 12:05

LLM 작동방식 및 원리

Tokenizer

Tokenizer는 자연어 처리(NLP) 시스템에서 입력 텍스트를 처리하는 첫 번째 단계에서 사용됩니다. 텍스트를 신경망에서 처리할 수 있는 형태로 변환하며, 텍스트를 토큰(Token)이라는 최소 단위로 분할하여, 모델이 처리할 수 있도록 준비합니다.

토큰(Token)이란?

  • 토큰은 텍스트를 구성하는 가장 작은 단위로, 단어, 부분 단어, 또는 심지어 문자 하나일 수 있습니다. 토큰화 과정을 통해 긴 텍스트를 모델이 이해할 수 있는 형태로 변환합니다.

LLM에서 많이 활용하는 Tokenizer: BPE (Byte Pair Encoding)

  • BPE Tokenizer는 LLM(대규모 언어 모델)에서 가장 널리 사용되는 토크나이저 중 하나입니다. 이 방식은 텍스트를 서브워드 단위로 분할하여 처리합니다.

BPE Tokenizer의 동작 방식:

  • 문자 쌍 병합: BPE는 텍스트에서 빈번하게 함께 나타나는 문자 쌍을 병합하여 새로운 서브워드를 생성합니다. 예를 들어, "l"과 "o"가 자주 함께 나타나면 이를 병합해 "lo"라는 서브워드를 만들 수 있습니다.
  • 어휘 집합 크기 감소: 이 방법은 희귀 단어와 새로운 단어도 처리할 수 있도록 하면서 어휘 집합의 크기를 줄이는 장점이 있습니다. 이는 특히 드문 단어들을 효율적으로 처리하는 데 유리합니다.
  • 높은 커버리지: 자주 나타나는 서브워드를 병합하여, 어휘 집합의 크기를 효율적으로 조절하면서도 다양한 단어를 커버할 수 있습니다. 이는 모델이 다양한 입력을 처리할 때 높은 유연성을 제공합니다.

쉽게 말하면: Tokenizer는 텍스트를 모델이 이해할 수 있는 작은 조각으로 나누는 도구입니다. 특히 BPE Tokenizer는 텍스트를 부분 단어로 나누고, 이를 병합하여 새로운 단어를 만들 수 있는 유연성을 제공합니다. 이 방식은 새로운 단어와 드문 단어를 효율적으로 처리하면서도 모델이 다양한 언어 입력을 잘 다룰 수 있도록 도와줍니다.

Token Embedding

Token Embedding은 텍스트 데이터를 처리하기 위한 중요한 과정으로, 각 토큰(단어 또는 서브워드)을 벡터라는 수치적 표현으로 변환하는 것입니다. 이 과정은 NLP 모델이 텍스트의 의미를 이해하고 처리할 수 있게 하는 데 필수적입니다.

토큰을 벡터로 변환하는 과정

  • 벡터는 고정된 차원을 가지며, 각 차원은 토큰의 특정 특성을 나타냅니다. 이 벡터들은 모델이 입력 텍스트를 수학적으로 처리할 수 있도록 해줍니다.
  • 토큰 임베딩을 통해, 단어들은 의미적으로 유사한 단어들과 유사한 벡터를 가지게 됩니다. 예를 들어, "왕"과 "여왕" 같은 단어들은 의미적으로 비슷하기 때문에 벡터 공간에서 가까운 위치에 있을 것입니다.

예시:

  • 예를 들어, "나는", "밥을", "먹었다"라는 세 개의 단어가 있을 때, 각 단어는 고유한 벡터로 변환됩니다. 이 벡터들은 모델이 단어의 의미를 비교하고 분석하는 데 사용됩니다.

    • "나는": [0.1, 0.2, ...]
    • "밥을": [0.3, 0.1, ...]
    • "먹었다": [0.4, 0.5, ...]

텍스트 데이터를 처리할 수 있는 형태로 변환

  • 이 과정은 텍스트 데이터를 모델이 이해할 수 있는 수치적 표현으로 변환하는 역할을 합니다. 원래 텍스트는 숫자가 아닌 문자이므로, 모델이 직접 처리할 수 없기 때문에, 이 숫자형 벡터로 변환하는 것이 필수적입니다.

장점:

  • 계산의 효율성: 숫자로 표현된 벡터는 컴퓨터가 빠르게 계산할 수 있어, 모델의 처리 속도가 빨라집니다.
  • 의미적 유사성 반영: 임베딩된 벡터는 단어 간의 의미적 유사성을 반영하므로, 모델이 단어의 의미를 더 잘 이해할 수 있게 도와줍니다.
  • 문맥 정보 통합: 현대적인 임베딩 기술(예: BERT)은 문맥 정보를 통합하여, 단어가 문장에서 어떤 의미로 사용되는지 반영할 수 있습니다. 예를 들어, "bank"라는 단어가 "강둑"인지 "은행"인지 문맥에 따라 다르게 임베딩됩니다.

쉽게 말하면: Token Embedding은 단어를 모델이 이해할 수 있는 숫자 벡터로 변환하는 과정입니다. 이 벡터는 단어 간의 의미적 관계를 반영하며, 모델이 텍스트의 의미를 처리하고 이해하는 데 매우 중요한 역할을 합니다. 이 과정을 통해 모델은 단어의 의미적 유사성을 파악하고, 문맥에 따라 단어의 의미를 더 정확하게 이해할 수 있게 됩니다.

Encoding

Encoding은 위에서 만든 숫자에 문맥과 위치를 반영하여 텍스트 전체를 신경망이 이해할 수 있도록 하는 과정. 이 과정은 모델이 텍스트의 의미와 문맥을 정확하게 이해할 수 있도록 돕습니다.

인코딩의 목적

  • 문맥 정보 유지: 인코딩은 텍스트의 문맥 정보를 유지하여, 모델이 문장 내에서 단어가 사용된 맥락을 이해할 수 있도록 합니다. 이를 통해 모델은 텍스트의 흐름과 의미를 더 잘 파악할 수 있습니다.
  • 위치 정보 반영: 인코딩 과정에서는 단어의 위치 정보를 반영하여, 모델이 텍스트 시퀀스의 구조를 이해하도록 돕습니다. 이는 문장 내에서 단어의 순서가 중요할 때 특히 유용합니다.

고정된 길이 벡터로 변환

  • 텍스트 데이터는 인코딩을 통해 고정된 길이의 벡터로 변환됩니다. 이 벡터는 모델이 입력을 효율적으로 처리할 수 있도록 정해진 크기를 가지며, 각 차원은 텍스트의 특정 특성을 나타냅니다.

언어의 구조적 특성 반영

  • 인코딩 과정은 언어의 다양한 구조적 특성을 반영합니다. 이를 통해 모델은 텍스트의 문법적, 의미적 규칙을 학습할 수 있으며, 텍스트의 복잡한 구조를 이해할 수 있게 됩니다.

입력 정규화

  • 인코딩 과정에서는 입력 정규화도 이루어집니다. 정규화는 데이터를 일정한 범위로 조정하여, 모델 학습의 안정성을 향상시키고, 수렴 속도를 빠르게 하며, 학습 과정에서 발생할 수 있는 오류를 줄이는 데 기여합니다.

쉽게 말하면: Encoding은 텍스트를 모델이 처리할 수 있는 숫자 벡터로 변환하는 과정입니다. 이 과정은 문맥과 위치 정보를 유지하면서, 모델이 텍스트의 의미를 잘 이해하도록 돕습니다. 또한, 언어의 구조적 특성을 반영하여, 모델이 문법과 의미 규칙을 학습할 수 있도록 하며, 데이터를 정규화하여 학습의 안정성과 효율성을 높입니다.

Token Embedding, Encoding 관계

  • Token Embedding은 단어를 숫자로 변환하는 과정이고, Encoding은 그 숫자에 문맥과 위치를 반영하여 텍스트 전체를 이해할 수 있도록 하는 과정입니다. Token Embedding이 단어의 의미를 잡아준다면, Encoding은 그 단어가 문장에서 어떻게 사용되는지를 포함해 더 넓은 의미를 만들어줌

샘플링과 디코딩 과정

자연어 처리(NLP) 모델이 텍스트를 생성하는 과정에서는 다양한 기술이 사용됩니다. 이 중 중요한 과정이 샘플링디코딩입니다.

1. 모델의 출력: 로그 확률 값(Logits)

모델이 텍스트를 생성할 때, 먼저 각 어휘(vocabulary)에 대해 로그 확률(Logit) 값을 출력합니다. 이 값은 특정 단어가 다음에 나올 가능성을 수치적으로 나타냅니다. 그러나 로그 확률 값만으로는 단어 선택이 어려우므로, 이를 확률 분포로 변환해야 합니다.

2. 확률 분포 생성: SoftMax 함수

로그 확률 값을 확률로 변환하기 위해 SoftMax 함수를 적용합니다. SoftMax 함수는 입력값을 받아서 이를 0과 1 사이의 값으로 변환하며, 모든 확률의 합은 1이 됩니다. 이를 통해 각 단어가 선택될 가능성을 확률로 표현할 수 있습니다.

예를 들어, 모델이 출력한 확률 분포가 다음과 같다고 가정해 보겠습니다:

  • "learning": 0.1 (10%)
  • "is": 0.3 (30%)
  • "NLP": 0.6 (60%)

이 경우, "NLP"가 다음 단어로 선택될 확률이 가장 높습니다.

3. 샘플링 기법: 다음 토큰 선택

모델이 생성한 확률 분포를 바탕으로, 샘플링 기법을 사용하여 다음에 올 단어를 선택합니다. 이 과정에서 여러 가지 기법이 사용될 수 있으며, 각 기법은 결과물의 다양성과 일관성을 조절합니다. 예를 들어, 확률이 가장 높은 단어를 무조건 선택할 수도 있고, 확률에 비례하여 무작위로 단어를 선택할 수도 있습니다.

샘플링 기법에 따라 모델이 생성하는 텍스트의 스타일이 달라질 수 있으며, 이를 통해 다양한 문장을 생성할 수 있습니다.

4. 시퀀스 확장 및 반복

선택된 단어는 현재까지 생성된 시퀀스에 추가됩니다. 그 후, 이 과정을 반복하여 문장이 완성될 때까지 계속해서 다음 단어를 생성합니다. 이 과정은 모델이 문맥을 이해하고 자연스러운 문장을 생성하는 데 중요한 역할을 합니다.

5. 디코딩: 숫자 벡터에서 텍스트로 변환

마지막으로, 모델이 생성한 숫자형 벡터(토큰의 시퀀스)를 디코딩하여 사람이 읽을 수 있는 텍스트로 변환합니다. 이 변환 과정은 모델의 출력이 실제로 의미 있는 텍스트로 나타나도록 보장하는 단계입니다.