N-gram, 트랜스포머 시대에도 알아야 할 가장 단순한 언어 모델

N-gram 은 앞 N-1 개 단어만 보고 다음 단어를 확률로 맞추는 가장 단순한 통계 언어 모델이다. 오늘날 LLM 의 출발점으로 불리며, 지난 50여 년 동안 자연어 처리 기술의 기반 역할을 해왔다. 트랜스포머가 가져온 변화를 이해하려면 이 출발점부터 알아야 한다.

처음 N-gram 을 만난 건 2020년이었다. 자연어 처리를 막 공부하던 시기였고, BERT가 한창 화제였지만 교과서는 여전히 N-gram부터 시작했다. 단순한 확률 계산만으로 다음 단어를 예측한다는 점이 흥미로웠고, 동시에 왜 결과가 자주 어색했는지도 빠르게 와닿았다.

N-gram 은 어떻게 작동하나

N-gram 의 작동 원리, 토큰·마르코프 가정·카운트 학습을 한 장으로 정리한 카드

연속된 N 개의 토큰

N-gram은 연속된 N개의 토큰 묶음을 의미한다. 토큰은 문자일 수도, 음절일 수도, 단어일 수도 있다. N 이 1 이면 유니그램, 2 면 바이그램, 3 이면 트라이그램이라고 부른다.

“오늘 날씨가 좋다”라는 문장을 단어 단위로 쪼개면 바이그램은 (“오늘”, “날씨가”), (“날씨가”, “좋다”)가 된다. 문자 단위로 쪼개면 (“오”, “늘”), (“늘”, ” “) 식이다. 검색 인덱스, 자동완성, 언어 모델 모두 이 토큰 묶음을 쓴다.

마르코프 가정으로 줄인 계산

언어 모델의 목표는 한 문장이 나타날 확률을 구하는 것이다. 이론적으로 계산하면 모든 앞 단어를 고려해야 한다. 문장이 길어질수록 계산량도 급격히 증가한다.

N-gram 은 여기서 한 가지 가정을 한다. 다음 단어는 바로 앞 N-1 개 단어에만 의존한다. 이를 마르코프 가정이라고 한다. 가정을 받아들이면 확률 계산이 단순한 카운트로 줄어든다.

카운트만으로 끝나는 학습

말뭉치에 “In Korea, more”가 1,000번, “In Korea, more than”이 600 번 나타났다면,

P(than | In Korea, more) = 600 / 1000 = 0.6 이다.

별도의 신경망 학습 없이, 등장 빈도만 계산해 모델을 만들 수 있다. (출처)

def bigram_prob(w_prev, w_next, counts):
    pair = counts.get((w_prev, w_next), 0)
    total = counts.get(w_prev, 0)
    return pair / total if total else 0.0

섀넌 1948, N-gram 의 출발선

섀넌 1948년 논문에서 시작해 50년간 자연어 처리를 받친 N-gram 의 역사 카드

정보 이론에서 시작

N-gram은 클로드 섀넌이 1948 년 “A Mathematical Theory of Communication” 논문에서 처음 소개했다. 정보 이론의 시작점이자 통계 언어 모델의 시작점이다. (출처)

섀넌은 이어 1951 년 “Prediction and Entropy of Printed English” 논문에서 영어 N-gram 모델을 본격적으로 논의했다. 영문 텍스트의 엔트로피를 측정하려면 N-gram 으로 다음 글자를 예측해야 했다. (출처)

50 년을 받친 골격

1950년대 이후 음성 인식, 기계 번역, 검색, 맞춤법 검사까지 자연어 응용 거의 전부가 N-gram을 활용 했다. 대규모 말뭉치만 있으면 N-gram으로 그럴듯한 결과가 나왔다. (출처)

Google 도 한때 Books N-gram Viewer 서비스로 출판물 속 단어 빈도 변화를 시각화했다. 구현이 단순하다는 점이 가장 큰 장점이었다.

트랜스포머와 N-gram, 결정적 차이

고정 윈도우 N-gram 과 어텐션 트랜스포머의 결정적 차이를 비교한 카드

N-gram 의 한계

