ChatGPT가 한국어도 잘하는데 한국어 언어모델을 따로 만들 필요가 있을까

singleheart·2023년 7월 23일
0

ChatGPT를 사용해 보면 한국어를 꽤 잘합니다.
비록 한국에 대한 지식이나 최신 유행에 대한 정보가 부족할 때도 있지만 옛날 번역기를 보듯이 말 자체를 이해하지 못하는 일은 거의 없습니다.
OpenAI에서 API를 제공하니까 한국 기업들도 자연스럽게 ChatGPT API를 이용해서 서비스를 개발하고 있습니다.
마이크로소프트의 대규모 투자에 힘입어 모델의 성능도 GPT4를 넘어 계속 발전할 것입니다. 만약 영어 서비스를 개발한다면 대안이 없을 것입니다.

한국어에서도 ChatGPT가 최선일까요? 한국어로 서비스하는 기업들도 OpenAI의 다국어 모델을 사용하면 충분할까요?
ChatGPT를 한국어로 쓸 때에는 숨은 비용이 있습니다 영어에 비해 한국어는 4.5배나 더 비쌉니다.
ChatGPT를 사용하면서 같은 내용이라도 영어는 빠른데 한국어는 느린 현상을 겪은 경험들이 있으실 겁니다.
ChatGPT에서 글자 개수가 같다면 영어를 4.5배 더 빠르게 생성하기 때문입니다.
참고로 프랑스어는 영어의 1.3배 정도로 차이가 적은 편이고, 일본어는 5.2배, 중국어는 6.2배, 미얀마어는 8.6배에 달합니다.

물론 한국어의 1글자와 영어의 1글자는 똑같지 않습니다. 한글은 초성 중성 종성 세 글자가 모여서 한 글자를 이루니까요.
그러나 한국어 특화 모델에서는 여러 글자가 한 토큰에 대응할 수 있습니다.
우선 토큰이 무엇인지 설명을 드려야겠네요. 언어 모델에서 토큰(token)이란 모델이 처리하는 최소 단위의 입력 요소입니다.
일반적으로 토큰은 단어, 구두점, 숫자 등과 같은 텍스트의 일부분을 나타냅니다.
언어 모델은 텍스트를 그대로 입력받지 않고, 텍스트를 토큰으로 분할하는 토큰화(tokenization) 과정을 거친 결과를 입력받고요, 이를 수행하는 프로그램을 토크나이저라고 합니다.

흔한 인삿말인 "안녕하세요"를 예로 들어보겠습니다.

OpenAI의 토크나이저를 이용하면 "안녕하세요" 5글자가 14토큰으로 나타납니다.

한국어의 경우는 어떨까요? 아래는 SK텔레콤에서 공개한 KoGPT2에서 사용하는 토크나이저입니다:

이 단어는 토큰 4개로 처리되는 것을 볼 수 있습니다. OpenAI의 토크나이저와 3배가 넘는 차이가 납니다.

단어 하나는 예외일 수도 있으니 좀 더 긴 예시를 보겠습니다. 아래는 데보션 매니페스토인데요, 토큰 수를 세어 보겠습니다.

여기, 개발자들을 위한 지식의 바다가 있습니다. 우리는 당신이 끝없이 펼쳐진 이 바다 위에서 소통과 공유를 통해 보이지 않던 길을 찾아가길 원합니다.
새로운 시대라는 높은 파도를 만나도 두려울 것 없는 실력 혁신이라는 신대륙을 발견하는 능력 그리고 우리는 믿습니다. 그 실력이 보다 나은 세상을 만들 거라고

OpenAI:

171글자에 361토큰입니다

KoGPT2:

171글자에 62토큰입니다
OpenAI와 비교해 보면 5.8배 차이가 나는 것을 볼 수 있습니다.

