레플리
글 수 281

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

조회 수 613 추천 수 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-4로 만든 아바타 서비스 - Caryn.ai 깊은바다 2023-05-11 531
딥러닝을 이용한 자연어 처리 깊은바다 2018-08-01 523
딥러닝 학습으로 배우는 대화 인공지능 - 구글 듀플렉스 깊은바다 2018-05-09 515
꼼꼼하고 이해하기 쉬운 ELECTRA 논문 리뷰 깊은바다 2020-05-15 512
검색기반 거대모델인 딥마인드의 RETRO 깊은바다 2021-12-20 510
ChatGPT는 새로운 검색엔진이 될까 file 깊은바다 2022-12-06 506
카카오의 딥러닝 기반 형태소 분석기 깊은바다 2018-11-30 497
ChatGPT의 오픈소스 버전 - ColossalChat file 깊은바다 2023-03-30 497
RAG 아키텍처를 위한 임베딩 모델의 선택에 대해 깊은바다 2023-09-14 496
썰로 푸는 NLP 깊은바다 2018-10-11 494
아카라이브 AI 언어모델 로컬 채널 file 깊은바다 2023-05-23 488
텐서플로에서 사전 훈련된 임베딩을 사용하는 예제 깊은바다 2019-02-02 480
주석을 프로그램으로 변환하는 GPT 모델 깊은바다 2020-06-21 478
아마존, End-to-End 딥러닝 기술을 고객서비스에 챗봇에 적용 깊은바다 2020-03-17 472
GPT-2를 사용한 텍스트 압축 기법 file 깊은바다 2021-02-19 471