BQ개발자입니다.
지난 편에서 RAG가 의미적 검색을 통해 작동한다고 했는데요, 컴퓨터가 어떻게 의미를 이해할 수 있을까요?
"'휴가'와 '연차'가 비슷하다는 걸 컴퓨터가 어떻게 알지?"
먼저 근본적인 사실부터 짚고 가겠습니다.
컴퓨터는 텍스트를 직접 이해할 수 없습니다. 오직 숫자만 처리할 수 있어요.
그래서 텍스트를 어떻게든 숫자로 바꿔야 합니다.
전통적인 방법은 단순했습니다:
- "휴가" = 1번
- "연차" = 2번
- "프로젝트" = 3번
하지만 이 방식으로는 단어들 사이의 관계를 표현할 수 없어요. 1번과 2번이 비슷한지, 다른지 알 수 없으니까요.
임베딩은 이 문제를 해결하는 똑똑한 방법입니다.
단순히 번호를 매기는 대신, 여러 개의 숫자를 조합해서 의미를 표현합니다.
예를 들어:
- "휴가": [0.2, -0.5, 0.8, 0.3, ...]
- "연차": [0.3, -0.4, 0.7, 0.2, ...]
- "프로젝트": [-0.6, 0.9, -0.2, 0.5, ...]
핵심은 예측 과제를 통한 자동 조정입니다.
시작: 모든 단어에 랜덤 숫자 부여
- "휴가": [0.1, 0.1, 0.1, 0.1, ...]
- "연차": [-0.2, 0.3, -0.1, 0.2, ...]
- "프로젝트": [0.2, -0.1, 0.3, -0.3, ...]
과제: 빈칸 채우기
"오늘은 휴가를 ___했다"에서 다음 단어 예측하기
알고리즘은 각 단어의 숫자들을 사용해서 계산합니다.
정답이 "신청"인데 "먹"이라고 예측했다면? 오차가 발생합니다.
자동 조정 메커니즘
오차를 줄이기 위해 숫자들이 자동으로 조정됩니다:
- "휴가"의 숫자들을 조금씩 바꿔서 "신청"과 잘 맞도록
- "먹다"의 숫자들을 조금씩 바꿔서 "휴가"와 멀어지도록
참고:
엄밀히는 "휴가를 신청했다"에서 주변 단어 예측이 더 정확하지만,
함께 나타나는 단어들이 비슷한 벡터를 갖게된다는 의미를 단순화한거고,
어차피 저도 잘 모르니 감만 잡으시죠!!
이 과정을 수백만 번 반복하면...
"휴가를 신청했다"
"연차를 신청했다"
"휴가를 즐겼다"
"연차를 사용했다"
이런 문장들을 계속 학습하면서:
- "휴가"와 "연차"는 비슷한 위치에 나타남 → 비슷한 조정을 받음 → 비슷한 숫자가 됨
- "프로젝트"는 다른 위치에 나타남 → 다른 조정을 받음 → 다른 숫자가 됨
결과적으로:
- "휴가": [0.2, -0.5, 0.8, ...]
- "연차": [0.3, -0.4, 0.7, ...] ← 비슷한 패턴
- "프로젝트": [-0.6, 0.9, -0.2, ...] ← 전혀 다른 패턴
각 숫자가 무엇을 의미하는지는 알 수 없습니다. 하지만 비슷한 곳에 나타나는 단어들이 비슷한 숫자를 갖게 되는 자연스러운 결과가 나타납니다.
이제 단어 간 거리를 계산하면:
- "휴가" - "연차": 작은 차이
- "휴가" - "프로젝트": 큰 차이
이 거리가 곧 의미의 차이를 나타내게 됩니다.
비슷한 문맥에서 쓰이는 단어들이 자연스럽게 가까운 숫자를 갖게 되었으니까요.
💡 요약:
임베딩은 "단어의 사용 패턴이 자동으로 숫자에 인코딩된 결과"입니다.
마법이 아니라 수학적 최적화의 결과예요.
하지만 여기서 새로운 문제가 생깁니다. "책 한 권 분량의 긴 문서는 어떻게 처리하지?"
다음 편에서는 "청킹 - 긴 글을 어떻게 나눌 것인가"에 대해 다뤄보겠습니다.
---
여러분의 좋아요와 공유는 사랑입니다 🥰
#BQ개발자 #LLM애플리케이션 #임베딩 #AIEngineering
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9