LLM 기초: 토큰화와 학습

LLM 기초: 토큰화와 학습

GPT와 같은 대규모 언어 모델(LLM)에서 토큰화와 임베딩의 주요 차이점을 알아보세요. 토큰화가 텍스트를 관리 가능한 단위로 분해하는 방법과 임베딩이 이러한 토큰의 풍부한 벡터 표현을 제공하는 방법을 이해하세요. 이러한 프로세스를 이해하는 것은 자연어 처리 작업에서 LLM의 잠재력을 활용하는 데 중요합니다.

서론

토큰화와 임베딩은 GPT와 같은 대규모 언어 모델(LLM)의 기본 구성 요소로, 텍스트를 이해하고 생성하는 데 중요합니다. 토큰화는 원시 텍스트를 토큰 이라는 관리 가능한 단위로 분해하는 반면, 임베딩은 이러한 토큰의 풍부한 벡터 표현을 제공합니다. 토큰화와 임베딩의 차이점을 이해하는 것은 LLM이 언어 데이터를 처리하는 방식을 이해하는 데 필수적입니다.

토큰화란 무엇인가

토큰은 AI 연구에서 자주 논의됩니다. 예를 들어 Llama 2 논문에서 저자들은 2조 개의 토큰 데이터로 학습했다고 언급합니다. 토큰은 대규모 언어 모델(LLM)의 기본 단위, 즉 “원자” 역할을 합니다. 토큰화는 문자열(즉, 텍스트)을 토큰 시퀀스로 변환하고 그 반대를 수행하는 과정입니다.

머신러닝 영역에서 토큰은 일반적으로 단일 단어와 동일하지 않습니다. 대신 문자나 단어의 일부와 같은 더 작은 단위나 전체 구문과 같은 더 큰 단위를 나타낼 수 있습니다. 토큰의 크기는 사용된 토큰화 접근 방식에 따라 달라집니다.

토큰화는 일반적으로 “토크나이저”라고 하는 구성 요소에서 처리됩니다. 이 모듈은 대규모 언어 모델과 별도로 작동하며 LLM 학습 데이터와 완전히 다를 수 있는 자체 텍스트 학습 데이터 세트를 가지고 있습니다.

토큰화가 중요한 이유

토큰화는 대규모 언어 모델(LLM)에서 관찰되는 많은 특이성의 근간이 되는 경우가 많습니다. 일부 문제는 처음에는 신경망 아키텍처나 LLM 자체에서 비롯된 것처럼 보일 수 있지만 실제로는 토큰화에 기인할 수 있습니다. 다음은 토큰화로 추적할 수 있는 문제의 불완전한 목록입니다:

  • 철자 오류
  • 문자열 뒤집기와 같은 간단한 문자열 처리 작업의 어려움
  • 일본어와 같은 비영어 언어의 낮은 성능
  • 기본 산술 연산의 낮은 성능
  • GPT-2가 Python과 같은 코딩 작업에서 겪는 어려움
  • 후행 공백과 같은 문제
  • 초기 버전의 GPT가 “SolidGoldMagikarp”에 대해 프롬프트될 때 보이는 불규칙한 동작
  • 구조화된 데이터 처리에서 JSON보다 YAML 선호

이 글에서는 토큰화가 이러한 문제에 어떻게 기여하는지 자세히 살펴보겠습니다.

토큰화 세부 사항

다음은 토큰화와 관련된 단계에 대한 개요입니다. 이러한 단계 중 일부는 즉시 명확하지 않을 수 있지만 이 글을 진행하면서 더 자세히 설명하겠습니다.

사전 학습: 어휘 구축

  1. 학습 데이터 수집: 모델이 학습할 대규모 텍스트 데이터 코퍼스를 수집합니다.
  2. 초기 토큰화: 초기 토큰화 방법을 사용하여 텍스트를 단어, 하위 단어 또는 문자와 같은 기본 단위로 나눕니다.
  3. 어휘 생성: Byte Pair Encoding(BPE), WordPiece 또는 SentencePiece와 같은 토큰화 알고리즘을 선택하여 관리 가능하고 효율적인 토큰 집합을 생성합니다.
  4. 알고리즘 적용: 선택한 알고리즘을 초기 토큰에 적용하여 학습 데이터에 존재하는 언어적 뉘앙스를 포착하는 하위 단어 토큰 또는 문자 집합을 생성합니다.
  5. ID 할당: 결과 어휘의 각 토큰에 고유한 정수 ID를 할당합니다.

