Phase 2: Embeddings & Semantic Search
키워드 검색은 단어가 정확히 일치하지 않으면 실패합니다.
만약 이력서에 "team management"라고 적혀 있고 채용 공고에서 "leadership"을 요구한다면, 기본적인 검색은 결과가 전혀 나오지 않습니다. 단어는 다르지만 의미는 같습니다.
2단계에서는 임베딩과 시맨틱 검색을 사용하여 이 문제를 해결합니다.
작동 방식:
• 토큰화(Tokenization): 컴퓨터는 단어를 읽지 않습니다. 숫자를 읽습니다. 토크나이저는 텍스트를 토큰(token)이라고 불리는 작은 조각으로 나누고 이를 토큰 ID(Token ID)로 변환합니다. 흔한 단어는 하나의 토큰이 되고, 희귀한 단어는 여러 개의 토큰으로 나뉩니다.
• 임베딩(Embeddings): 토큰 ID는 단순한 레이블일 뿐입니다. 임베딩 레이어는 해당 ID를 벡터(vector)로 변환합니다. 벡터는 의미를 나타내는 긴 숫자 목록입니다. 모델은 하나의 숫자 대신 여러 차원을 사용하여 개념을 설명합니다.
• 차원(Dimensions): 이 숫자들을 좌표라고 생각하세요. 한 차원은 "frontend vs backend"를 나타낼 수 있고, 다른 차원은 "web vs systems"를 나타낼 수 있습니다. 고차원 벡터를 통해 모델은 수학적 공간에서 "React"와 "JavaScript"를 서로 가까운 곳에 배치할 수 있습니다.
• 시맨틱 검색(Semantic Search): 질문을 하면 시스템은 질문을 벡터로 변환합니다. 그런 다음 사용자의 벡터를 저장된 문서의 벡터들과 비교합니다.
• 코사인 유사도(Cosine Similarity): 이는 두 벡터 사이의 각도를 측정합니다. 벡터가 같은 방향을 가리키면 유사한 것입니다. 이를 통해 "notice period"라고만 검색해도 시스템이 "resignation requirements"를 찾아낼 수 있습니다.
프로덕션 적용을 위한 핵심 교훈:
- 벡터 데이터베이스(Vector Databases): 수백만 개의 벡터를 검색하는 것은 느립니다. Pinecone이나 Qdrant와 같은 데이터베이스는 인덱싱을 사용하여 밀리초 단위로 가장 가까운 이웃을 찾아냅니다.
- 모델 마이그레이션(Model Migrations): 모든 임베딩 모델은 서로 다른 수학적 공간을 사용합니다. OpenAI 벡터를 Cohere 벡터와 비교할 수 없습니다. 모델을 변경하면 모든 데이터를 다시 임베딩해야 합니다.
- 비용 대비 ROI(Cost vs ROI): 수백만 개의 청크(chunk)를 다시 임베딩하는 것은 비용이 많이 듭니다. 기업들은 정확도 향상이 마이그레이션 비용을 정당화할 만큼 크지 않다면 종종 기존 모델을 그대로 유지합니다.
- 항상 원본 텍스트 청크를 저장하세요. 나중에 모델을 업그레이드하면 기존 텍스트를 사용하여 새로운 벡터를 생성할 수 있습니다.
2단계는 지능이 구현되는 단계입니다.
Source: https://dev.to/surajrkhonde/phase-2-embeddings-semantic-search-3lco
선택 사항 학습 커뮤니티: https://t.me/GyaanSetuAi
