AI는 내가 묻는 말을 어떻게 알아들을까? — 토큰과 문맥
AI는 내가 묻는 말을 어떻게 알아들을까? — 토큰과 문맥
처음에는 내가 한 말을 꽤 잘 알아듣는 것 같다가도, 질문을 조금 다르게 하면 엉뚱한 답을 합니다.
예를 들어 이렇게 물었다고 해보겠습니다.
“사과가 몸에 좋은 이유를 알려줘.”
그러면 AI는 과일 사과에 대해 설명합니다.
그런데 이렇게 말하면 어떨까요?
“친구에게 사과를 해야 하는데 뭐라고 말하면 좋을까?”
여기서 ‘사과’는 더 이상 과일이 아닙니다.
사람에게는 너무나 당연한 차이입니다.
그런데 AI는 어떻게 같은 ‘사과’라는 글자를 보고 서로 다른 뜻이라는 것을 알 수 있을까요?
AI는 우리가 쓴 문장을 도대체 어떻게 읽는 것일까요?
AI는 글자를 사람처럼 읽지 않는다
“친구에게 사과해야겠다.”
이 문장을 읽으며 우리는 ‘친구’, ‘사과’, ‘해야 한다’를 따로따로 계산한 뒤 의미를 조립하지 않습니다.
대개는 문장 전체의 뜻이 자연스럽게 들어옵니다.
하지만 AI는 우리가 보는 문장을 그대로 이해의 단위로 사용하는 것이 아닙니다.
먼저 텍스트를 계산할 수 있는 작은 단위로 나눕니다.
이 작은 단위를 토큰(token)이라고 합니다.
OpenAI는 토큰을 AI 모델이 텍스트를 처리하는 기본 단위라고 설명합니다. 토큰은 하나의 단어일 수도 있지만 단어의 일부, 문장부호, 때로는 문자 수준의 조각일 수도 있습니다. 토큰이 나뉘는 방식은 언어나 모델의 인코딩에 따라 달라질 수 있습니다.
그러니까 AI에게
“친구에게 사과해야겠다.”
라는 문장이 들어가면 처음부터 우리가 보는 하나의 완성된 문장으로 처리되는 것이 아니라 여러 토큰의 배열로 바뀌어 처리됩니다.
토큰은 단어와 같은 것일까?
여기에서 흔히 생기는 오해가 있습니다.
“그러면 토큰은 그냥 단어라는 뜻이네?”
꼭 그렇지는 않습니다.
영어의 경우 하나의 흔한 단어가 하나의 토큰이 될 수도 있지만, 긴 단어나 낯선 표현은 여러 토큰으로 나뉠 수 있습니다.
공백이나 문장부호도 토큰화에 영향을 줍니다.
특히 한국어처럼 조사와 어미가 결합하는 언어에서는 우리가 하나의 단어라고 생각하는 표현과 AI가 나누는 토큰의 경계가 일치하지 않을 수 있습니다.
그래서
토큰 = 단어
라고 외우기보다는,
토큰은 AI가 텍스트를 계산하기 위해 사용하는 조각
정도로 이해하는 것이 좋습니다.
OpenAI도 입력된 텍스트가 먼저 토큰으로 분할되고, 모델이 그 토큰들을 처리한 뒤 다시 토큰들의 연속으로 출력을 생성한다고 설명합니다.
그런데 잘게 나누면 오히려 뜻을 잃어버리는 것 아닌가?
여기서 재미있는 질문이 생깁니다.
문장을 작은 조각으로 나누어버린다면 오히려 뜻을 알기 어려워지는 것 아닐까요?
맞습니다.
토큰 하나만 놓고 보면 의미가 충분하지 않은 경우가 많습니다.
예를 들어 다시 ‘사과’를 생각해봅시다.
사과를 먹었다.
친구에게 사과했다.
‘사과’라는 글자만 떼어놓고 보면 무엇을 뜻하는지 결정할 수 없습니다.
앞뒤에 무엇이 함께 있는지를 봐야 합니다.
‘먹었다’가 함께 있다면 과일일 가능성이 높고,
‘친구에게’, ‘했다’와 함께 있다면 잘못을 인정하고 미안함을 표현하는 행위를 뜻할 가능성이 높습니다.
즉 토큰 하나보다 토큰과 토큰 사이의 관계가 중요합니다.
여기서 ‘문맥(context)’이 등장합니다.
문맥이란 무엇일까?
문맥이라는 말을 우리는 일상에서도 자주 씁니다.“그 말만 떼어서 보면 안 돼. 앞뒤 문맥을 봐야지.”
AI에게도 비슷한 일이 일어납니다.
예를 들어 다음 문장을 봅시다.
“민수는 우산을 가지고 나오지 않았다. 하늘이 점점 어두워졌다. 잠시 후 비가 쏟아지기 시작했다. 민수는 급히 뛰었다.”
‘민수가 왜 뛰었는가?’라고 물으면 답은 마지막 문장 하나에만 들어 있지 않습니다.
‘우산이 없다.’
‘하늘이 어두워졌다.’
‘비가 왔다.’
‘민수가 뛰었다.’
이 정보들이 서로 관계를 맺으면서 의미가 형성됩니다.
AI가 질문에 답하려면 현재 입력에 포함된 여러 토큰과 이전 대화에서 제공된 정보들의 관계를 함께 고려해야 합니다.
이런 현재 입력과 대화에서 모델이 참고할 수 있는 범위를 흔히 컨텍스트(context), 즉 문맥이라고 부릅니다.
그러면 AI는 이전 대화를 전부 기억하고 있을까?
여기서 사용자들이 자주 하는 질문이 나옵니다.
“아까 말했는데 왜 또 잊어버렸지?”
AI와 대화하다 보면 분명 앞에서 이야기한 내용을 잘 이어가다가 어느 순간 이전 내용을 제대로 반영하지 못하는 경우가 있습니다.
이것을 이해하려면 문맥과 기억을 구분할 필요가 있습니다.
현재 대화에서 AI가 참고할 수 있는 텍스트의 범위에는 한계가 있습니다.
이를 컨텍스트 윈도우(context window)라고 부릅니다.
쉽게 비유하면 AI가 답을 만들 때 펼쳐놓고 볼 수 있는 책상의 크기와 비슷합니다.
책상이 충분히 크면 앞에서 했던 이야기를 많이 펼쳐놓고 볼 수 있습니다.
하지만 아무리 큰 책상이라도 무한하지는 않습니다.
모델마다 처리할 수 있는 토큰의 최대 범위가 있으며, 입력과 출력이 이 범위 안에서 처리됩니다. OpenAI의 현재 안내에서도 모델마다 최대 토큰 한도가 있으며, 구체적인 한도는 모델과 사용 환경에 따라 달라진다고 설명합니다.
그래서
대화창에 글이 남아 있다
와
현재 답변을 만들 때 그 모든 내용을 동일하게 참고하고 있다
는 완전히 같은 의미가 아닐 수 있습니다.
그런데 문맥 안에 있다고 모두 똑같이 중요할까?
그렇지도 않습니다.
문맥 안에 많은 정보가 있다고 해서 AI가 그 모든 것을 똑같은 비중으로 사용하는 것은 아닙니다.
예를 들어 이렇게 질문했다고 해보겠습니다.
“철수는 제주도에 살고, 영희는 서울에 살아. 철수는 귤 농사를 짓고 영희는 출판사에서 일해. 영희가 출근할 때 이용할 가능성이 높은 대중교통은 무엇일까?”
여기에는
‘철수’
‘제주도’
‘귤 농사’
‘영희’
‘서울’
‘출판사’
등 여러 정보가 들어 있습니다.
하지만 마지막 질문에 답할 때 ‘철수의 귤 농사’는 상대적으로 중요하지 않습니다.
AI는 문맥 안의 여러 토큰 사이에서 현재 질문과 더 관련된 관계를 계산해야 합니다.
그리고 바로 이 일을 이해하기 위해 다음에 등장하는 개념이 있습니다.
어텐션(attention)입니다.
어텐션은 다음 글에서 자세히 살펴보겠습니다.
같은 단어라도 문맥이 달라지면 달라진다
문맥의 힘을 조금 더 살펴보겠습니다.
다음 세 문장을 읽어봅시다.
“은행에서 돈을 찾았다.”
“은행나무 아래에서 쉬었다.”
“강둑의 은행을 따라 걸었다.”
우리에게는 앞뒤 문장만 보아도 ‘은행’이 무엇을 가리키는지 대체로 구별됩니다.
언어모델 역시 어떤 표현을 고립된 사전 항목처럼 하나의 고정된 뜻으로만 처리하기보다 주변 토큰과의 관계 속에서 현재 맥락에 적합한 표현을 형성합니다.
이 점은 생성형 AI를 이해할 때 상당히 중요합니다.
AI가
단어 → 뜻
이라는 단순한 사전식 방식으로 작동하는 것이 아니라,
토큰 ↔ 토큰 ↔ 주변 문맥 ↔ 이전 정보
사이의 관계를 이용해 현재 입력을 처리하기 때문입니다.
우리가 질문을 조금 바꾸면 답이 달라지는 이유도 여기에 있다
예를 들어 AI에게 이렇게 물어봅니다.
“창업할 때 중요한 것은 무엇이야?”
그러면 일반적인 창업 조언이 나올 가능성이 높습니다.
그런데 이렇게 바꾸면 어떨까요?
“강원도 작은 전통시장에서 60대 상인이 스마트폰 하나로 창업을 시작한다고 할 때 가장 중요한 것은 무엇이야?”
‘창업’이라는 중심 단어는 같습니다.
하지만
‘강원도’
‘작은 전통시장’
‘60대’
‘상인’
‘스마트폰 하나’
라는 새로운 조건이 문맥에 추가되었습니다.
그러면 답이 만들어지는 조건 자체가 달라집니다.
이것은 우리가 AI를 잘 사용하는 데 매우 중요한 지점입니다.
질문을 자세히 쓴다는 것은 단순히 AI에게 명령을 길게 하는 것이 아닙니다.
AI가 답을 만들 때 참고할 관계와 조건을 더 많이 제공하는 것입니다.
그래서 프롬프트를 잘 쓴다는 것은 반드시 멋진 문장을 쓰는 것이 아니라,
답을 만드는 데 필요한 문맥을 적절하게 제공하는 것
이라고 볼 수도 있습니다.
하지만 문맥이 많다고 항상 좋은 것은 아니다
그렇다면 정보를 많이 넣으면 무조건 답이 좋아질까요?
꼭 그렇지는 않습니다.
관련 없는 정보가 지나치게 많거나,
서로 충돌하는 조건이 들어 있거나,
중요한 지시가 긴 문장 속에 묻혀 있다면
AI가 무엇을 우선해야 하는지 어려워질 수 있습니다.
예를 들어,
“시장 홍보문을 써줘.”
보다
“평창의 작은 전통시장을 처음 방문하는 30대 관광객에게 보여줄 인스타그램 홍보문을 300자 이내로 써줘.”
가 훨씬 좋은 문맥을 제공합니다.
하지만 여기에 사업의 역사, 담당자 이름, 회의 내용, 지난 행사 기록 등 지금 홍보문과 관계없는 정보까지 몇 페이지씩 붙인다고 해서 반드시 더 나은 답이 나오는 것은 아닙니다.
좋은 문맥은 많은 정보가 아니라 현재 질문에 필요한 관계가 잘 드러나는 정보입니다.
토큰과 문맥을 알면 AI의 이상한 행동이 조금 보인다
이제 처음의 질문으로 돌아가봅시다.
“AI는 내가 묻는 말을 어떻게 읽는 걸까?”
아주 단순하게 펼치면 이렇습니다.
우리가 문장을 입력한다
↓
텍스트가 토큰으로 나뉜다
↓
토큰이 모델이 계산할 수 있는 형태로 표현된다
↓
현재 문맥 안에서 토큰들 사이의 관계가 계산된다
↓
현재 질문에 어떤 관계가 중요한지 반영된다
↓
그 문맥을 바탕으로 다음 토큰을 생성한다
↓
다시 문맥이 갱신되고 다음 토큰을 생성한다
↓
답변이 만들어진다
따라서 AI에게 질문을 한다는 것은 단순히
“문장을 하나 전달한다.”
는 것보다 조금 더 복잡합니다.
우리는 AI에게 답을 만들어낼 하나의 문맥을 제공하고 있는 것입니다.
여기서 한 가지 더 중요한 질문이 생긴다
그런데 문맥 안에는 수백, 수천, 때로는 훨씬 많은 토큰이 들어갈 수 있습니다.
그렇다면 AI는 그 많은 토큰을 어떻게 다룰까요?
모든 단어를 똑같이 중요하게 본다면 계산도 어렵고 문맥도 제대로 잡기 힘들 것입니다.
예를 들어,
“수진이는 어제 책을 샀다. 민수는 점심을 먹었다. 수진이는 그 책을 밤새 읽었다.”
라는 문장에서
‘그 책’이 무엇을 가리키는지 알아내려면
바로 앞의 ‘민수’나 ‘점심’보다 훨씬 앞에 있는
‘수진이가 산 책’
과 연결해야 합니다.
AI는 어떻게 멀리 떨어진 표현 사이의 관계를 찾아낼까요?
바로 여기서 생성형 AI를 이해하는 데 매우 중요한 기술 하나가 등장합니다.
어텐션(attention)입니다.
다음 글에서는 용어부터 외우지 않고 이 질문에서 시작해보겠습니다.
“AI는 긴 문장 속에서 무엇이 중요한지 어떻게 찾아낼까?”
다음 글 — 어텐션은 AI에게 무엇을 보게 하는가








댓글
댓글 쓰기