오늘 방문 /누적 방문 /완성한 레슨 소개 ↗
SECONDTEAM
RAG·검색
🔍 레슨

임베딩 — 의미를 숫자로

'김치전'과 '부침개'가 가깝다는 걸 컴퓨터가 어떻게 알까요? 의미를 좌표로 바꿔서요.

① 오늘의 고민
"맛 얘기만 골라줘"
우리동네 반찬가게에 리뷰가 1000개나 쌓였어요. 그중 '맛'에 대한 얘기만 모아 보고 싶어요. 그래서 검색창에 "맛"이라고 쳤더니 — "맛있어요"는 나오는데 "입에 착 붙네요", "간이 딱이에요"는 하나도 안 나와요.

분명 맛 얘기인데 왜 안 걸릴까요? 오늘은 컴퓨터가 '김치전'과 '부침개'가 비슷한 말이라는 걸 어떻게 아는지 — 임베딩을 만나러 갑니다.

설명을 따라 진행하면, 여기서 직접 쳐보게 돼요 👇
~/my-shop
$ _
📚 「임베딩 — 의미를 숫자로」 레슨 내용 전체 텍스트로 훑어보기
"맛 얘기만 골라줘"
우리동네 반찬가게에 리뷰가 1000개나 쌓였어요. 그중 '맛'에 대한 얘기만 모아 보고 싶어요. 그래서 검색창에 "맛"이라고 쳤더니 — "맛있어요"는 나오는데 "입에 착 붙네요", "간이 딱이에요"는 하나도 안 나와요.

분명 맛 얘기인데 왜 안 걸릴까요? 오늘은 컴퓨터가 '김치전'과 '부침개'가 비슷한 말이라는 걸 어떻게 아는지 — 임베딩을 만나러 갑니다.

검색창에 '맛'이라고 쳤을 때 '간이 딱이에요'라는 리뷰가 안 나온 이유는?
맞아요. 보통의 검색은 글자(키워드)가 똑같이 들어있는지만 봐요. '간이 딱이에요'에는 '맛'이라는 글자가 없으니 못 찾는 거죠. 뜻은 같은데 글자가 다르면 놓치는 게 키워드 검색의 한계예요.
같은 '맛 얘기를 찾아줘' 요청, 두 가지 방식이 이렇게 달라요.
🔤 키워드 검색 (글자 일치): 리뷰에 '맛'이라는 글자가 있어야 걸려요.
"맛있어요" ✅ / "간이 딱이에요" ❌
빠르고 단순하지만 표현이 다르면 놓쳐요.
🧠 의미 검색 (뜻 일치): 뜻이 비슷하면 글자가 달라도 걸려요.
"맛있어요" ✅ / "간이 딱이에요" ✅
비결은 뜻을 숫자(좌표)로 바꿔서 비교하는 것 — 오늘의 주인공이에요.

컴퓨터는 '뜻'을 직접 못 느껴요. 대신 모든 말을 좌표(위치)로 바꿔 놓는 트릭을 써요.

핵심 한 줄
· 비슷한 뜻 → 가까운 좌표
· 다른 뜻 → 먼 좌표
· 이렇게 뜻을 숫자 좌표로 바꾸는 걸 임베딩(embedding)이라고 해요

그래서 '김치전'과 '부침개'는 지도 위에서 바로 옆 동네가 되고, '김치전'과 '주차장'은 멀리 떨어진 좌표가 돼요. 글자가 아니라 위치로 비슷함을 재는 거예요.

우리 가게 메뉴 김치전의 좌표를 찍었어요. 다음 중 가장 가까운 좌표에 있을 말은 무엇일까요?

정답은 부침개예요. 임베딩은 글자 수나 등장 빈도가 아니라 으로 가까움을 정해요. '부침개'는 김치전과 거의 같은 음식이라 좌표가 딱 붙어 있고, '영수증'·'주차장'은 뜻이 멀어 떨어져 있어요.

