GPT에서는 왜 한글이 깨질까?

Bean·2025년 7월 9일
0

인공지능

목록 보기
83/123

들어가며

GPT 같은 대형 언어 모델을 사용할 때 한글이 깨지거나 한자로 출력되는 현상을 경험한 적 있으신가요?
이 문제는 단순한 버그가 아니라, 토크나이저 구조와 인코딩 방식에서 비롯된 구조적인 이유가 있습니다.

특히, GPT와 Google Gemini의 토크나이저 방식의 차이가 이 현상의 핵심 원인입니다.


1. 왜 GPT에서는 한글이 깨질 수 있을까?

1.1. GPT는 Byte-Level BPE를 사용합니다

GPT는 입력 문장을 처리할 때 다음과 같은 과정을 거칩니다:

  1. 입력 문자열 → UTF-8 바이트 시퀀스로 변환
  2. 각 바이트를 하나의 초기 토큰으로 취급
  3. 자주 나오는 바이트 쌍을 병합 (BPE)
  4. 숫자 시퀀스로 변환해 모델에 입력

예를 들어 "가"는 UTF-8에서 0xEA 0xB0 0x80이라는 3개의 바이트로 인코딩됩니다.
이 바이트 중 일부가 잘못 병합되거나, 디코딩 환경이 깨지면, 다음과 같은 일이 발생할 수 있습니다:

문제 상황결과
바이트 일부만 디코딩됨깨진 글자(예: ) 출력
다른 문자 바이트와 섞여 병합됨의도치 않은 문자 (예: 한자, 특수기호 등) 출력
출력 시 디코딩 환경이 UTF-8이 아님전혀 다른 문자셋으로 해석됨 (Latin1, EUC-KR 등)

1.2. GPT는 한자를 일부러 출력하나요?

보통은 아닙니다. 하지만 다음 경우에는 한자가 자연스럽게 등장할 수 있습니다:

  • 입력이 중국어 문맥일 때 → 실제로 한자 생성
  • 바이트 병합이 이상하게 일어나 중국어 코드포인트가 만들어졌을 때
    (예: 0xE4 0xB8 0x80'一')

2. 요약: GPT에서 한글이 깨지는 이유

원인설명
바이트 단위 병합한글은 3바이트 → 병합이 애매하면 잘못된 문자 생성
디코딩 오류출력 환경이 UTF-8이 아니면 깨짐 발생
문자셋 오해다른 문자셋으로 디코딩될 경우 의도치 않은 문자 출력

3. 반면 Google Gemini는?

3.1. SentencePiece 기반: 유니코드 문자 단위 BPE

Google의 모델들(BERT, T5, Gemini 등)은 대부분 SentencePiece 토크나이저를 사용합니다.

  • 입력을 유니코드 문자 단위로 처리
  • "가"는 처음부터 한 글자로 다뤄짐
  • 바이트로 쪼개는 일이 없음 → 병합이나 디코딩 오류 가능성 낮음

➡ 그래서 한글이 깨질 일이 거의 없습니다.


4. GPT vs Gemini 비교 정리

항목OpenAI GPTGoogle Gemini
토크나이저 방식Byte-Level BPE유니코드 문자 기반 BPE / Unigram
시작 단위UTF-8 바이트유니코드 문자
한글 처리 방식바이트로 쪼갠 후 병합처음부터 하나의 글자로 인식
깨짐 가능성상대적으로 있음매우 낮음
대표 토크나이저tiktokenSentencePiece

5. 깨짐을 방지하려면?

  • 항상 UTF-8 환경에서 텍스트를 인코딩/디코딩
  • 필요 시 .encode('utf-8').decode('utf-8')로 보정
  • 최신 GPT 토크나이저(tiktoken) 또는 GPT-4 사용
  • 다국어 처리에 민감하다면 Google Gemini 활용 고려

6. 마무리 요약

GPT의 바이트 기반 토크나이저는 범용성이 뛰어나지만, 한글 같은 다바이트 문자 처리에서 깨짐이 발생할 수 있습니다.
반면 Gemini는 유니코드 문자 단위로 처리하기 때문에 한글 깨짐 가능성이 현저히 낮습니다.


profile
AI developer

0개의 댓글