전시실
#06 · 여섯째 전시실
관람객 질문
"챗봇은 어떻게 말을 만들어요? 할 말을 머릿속에 다 정해 놓고 쓰는 거예요? 똑같이 물어봐도 대답이 매번 달라요." (준이)
전시로 보여 줄 것
언어 모델이 하는 일은 '다음에 올 단어의 확률 계산' 하나라는 것을 보여 준다. 동화 32문장으로 만든 아주 작은 언어 모델로 관람객이 직접 이야기를 이어 쓰며, 고르는 방법과 온도가 글을 어떻게 바꾸는지 본다.
한빛과학관 특별전 «AI는 어떻게 생각하나» 준비실
단어 지도 전시실의 바닥 시안이 나온 날, 준이가 태블릿 화면을 내밉니다. "챗봇한테 토끼랑 곰이 나오는 동화를 써 달라고 했어요. 금방 써 줬어요. 근데 똑같이 한 번 더 시켰더니 다른 동화가 나와요. 챗봇은 할 말을 미리 다 정해 놓고 쓰는 거예요? 그럼 왜 매번 달라요?"
나래도 궁금했던 참입니다. 챗봇의 대답은 한 글자씩 화면에 흘러나옵니다. 머릿속에 완성된 글이 있고 천천히 보여 주는 것일까요? 나래는 백 박사를 봅니다.
백 박사가 화이트보드에 한 줄을 씁니다. "오늘 아침에 우유를 ___" "빈칸에 뭐가 올까요?" 준이가 바로 답합니다. "마셨다요!" "쏟았다도 되고, 샀다도 되죠. 언어 모델이 하는 일은 이게 전부예요. 지금까지 나온 말을 보고, 다음에 올 말의 확률을 계산합니다. 그중 하나를 골라 붙이고, 또 계산하고, 또 붙이고. 할 말을 미리 정해 두지 않아요."
나래가 공책을 펼칩니다. "그럼 관람객이 직접 그 기계를 돌려 보게 하면 되겠네요. 제가 짧은 동화를 하나 쓸게요. 그 동화만 읽은 아주 작은 언어 모델을 만들어서, 관람객이 한 단어씩 이야기를 이어 쓰게요." 이번 교시에서는 그 '이야기 짓는 기계'를 만들며 언어 모델의 원리를 봅니다.
언어 모델(language model) 은 앞의 말이 주어지면, 다음에 올 말마다 확률을 매기는 계산기입니다. "오늘 아침에 우유를" 다음이라면 이런 식입니다(설명을 위한 예입니다).
| 다음 말 | 확률 |
|---|---|
| 마셨다 | 45% |
| 쏟았다 | 15% |
| 샀다 | 12% |
| 데웠다 | 6% |
| 그 밖의 모든 말 | 22% |
확률을 모두 더하면 100%입니다. 휴대폰 자판이 다음 단어를 추천해 주는 것도 같은 생각입니다. 다만 대형 언어 모델은 이 계산을 훨씬 긴 앞말을 보고, 훨씬 정교하게 합니다.
언어 모델이 한 번에 하나씩 다루는 단위를 토큰(token) 이라고 합니다. 토큰은 단어나 단어 조각입니다. 자주 쓰는 말은 통째로 한 토큰이 되고, 드문 말은 여러 조각으로 쪼개집니다. 예를 들어 '먹었어요'는 '먹' + '었어요'처럼 나뉠 수 있습니다. 어떻게 쪼갤지는 모델마다 다릅니다. 조각으로 쪼개 두면 처음 보는 단어도 아는 조각들로 나타낼 수 있습니다.
이 교시의 장난감 모델은 간단하게 띄어쓰기 단위(어절) 하나를 토큰 하나로 쓰고, 마침표도 토큰 하나로 셉니다.
언어 모델로 글을 쓰는 과정은 네 걸음을 되풀이하는 것입니다.
챗봇의 대답이 한 조각씩 흘러나오는 것은 연출이 아닙니다. 실제로 한 토큰씩 만들어지고 있는 것입니다.
확률은 어디서 올까요? 가장 단순한 방법은 세는 것입니다. 나래가 쓴 동화는 32문장입니다. 앞부분은 이렇습니다.
옛날 옛적 깊은 숲에 작은 토끼가 살았어요. 토끼는 아침마다 숲으로 갔어요. 숲에는 커다란 곰이 살았어요. 곰은 꿀을 아주 좋아했어요. 어느 날 토끼는 숲에서 곰을 만났어요. 토끼는 곰에게 사과를 주었어요. 곰은 토끼에게 꿀을 주었어요. 토끼와 곰은 친구가 되었어요. …
이렇게 언어 모델이 배우는 글 묶음을 말뭉치(corpus) 라고 합니다. 이 말뭉치를 토큰으로 쪼개면 모두 180개(마침표 32개 포함)이고, 서로 다른 토큰은 78개입니다.
이제 바로 앞 토큰 하나만 보고 다음 토큰을 맞히는 모델을 만듭니다. 앞 토큰과 다음 토큰의 짝을 바이그램(bigram) 이라고 합니다. 말뭉치에서 '토끼는'은 11번 나오고, 그 뒤에 온 토큰을 세면 이렇습니다.
| '토끼는' 다음 | 횟수 | 확률 |
|---|---|---|
| 숲으로 | 3 | 3/11 ≈ 27.3% |
| 곰에게 | 2 | 2/11 ≈ 18.2% |
| 아침마다, 숲에서, 다람쥐에게, 곰의, 무지개를, 별을 | 1씩 | 1/11 ≈ 9.1%씩 |
이것이 모델의 전부입니다. 앞 토큰마다 이런 표가 하나씩 있습니다. 문장 하나의 확률도 계산할 수 있습니다. '토끼는'에서 시작해 "토끼는 숲으로 갔어요."가 나올 확률은 짝마다 확률을 곱하면 됩니다. '토끼는' 다음 '숲으로'가 3/11, '숲으로'(7번) 다음 '갔어요'가 4/7, '갔어요'(6번) 다음 문장 끝이 6/6입니다.
'토끼는'에서 이어 쓰면 약 15.6%의 확률로 첫 문장이 "토끼는 숲으로 갔어요."가 됩니다.
아래 실습대가 바로 이 모델입니다. 위 칸은 지금까지 쓴 글이고, 막 붙은 단어는 노란 바탕으로 표시됩니다. 아래 막대들은 글의 맨 끝 단어 다음에 올 단어의 확률입니다. 확률이 높은 순서로 8개까지 보여 주고, 나머지는 '그 밖'으로 묶습니다. 막대 오른쪽에 확률과 말뭉치에서 센 횟수가 나옵니다. '이어 쓰기'를 누르면 한 단어씩 확률대로 뽑히는데, 뽑힌 막대가 잠깐 주황으로 반짝인 뒤 글 끝에 붙습니다. '한 단어'는 한 걸음씩, '다시 쓰기'는 새로 뽑기입니다. 오른쪽에서 시작 단어를 바꿀 수 있고, 맨 아래 '말뭉치 보기'를 누르면 동화 32문장이 모두 나옵니다.
지금까지 쓴 글
토끼는
'토끼는' 다음에 온 단어 · 말뭉치에서 모두 11번
막대 길이 = 확률 (칸 끝까지가 100%)
붙인 단어 0 / 20
'토끼는' 다음에 올 단어의 확률입니다. 말뭉치에서 '토끼는' 뒤에 온 단어를 세어 비율로 바꾼 것입니다. '이어 쓰기'를 누르세요.
이어 쓴 글을 읽어 보면 묘합니다. 문장 하나하나는 그럴듯한데, 말뭉치에 없던 문장이 자주 나옵니다. 앞 단어와 다음 단어의 짝은 모두 말뭉치에 있던 것이지만, 짝들을 이어 붙인 결과는 새 문장입니다. 언어 모델은 말뭉치를 그대로 베끼는 장치가 아니라, 말뭉치에서 본 패턴을 이어 붙이는 장치입니다.
동시에 한계도 보입니다. 이 모델은 바로 앞 단어 하나만 봅니다. 두 문장 앞에서 누가 무엇을 했는지 전혀 기억하지 못하니, 글 전체에 줄거리가 없습니다. 이 문제는 6-5절에서 다시 다룹니다.
확률을 계산한 뒤 무엇을 고를까요? 두 가지 방법이 있습니다.
가장 높은 것만 고르기(탐욕 선택, greedy) 는 늘 1등 막대를 고릅니다. 안전해 보이지만 함정이 있습니다. '토끼는'에서 시작해 봅시다. 1등은 '숲으로', 그다음 1등은 '갔어요', 그다음은 문장 끝입니다. 문장이 끝나면 새 문장의 첫 단어로 가장 흔한 것은 '토끼는'(31번 중 8번)입니다. 그러면 또 '숲으로', 또 '갔어요'. "토끼는 숲으로 갔어요. 토끼는 숲으로 갔어요. 토끼는 숲으로 갔어요." 같은 길을 영원히 돕니다.
'곰은'에서 시작해도 결국 같은 곳으로 빠집니다. 동점이면 말뭉치에 먼저 나온 단어를 고른다고 하면, 탐욕 선택의 결과는 "곰은 토끼에게 꿀을 아주 좋아했어요. 토끼는 숲으로 갔어요. 토끼는 숲으로 갔어요. …"입니다. 첫 문장도 이상합니다. '곰은 토끼에게', '토끼에게 꿀을', '꿀을 아주', '아주 좋아했어요'는 모두 말뭉치에 있는 짝이지만, 이어 놓으니 말이 되지 않습니다.
확률대로 뽑기(sampling) 는 막대 길이만큼 뽑힐 기회를 줍니다. 원판을 막대 길이에 맞춰 나눈 돌림판을 돌린다고 생각하면 됩니다. '숲으로'는 열한 번에 세 번쯤, '별을'은 열한 번에 한 번쯤 뽑힙니다. 그래서 글이 매번 달라지고, 같은 길에 갇히지 않습니다. 준이의 챗봇이 같은 질문에 다른 동화를 쓴 이유가 이것입니다.
아래 실습대는 '가장 높은 것만 고르기'를 켜고 '곰은'에서 시작합니다.
지금까지 쓴 글
곰은
'곰은' 다음에 온 단어 · 말뭉치에서 모두 7번
막대 길이 = 확률 (칸 끝까지가 100%)
붙인 단어 0 / 20
'곰은' 다음에 올 단어의 확률입니다. 말뭉치에서 '곰은' 뒤에 온 단어를 세어 비율로 바꾼 것입니다. '이어 쓰기'를 누르세요.
백 박사의 한마디
가장 확률이 높은 단어만 이어 붙인다고 가장 좋은 글이 되지 않아요. 한 걸음씩 최선을 고르다가 전체로는 같은 자리를 맴도는 거죠. 그래서 실제 서비스도 대부분 확률대로 뽑되, 너무 드문 말은 빼는 식으로 조절합니다.
확률대로 뽑을 때 막대 모양을 조절하는 손잡이가 온도(temperature) 입니다. 온도 를 정하면, 센 횟수를 제곱한 다음 다시 비율로 바꿉니다.
'토끼는' 다음 단어로 계산해 봅시다. 횟수는 3, 2, 1, 1, 1, 1, 1, 1입니다.
| 온도 | 바꾼 횟수 | 숲으로 | 곰에게 | 나머지 (각각) |
|---|---|---|---|---|
| 0.1 | 98.3% | 1.7% | 0.0% | |
| 0.5 | 9, 4, 1 | 47.4% | 21.1% | 5.3% |
| 1 | 3, 2, 1 | 27.3% | 18.2% | 9.1% |
| 2 | 1.73, 1.41, 1 | 18.9% | 15.5% | 10.9% |
6-2절의 첫 실습대에서 온도 손잡이를 0.1에서 2까지 움직여 보세요. 막대가 부드럽게 뾰족해졌다 평평해집니다. 온도를 0.1로 낮추고 '이어 쓰기'를 누르면, 확률대로 뽑아도 대개 "토끼는 숲으로 갔어요."를 되풀이합니다. 온도를 낮추는 것은 탐욕 선택에 가까워지는 것입니다. 온도를 2로 올리면 "토끼는 곰의 집으로 갔어요. 곰의 집으로 갔어요."처럼 드문 짝이 자주 뽑혀 이야기가 이리저리 튑니다.
| 온도 | 글의 성격 | 쓰임새 |
|---|---|---|
| 낮게 | 무난하고 일정하다. 되풀이하기 쉽다. | 요약, 정해진 형식의 답 |
| 중간 | 자연스럽게 다양하다. | 대화 |
| 높게 | 다양하고 엉뚱하다. 말이 안 될 때가 많다. | 아이디어 떠올리기 |
실제 언어 모델은 횟수 대신 신경망이 낸 점수를 확률로 바꾸는데, 이때 같은 방식으로 온도를 넣습니다. 원리는 이 표와 같습니다.
바이그램 모델은 바로 앞 단어 하나만 봅니다. "곰은 토끼에게 꿀을 아주 좋아했어요"가 나온 이유입니다. '꿀을' 다음을 고를 때, 앞에 '토끼에게'가 있었다는 것을 모릅니다.
그럼 앞 단어 두 개, 열 개를 보고 세면 될까요? 세는 방법으로는 금방 막힙니다. 토큰이 5만 종류라면 앞 두 토큰의 조합만 5만 × 5만 = 25억 가지입니다. 아무리 많은 글을 모아도 대부분의 조합은 한 번도 나오지 않습니다. 처음 보는 조합 앞에서는 셀 것이 없습니다.
신경망 언어 모델은 세는 대신 배웁니다. 이 강의에서 본 것들이 모두 여기서 만납니다.
학습이 끝난 뒤 글을 쓰는 방법은 이 교시의 실습대와 똑같습니다. 확률 계산 → 고르기 → 붙이기 → 다시 계산. 달라진 것은 확률을 내는 계산기가 훨씬 크고, 앞말을 훨씬 길게 본다는 것뿐입니다. 앞말 가운데 어디를 볼지 정하는 장치가 7교시의 어텐션입니다.
다음 단어를 정말 잘 맞히려면 문법도, 흔한 사실도, 대화의 흐름도 숫자 속에 담아야 합니다. 그래서 큰 언어 모델은 놀랄 만큼 똑똑해 보입니다. 하지만 하는 일은 여전히 '그럴듯한 다음 말 고르기'입니다. 확률이 높은 말은 자주 본 패턴에 가까운 말이지, 사실로 확인된 말이 아닙니다. 이 차이가 8교시의 '환각'으로 이어집니다.
| 용어 | 쉬운 말 | 실제 AI에서는 |
|---|---|---|
| 언어 모델 (language model) | 다음 말의 확률을 매기는 계산기 | 대형 언어 모델, 챗봇의 엔진 |
| 토큰 (token) | 단어나 단어 조각 | 모델마다 수만–수십만 종류 |
| 말뭉치 (corpus) | 모델이 배우는 글 묶음 | 수조 개 토큰 규모 |
| 바이그램 (bigram) | 앞 토큰 하나 → 다음 토큰의 짝 | 옛날 방식. 지금은 신경망이 대신 |
| 탐욕 선택 (greedy) | 늘 1등만 고르기 | 되풀이에 빠지기 쉽다 |
| 확률대로 뽑기 (sampling) | 막대 길이만큼 뽑힐 기회 | 대부분의 대화형 서비스 |
| 온도 (temperature) | 막대를 뾰족하게, 평평하게 | 0–2 사이에서 조절하는 경우가 많다 |
| 이 교시의 장난감 | 대형 언어 모델 | |
|---|---|---|
| 배운 글 | 동화 32문장, 토큰 180개 | 수조 개 토큰 |
| 보는 앞말 | 바로 앞 토큰 1개 | 수천–수십만 개 토큰 |
| 확률을 내는 방법 | 센 횟수의 비율 | 숫자(가중치) 수십억–수천억 개의 신경망 |
| 글을 쓰는 방법 | 한 토큰씩 확률 계산 → 고르기 → 붙이기 | 같다 |
전시 설명판
언어 모델은 지금까지 나온 말을 보고, 다음 토큰(단어나 단어 조각)마다 확률을 계산합니다.
글은 한 토큰씩 자랍니다. 확률 계산 → 하나 고르기 → 붙이기 → 다시 계산.
가장 높은 것만 고르면 같은 말을 되풀이하기 쉽고, 확률대로 뽑으면 같은 질문에도 매번 다른 글이 나옵니다.
온도가 낮으면 무난하고 일정한 글, 높으면 다양하지만 엉뚱한 글이 됩니다.
대형 언어 모델은 앞말을 수천 토큰 이상 보고, 수십억 개 이상의 숫자로 확률을 계산합니다. 그래도 하는 일은 '다음 말 맞히기'입니다.
확률이 높은 말은 그럴듯한 말이지, 사실로 확인된 말이 아닙니다.
전시실 시연을 마친 저녁, 준이가 쪽지 한 장을 내밉니다. "배를 타고 섬에 가서, 배를 깎아 먹었더니, 배가 불렀어요." "이 문장에 '배'가 세 번 나오잖아요. 다 다른 배예요. 근데 진짜 단어 벡터에서는 '배'가 점 하나라면서요? 바로 앞 단어만 보는 기계는 '배를' 다음에 뭐가 올지 어떻게 알아요?" 백 박사가 쪽지를 화이트보드에 붙입니다. "좋은 질문이에요. 앞뒤 말 가운데 어디를 봐야 하는지 아는 장치가 필요하죠. 그게 어텐션이에요." 7교시에서는 같은 단어가 문맥에 따라 다른 뜻이 되는 원리, 어텐션과 트랜스포머를 봅니다.
새 교시·새 강의 소식 받기
이 강의에 새 교시가 더해지거나 이어지는 강의가 열리면 이메일로 알려 드려요.
R
ReflexKR
눌러 보며 배우는 파이썬과 Reflex. 모든 예제는 Reflex 0.10.0에서 직접 실행해 확인했습니다.
ReflexKR은 배너 광고 없이 무료로 운영돼요. 도움이 되셨다면 커피 한 잔으로 응원해 주세요.
© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
질문과 답변
이 교시에서 궁금한 점을 남겨 주세요. 모든 언어 페이지의 질문이 함께 모입니다.