실시간 토큰화 프로세스

  1. 구축된 어휘를 기반으로 들어오는 텍스트를 토큰으로 변환하여 모든 텍스트가 포함되도록 합니다.
  2. 사전 구축된 어휘에 정의된 대로 각 토큰을 해당 정수 ID와 연결합니다.
  3. 모델 처리 요구 사항을 충족하기 위해 필수 특수 토큰을 시퀀스에 통합합니다.

토큰화 문제 이해하기

문장을 입력하고 토큰이 어떻게 생성되는지 관찰해 보세요 (그에 따른 토큰 수 및 프롬프트당 가격 증가도 확인 가능).

“Show whitespace” 체크박스를 활성화한 후 오른쪽 텍스트 위에 마우스를 올리면 강조 표시된 토큰을 볼 수 있습니다. 이러한 토큰은 일반적으로 시작 부분에 공백 문자가 포함된 “덩어리”로 구성됩니다.

또 다른 예시:

토큰 덩어리와 숫자 표현이 어떻게 달라지는지 관찰해 보세요:

  • 단어 앞의 공백 유무
  • 구두점 존재 여부
  • 대소문자

대규모 언어 모델(LLM)은 원시 데이터에서 이러한 토큰의 차이에도 불구하고 단어가 동일한 개념을 나타내거나 적어도 매우 유사하다는 것을 학습해야 합니다. 이러한 가변성은 성능을 저하시킬 수 있습니다.

기타 인간 언어

영어의 덩어리 크기를 다른 언어와 비교하면 영어 이외의 언어에서 훨씬 더 많은 수의 토큰이 사용되는 것을 자주 볼 수 있습니다. 이 차이는 다른 언어의 덩어리가 더 분열되는 경향이 있어 문서의 시퀀스 길이가 증가하기 때문입니다.

머신러닝 트랜스포머의 어텐션 메커니즘에서 비영어 언어의 경우 컨텍스트가 부족할 가능성이 더 높습니다. 동일한 메시지를 전달하더라도 덩어리가 더 작기 때문에 더 많은 토큰이 소비됩니다. 이러한 불일치는 토크나이저에 사용된 학습 세트와 토크나이저 자체 모두에 의해 영향을 받습니다.

결국 비영어 언어에 대한 컨텍스트 창의 비효율적인 활용은 대규모 언어 모델(LLM)이 비영어 쿼리를 처리할 때 성능이 저하되는 결과를 초래합니다.

토큰화와 코드 — Python

Python의 경우 OpenAI의 GPT-2 인코더는 Python 코드 세그먼트의 들여쓰기에 사용된 개별 공백 문자에 많은 토큰을 소비하는 경우가 많았습니다. 이 동작은 비영어 언어에서 겪는 어려움과 유사하여 제한된 언어 모델(LLM)의 컨텍스트 창을 상당히 부풀리고 결과적으로 성능 저하를 초래합니다.

구성: YAML vs. JSON

YAML이 JSON보다 밀도가 높아 동일한 작업을 수행하는 데 더 적은 토큰이 필요한 것으로 밝혀졌습니다.

간단한 예시:

JSON: 46 토큰

JSON의 증가된 부풀림은 다음을 초래합니다:

  1. LLM이 이해하기 더 어려움 (밀도가 낮아 컨텍스트 창을 초과하기 쉬움).
  2. 사용자에게 더 높은 비용 (API 호출 시 토큰당 지불).

토큰화 문제