하지만 N-gram은 구조 자체에서 한계를 가진다. 앞 N-1 개 단어만 본다는 말은, N 보다 멀리 떨어진 문맥은 신경쓰지 않는 다는 뜻이다. N 을 5 나 7 로 늘리면 어떨까. 늘릴수록 학습 데이터에서 그 조합이 한 번도 등장하지 않은 케이스가 많아진다. 카운트가 0 이 되면 확률도 0 이다. 학습 데이터에 없는 문장은 제대로 처리하기 어렵다.

스무딩 기법(Kneser-Ney 등)으로 보정하지만, 본질적 한계는 그대로 남는다. 멀리 떨어진 단어 사이의 의존성을 포착하지 못하는 단점이 있다.

어텐션(attention)이 바꾼 게임

2017 년 트랜스포머가 등장하면서 언어 모델의 접근 방식이 크게 달라졌다. 어텐션은 문장 전체에서 어떤 단어가 어떤 단어를 봐야 할지 학습으로 정한다. 기존의 고정된 마르코프 가정에서 벗어난 것이다. 길이 한계가 완전히 사라진 건 아니지만, “N-1 개”라는 N-gram의 한계는 해소 되었다.

대규모 데이터셋에서 트랜스포머가 N-gram을 압도하는 건 당연한 결과다. 다만 작은 데이터셋에서는 여전히 Add-lambda 같은 고전 N-gram 추정 기법이 트랜스포머보다 우월하다는 EMNLP 2024 연구도 있다. (출처)

트랜스포머 안에 N-gram이 있다

트랜스포머가 N-gram 언어 모델을 정확히 표현할 수 있다는 사실도 수학적으로 증명됐다. 흥미로운 결과다. 즉 트랜스포머는 N-gram 을 포함하는 더 강한 모델이다. (출처)

N-gram 은 사라진 기술이 아니라 현대 언어 모델의 기반 개념으로 이어지고 있다.

LLM 시대에도 쓰이는 N-gram

LLM 시대에도 N-gram 이 쓰이는 검색 자동완성·BLEU·베이스라인 사례 카드

검색 자동완성

ElasticSearch 의 자동완성은 지금도 Edge N-gram 필터로 구현한다. “클로”까지만 쳐도 “클로드”가 추천되는 자동완성 기능이 Edge N-gram 기반으로 동작한다.

MySQL InnoDB 의 전문 검색 인덱스도 N-gram 파서를 쓴다. 한국어·일본어·중국어처럼 단어 경계가 불분명한 언어에서 문자 단위 N-gram 으로 토큰을 만든다. (출처)

평가 지표 BLEU

기계 번역의 표준 평가 지표 BLEU 가 N-gram 기반이다. 모델이 생성한 문장과 정답 사이의 N-gram 겹침 비율을 계산한다. LLM 시대에도 BLEU 는 대표적인 번역 성능 평가 지표로 계속 사용되고 있다.

베이스라인과 해석

큰 모델을 평가할 때 가장 단순한 비교 기준이 N-gram 이다. 새 모델이 기본적인 N-gram 기준보다 성능이 낮다면 실용성이 부족하다고 판단하기도 한다. 트랜스포머의 학습 결과를 해석하는 실험에서도 N-gram 이 기준점으로 쓰인다.

2020년, 처음 N-gram 을 만난 기억

2020년에 N-gram 을 처음 만났을 때 인상적이었던 건 단순함이었다. 별도의 신경망 학습 없이 단어 빈도만 계산하면 모델이 완성됐다. GPU도 긴 학습 시간도 필요 없었다.

한계도 곧 느껴졌다. 트라이그램은 학습 말뭉치에 자주 같이 등장한 단어를 반복적으로 선택하는 경향이 있다. 문맥이 살짝만 달라져도 같은 답이 나온다. 당시 직접 실습해 보면서 왜 트랜스포머 같은 구조가 필요했는지를 자연스럽게 이해할 수 있었다.

LLM 시대에도 N-gram 은 여전히 남아 있다

N-gram은 오래된 기술이지만, 오늘날 LLM을 이해하기 위해 여전히 가장 먼저 알아야 할 언어 모델이다. 검색 자동완성, BLEU, 베이스라인까지 LLM 시대에도 빠지지 않고 등장한다.

자연어 처리를 처음 공부한다면 한 번은 직접 코드로 짜 보면 좋다. 단순한 확률 계산만으로 모델이 동작하는 구조를 직접 경험해 보면, 이후 다른 언어 모델을 이해할 때도 좋은 기준이 된다.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.