본문 바로가기
컴퓨터공학 + HCI/AI

LM(언어모델) 기본 구조 - 다음 단어 예측(Next Word Prediction)

by Tay Kim 김태희 2026. 1. 5.

현대 생성형 AI의 근간이 되는 언어 모델(Language Model, LM)의 핵심 원리를 파이썬 코드를 통해 간단히 직접 구현해 보며 살펴보겠습니다.

챗GPT와 같은 거대 언어 모델(Large LM, LLM)이 마치 인간처럼 대화하는 모습을 보면 그 구조가 매우 복잡할 것 같지만,

기저에 흐르는 논리는 의외로 명확합니다.

기본적인 구조는 '주어진 텍스트 다음에 올 최적의 단어를 확률적으로 예측하는 것'입니다.

 

1. 언어 모델(Language Model)이란?

언어 모델이란 문장(단어의 나열)에 확률을 할당하는 모델을 말합니다.

쉽게 말해, 특정 단어들이 나열되었을 때 그다음에 어떤 단어가 오는 것이 가장 자연스러운지를 수학적으로 계산하는 장치입니다.

 

우리가 스마트폰으로 문자를 보낼 때 나타나는 '자동 완성' 기능이나, 구글 검색창의 '연관 검색어' 서비스가 바로 이 다음 단어 예측 기술의 실생활 예시라고 할 수 있습니다. 현대의 LLM은 이 예측의 정확도와 맥락 파악 능력을 비약적으로 상승시킨 결과물입니다.

 

2. 파이썬으로 구현하는 기초 언어 모델: 딕셔너리 기반 예측

실제 상용화된 모델은 수조 단위의 데이터를 학습한 거대 신경망을 사용하지만, 그 구조적 원리를 이해하기 위해 딕셔너리(Dictionary) 자료형을 활용한 '초미니 언어 모델'을 구현해 보겠습니다.

 

import random

# 1. 코퍼스(Corpus, 말뭉치) 데이터 구축
# 실제 모델은 방대한 인터넷 데이터를 학습하지만, 여기서는 직접 관계를 정의
word_relationship_db = {
    "나는": ["밥을", "학교에", "오늘", "파이썬을", "내일"],
    "밥을": ["먹었다", "맛있게 먹었다", "주문했다", "남겼다"],
    "학교에": ["갔다", "지각했다", "도착했다", "가고 있다"],
    "오늘": ["날씨가", "기분이", "공부를", "점심에"],
    "파이썬을": ["공부한다", "배우고 있다", "활용한다", "작성한다"],
    "날씨가": ["매우 좋다", "흐리다", "춥다", "변덕스럽다"],
    "기분이": ["상쾌하다", "최고다", "조금 우울하다"],
}

def generate_text(seed, max_tokens=5):
    """
    입력된 단어를 바탕으로 다음 단어를 확률적으로 생성하는 함수
    """
    result = [seed]
    current_word = seed

    for _ in range(max_tokens - 1):
        # 학습된 DB 내에 현재 단어가 존재하는지 확인
        if current_word in word_relationship_db:
            candidates = word_relationship_db[current_word]
            # 후보군 중 하나를 무작위로 선택 (확률 기반 생성 시뮬레이션)
            next_token = random.choice(candidates)
            result.append(next_token)
            current_word = next_token
        else:
            # 다음 단어 정보가 없는 경우 생성 중단
            break
            
    return " ".join(result)

# 2. 모델 실행 및 결과 검증
seeds = ["나는", "오늘", "날씨가"]

print("--- Mini Language Model Generation ---")
for s in seeds:
    generated_sentence = generate_text(s)
    print(f"Input: [{s}] -> Generated: {generated_sentence}")

 

실행 결과는 계속 바뀌게 되는데요, 딕셔너리 안에서 랜덤으로 할당되기 때문에 그렇습니다. 

  • 나는 ~
  • 오늘 ~ 
  • 날씨가 ~

위처럼 3개 단어 각각으로 시작하는 문장이 결과로 출력됩니다.

 

3. 구조적 한계: 이 코드를 'LLM'이라고 할 수 없는 이유

위 코드는 언어 모델의 겉모습을 잘 흉내 내고 있지만, 기술적으로는 마르코프 체인(Markov Chain)에 기반한 단순 통계 모델에 가깝습니다. 실제 LLM과는 다음과 같은 결정적인 차이가 있습니다.

https://www.glorywebs.com/blog/nlp-vs-llm

 

  • 문맥 보존 범위(Context Window)의 한계: 위 코드는 오직 '현재 단어' 하나만을 보고 그 다음 단어를 결정합니다. 이를 1차 마르코프 모델(11 연결 관계)이라 합니다. 반면 LLM은 문장 전체, 나아가 방대한 글 등의 앞부분 문맥까지 동시에 고려하여 단어를 선택합니다.
  • 의미론적 이해(Semantic Understanding)의 부재: 위 모델은 단어를 단순한 문자열로 처리합니다. 하지만 LLM은 '임베딩(Embedding)' 기술을 통해 '사과'와 '포도'가 유사한 과일이라는 점을 수학적 벡터(행렬)로 이해하고 예측에 반영합니다.
  • 확률 계산 방식: 위 코드는 단순 무작위 선택을 하지만, LLM은 트랜스포머(Transformer) 아키텍처를 통해 각 단어가 다음 단어에 미치는 영향력(Attention)을 계산하여 가장 확률이 높은 결과물을 도출합니다. 위 코드에서는 단어 간 유사성 등 관계가 고려되지 않았습니다.
  • 컨텍스트 처리: 일부 NLP(Natural Language Processing, 자연어 처리)은 사용자 정의 설계 없이는 상당한 범위 종속성을 띄며, 모호한 컨텍스트를 처리하는 데 어려움을 겪습니다(본 포스팅의 파이썬 코드). NLP 중 LLM은 딥러닝을 사용하여 텍스트를 생성하고 이해하도록 설계된 특정 유형의 AI 모델이기 때문에, 자기주도적 사고(딥러닝)를 활용하여 문맥을 인지합니다.

 

4. 언어 모델의 기술적 변천사: SLM에서 LLM까지

작은 언어 모델이었던 이 파이썬 코드가 어떤 과정을 거쳐 챗GPT가 되었는지, 그 기술적 흐름을 정리해 보았습니다.

https://www.glorywebs.com/blog/nlp-vs-llm

 

사진에서 좌측의 NLP는 LLM이 아닌 NLP(SLM, NLM)로 생각하시면 됩니다.

  1. SLM (Statistical Language Model): 단어의 빈도수를 기반으로 확률을 계산합니다. 학습 데이터에 없는 단어 조합이 나오면 대처하지 못하는 '희소 문제'가 단점이었습니다. (본 포스팅의 예시 파이썬 코드 방식)
  2. NLM (Neural Language Model): 인공 신경망을 도입하여 단어 간의 유사도를 학습하기 시작했습니다. 고정된 길이가 아닌 유연한 문장 해석의 기반이 되었습니다. (단어 간 예측)
  3. LLM (Large Language Model): 수천억 개의 파라미터와 'Attention' 메커니즘을 가진 트랜스포머 구조를 활용합니다. 이제는 단순 예측을 넘어서, 추론과 창작의 영역까지 도달했습니다. (대규모 단어 간 예측)

 

포스팅이 유익했다면 구독과 공감 부탁드립니다. 질문이나 의견은 댓글로 자유롭게 남겨주세요!