레플리
글 수 282

한글전용 초거대AI가 필요한 이유

조회 수 622 추천 수 0 2023.03.18 23:23:54


https://www.facebook.com/100001367485725/posts/5976926832362840/?mibextid=Nif5oz

많은 분들이 언어의 경계는 없어졌다고들 말씀들 하시는 데 기본적으로 tokenizer부터 영어에 비해 비 메이저 언어는 손해를 볼 수 밖에 없습니다. 이는 Byte-pair encoding 특성에 따라 어쩔 수 없는 부분인데요.

실제 대량의 코퍼스를 차지하는 언어를 중심으로 tokenizer를 최적화하다보니 tokenizer가 영어에 최적화되고 비 주류 언어는 UNK를 최소화하려면 자소단위까지 쪼개야 합니다. 그래서 아래 그림과 같이 영어는 29 character에 7 token, 이에 비해 한국어는 16 character에 36 token이 배정됩니다. 이 얘기는 위의 예시 기준으로하면 유효 context window의 크기도 10배 이상 손해보고 (그래서 앞글에 대한 이해도 덜 하게 되고) 디코딩 속도 또한 10배 이상 손해본다는 뜻입니다. 이것이 바로 한국어 중심의 한국형 초거대 AI가 필요한 중요한 이유랍니다. 한국어 중심의 초거대AI는 기본적으로 한국어에 더 최적화된 token을 배정하게 됩니다.

물론 코퍼스양에 따른 언어 사용문화와 법적인 내용에 대한 정확성 차이는 당연한 부분이겠지요.

정보 공유 주신 김강모 님께 감사!

https://platform.openai.com/tokenizer?view=bpe



-------------

GPT-3가 한글을 자모단위로 토크나이즈하는지 몰랐네요. 그래서 한글이 영어보다 느린 걸까요. GPT-2에서는 BPE하면 기본적으로 캐릭터단위였는데요. 자주 사용되는 토큰은 여러 캐릭터가 하나로 합쳐지기도 하고요.

GPT-3은 다중언어를 지원하느라 한글을 그냥 자모로 처리하는 것 같습니다. 전체 토큰의 수가 너무 많아져도 성능이 떨어질 수 있으니까요. 이것만으로도 한글전용 LLM이 필요한 큰 이유가 되겠네요.
엮인글 :

깊은바다

2023.03.18 23:43:44
*.111.15.183

GPT-4 토크나이저는 기존 5만에서 10만개로 증가했다고 합니다.

 

-------

 

초치는 것 같아 죄송합니다만 정확한 정보를 위해 댓글 남깁니다. 최근 OpenAI 내부에 토크나이저 업데이트가 있었습니다. 토크나이저 버전은 cl_100k로 보켑 사이즈 10만에 multilingual BPE로 돈 것처럼 보입니다. 더 자세하게 테스트하시려면 OpenAI의 tiktoken 레포지토리를 활용하시면 좋습니다. 해당 토크나이저로 토크나이징해보면 한국어 형태소들이 붙어서 토크나이징 되는 걸 볼 수 있습니다.
https://github.com/openai/tiktoken/blob/82facf911fe41f39f13565be73899eab1e1761ef/tiktoken/model.py#L9

깊은바다

2023.03.20 14:32:10
*.32.218.234

자모가 아니라 byte 단위로 토크나이즈한다는 의견도 있습니다.

 

-------

 

저도 이 부분이 궁금해서 조금 더 살펴보니 한글을 자모단위로 토크나이즈하지는 않았습니다. 글자 "안"을 예시로 설명드리겠습니다.

 

1. 글자 "안"을 토크나이징하면 [31495, 230] 이렇게 2개의 토큰이 됩니다(숫자 1개가 토큰 1개). 토크나이징은 https://tiktokenizer.vercel.app/ 여기서도 하실수 있고, OpenAI Cookbook 쥬피터 노트북으로도 하실 수 있습니다(https://github.com/.../How_to_count_tokens_with_tiktoken...)

 

2. 이 각각의 숫자(토큰)에 해당하는 값은 보캡맵에 지정돼있는데요. tiktoken 리포지토리에 보면 이 보캡맵 URL 을 찾을 수 있습니다. 이 주소인데 직접 다운로드 받아서 열어보실 수 있습니다(보캡 사이즈 그대로 약 10만 라인입니다). https://openaipublic.blob.core.windows.net/.../cl100k...

 

