레플리
글 수 283

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

조회 수 629 추천 수 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
GPT-3.5와 클로바X 가격 비교 file 깊은바다 2024-02-25 272
Gluon으로구현해보는 한영기계번역 모형 깊은바다 2018-04-13 275
ChatGPT 원티드 플러그인 사용 화면 file 깊은바다 2023-04-07 278
사진을 인식할 수 있는 ChatGPT 멀티모달 버전 공개 file 깊은바다 2023-09-26 279
오픈소스 LLM이 ChatGPT를 대체할 수 있을 깊은바다 2023-05-05 295
LLM의 미래는 자율행동과 멀티 에이전트 깊은바다 2023-08-30 300
화면을 보고 스마트폰 앱 사용방법을 배우는 모델 - AppAgent file 깊은바다 2024-01-08 301
Generative AI — 시장 구조, 기회, moat에 대한 몇 가지 생각 깊은바다 2023-06-27 302
Koko 심리상담 서비스에서 GPT-3 대답 추천 기능을 도입 file 깊은바다 2023-01-11 304
네이버 케어콜의 장기기억 기능 - 맞춤 케어를 위한 기억하기 챗봇 file 깊은바다 2023-03-01 308
LLM의 시대에도 자연어처리를 배워야할까 깊은바다 2023-05-29 316
ChatGPT 톺아보기 - 인공지능의 역사부터 신경망, 초거대AI, ChatGPT까지 file 깊은바다 2023-02-01 318
GenAI 컨퍼런스 대담 요약 - 어떻게 AI가 비즈니스를 재편할 것인가 깊은바다 2023-03-08 319
GPT-3.5와 하이퍼클로바의 한국어 대결 file 깊은바다 2023-05-12 319
노암 촘스키의 ChatGPT 기고문 깊은바다 2023-03-09 322