챗GPT가 문장을 만드는 원리는 딱 하나, 다음에 올 말을 맞히는 것입니다.

이 단순한 구조에서 AI의 습성이 다 나옵니다. 지어내는 이유도, 매번 답이 다른 이유도요.

아이들에게 5분이면 설명할 수 있는 방식으로 풀어봤습니다. 한국어가 손해 보는 이유도 함께 다룹니다.


지난 편에서 AI가 성취기준을 지어낸다고 말씀드렸습니다. 존재하지 않는 번호를 태연하게 만들어낸다고요.

왜 그럴까요. 모르면 모른다고 하면 될 텐데 왜 굳이 만들어낼까요.

답은 이 기계가 하는 일이 딱 하나뿐이기 때문입니다. 다음에 올 말을 맞히는 것. 그게 전부입니다.

끝말을 이어붙이는 기계

문장을 하나 시작해보겠습니다.

오늘 급식은 정말

이 다음에 뭐가 올 것 같으세요. 맛있었다, 별로였다, 짰다. 대충 이 언저리일 겁니다. "오늘 급식은 정말 삼각형이었다"를 떠올린 분은 없을 거고요.

LLM이 하는 일이 정확히 이겁니다. 앞의 말을 보고 다음에 올 말의 후보를 고릅니다. 하나를 고르면 그걸 다시 앞말에 붙이고, 또 다음 말을 고릅니다. 이걸 계속 반복합니다.

문장 전체를 미리 구상하고 쓰는 게 아닙니다. 한 조각씩 이어붙이다 보니 문장이 되는 겁니다. 우리가 보기엔 술술 써 내려가는 것 같지만, 실제로는 매 순간 다음 한 조각만 정하고 있습니다.

GPT라는 이름 자체가 이걸 말해줍니다. 마지막 T가 트랜스포머인 건 지난 편에서 봤고, 앞의 P는 미리 잔뜩 읽혀두었다는 뜻입니다. 인터넷에 있는 방대한 글을 읽으면서 오직 하나만 연습했습니다. 가려진 다음 말 맞히기.

교실에서 5분

아이들과 해보기 좋은 활동이 있습니다. 준비물이 없어서 더 좋습니다.

칠판에 이렇게 적습니다.

옛날 옛날에 한 마을에 마음씨 착한

그리고 한 명씩 돌아가며 딱 한 단어씩만 이어 붙이게 합니다. 앞사람이 쓴 것까지 다 읽고, 그다음에 올 법한 말 하나만 보태는 겁니다.

몇 바퀴 돌면 이야기가 만들어집니다. 그때 물어보세요.

"이 이야기를 누가 미리 계획했니?"

아무도 안 했습니다. 그런데 이야기가 됐습니다. 아이들은 이 순간에 이해합니다. 계획 없이도 그럴듯한 글이 나올 수 있다는 것을요.

한 번 더 물어보면 좋습니다. "그럼 이 이야기에 나온 마을 이름은 진짜일까?" 아무도 그걸 확인한 사람이 없습니다. 그냥 그럴듯해서 붙인 겁니다.

그래서 지어냅니다

여기서 지난 편의 사고가 설명됩니다.

성취기준을 물어보면 이 기계는 그런 건 확인해봐야 안다고 멈추지 않습니다. 멈추는 기능이 없습니다. 앞말을 보고 다음에 올 법한 걸 계속 이어붙일 뿐입니다.

"2022 개정 교육과정 5학년 수학 성취기준은"까지 왔으면, 다음에는 대괄호가 오고 숫자가 오는 게 그럴듯합니다. 그래서 그렇게 이어붙입니다. 그 번호가 실제로 존재하는지는 확인하지 않습니다. 확인이라는 동작 자체가 이 구조에 없습니다.

AI가 거짓말을 하는 게 아닙니다. 참과 거짓을 구별하는 장치 없이 그럴듯함만으로 이어붙이고 있는 겁니다.

이걸 알면 대처가 달라집니다. 정확하게 알려달라고 부탁하는 건 소용이 없습니다. 정확함을 판단하는 기능이 없으니까요. 대신 확인할 수 있는 재료를 내가 주는 것이 답입니다. 성취기준을 복사해서 붙여넣으라고 한 이유가 이것입니다.

같은 질문에 답이 매번 다른 이유