토큰화는 대규모 언어 모델(LLM)에서 관찰되는 많은 이상 현상의 핵심에 있습니다. 처음에는 신경망 아키텍처나 LLM 자체와 관련된 것으로 보일 수 있는 여러 문제가 실제로는 토큰화로 추적될 수 있습니다. 예를 들어:

  • LLM은 단어 철자 또는 문자열 뒤집기와 같은 기본 문자열 처리 작업을 어려워합니다.
  • 비영어 언어의 성능이 저하되는 경향이 있습니다.
  • LLM은 간단한 산술 처리에서 낮은 성능을 보입니다.
  • GPT-2는 Python으로 코딩할 때 상당한 어려움을 겪었습니다.
  • 후행 공백에 대한 이상한 경고가 발생할 수 있습니다.
  • “Solid Gold Magikarp”라는 문구는 LLM이 관련 없는 주제로 빠지게 만드는 경우가 많습니다.
  • LLM 작업 시 JSON보다 YAML이 선호됩니다.

대규모 언어 모델의 토큰화

대규모 언어 모델(LLM) 학습 과정에서는 문자열을 가져와 미리 정의된 어휘에서 정수로 변환합니다. 그런 다음 이러한 정수를 사용하여 임베딩 테이블에서 벡터를 검색하고, 이를 트랜스포머 모델에 입력합니다. 이 프로세스는 기본 영어 알파벳뿐만 아니라 다양한 언어와 이모지와 같은 특수 문자를 지원해야 하기 때문에 복잡해집니다.

Python의 문자열과 유니코드 코드 포인트

Python에서 문자열은 유니코드 코드 포인트로 구성된 변경 불가능한 시퀀스입니다. 이러한 코드 포인트는 유니코드 표준 내에서 유니코드 컨소시엄에 의해 정의되며, 현재 약 150,000개의 문자를 161개의 스크립트로 포함합니다. 유니코드 표준은 지속적으로 유지 관리되며 최신 버전 15.1은 2023년 9월에 출시되었습니다.

Python에서 단일 문자에 대한 유니코드 코드 포인트를 검색하려면 ord() 함수를 사용할 수 있습니다. 예를 들어:

그러나 이러한 원시 코드 포인트 정수를 토큰화에 사용하는 것은 비현실적입니다. 어휘가 너무 커지고(150,000+) 유니코드 표준의 지속적인 진화로 인해 불안정하기 때문입니다.

유니코드 바이트 인코딩

더 효과적인 토큰화 솔루션을 위해 ASCII, UTF-8, UTF-16, UTF-32와 같은 유니코드 바이트 인코딩을 살펴봅니다. 이러한 인코딩은 추상적인 유니코드 코드 포인트를 저장 및 전송에 적합한 실제 바이트로 변환하는 방법을 규정합니다.

유니코드 바이트 인코딩, ASCII, UTF-8, UTF-16, UTF-32

유니코드 컨소시엄은 UTF-8, UTF-16, UTF-32의 세 가지 인코딩 유형을 정의합니다. 이러한 인코딩은 유니코드 텍스트를 바이너리 데이터 또는 바이트 스트림으로 변환하는 수단으로 사용됩니다.

이 인코딩 중 UTF-8이 가장 널리 사용됩니다. 각 유니코드 코드 포인트를 코드 포인트에 따라 1~4바이트 범위의 바이트 스트림으로 변환합니다. 처음 128개의 코드 포인트(ASCII)는 1바이트만 필요합니다. 다음 1,920개의 코드 포인트(라틴 문자 알파벳 대부분 포함)는 인코딩에 2바이트가 필요합니다. 기본 다국어 평면(BMP) 내의 나머지 61,440개 코드 포인트는 3바이트가 필요합니다. 4바이트는 다른 유니코드 평면(덜 일반적인 CJK 문자, 다양한 역사적 스크립트, 수학 기호 포함)을 포함합니다.

원시 UTF-8 바이트를 직접 사용하는 것은 언어 모델에 매우 비효율적입니다. 가능한 바이트 값이 256개뿐인 제한된 어휘 크기로 인해 시퀀스가 지나치게 길어집니다. 이러한 제약은 모델이 충분히 긴 컨텍스트에 주의를 기울이는 능력을 저해합니다.

해결책은 바이트 쌍 인코딩(BPE) 알고리즘을 사용하여 이러한 바이트 시퀀스를 가변적으로 압축하는 데 있습니다. 이 접근 방식을 사용하면 더 크지만 조정 가능한 어휘 크기로 텍스트를 효율적으로 표현할 수 있습니다.

