레플리
글 수 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
책 한권을 입력으로 받는 구글의 딥러닝 모델 - Reformer 깊은바다 2020-01-17 622
GPT2를 테스트해볼 수 있는 사이트 - Talk to Transformer file 깊은바다 2020-06-05 619
페르소나를 가진 대화 학습 - Personalizing Dialogue Agents file 깊은바다 2018-09-19 618
문장 입력 이진분류 모델 레시피 - 영화평점 학습 [3] 깊은바다 2018-04-04 613
이성에게 말을 거는 작업멘트를 GPT-3로 생성 file 깊은바다 2021-03-24 587
구글의 딥러닝 대화 모델 - LaMDA 깊은바다 2021-06-13 587
인공지능과 함께 글쓰기! 창의 AI x Bookathon 대회 - GPT2 깊은바다 2019-11-30 581
일상대화 딥러닝 모델들을 쉽게 실행할 수 있는 Openchat 깊은바다 2021-06-01 569
죽은 약혼자를 챗봇으로 살려낸 남자 - Project December 깊은바다 2021-07-27 561
딥러닝을 이용한 자연어처리 깊은바다 2018-05-17 560
인플루언서의 목소리 클론과 GPT-4로 만든 아바타 서비스 - Caryn.ai 깊은바다 2023-05-11 559
2018 Amazon Prize에서 우승한 Gunrock 소셜봇 file 깊은바다 2018-12-26 557
네이버의 초거대모델인 HyperCLOVA 논문 file 깊은바다 2021-09-13 556
GPT2의 1.5B 모델 공개 깊은바다 2019-11-08 554
좋은 응답을 골라내는 모델 만들기 - 핑퐁의 답변매칭 알고리즘 깊은바다 2020-12-10 553