앞으로 OpenAI와 구글에서 더욱 좋은 언어 모델을 만들 것이고 한국어 성능도 점점 발전할 것입니다.
그러나 이들의 모델은 영어 중심으로 다국어를 지원하기 때문에 한국어 처리속도 저하가 발생합니다.
미래에 토크나이저 등 다국어 지원 기술이 발전하여서 장벽이 제거될 수도 있으나 이 글이 처음 작성된 2023년 4월 현재 시점에서는 아직 언어에 따른 차이가 있습니다.

한국어로 서비스하는 기업들도 네이버하이퍼클로바 등 국내 서비스를 이용하면 OpenAI API를 이용할 때보다 몇 배의 이용료를 절감할 수 있습니다.
물론 비슷한 성능이 나올 때의 이야기입니다. 앞의 링크에서 보았듯이 서유럽에서는 그렇게 큰 차이는 나지 않겠지만 동아시아 각국에서는 각자의 언어 모델에 대한 수요가 있을 것입니다.

GPT4 업데이트

GPT4, 엄밀히 말해서 GPT 3.5 터보부터는 OpenAI에서 사용하는 토크나이저가 변경되어서 한국어 처리가 개선되었습니다.
그래서 새 토크나이저로 테스트를 진행하였습니다. 방법이 궁금하신 분은 이 페이지를 참고하세요

"안녕하세요"의 경우

>>> import tiktoken
>>> encoding = tiktoken.get_encoding("cl100k_base")
>>> s = "안녕하세요"
>>> len(encoding.encode(s))
5

14토큰에서 5토큰으로 줄어들었습니다. 아직 KoGPT2보다는 1토큰이 많네요.

데보션 매니페스토를 넣어보면 어떨까요?

>>> s = "여기, 개발자들을 위한 지식의 바다가 있습니다. 우리는 당신이 끝없이 펼쳐진 이 바다 위에서 소통과 공유를 통해 보이지 않던 길을 찾아가길 원합니다. 새로운 시대라는 높은 파도를 만나도 두려울 것 없는 실력 혁신이라는 신대륙을 발견하는 능력 그리고 우리는 믿습니다. 그 실력이 보다 나은 세상을 만들 거라고"
>>> len(encoding.encode(s))
160

361토큰에서 160토큰으로 줄었습니다. 그래도 KoGPT2의 62토큰보다 2.6배 정도 많습니다.

앞으로 OpenAI와 SK텔레콤뿐만 아니라 네이버 등 여러 곳에서 꾸준히 토크나이저를 개선할 테니 모델의 학습 및 추론 속도도 점점 개선될 것입니다.
(물론 추론 속도에는 다른 여러 요소가 영향을 줍니다만, 토크나이저를 개선하면 효과를 직접 볼 수 있습니다)

추가 정보

이 문제를 진지하게 다룬 Do All Languages Cost the Same? Tokenization in the Era of Commercial Language Models 논문도 나왔습니다.

Bard2에 대한 기대

위 논문과 별개로, 구글 바드2가 한국어를 공식 지원한다니 아마 토크나이징 문제는 바드2에서는 해결됐을 가능성이 높습니다. Palm2 API 모델명인 models/text-bison-001로 데보션 매니페스토 예시를 테스트해 보니 88토큰이면 충분했습니다. 구글에서는 SentencePiece 토크나이저를 주로 쓰는데, 보통 vocab size를 크게 해서 학습시키기 때문에 한글이나 한자도 많이 투입해서 학습시킵니다. 일본어도 지원하니까 한자를 더욱 많이 넣었을 것입니다. vocab size를 늘리면 메모리를 많이 차지하지만 속도 저하는 미미하기 때문에 효과적인 방법입니다. 다만 저희가 실험한 바로는 vocab size를 무작정 늘리면 오히려 성능이 감소하는 현상이 있었습니다. 구글에서는 아마 실험을 통해 적절한 수준을 찾았을 것 같습니다.

profile
개발자

2개의 댓글

comment-user-thumbnail
2023년 7월 23일

글 잘 봤습니다.

1개의 답글