AI VIDEO BRIEFING
텍스트 임베딩과 시맨틱 검색 원리: 벡터·코사인 유사도·풀링·FAISS 정리
허깅페이스가 설명하는 텍스트 임베딩의 기본 개념과, 코사인 유사도·풀링·FAISS 인덱스로 의미가 비슷한 문서를 찾아내는 시맨틱 검색의 작동 원리를 정리했다.

핵심 메시지
쉽게 이해하기
텍스트 임베딩은 글을 숫자들의 배열, 곧 벡터로 표현하는 방법이다. 핵심은 의미가 비슷한 항목일수록 벡터끼리도 가까워지도록 만든다는 점이다. 이런 벡터는 보통 BERT 같은 인코더 기반 모델로 만들어내며, 영상에서는 세 개의 문장을 인코더에 넣어 세 개의 벡터를 얻는 예를 보여준다.
벡터끼리 얼마나 가까운지는 유사도 지표로 잰다. 임베딩 벡터는 보통 매우 높은 차원의 공간에 놓이기 때문에, 벡터 사이의 거리를 재는 어떤 방식이든 유사도 지표가 될 수 있다. 대표적인 것이 두 벡터가 이루는 각도를 보는 코사인 유사도로, 각도가 작을수록 더 비슷하다고 본다.
문제는 BERT 같은 모델이 토큰(단어)마다 벡터를 하나씩 내놓는다는 점이다. 예컨대 'I took my dog for a walk' 한 문장에서 단어 수만큼 벡터가 나오고, 영상의 예에서는 문장당 9개의 384차원 벡터가 출력된다. 우리가 원하는 것은 문장 전체를 대표하는 벡터 하나이므로, 이를 합치는 풀링(pooling) 기법이 필요하다.
가장 단순한 풀링은 CLS 토큰의 임베딩만 쓰는 방식이고, 다른 방법은 토큰 임베딩들을 평균 내는 평균 풀링(mean pooling)이다. 평균을 낼 때는 의미 없는 패딩 토큰을 빼야 하므로 어텐션 마스크를 사용한다. 이렇게 하면 문장마다 384차원 벡터 하나가 만들어진다.
문장 임베딩이 준비되면 쌍마다 코사인 유사도를 계산할 수 있다. 영상에서는 scikit-learn 함수로 'I took my dog for a walk'와 'I took my cat for a walk'의 유사도가 0.83으로 나오는 것을 보여준다. 이 아이디어를 확장해 질문 하나와 문서 묶음 전체의 유사도를 비교하면 시맨틱 검색이 된다. 허깅페이스 Datasets 라이브러리에서는 SQuAD 데이터셋 샘플의 모든 구절을 임베딩해 별도 칼럼에 저장하고, FAISS 인덱스를 붙여 질문 임베딩과 가장 가까운 문서 세 개를 빠르게 찾아낸다.
주요 인사이트
- 키워드 일치가 아니라 의미의 가까움으로 검색하므로, 표현이 달라도 뜻이 비슷한 문서를 찾아낼 수 있다.
- 토큰 단위 벡터를 문장 벡터로 합치는 풀링 방식(CLS vs 평균)의 선택이 결과 표현에 영향을 준다.
- 평균 풀링에서 패딩 토큰을 제외하기 위해 어텐션 마스크를 쓰는 것은 정확한 문장 표현을 위한 실무적 디테일이다.
- FAISS 같은 인덱스를 쓰면 대량의 문서 임베딩 중에서 질문과 가까운 항목을 효율적으로 검색할 수 있다.
자주 묻는 질문
텍스트 임베딩이란 무엇인가?
텍스트를 숫자 배열인 벡터로 표현하는 방식으로, 의미가 비슷한 텍스트일수록 벡터도 서로 가깝게 놓인다. 보통 BERT 같은 인코더 기반 모델로 만든다.
토큰별 벡터를 어떻게 문장 하나의 벡터로 만드는가?
풀링 기법을 쓴다. 가장 단순하게는 CLS 토큰의 임베딩을 쓰고, 또는 토큰 임베딩들을 평균 내는 평균 풀링을 쓰되 어텐션 마스크로 패딩 토큰을 제외한다.
시맨틱 검색은 어떻게 이루어지는가?
문서들과 질문을 같은 방식으로 임베딩한 뒤, 질문 벡터와 가장 가까운 문서 벡터를 찾는다. 영상에서는 Datasets의 FAISS 인덱스로 질문과 가장 유사한 문서 3개를 찾아내는 과정을 보여준다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