현대 생성형 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과는 다음과 같은 결정적인 차이가 있습니다.

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

사진에서 좌측의 NLP는 LLM이 아닌 NLP(SLM, NLM)로 생각하시면 됩니다.
- SLM (Statistical Language Model): 단어의 빈도수를 기반으로 확률을 계산합니다. 학습 데이터에 없는 단어 조합이 나오면 대처하지 못하는 '희소 문제'가 단점이었습니다. (본 포스팅의 예시 파이썬 코드 방식)
- NLM (Neural Language Model): 인공 신경망을 도입하여 단어 간의 유사도를 학습하기 시작했습니다. 고정된 길이가 아닌 유연한 문장 해석의 기반이 되었습니다. (단어 간 예측)
- LLM (Large Language Model): 수천억 개의 파라미터와 'Attention' 메커니즘을 가진 트랜스포머 구조를 활용합니다. 이제는 단순 예측을 넘어서, 추론과 창작의 영역까지 도달했습니다. (대규모 단어 간 예측)
포스팅이 유익했다면 구독과 공감 부탁드립니다. 질문이나 의견은 댓글로 자유롭게 남겨주세요!
'컴퓨터공학 + HCI > AI' 카테고리의 다른 글
| AI Agent 개요 및 구조 (0) | 2026.01.06 |
|---|---|
| 논문 리뷰 - Graph Retrieval-Augmented Generation: A Survey (2024) (0) | 2026.01.06 |
| LangChain: RAG 구현에 사용되는 프레임워크 (3) | 2026.01.05 |
| RAG: 검색, 증강, 생성 (0) | 2026.01.05 |
| LLM 기초 이론 (0) | 2026.01.02 |