austin-distel-rxpThOwuVgE-unsplash.jpg

AI연구회

경남ICT협회 AI 연구 모임

LLM Token에 대해서

ChatGPT 사용시(특히 API 사용시) 토큰이란 용어에 대해서..

LLM의 최근 역사

2017년 구글에서 발표한 Transformer 모델은 순차 데이터를 학습할 수 있는 신경망으로 LLM이 대두하는 계기가 되었습니다. 
2018년 말 구글에서 발표한 BERT(Pre-traning of Deep Bidirectional Encoder Representations from Transformers)는 NLP 벤치마크에서 신기록을 세우게 됩니다. 
2020년에는 OpenAI와 존스홉킨스 대학의 연구진이 GPT-3를 발표했습니다. 1,750억 개(175B ) 모델이 발표된 이후부터 LLM 분야는 대중들에게도 본격적으로 알려지게 됩니다.
2021년 github copilot 발표, 2022년 ChatGPT 발표 후 이제 누구나 LLM을 접하고 활용하는 시대에 접어들었습니다. 

LLM의 작동 방식

대부분의 현대 LLM은 Transformer 아키텍처를 기반으로 작동합니다. 대규모 코퍼스(corpus, 말뭉치)를 사용하여 단어(이하 토큰, token, 우리가 이해하는 단어보다 좀 더 세분화된 기준, 학습 과정을 통해 결정됨.)의 임베딩 벡터를 학습, 이를 모아 문서 전체를 표현하는 벡터를 생성합니다. 이렇게 생성된 벡터는 문서 간 유사도 측정이나 문서 분류 등 다양한 자연어 처리 작업에 사용됩니다. (겨우 세 줄인데 벌써 어질어질 하네요. -_-a)

예를 들어 GPT-3.5 모델은 학습된 파라미터를 사용하여 입력된 질문에 대한 답변을 생성합니다. 좀 더 상세히 정리하면 다음과 같습니다. 어떤 입력(예를들어 사용자의 질문과 같은 요청 문장)을 기존에 학습한 token 단위로 분리해 질문 정보를 정리합니다. 그리고 기존 학습한 문장 구조와 문법 규칙을 바탕으로 답변의 시작 token이 결정됩니다. 이후 다음 token의 확률 분포를 예측하기 위해, 입력으로 받은 이전 토큰의 임베딩 벡터를 여러 개의 어텐션 헤드(Multi-head attention)에 입력으로 넣어주고 각각의 어텐션 헤드에서 다음 토큰의 중요도를 계산, 이를 결합하여 다음 토큰의 확률 분포를 얻은 다음, 가장 확률이 높은 토큰을 선택하여 다음 입력으로 사용하고, 이를 계속 반복하여 답변을 생성합니다. 
 

토큰이란?

- 자연어 처리를 위해 문장 및 단어를 조각 낸 최소 단위.
- 영어의 경우 1 token은 통상적으로 4개의 알파벳으로 계산되지만 이는 학습 과정에 따라 다른 길이로 결정될 수 있음.

 

Transformer 아키텍쳐

- RNN (Recurrent Neural Network)이나 CNN (Convolutional Neural Network)과는 달리, self-attention mechanism을 기반으로 하여 입력 시퀀스의 모든 위치에 대해 독립적으로 처리 가능.
- 이를 통해 문장 내 토큰 간의 의존성을 높은 수준으로 모델링할 수 있음.
- 크게 두 가지의 요소로 구성.
   
   1. Encoder : 입력 시퀀스를 입력받아, 각 토큰의 임베딩 벡터를 생성, self-attention과 feedforward network를 통해 정보를 압축
   2. Decoder : Encoder에서 생성된 입력 시퀀스의 정보를 바탕으로 다음 토큰을 생성하는 과정을 수행.
   
- Transformer는 self-attention mechanism을 사용해 입력 시퀀스 내의 각 토큰을 모델링 함. 이를 통해 토큰 간의 관계를 직접적으로 모델링하며, 입력 시퀀스의 길이에 민감하지 않을 수 있음.
- 또한, Multi-Head Attention을 사용해 여러 개의 self-attention을 병렬로 수행함으로써 모델의 표현력을 향상시키고 학습 속도를 높임.
- 또한, Positional Encoding을 사용하여 입력 시퀀스 내 토큰의 위치 정보를 반영. 이를 통해 토큰의 상대적인 위치 정보를 모델링하여, 입력 시퀀스 내에서 각 토큰의 역할을 파악하는데 도움을 줌.
 

OpenAI 토큰이란?

GPT-3.5 및 GPT-4와 같은 OpenAI의 고급 언어 모델 영역에서 "토큰"이라는 용어는 일반적으로 텍스트에 함께 나타나는 일련의 문자를 나타냅니다. 이러한 모델은 이러한 토큰 간의 통계적 관계를 이해하고 예측하도록 설계되었습니다.