3. 31495 에 대응하는 값을 찾아보면 "7JU=" 이고 230은 "iA==" 입니다. 이 값들은 base64 인코딩된 값들인데요, base64 디코딩을 하면 각각 "EC 95", "88"(헥사값들) 입니다.

 

4. 이 값들은 "안"이라는 글자를 UTF-8로 인코딩했을 때의 값입니다. 즉, "안"을 UTF-8로 인코딩하면 3바이트 "EC 95 88"로 인코딩됩니다.

 

다시 거꾸로 말씀드리면, 1) 한글은 먼저 UTF-8로 인코딩합니다. 그래서 "안"은 "EC 95 88"로 인코딩됩니다. 2) 이 인코딩된 값을 보캡맵을 뒤져서 토크나이징합니다. "EC 95" 토큰이 있으므로 첫 2바이트가 1토큰이 되고, 뒤에 1바이트가 또 하나의 토큰이 됩니다. 즉, Byte Level BPE가 사용되고 있습니다. BBPE 를 쓰면 보캡 사이즈는 이론상 256개만으로도 충분하지만 여러 이유로(비영어권 언어 텍스트의 토큰 수를 줄이는 것도 이유이지 않을까 추측합니다만 정확한건 모르겠습니다) Byte 들을 머지해서 2바이트 단어(토큰)들이 많이 추가되어 있습니다.

 

그래서 결론은 한글을 자음, 모음 단위로 토크나이즈하는게 아니라 UTF-8인코딩된 3바이트 값들을 임의로 자른 단위로(어떤 경우에는 1바이트가 1토큰, 어떤 경우에는 처음 2바이트가 1토큰) 토큰화됩니다. 고석현 그리고 이것이 https://tiktokenizer.vercel.app/ 같은 사이트들에서 토크나이징된 한글 값이 깨져서 보이는 이유입니다. 이렇게 바이트를 자르고 나면 이렇게 잘린 1바이트나 2바이트 값들은 더 이상 유효한 UTF-8 인코딩 값이 아니기 때문입니다. UTF-8 인코딩 규칙에서는 사용하려는 바이트가 2개가 넘을 때, 첫 바이트에 몇바이트를 사용하는지 알려주는 비트를 먼저 넣습니다. "안"의 경우 3바이트이므로 첫 바이트는 "1110"으로 시작하게 되는데요, 여기서 이렇게 3바이트를 사용한다고 했는데 2바이트나 1바이트가 하나의 토큰이 되었으므로 이 값들은 더 이상 유효한 UTF-8 인코딩이 아니게 돼버리고, 토크나이징 웹 사이트들에서 깨져서 표시되게 되는 것입니다.

List of Articles
제목 글쓴이 날짜sort 조회 수
클로바X의 사용량 제한 - QPM과 TPM 깊은바다 2024-04-01 83
Pi를 만든 Inflection AI, MS로 대거 이직한 이유 깊은바다 2024-03-25 104
LLaMA나 Mistral이 계속 무료로 유지될 수 있을까 깊은바다 2024-03-05 227
GPT-3.5와 클로바X 가격 비교 file 깊은바다 2024-02-25 263
OpenAI, 성능은 높아지고 가격은 싸진 새로운 모델 공개 file 깊은바다 2024-01-26 319
AI 휴대용 기기 R1을 만든 Rabbit의 대표 Jesse Lyu 깊은바다 2024-01-12 246
화면을 보고 스마트폰 앱 사용방법을 배우는 모델 - AppAgent file 깊은바다 2024-01-08 298
LLM의 새로운 기법 - Merge와 DPO file 깊은바다 2024-01-02 1121
업스테이지 SOLAR 10.7B에서 사용한 DUS 모델 확장 방법 file 깊은바다 2023-12-27 444
죽은 아들의 AI 아바타를 만든 중국의 부모 file 깊은바다 2023-12-21 178
Private sLLM - 어떻게 만들고 어떻게 배포할까? file 깊은바다 2023-12-18 349
GPT-4가 내 여자친구보다 나를 더 잘 알까? file 깊은바다 2023-12-12 166
FSM과 생성 에이전트의 차이점 깊은바다 2023-11-22 179
RAG를 사용한 페르소나 챗봇 - ChatHaruhi file 깊은바다 2023-10-17 688
LLM Multi Agent: Customer Service를 기깔나게 자동화하는 방법 file [1] 깊은바다 2023-10-09 630