임베딩 — 의미를 좌표로 바꾼다
Article
17강 끝에 문제 하나를 남겨뒀다. "환불"이라는 단어로 검색하면 "결제 취소 안내"라는 문서는 걸리지 않는다. 글자는 다른데 뜻은 같다. 사람은 한눈에 알아보는데, 단어만 맞춰보는 검색은 이걸 놓친다.
이 문제를 푸는 도구가 **임베딩(embedding)**이다. 문장을 숫자로 된 좌표로 바꿔서, 뜻이 비슷한 문장끼리는 좌표도 가깝게 만드는 방법이다.
글자를 맞추는 대신 좌표를 잰다
단어 매칭 검색
글자가 같은지 본다
- "환불"이라는 글자가 들어간 문서만 찾는다
- "결제 취소", "돈 돌려받기"는 다른 단어라 놓친다
- 동의어를 사람이 일일이 등록해줘야 한다
임베딩 좌표 검색
뜻이 가까운지 본다
- 문장을 숫자 좌표로 바꿔 저장해둔다
- "환불"과 "결제 취소"는 좌표가 가깝게 나온다
- 글자가 달라도 뜻이 비슷하면 걸린다
문장을 숫자 줄로 바꾼다
임베딩은 별도의 모델이 하는 일이다. 문장이나 단어를 넣으면, 그 뜻을 담은 숫자 목록 하나를 돌려준다.
- 문장을 넣는다"결제 취소는 어떻게 하나요"
- 임베딩 모델을 통과한다문장의 뜻을 읽어내는 전용 모델
- 숫자 목록이 나온다이 문장의 좌표. 대략 이런 식이다 — [0.12, -0.87, 0.03, …]
가까울수록 뜻이 비슷하다
좌표가 가깝다는 게 실제로 뭘 뜻하는지, 지도로 그려본다.
- 의미 공간
- 환불 · 결제 관련
- 배송 관련
- 계정 관련
실제로는 이렇게 깔끔한 세 덩어리가 아니라 수백 차원 공간에 흩어진 점들이지만, 원리는 같다. 뜻이 비슷한 문장은 이 공간에서 서로 가까이 놓인다. "환불해주세요"라는 질문이 오면, 이 공간에서 가장 가까운 문서 몇 개를 찾으면 된다 — 글자가 하나도 안 겹쳐도 상관없다.
| 넣는 것 | 나오는 것 | 의미 |
|---|---|---|
| "환불 정책이 뭔가요" | 숫자 좌표 A | 이 문장의 뜻이 공간 위 한 점으로 찍힌다 |
| "결제 취소 안내" 문서 | 숫자 좌표 B | 이 문서의 뜻도 같은 공간 위 한 점으로 찍힌다 |
| A 와 B 의 거리 | 가깝다 | 글자는 다르지만 뜻이 비슷하다는 신호 |
정리하면
임베딩은 문장의 뜻을 숫자 좌표로 바꾸는 일이다. 좌표가 가까울수록 뜻이 비슷하다는 신호이고, 이걸로 글자가 달라도 뜻이 같은 문서를 찾을 수 있다.
- 01
단어 매칭으로는 동의어를 못 잡는다
17강에서 던진 문제. "환불"과 "결제 취소"는 글자가 다르다.
- 02
임베딩은 문장을 숫자 좌표로 바꾼다
전용 모델이 문장을 넣으면 뜻을 담은 숫자 목록을 돌려준다.
- 03
좌표가 가까우면 뜻이 비슷하다
숫자 하나하나엔 이름표가 없다. 의미 있는 건 좌표 사이의 거리다.
- 04
이제 이 좌표를 저장하고 빠르게 찾아야 한다
문서가 수백만 개면 어떻게 저장하고 검색하나. 다음 강의(벡터DB)에서 다룬다.
다음 강의에서는 이렇게 만든 좌표를 어디에 저장하고, 질문이 올 때마다 어떻게 가장 가까운 것들을 빠르게 찾아내는지 — 벡터 데이터베이스를 연다.