임베딩이 궁금하면 Claude에게 직접 물어보면 돼요. 가게 폴더에서 Claude를 켜고 우리 메뉴로 물어봐요.

임베딩 관점에서 '김치전'과 좌표가 가까운 말과 먼 말을 우리 반찬가게 단어로 예를 들어 설명해줘 — 뜻이 가까운 단어를 임베딩 관점으로 물어봐요
이렇게 개념이 헷갈릴 때 내 단어(반찬가게 메뉴)로 예를 들어달라고 하면 훨씬 잘 와닿아요.

진짜 임베딩은 좌표 숫자가 수백~수천 개라 그림으로 못 그려요. 그래서 2D 지도(가로·세로 두 칸)로 확 줄여서 직관만 잡아요.

우리 가게 단어 지도 (상상)
한쪽 구석엔 김치전·부침개·지짐이가 옹기종기 모여 있어요.
다른 쪽 구석엔 맛있어요·간이 딱이에요·입에 착 붙네요가 또 한 무리.
멀찍이 주차장·영수증이 따로 떨어져 있어요.

'맛 얘기'를 찾고 싶으면? 그 무리 근처의 리뷰를 좌표로 데려오면 끝. 글자가 '맛'이든 '간'이든 상관없이, 가까이 있으면 같은 얘기예요.

의미 검색(임베딩 검색)이 두 리뷰가 비슷한지 판단하는 기준은?
맞아요. 좌표 사이의 거리로 재요. 글자가 한 자도 안 겹쳐도, 뜻이 가까우면 좌표가 붙어 있어 '비슷하다'고 판단해요. 그래서 '맛있어요'와 '간이 딱이에요'가 같이 걸리는 거죠.

임베딩이 만들어내는 좌표(숫자들의 묶음) — 이걸 부르는 이름이 따로 있어요. 한 점의 위치를 숫자 여러 개로 적은 것, 뭐라고 부를까요?

정답! 벡터(vector)예요. 임베딩이 만든 좌표 묶음을 벡터라고 불러요. 그래서 의미 검색을 '벡터 검색'이라고도 하죠. 앞 레슨 'RAG·벡터검색'에서 본 그 벡터가 바로 이 좌표였어요.

이제 Claude에게 키워드 말고 '뜻'으로 리뷰를 골라달라고 해봐요. '맛' 글자가 없는 리뷰까지 데려오는지 보세요.

reviews.txt 에서 '맛'에 대한 얘기를 글자 말고 뜻으로 골라줘. '맛' 글자가 없어도 맛 얘기면 포함해줘 — 글자가 아니라 뜻으로 골라달라고 부탁해요
'맛' 글자가 없는 '간이 딱이에요'까지 걸렸죠? 이게 임베딩(의미)으로 찾는 힘이에요.

한 발 더. 특정 리뷰와 좌표가 가까운(=비슷한 얘기를 하는) 리뷰를 묶어달라고 해봐요.

'국물이 진해요' 이 리뷰랑 뜻이 가까운 리뷰들을 reviews.txt 에서 묶어서 보여줘 — 한 리뷰와 뜻이 가까운 리뷰를 모아달라고 해요
리뷰 1000개도 이렇게 비슷한 좌표끼리 무리로 묶으면, 같은 주제 얘기를 한눈에 모을 수 있어요.
한 줄로
임베딩은 말의 뜻을 좌표(벡터)로 바꿔요 — 비슷한 뜻은 가까운 좌표. 그래서 글자가 달라도 뜻으로 검색할 수 있고, '맛' 글자 없는 리뷰까지 골라낼 수 있어요.
다음 레슨에서
그런데 리뷰가 아니라 긴 문서를 통째로 임베딩하면 좌표가 뭉뚱그려져 잘 안 맞아요. 그래서 '청킹 — 문서를 어떻게 자르나'에서 문서를 알맞게 자르는 법을 배워요. 가게는 계속 자랍니다. 🌱