학습 자료

임베딩 — 의미를 좌표로 바꾼다


Article

17강 끝에 문제 하나를 남겨뒀다. "환불"이라는 단어로 검색하면 "결제 취소 안내"라는 문서는 걸리지 않는다. 글자는 다른데 뜻은 같다. 사람은 한눈에 알아보는데, 단어만 맞춰보는 검색은 이걸 놓친다.

이 문제를 푸는 도구가 **임베딩(embedding)**이다. 문장을 숫자로 된 좌표로 바꿔서, 뜻이 비슷한 문장끼리는 좌표도 가깝게 만드는 방법이다.

글자를 맞추는 대신 좌표를 잰다

단어로 찾기 vs 좌표로 찾기

단어 매칭 검색

글자가 같은지 본다

  • "환불"이라는 글자가 들어간 문서만 찾는다
  • "결제 취소", "돈 돌려받기"는 다른 단어라 놓친다
  • 동의어를 사람이 일일이 등록해줘야 한다

임베딩 좌표 검색

뜻이 가까운지 본다

  • 문장을 숫자 좌표로 바꿔 저장해둔다
  • "환불"과 "결제 취소"는 좌표가 가깝게 나온다
  • 글자가 달라도 뜻이 비슷하면 걸린다
관건은 '가깝다'를 재는 좌표를 어떻게 만드느냐다. 그 좌표가 임베딩이다.

문장을 숫자 줄로 바꾼다

임베딩은 별도의 모델이 하는 일이다. 문장이나 단어를 넣으면, 그 뜻을 담은 숫자 목록 하나를 돌려준다.

문장이 좌표가 되는 과정
  1. 문장을 넣는다"결제 취소는 어떻게 하나요"
  2. 임베딩 모델을 통과한다문장의 뜻을 읽어내는 전용 모델
  3. 숫자 목록이 나온다이 문장의 좌표. 대략 이런 식이다 — [0.12, -0.87, 0.03, …]
숫자는 수백~수천 개까지 이어진다. 사람이 그릴 수 있는 건 2~3차원뿐이라, 이 강의에서는 지도 위 한 점이라는 비유로 단순화한다.

가까울수록 뜻이 비슷하다

좌표가 가깝다는 게 실제로 뭘 뜻하는지, 지도로 그려본다.

의미 공간 위의 좌표들 (개념도)
  • 의미 공간뜻이 비슷한 문장끼리 가까이 모인다
    • 환불 · 결제 관련"환불", "결제 취소", "돈 돌려받기"가 여기 모인다
    • 배송 관련"배송 조회", "택배 언제 오나"가 여기 모인다
    • 계정 관련"비밀번호 재설정", "로그인 오류"가 여기 모인다

실제로는 이렇게 깔끔한 세 덩어리가 아니라 수백 차원 공간에 흩어진 점들이지만, 원리는 같다. 뜻이 비슷한 문장은 이 공간에서 서로 가까이 놓인다. "환불해주세요"라는 질문이 오면, 이 공간에서 가장 가까운 문서 몇 개를 찾으면 된다 — 글자가 하나도 안 겹쳐도 상관없다.

임베딩이 하는 일 정리
넣는 것나오는 것의미
"환불 정책이 뭔가요"숫자 좌표 A이 문장의 뜻이 공간 위 한 점으로 찍힌다
"결제 취소 안내" 문서숫자 좌표 B이 문서의 뜻도 같은 공간 위 한 점으로 찍힌다
A 와 B 의 거리가깝다글자는 다르지만 뜻이 비슷하다는 신호
임베딩 모델은 매번 같은 문장을 같은 좌표로, 비슷한 뜻은 가까운 좌표로 찍어주는 역할만 한다.

정리하면

임베딩은 문장의 뜻을 숫자 좌표로 바꾸는 일이다. 좌표가 가까울수록 뜻이 비슷하다는 신호이고, 이걸로 글자가 달라도 뜻이 같은 문서를 찾을 수 있다.

다시 짚어보기
  1. 01

    단어 매칭으로는 동의어를 못 잡는다

    17강에서 던진 문제. "환불"과 "결제 취소"는 글자가 다르다.

  2. 02

    임베딩은 문장을 숫자 좌표로 바꾼다

    전용 모델이 문장을 넣으면 뜻을 담은 숫자 목록을 돌려준다.

  3. 03

    좌표가 가까우면 뜻이 비슷하다

    숫자 하나하나엔 이름표가 없다. 의미 있는 건 좌표 사이의 거리다.

  4. 04

    이제 이 좌표를 저장하고 빠르게 찾아야 한다

    문서가 수백만 개면 어떻게 저장하고 검색하나. 다음 강의(벡터DB)에서 다룬다.

다음 강의에서는 이렇게 만든 좌표를 어디에 저장하고, 질문이 올 때마다 어떻게 가장 가까운 것들을 빠르게 찾아내는지 — 벡터 데이터베이스를 연다.