앱 개발자를 위한 임베딩 사용 가이드
- 벡터 임베딩은 다양한 입력에 대한 유사도 측정에 효과적이기 때문에 검색과 추천 기능에 적합함. 다른 언어인 프랑스어나 일본어에서도 잘 동작함.
- Pgvector는 임베딩을 저장하고 쿼리할 수 있는 Postgres 확장으로, 새로운 서비스 추가 없이 SQL 로직과 임베딩 연산을 결합할 수 있어 강력함.
- LLM과 달리, 임베딩 사용은 일반적인 결정론적 코드와 유사한 느낌을 줌.
아이콘 검색 및 추천 프로젝트 개발
- Pgvector 셋업 후, 아이콘 데이터를 임베딩 벡터로 인코딩하는 전략을 만듦.
- OpenAI의 text-embedding-3-small 모델 사용.
- Cosine similarity로 검색어와 각 아이콘 임베딩 간 유사도 측정.
- 임베딩 검색에 아이콘셋 필터링 등 비즈니스 로직을 결합.
- 검색어에 대한 아이콘 클릭 데이터를 활용한 랭킹 알고리즘 예시 제시.
- 선택된 아이콘과 유사한 아이콘 추천을 위해 임베딩 비교 활용.
구현 방안 요약
- 벡터 DB로 pgvector/Postgres 선택. MongoDB 등 다른 선택지도 있음.
- Typescript로 개발, drizzle-orm 사용. 다른 언어/프레임워크 라이브러리도 다양함.
- 앱은 Neon에 호스팅. fly.io, Supabase 등의 관리형 DB 호스팅 서비스 활용 가능.
- OpenAI의 text-embedding-3-small 임베딩 모델 사용. Huggingface 리더보드에서 다른 모델 선택 가능.
- 아이콘 속성 중 검색 관련성 높은 것들을 key-value 쌍으로 임베딩.
- Cosine similarity를 거리 함수로 사용. Pgvector는 l2 distance, inner product도 지원.
- 검색 결과는 top 50개로 제한. 거리 범위 사용시 넓게 잡고 limit와 함께 사용 권장.
GN⁺의 의견
- 대부분의 프로젝트에서 pgvector와 같이 기존 DB에 벡터 기능을 추가하는 방식으로 충분할 것 같음. 별도 벡터 DB 도입은 대규모 서비스에서나 필요해보임.
- 임베딩 검색에 비즈니스 로직을 자연스럽게 결합할 수 있다는 점이 큰 장점. SQL의 강력함을 그대로 활용할 수 있음.
- 랭킹 알고리즘에 사용자 피드백 데이터를 반영하는 아이디어가 좋음. 검색의 정확도를 지속적으로 개선시킬 수 있을 것 같음.
- LLM에 비해 임베딩 기반 서비스는 동작이 명확하고 디버깅도 용이해 실제 서비스에 적용하기 훨씬 수월할 것 같음.
- 다양한 오픈소스 임베딩 모델이 공개되어 있어, 자체 모델 개발이 어려운 경우에도 고품질 임베딩을 손쉽게 활용 가능함.