본문 바로가기

Book

쉽고 빠르게 익히는 실전 LLM - CHAPTER 2. LLM을 이용한 의미 기반 검색

728x90

 

텍스트 임베딩

단어나 구문을 맥락적 의미를 기반으로 다차원 공간에서 기계가 읽을 수 있는 수치 벡터로 표현하는 방법

> 두 구문이 유사하다면, 구문들의 벡터들은 유클리드 거리가 가깝다

 

텍스트 임베더

단어 또는 구문을 받아 벡터로 변환, 텍스트를 벡터로 표현하는 품질을 결정하기 때문에 중요

> 클로즈드 소스인 OpenAI의 임베딩 엔진은 여러 가지 옵션을 제공, 한 번의 API 호출로 모두에 대한 임베딩을 생성할 수 있어 효율적임

> 오픈소스인 트랜스포머 라이브러리의 BERT를 이용한 Bi-encoder는 두 개의 BERT 모델(입력과 출력 텍스트 쌍)을 인코딩하여 각 사이의 의미적 관계를 포착함

 

벡터

다시 텍스트로 되돌릴 수 없지만, 인코딩된 상태에서 점수를 비교할 수 있는 텍스트의 새로운 표현법

 

의미 기반 검색 시스템

사용자 쿼리의 의미와 맥락을 이해하고, 이를 검색 가능한 문서의 의미 및 맥락과 대조

 

비대칭적 의미 기반 검색

입력 쿼리의 의미 정보와 검색 시스템 문서/정보 사이에 나타나는 불균형

ex) 온라인 쇼핑몰의 김 품목 설명과 짧은 검색어를 비교라혀는 검색 시스템은 비대칭으로 간주됨

 

비대칭적 의미 기반 검색 시스템의 흐름

- 1단계: 문서 저장

문서에 대한 몇 가지 전처리(청킹)를 수행하고, 임베딩(OpenAI) 후 데이터베이스에 저장(파인콘)

- 2단계: 문서 검색

임베딩 유사도를 통해 사용자 쿼리(FastAPI)와 가까운 후보 문서를 검색(OpenA( 임베딩+파인콘)하고, 필요한 경우 재순위화(Cross-encoder)하여 최종 결과를 반환(FastAPI)

 

문서 청킹

큰 문서를 임베딩하기 위해 더 작고 관리 가능한 청크로 나누는 것

> 청크로 나누지 않으면 텍스트 임베딩 시 문맥 윈도우 한계에 도달할 수 있음, 품질 저하로 이어짐

- 최대 토큰 범위 분할

- 자연 공백을 이용한 분할

- 클러스터링을 이용한 최대 토큰 범위 분할

 

벡터 데이터베이스

(문서의 의미를 인코딩하고 저장하는) LLM에 의해 생성된 임베딩을 저장

 

검색 결과 재순위화

벡터 데이터베이스로부터 유사도 비교를 사용하여 주어진 쿼리에 대한 잠재적 결과를 검색한 이후, 사용자에게 가장 관련된 결과를 제시할 수 있도록 순위를 다시 지정하는 것

- Cross-encoder: 두 조각의 텍스트를 벡터화 반환 없이 유사도 점수를 출력

- Bi-encoder: 여러 텍스트 조각을 미리 벡터로 임베딩, 이후 쿼리가 주어지면 실시간으로 검색