이것도 같은 구조에서 나옵니다.

다음에 올 말의 후보는 여러 개입니다. 급식 다음에 올 말이 맛있었다일 수도 있고 짰다일 수도 있죠. 이 중에서 매번 1등만 고르면 답이 늘 똑같아지고, 대신 문장이 뻣뻣해집니다.

그래서 조금씩 흔들어줍니다. 가끔은 2등이나 3등을 고르게요. 이 흔들리는 폭을 조절하는 값이 있는데, 나중에 에이전트를 만들 때 보게 될 온도라는 설정이 그것입니다.

공문을 쓸 때는 흔들림이 적어야 하고, 아이디어를 뽑을 때는 흔들림이 커야 합니다. 앞 편에서 활동 아이디어를 12개 뽑게 했던 게 왜 잘 먹혔는지도 여기서 설명됩니다.

조각의 정체, 토큰

지금까지 말 한 조각이라고 뭉뚱그렸는데, 이 조각에는 이름이 있습니다. 토큰입니다.

토큰은 단어와 정확히 일치하지 않습니다. 자주 등장하는 덩어리는 통째로 한 조각이 되고, 드물게 나오는 것은 잘게 쪼개집니다. 영어는 대체로 단어 하나가 토큰 하나에 가깝습니다.

문제는 한국어입니다. 학습 데이터의 대부분이 영어라서 영어 조합은 효율적으로 묶여 있는데, 한국어는 잘게 쪼개집니다. 영어 hello가 한 조각이라면 안녕하세요는 서너 조각이 되는 식입니다.

여기에 우리말 특유의 사정이 겹칩니다. 먹다, 먹었다, 먹었었다, 먹겠습니다. 어근 하나에 어미가 계속 붙는 교착어라서 조각내기가 더 복잡해집니다.

그래서 같은 내용을 말해도 한국어가 조각을 더 많이 씁니다. 여러 비교에서 두세 배 차이가 보고됩니다. 사용량 제한이 이 조각 수로 매겨지니, 한국어 사용자가 한도에 더 빨리 걸리는 셈입니다.

여기서 실용적인 결론이 하나 나옵니다. 프롬프트를 산문으로 길게 쓰지 말고 항목으로 끊어 쓰세요.

javascript
[산문형]
결과물은 제목이 있어야 하고, 그 아래에 요약이 있어야 하고,
그다음에 상세 내용이 있어야 합니다. 제목은 20자 이내여야 하고,
요약은 2줄 이내여야 합니다.

[항목형]
• 제목: 20자 이내
• 요약: 2줄 이내
• 상세 내용

조각도 덜 쓰고 결과도 더 정확합니다. 앞의 실전 편들에서 프롬프트를 계속 항목으로 끊어 쓴 데는 이런 이유가 있었습니다.

그럼 이 기계는 아무것도 이해 못 하나

여기서 조심스러워집니다. 다음 단어를 맞힐 뿐이라고 하면 별것 아닌 것처럼 들리는데, 결과물을 보면 그렇게 말하기가 어렵습니다.

정직하게 말씀드리면 이 부분은 아직 논쟁 중입니다. 다음 말을 잘 맞히려다 보니 의미와 맥락에 대한 무언가를 갖게 됐다는 쪽도 있고, 통계적 흉내일 뿐이라는 쪽도 있습니다. 어느 한쪽을 단정해서 아이들에게 가르치지는 않는 게 좋겠습니다.

대신 이렇게는 말할 수 있습니다. 이해하든 안 하든, 확인은 하지 않는다. 교실에서 필요한 건 이 문장입니다.

아이들에게 어디까지

초등에서는 이것만 남으면 충분합니다.

  • AI는 다음에 올 말을 계속 이어붙여서 문장을 만든다
  • 그래서 그럴듯한 말은 잘 만들지만, 맞는지 확인은 하지 않는다
  • 확인은 사람이 해야 한다

앞의 이어쓰기 활동을 하고 나면 이 세 줄이 저절로 나옵니다. 용어는 몰라도 됩니다.

다음 글에서는 다시 실전으로 돌아갑니다. 프롬프트란 대체 무엇인지, 왜 어떤 사람의 프롬프트는 잘 먹히고 어떤 프롬프트는 안 먹히는지를 다루겠습니다.