토큰화와 임베딩의 차이점

토큰화와 임베딩은 GPT와 같은 대규모 언어 모델(LLM) 내에서 분리되어 있지만 상호 연관된 프로세스이며, 이러한 모델이 텍스트를 이해하고 생성하는 방식에 기여합니다. 다음은 각각에 대한 간략한 개요와 차이점입니다.

LLM 토큰화

목적: 토큰화는 원시 텍스트를 토큰 시퀀스로 변환하는 것을 목표로 하며, 선택한 토큰화 접근 방식에 따라 단어, 하위 단어 또는 문자를 포함할 수 있습니다.

절차: 텍스트를 모델이 해석할 수 있는 관리 가능한 세그먼트로 분해하는 작업이 포함됩니다. 먼저 공백과 구두점을 기준으로 텍스트를 분할한 다음, 모델의 사전 정의된 어휘에 없는 경우 하위 단어나 문자로 추가 분할될 수 있습니다.

결과: 결과는 원래 텍스트를 모델이 처리하기에 적합한 형식으로 나타내는 토큰 시퀀스입니다. 각 토큰은 모델의 어휘에 해당하는 고유한 정수 ID가 할당됩니다.

임베딩

목적: 임베딩은 토큰의 컴팩트하고 저차원이며 연속적인 벡터 표현입니다. 의미적 및 구문적 의미를 인코딩하여 모델이 언어의 뉘앙스를 이해하도록 돕습니다.

절차: 토큰화 후 각 토큰(정수 ID로 표시)이 임베딩 벡터와 연결됩니다. 이러한 벡터는 모델의 학습 단계를 통해 획득되며 임베딩 행렬 또는 테이블에 저장됩니다.

결과: 임베딩은 LLM의 신경망 레이어에 입력으로 기능하여 모델이 토큰에 대한 계산을 수행하고 데이터 세트 내의 관계와 패턴을 식별할 수 있도록 합니다.

LLM 임베딩에 대한 자세한 정보는 저희 블로그에서 확인하세요: LLM 임베딩이란: 알아야 할 모든 것

업로드 진행 중, 0

구별되는 특징

처리 단계: 토큰화는 초기 전처리 단계로, 텍스트를 모델이 이해할 수 있는 형식(토큰)으로 변환하는 반면, 임베딩은 토큰화 이후에 발생하여 토큰을 상세한 벡터 표현으로 변환합니다.

기능: 토큰화는 주로 텍스트의 구조적 분해 및 표현을 포함하는 반면, 임베딩은 토큰에 포함된 의미 및 구문적 의미를 포착하고 활용하는 데 중점을 둡니다.

표현: 토큰화는 텍스트 구성 요소의 이산적이고 정수 기반 표현을 생성하는 반면, 임베딩은 이러한 정수를 언어 정보를 인코딩하는 연속 벡터로 변환합니다.

결론

결론적으로, 토큰화와 임베딩은 대규모 언어 모델의 작동에서 중추적인 역할을 합니다. 토큰화는 텍스트를 토큰으로 구조화하는 반면, 임베딩은 벡터 표현을 통해 이러한 토큰에 의미 및 구문적 의미를 제공합니다. 이러한 프로세스를 이해함으로써 LLM이 텍스트를 해석하고 생성하는 방법에 대한 통찰력을 얻을 수 있으며, 이는 자연어 처리의 발전에 기여합니다.

novita.ai는 100개 이상의 API에 액세스할 수 있는 무한한 창의성을 위한 올인원 플랫폼입니다. 이미지 생성 및 언어 처리부터 오디오 향상 및 비디오 조작까지, 저렴한 종량제 요금제로 GPU 유지 관리의 번거로움 없이 자체 제품을 구축할 수 있습니다. 지금 무료로 사용해 보세요.

추천 자료

LLM과 GPT의 차이점은 무엇인가요?

LLM 리더보드 2024 예측 공개

Novita AI LLM 추론 엔진: 최대 처리량과 최저 비용 추론