Vector search: vector DB

지능형 검색 = Vector Search

ChatGPT가 주목을 받는 이유가 무엇일까요?  

우리는 포털사이트에서 검색을 해도 충분한 답을 얻을 수 있는데, ChatGPT가 지금처럼 주목 받는 이유는 지능형 질의 응답이 가능하기 때문이라고 생각합니다. 

검색을 할 때 우리는 어떤 키워드로 검색을 해야 원하는 결과를 정확하게 얻을 수 있는지 이미 학습되어 있습니다. 

예를 들어, "점심 뭐먹지?" 라고 질의하고 싶다면, "맛집", "추천" 등의 키워드를 포함하여 검색합니다. 

이러한 방법이 우리가 지난 수년 간 포털을 사용하며 배운 키워드 중심 검색 방법입니다. 

반면 ChatGPT에게 질의를 할때에는 별다른 가공을 하지 않고 "점심 뭐먹지?"라고 질문을 합니다. 

이처럼 기존 방식에서 탈피해 새로운 기술 트렌드로 자리잡은 지능형 질의(검색)의 구조에 대해 좀 더 알아보겠습니다.

물론 일반 키워드 검색으로도 지능형 검색인 것처럼 보이게 검색 기능을 구현할 수는 있습니다. 

동의어 사전, 사용자 정의 사전을 만들어서 비슷한 뜻의 단어들을 전부 테스트 파일로 만들어 주면 됩니다. 

하지만 사람이 하나하나 한땀 한땀 준비하고 수정하고 관리하고.. 이 역시도 한계가 있습니다.


doc1 : "나는 사과를 먹고 싶어"

doc2 : "나는 사과를 받고 싶어"

"먹는 사과"를 검색하면 동의어 사전은 사과(apple)와 사과(apologize)를 구분하지 못하고 두 문서를 모두 반환하게 됩니다.

"먹는 사과"를 검색했을 때, doc1만 응답해주는 것이 바로 지능형 질의며, 지능형 질의를 가능하게하는 것이 바로 Vector Search입니다. 

아래 예를 통해 일반 키워드 검색과, Vector 검색의 차이를 좀 더 알아보겠습니다.


Q: 최근 가장 더운 지역이 어디야?

일반 포털사이트: 키워드 검색

Q: 최근 가장 더운 지역이 어디야?


위와 같은 질문을 했을 때, 포탈 사이트들은 키워드 기반 검색이기 때문에 "어디", "더운", "지역" 등 키워드만 추출하여 검색 결과를 보여줍니다.

하지만 Vector 기반 검색은 "더운","뜨거운","폭염" 등의 단어의 유사도를 판단하여 결과를 보여줍니다.

데모 사이트: Vector 검색

Naver에서 지정한 Keyword로 검색된 결과를 크롤링하여 DB 내 샘플 데이터로 사용하였습니다.

Technical description

한글언어모델: jhgan/ko-sbert-sts 사용

1. ML model Import

https://huggingface.co/에서 text를 벡터필드화 시켜주는 모델을 찾아 Elasticsearch로 Import 합니다. 

여기에서 저는

jhgan/ko-sbert-sts모델을 사용하였습니다.

Tip. 해당 링크에서 "Open in Colab" 버튼을 클릭하여 Cloud_id, User, Password, Model_id 만 수정하여 모델을 쉽게 Import 가능


2. Model 실행

Actions에서 실행버튼을 클릭하여 모델을 실행합니다.

3. Ingest pipeline 생성

Model를 적용하여 Vector필드를 생성하는 pipeline을 만듭니다.


4. Pipeline이 적용된 Index 생성

Index Settings에서 default pipeline 적용 또는 reindexing을 사용하여 pipeline을 적용하여 벡터 필드를 만듭니다.

5. 검색~!

Knn으로 vector검색을 합니다.

키워드가 없어도 Vector Search로 가장 유사한 내용의 데이터를 잘 보여줍니다.

결론: ElasticElastic하네요👍

사실 ElasticVector Search 기능이 나온지는 좀 됐지만 성능이 느리고 인덱스 용량이 커져 쓰지 못하는 기능이기도 했습니다. 

하지만 Chat GPT 가 나오면서 유저들은 검색 성능(심리적 허용선 1초 이내)에 대해 관대해졌습니다. 

빠르게 결과가 나오는 것도 중요하지만 내가 원하는 데이터를 정리해서 보여준다면 몇 분이라도 기다릴 수 있는 인내심이 생겼습니다. 

이처럼 Chat GPT 가 출현하면서 외면 받아오던 Vector Field 의 중요성이 대두 되고 있으며, 이를 대응하기 위해 다양한 Vector DB 가 출시되고 있습니

다. (AWS 아키텍쳐에서는 Opensearch를 Vector DB라고 표현하고 있습니다.)

아직까지는 검증되지 않은 Vector DB를 사용하기 보다는 우리에게 친숙한 Elasticsearch를 활용하면서 Chat GPT의 활용 범위를 넓혀가는게 

어떨까 합니다. 

LinkedIn

@younabiya