전시실
#05 · 다섯째 전시실
관람객 질문
"챗봇한테 '사과랑 비슷한 말'을 물어보면 배, 복숭아라고 해요. 그런데 컴퓨터는 숫자밖에 모른다면서요. 그럼 AI는 단어 뜻을 아는 거예요?" (준이)
전시로 보여 줄 것
컴퓨터가 단어를 숫자 목록(벡터)으로 바꾸는 방법을 보여 준다. 가까움과 방향에 뜻이 담기는 원리, 그 숫자가 글의 치우침까지 함께 배운다는 것을 전시실 바닥의 커다란 '단어 지도'로 보여 준다.
한빛과학관 특별전 «AI는 어떻게 생각하나» 준비실
넷째 전시실의 그림판 설명판을 넘긴 날, 준이가 태블릿을 들고 준비실에 들어옵니다. "챗봇한테 '사과랑 비슷한 말 다섯 개'를 물어봤어요. 배, 복숭아, 포도, 귤, 딸기래요. 다 맞잖아요. 근데 지난번에 사진도 숫자로 바꿔야 컴퓨터가 본다고 했죠? 단어는 어떻게 숫자가 돼요? 그리고 숫자로 바꾸면 뜻은 어디로 가요?"
나래는 사진 전시실을 떠올립니다. 사진은 밝기 숫자의 격자였습니다. 단어도 숫자로 바꿀 수는 있을 것 같습니다. "사전처럼 가나다순으로 번호를 붙이면 되지 않을까요? 사과는 3,512번, 배는 1,204번, 이런 식으로요."
백 박사가 고개를 젓습니다. "번호는 이름표일 뿐이에요. 3,512번과 3,513번이 뜻이 비슷하다는 보장이 없죠. 그래서 단어마다 좌표를 줍니다. 지도 위의 점처럼요. 뜻이 비슷한 단어는 가까이, 다른 단어는 멀리 놓이게요. 그 좌표를 사람이 정하지 않고, 기계가 엄청난 양의 글을 읽으며 스스로 맞춰 갑니다."
나래가 손뼉을 칩니다. "그럼 전시실 바닥 전체를 지도로 만들면 되겠네요. 관람객이 '고양이' 위에 서면 발밑에 '강아지'가 가까이 보이게요." 이번 교시에서는 그 단어 지도를 만들며, 단어가 숫자가 되는 방법과 그 숫자에 무엇이 담기는지 살펴봅니다.
컴퓨터가 하는 일은 결국 숫자 계산입니다. 3교시의 뉴런도 숫자를 받아 가중합을 냈습니다. 그러니 단어도 먼저 숫자로 바꿔야 합니다.
가장 쉬운 방법은 나래의 생각처럼 번호를 붙이는 것입니다. 그런데 번호에는 크기가 있습니다. 사과가 3,512번이고 배가 1,204번이면, 컴퓨터는 "사과가 배보다 세 배쯤 크다"처럼 엉뚱하게 계산할 수 있습니다. 번호의 크기는 아무 뜻도 없는데 말이죠.
그래서 나온 방법이 원-핫 인코딩(one-hot encoding) 입니다. 단어장에 단어가 4개 있다면, 단어마다 숫자 4개짜리 목록을 주고 자기 자리에만 1을 씁니다.
| 단어 | 목록 |
|---|---|
| 고양이 | (1, 0, 0, 0) |
| 강아지 | (0, 1, 0, 0) |
| 사과 | (0, 0, 1, 0) |
| 자동차 | (0, 0, 0, 1) |
이제 크기 문제는 없습니다. 대신 새 문제가 생깁니다. 어느 두 단어를 골라도 서로 다른 자리 두 곳만 다르니, 거리가 모두 로 같습니다. 고양이와 강아지 사이도, 고양이와 자동차 사이도 똑같이 멀다는 뜻입니다. 단어장이 5만 개면 단어 하나가 숫자 5만 개짜리 목록이 되고, 그중 4만 9,999개가 0입니다. 길기만 하고 뜻은 하나도 담지 못합니다.
우리가 원하는 것은 숫자 몇백 개로, 뜻이 비슷한 단어끼리 비슷한 목록을 갖는 것입니다. 이런 숫자 목록을 벡터(vector) 라고 하고, 목록에 든 숫자의 개수를 차원(dimension) 이라고 합니다. 단어를 나타내는 벡터는 단어 벡터(word vector) 또는 임베딩(embedding) 이라고 부릅니다.
벡터가 숫자 두 개뿐이면 종이 위의 좌표 와 같습니다. 그러면 단어 하나가 지도 위의 점 하나가 됩니다. 이렇게 단어를 점으로 놓은 공간을 의미 공간(semantic space) 이라고 합니다.
백 박사와 나래가 전시용으로 만든 장난감 지도를 봅시다. 단어 48개에 숫자 두 개씩, 곧 좌표를 줬습니다. 사람, 직업, 동물, 과일, 음식, 탈것, 바닷가의 일곱 무리입니다. 이 지도는 설명을 위해 사람이 손으로 좌표를 정한 것입니다. 진짜 단어 벡터를 어떻게 얻는지는 5-3절에서 봅니다.
아래 실습대에서 점 하나가 단어 하나입니다. 지도 위의 흐린 회색 글자는 무리 이름입니다. 단어를 누르면 그 단어가 주황 점이 되고, 가장 가까운 단어 다섯 개가 청록 점이 되며 선으로 이어집니다. 선 위의 작은 숫자가 거리입니다. 오른쪽 칸에는 고른 단어의 좌표와 가까운 다섯 단어의 표가 나옵니다. 오른쪽 칸 맨 위의 '단어 고르기'에 단어를 넣고 '찾기'를 눌러도 됩니다(좁은 화면에서는 지도 아래에 있습니다. 키보드로 고를 때도 이 칸을 씁니다).
지도에서 단어를 눌러도 됩니다.
사과 = (5.0, 2.0)
| 순위 | 단어 | 거리 |
|---|---|---|
| 1 | 배(과일) | 0.72 |
| 2 | 복숭아 | 1.01 |
| 3 | 포도 | 1.17 |
| 4 | 떡 | 1.27 |
| 5 | 국수 | 1.34 |
'사과'에서 가장 가까운 단어는 '배(과일)'(거리 0.72)입니다. 점 사이가 가까울수록 비슷한 단어입니다.
거리는 초등학교 때 배운 직각삼각형의 빗변 길이(피타고라스의 정리)로 잽니다. 가로 차이와 세로 차이를 각각 제곱해 더하고, 제곱근을 씌웁니다.
사과는 (5.0, 2.0), 배(과일)은 (5.4, 1.4), 배(선박)은 (7.9, 4.45)에 있습니다.
| 두 단어 | 가로 차이 | 세로 차이 | 거리 |
|---|---|---|---|
| 사과 · 배(과일) | 0.4 | 0.6 | |
| 사과 · 배(선박) | 2.9 | 2.45 |
사과에서 가까운 다섯 단어 중 넷째와 다섯째는 떡(1.27)과 국수(1.34)입니다. 과일은 아니지만 둘 다 '먹는 것'이니 이상하지 않습니다. 의미 공간에서는 무리 사이에도 이렇게 가깝고 먼 정도가 있습니다. 가깝다는 것은 비슷하다는 뜻이고, 비슷한 정도를 숫자 하나(거리)로 말할 수 있게 됩니다.
이 지도에는 '배'가 두 번 나옵니다. 과일 무리의 배(과일)와 바닷가 무리의 배(선박)입니다. 둘 사이 거리는 약 3.94로, 사과와 배(과일) 사이(0.72)보다 다섯 배쯤 멉니다. 사실 이것은 반칙입니다. 이 지도는 한 단어에 점 하나만 줄 수 있어서, 뜻마다 이름을 따로 붙여 두 단어로 만들었습니다.
진짜 단어 벡터는 '배'라는 글자를 구별하지 못합니다. 과일 이야기에 나온 '배'와 바다 이야기에 나온 '배'를 한 점으로 배우니, 그 점은 두 무리 사이 어딘가로 끌려갑니다. 몸의 '배'까지 섞이면 더 애매해집니다. 같은 단어도 문장에 따라 다른 점에 놓으려면 앞뒤 문맥을 봐야 합니다. 이 문제는 7교시에서 풉니다.
그럼 좌표는 누가 정할까요? 단어 수만 개에 숫자 수백 개씩을 사람이 정할 수는 없습니다. 여기서 언어학의 오래된 생각 하나가 쓰입니다. 영국 언어학자 퍼스(J. R. Firth)가 1957년에 쓴 것으로 널리 알려진 말입니다.
"You shall know a word by the company it keeps." (단어는 그 단어가 어울리는 친구들을 보면 안다.)
빈칸을 채워 보세요. "아침에 ___를 깎아 먹었다. 달고 시원했다." 사과, 배, 복숭아는 들어갈 수 있고, 자동차는 들어갈 수 없습니다. 우리는 '깎아', '먹었다', '달고' 같은 이웃 단어만 보고도 빈칸 단어의 뜻을 짐작합니다. 비슷한 이웃과 함께 나오는 단어는 뜻도 비슷하다. 이것을 분포 가설(distributional hypothesis) 이라고 합니다.
어떤 글 묶음에서 단어마다 이웃 단어를 세었다고 해 봅시다(설명을 위해 지어낸 표입니다).
| 단어 | '깎아'와 함께 | '달다'와 함께 | '먹었다'와 함께 | '타고'와 함께 | '항구'와 함께 |
|---|---|---|---|---|---|
| 사과 | 12 | 9 | 15 | 0 | 0 |
| 복숭아 | 8 | 11 | 10 | 0 | 0 |
| 자동차 | 0 | 0 | 0 | 14 | 1 |
| 배 | 7 | 6 | 9 | 10 | 8 |
사과와 복숭아의 줄은 모양이 닮았습니다. 자동차의 줄은 전혀 다릅니다. 그러니 사과와 복숭아를 가까이, 자동차를 멀리 놓으면 됩니다. '배'의 줄은 과일 쪽 이웃과 바다 쪽 이웃이 섞여 있습니다. 5-2절에서 말한 "두 무리 사이로 끌려가는 점"이 바로 이 줄입니다.
2013년에 발표된 word2vec 은 이 생각을 학습으로 바꿨습니다. 방법은 2교시와 3교시에서 본 것과 같습니다.
비슷한 이웃과 함께 나오는 단어들은 비슷한 주변 단어를 맞혀야 하니, 숫자도 비슷하게 맞춰집니다. 아무도 "사과는 과일이다"라고 가르쳐 주지 않았는데, 사과와 복숭아가 가까이 모입니다. 1교시의 '규칙 대신 예시로'가 여기서도 그대로입니다.
백 박사의 한마디
단어 벡터는 뜻을 '아는' 게 아니에요. 그 단어가 어떤 단어들과 함께 쓰였는지를 숫자로 요약한 거예요. 그런데 그 요약이 놀랄 만큼 쓸모가 있어서, 마치 뜻을 아는 것처럼 보이는 거죠.
의미 공간에서는 거리만이 아니라 방향에도 뜻이 담깁니다. 장난감 지도에서 짝이 되는 단어 사이의 화살표를 재어 봅시다. 화살표는 (가로로 얼마, 세로로 얼마)로 적습니다.
| 화살표 | 가로 | 세로 |
|---|---|---|
| 남자 → 여자 | +0.10 | −1.40 |
| 소년 → 소녀 | +0.10 | −1.40 |
| 왕자 → 공주 | +0.10 | −1.45 |
| 왕 → 여왕 | +0.25 | −1.30 |
| 개 → 강아지 | −0.20 | −1.25 |
| 고양이 → 새끼 고양이 | −0.05 | −1.35 |
| 소 → 송아지 | −0.10 | −1.30 |
위의 네 화살표는 거의 같고, 아래 세 화살표도 거의 같습니다. 이 지도에서는 '남성 → 여성'이 한 방향, '다 자란 동물 → 새끼'가 또 한 방향입니다. 그렇다면 왕에서 출발해 '남자 → 여자' 화살표만큼 움직이면 어디에 닿을까요? 이 계산을 벡터 산수라고 하고, 왕 − 남자 + 여자 로 씁니다. 좌표끼리 가로는 가로대로, 세로는 세로대로 빼고 더합니다.
| 왕 | − 남자 | + 여자 | = 도착점 | |
|---|---|---|---|---|
| 가로 | 3.30 | − 1.45 | + 1.55 | 3.40 |
| 세로 | 7.65 | − 7.55 | + 6.15 | 6.25 |
도착점에서 가장 가까운 단어는 여왕(3.55, 6.35)이고, 거리는 약 0.18입니다. 둘째로 가까운 공주도 약 0.98 떨어져 있습니다. 계산에 쓴 왕, 남자, 여자 세 단어는 빼고 찾습니다. 실제 연구에서도 이렇게 합니다.
아래 실습대는 이 계산을 화살표로 보여 줍니다. '화살표 옮기기'를 누르면 먼저 남자에서 여자로 가는 청록 화살표가 그어집니다. 그 화살표가 길이와 방향을 그대로 지킨 채 왕으로 옮겨 가고(회색 점선이 옮겨 간 길), 끝에 닿은 곳에 주황 도착점이 찍힙니다. 가장 가까운 단어에는 주황 고리가 생기고, 회색 점선과 숫자가 그 거리를 알려 줍니다. 오른쪽 칸에는 같은 계산이 좌표로 나옵니다.
지도에서 단어를 눌러도 됩니다.
| 왕 | (3.3, 7.65) |
| − 남자 | (1.45, 7.55) |
| + 여자 | (1.55, 6.15) |
| = 도착점 | (3.4, 6.25) |
'남자'에서 '여자'로 가는 화살표를 '왕'에 옮겨 붙이면 어디에 닿을까요? '화살표 옮기기'를 누르세요.
2013년 word2vec 연구에서도 실제 단어 벡터로 '왕 − 남자 + 여자'를 계산하면 '여왕'이 가장 가깝게 나온다는 결과가 보고되었습니다. 숫자가 수백 개인 공간에서도 '성별'이나 '나라와 수도' 같은 관계가 대략 일정한 방향으로 놓인다는 것입니다. 아무도 그런 방향을 정해 주지 않았는데, 글에서 함께 나오는 방식만으로 생긴 것입니다.
다만 과장하면 안 됩니다. 이 산수는 늘 맞지 않습니다. 잘 되는 예가 유명해졌을 뿐, 실패하는 예도 많습니다. 도착점이 정확히 여왕 위에 떨어지는 것도 아닙니다. 가장 가까운 단어를 찾을 때 계산에 쓴 단어를 빼지 않으면 '왕'이 답으로 나오는 경우도 흔합니다. 방향에 뜻이 담기는 경향이 있다는 것, 그것이 정확한 표현입니다.
단어 벡터는 사람이 쓴 글에서 배웁니다. 그러니 글에 담긴 것은 무엇이든 함께 배웁니다. 사실만이 아니라 고정관념도요. 많은 글에서 '의사'가 '그'와, '간호사'가 '그녀'와 더 자주 함께 나온다면, 의사의 벡터는 남성 쪽으로, 간호사의 벡터는 여성 쪽으로 기울어집니다. 실제 직업이 누구에게 맞는지와는 아무 상관이 없습니다. 글이 그렇게 쓰였을 뿐입니다.
장난감 지도는 일부러 이런 치우친 글에서 배운 것처럼 만들었습니다. 이 지도에서 '남자 → 여자'는 거의 아래쪽 방향입니다. 그런데 의사의 높이(7.15)는 남자(7.55) 쪽에, 간호사의 높이(5.85)는 여자(6.15) 쪽에 가깝습니다. 아래 실습대에서 '화살표 옮기기'를 누르면, 왕 − 남자 + 여자 와 똑같은 계산이 의사 − 남자 + 여자 를 간호사 바로 옆(거리 0.22)에 데려다 놓습니다.
지도에서 단어를 눌러도 됩니다.
| 의사 | (4.85, 7.15) |
| − 남자 | (1.45, 7.55) |
| + 여자 | (1.55, 6.15) |
| = 도착점 | (4.95, 5.75) |
'남자'에서 '여자'로 가는 화살표를 '의사'에 옮겨 붙이면 어디에 닿을까요? '화살표 옮기기'를 누르세요.
연구자들은 실제 단어 벡터에서도 직업 단어가 성별 방향으로 기울어 있는 것을 여러 차례 확인했습니다. 이것이 문제가 되는 까닭은, 단어 벡터가 검색, 번역, 이력서 분류 같은 다른 프로그램의 부품으로 쓰이기 때문입니다. 부품이 기울어 있으면 그 위에 지은 프로그램도 같은 쪽으로 기웁니다. 누가 나쁜 뜻을 넣지 않아도 생기는 일입니다.
그래서 단어 벡터를 쓰는 쪽은 어떤 글에서 배웠는지 확인하고, 성별처럼 민감한 방향으로 단어가 얼마나 기울었는지 재어 보고, 필요하면 바로잡습니다. 데이터의 치우침이 판단의 치우침이 되는 문제는 8교시에서 더 넓게 다룹니다.
| 용어 | 쉬운 말 | 실제 AI에서는 |
|---|---|---|
| 벡터 (vector) | 숫자 목록 | 단어 하나에 숫자 수백–수천 개 |
| 차원 (dimension) | 목록에 든 숫자의 개수 | 장난감 지도는 2차원, 실제는 수백 차원 이상 |
| 단어 벡터, 임베딩 (embedding) | 단어의 좌표 | 학습으로 정해지는 숫자 |
| 의미 공간 (semantic space) | 단어들이 점으로 놓인 공간 | 눈으로 볼 수 없는 수백 차원 공간 |
| 분포 가설 | 함께 나오는 단어가 비슷하면 뜻도 비슷하다 | 단어 벡터 학습의 바탕 |
| 벡터 산수 | 화살표를 빼고 더하기 | 왕 − 남자 + 여자 ≈ 여왕 (늘 맞지는 않음) |
| 편향 (bias) | 글의 치우침이 숫자에 남은 것 | 재고, 확인하고, 바로잡아야 할 것 |
전시 설명판
컴퓨터는 단어를 숫자 목록(벡터)으로 바꿔 계산합니다. 숫자 목록을 좌표로 보면, 단어 하나하나가 '의미 공간'의 점이 됩니다.
뜻이 비슷한 단어는 가까이 놓입니다. 가깝다는 것이 곧 비슷하다는 뜻입니다.
좌표는 사람이 정하지 않습니다. '함께 나오는 단어가 비슷하면 뜻도 비슷하다'는 생각으로, 기계가 엄청난 양의 글에서 배웁니다.
방향에도 뜻이 담깁니다. 왕 − 남자 + 여자 를 계산하면 여왕 근처에 닿습니다. 늘 맞지는 않습니다.
글에 담긴 고정관념도 숫자에 함께 남습니다. 숫자로 계산했다고 공정한 것은 아닙니다.
그래서 AI가 단어 뜻을 '안다'기보다, 단어가 쓰이는 방식을 숫자로 아주 잘 요약한다고 말하는 편이 정확합니다.
설명판 문구를 다듬던 나래에게 준이가 또 묻습니다. "단어가 점이 되는 건 알겠어요. 근데 챗봇은 그 점들로 어떻게 문장을 만들어요? 대답할 말을 미리 다 생각해 두는 거예요? 똑같이 물어봐도 대답이 매번 달라지던데요." 백 박사가 웃습니다. "그건 다음 전시실에서요. 챗봇이 하는 일은 생각보다 단순해요. 다음에 올 단어를 맞히는 것." 6교시에서는 직접 쓴 짧은 동화로 아주 작은 언어 모델을 만들어, 한 단어씩 문장이 자라는 모습을 봅니다.
새 교시·새 강의 소식 받기
이 강의에 새 교시가 더해지거나 이어지는 강의가 열리면 이메일로 알려 드려요.
R
ReflexKR
눌러 보며 배우는 파이썬과 Reflex. 모든 예제는 Reflex 0.10.0에서 직접 실행해 확인했습니다.
ReflexKR은 배너 광고 없이 무료로 운영돼요. 도움이 되셨다면 커피 한 잔으로 응원해 주세요.
© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0
질문과 답변
이 교시에서 궁금한 점을 남겨 주세요. 모든 언어 페이지의 질문이 함께 모입니다.