텍스트를 토큰으로 분할하는 프로세스는 모델마다 다를 수 있습니다. 예를 들어, GPT-3.5와 GPT-4는 이전 버전과 다른 토큰화 프로세스를 사용하므로 동일한 입력 텍스트에 대해 다른 토큰이 생성됩니다.

일반적으로 하나의 토큰은 영어 텍스트의 4자에 해당하며, 이는 단어의 약 3/4에 해당합니다. 따라서 100개의 토큰은 대략 75단어와 같습니다.

예를 들어, "OpenAI는 위대하다!"라는 문장을 생각해 봅시다. 이 문장에서 토큰은 다음과 같이 분류할 수 있습니다.

[“Open”, “AI”, “ is”, “ great”, “!”]

이들 각각은 토큰으로 간주됩니다. 정확한 분석은 모델에서 사용하는 특정 토큰화 프로세스에 따라 달라질 수 있습니다. 예를 들어, 일부 모델은 "OpenAI"를 단일 토큰으로 취급할 수 있는 반면 다른 모델은 "Open"과 "AI"로 나눌 수 있습니다. 마찬가지로 공백과 문장 부호는 종종 별도의 토큰으로 처리됩니다. 따라서 이 예제에는 "Open", "AI", "is", " great" 및 "!"의 5개 토큰이 있습니다.

다음은 토큰 길이의 개념을 파악하기 위한 몇 가지 유용한 지침입니다.

  • 토큰 1개는 영어로 약 4자와 같습니다.
  • 토큰 1개는 대략 단어의 3/4에 해당합니다.
  • 토큰 100개는 약 75단어에 해당합니다.

또는

  • 1-2 문장은 대략 30 개의 토큰에 해당합니다.
  • 단락은 약 100개의 토큰입니다.
  • 약 1,500단어는 2,048개의 토큰에 해당합니다.

토큰 인코딩

토큰 인코딩은 자연어 처리(NLP) 및 기계 학습의 핵심 단계입니다. 원시 텍스트를 기계가 이해하고 작업할 수 있는 형식(일반적으로 고정 치수의 숫자 벡터)으로 변환하는 프로세스입니다.

서로 다른 토큰 인코딩은 서로 다른 모델에 연결되어 있으므로 텍스트를 토큰으로 변환할 때 어떤 모델이 사용될지 인식할 수 있도록 이 점을 염두에 두어야 합니다.

텍스트 문자열(예: )과 인코딩(예: )이 주어지면 토크나이저는 텍스트 문자열을 토큰 목록(예: )으로 분할할 수 있습니다.

"OpenAI is great!""cl100k_base"["Open", "AI", " is", " great", "!"]

다음 표는 토큰 인코딩 방법과 OpanAI 모델 간의 매핑을 보여줍니다.

토큰화

OpenAI의 맥락에서 토큰화는 텍스트를 토큰이라고 하는 더 작은 조각으로 분할하는 방법입니다. 종종 텍스트에 함께 나타나는 일련의 문자인 이러한 토큰은 GPT-3.5 및 GPT-4와 같은 OpenAI의 대규모 언어 모델에서 텍스트를 처리하고 이해하는 데 사용됩니다.

Tiktoken은 OpenAI에서 만든 Python 기반 도구입니다. 기본적으로 GPT-4와 같은 OpenAI 모델과 함께 작동하도록 설계된 빠른 BPE(Byte Pair Encoding) 토크나이저입니다. Tiktoken의 주요 기능은 텍스트를 토큰으로 알려진 더 작은 조각으로 나눈 다음 모델이 텍스트를 처리하고 이해하는 데 사용하는 것입니다.

오픈 소스 도구인 Tiktoken은 다음 명령을 사용하여 PyPI에서 쉽게 설치할 수 있습니다. JavaScript 환경에서 사용할 수 있는 커뮤니티 지원 버전도 있습니다.

pip install tiktoken

Tiktoken의 주요 기능 중 하나는 BPE의 작동에 대한 통찰력을 제공하고 사용자가 토큰화 프로세스를 시각화 할 수 있도록 하는 교육용 하위 모듈입니다. 또한 Tiktoken은 유연하며 사용자가 새로운 인코딩에 대한 지원을 추가할 수 있습니다.

한 가지 예는 다음과 같습니다.

import tiktoken
encoding = tiktoken.get_encoding("cl100k_base")
# To automatically load the correct encoding for a given model name
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
print(encoding.encode("OpenAI is great!"))

출력은 다음과 같습니다.

[5109, 15836, 374, 2294, 0]

(본 내용은 I/Net에서 찾은 자료를 모아 정리한 내용입니다) 

기업 홍보를 위한 확실한 방법
협회 홈페이지에 회사정보를 보강해 보세요.