GN⁺: AI에 호기심 있는 앱 개발자를 위한 좋은 시작점, Embeddings
(bawolf.substack.com)앱 개발자를 위한 임베딩 사용 가이드
- 벡터 임베딩은 다양한 입력에 대한 유사도 측정에 효과적이기 때문에 검색과 추천 기능에 적합함. 다른 언어인 프랑스어나 일본어에서도 잘 동작함.
- 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에 비해 임베딩 기반 서비스는 동작이 명확하고 디버깅도 용이해 실제 서비스에 적용하기 훨씬 수월할 것 같음.
- 다양한 오픈소스 임베딩 모델이 공개되어 있어, 자체 모델 개발이 어려운 경우에도 고품질 임베딩을 손쉽게 활용 가능함.
Hacker News 의견
해커뉴스 댓글 요약
RAG 모델을 활용한 문서 임베딩 및 유사도 검색의 편의성
-
sentence-transformers
와faiss
라이브러리를 사용하면 쉽게 문서 임베딩과 유사도 검색을 구현할 수 있음 - 뉴욕 타임즈의 추천 시스템보다 나은 성능을 보여주는 것이 재미있는 프로젝트가 될 수 있음
- James Briggs의 유튜브 채널에 관련 내용이 잘 설명되어 있음
임베딩의 기본 개념 이해
- AI/딥러닝 없이도 단어에 고유 인덱스를 부여하고, 빈도수에 따라 값을 누적하는 방식으로 임베딩을 만들 수 있음
- 코사인 유사도 등을 활용해 유사도 검색도 가능함
- 딥러닝 기반 임베딩은 이러한 기본 개념 위에 단어/토큰 필터링, 동의어 처리 등의 기능이 추가된 것임
임베딩 생성 과정에 대한 상세 설명 부족
- 글에서는 임베딩 생성 과정에 대해
They're a bit of a black box
라고만 언급하고 자세히 설명하지 않음 - 직접 단어 벡터를 만들어보고, Word2Vec 등의 방법론을 이해하는 것이 도움될 수 있음
동음이의어 처리의 어려움
- 동음이의어로 인해 검색 결과가 의도치 않게 나오는 경우가 있음 (예: "king"으로 검색 시 ruler(자) 아이콘이 나오는 등)
- 관련 아이콘을 찾을 수 있다는 장점과 함께 재미있는 도전 과제가 될 수 있음
벡터 저장소 없이도 임베딩 활용 가능
- 대용량 데이터의 프로덕션 환경에서는 지연 시간 등의 이유로 벡터 저장소가 중요하지만, 토이 프로젝트 수준에서는 Numpy 등으로 간단히 구현 가능
- Numpy의
@
연산자를 활용해 정규화된 쿼리 벡터와 레코드 행렬 간 내적을 구하는 방식으로 유사도 계산 가능
로컬 환경에서 임베딩 로직 실행 방법
- OpenAI API에 의존하지 않고 로컬 환경이나 데이터베이스에서 직접 임베딩을 생성할 수 있는 방법에 대한 궁금증 제기
기술 문서 작성 시 임베딩 활용 가능성
- 챗GPT 등장 이후 기술 문서 작성자들 사이에서 시맨틱 검색 도구로서의 활용 가능성에 대한 논의 활발
- 문서 작성에 필요한 리서치 단계에서 효율성 향상에 도움될 수 있음
임베딩 저장 및 활용 방법
- 임베딩을 생성하고 저장한 뒤, 필요할 때마다 불러와서 사용하는 것이 일반적임
- 간단한 경우에는 임베딩을 바로 배열 등으로 전달해 사용할 수도 있음
- 임베딩 저장이 어려운 부분인데, 특수한 데이터베이스가 필요한 건 아니고 SQLite의 BLOB 등으로도 가능함
- 임베딩이 '만료'되는 경우는 없음
AI 입문 개발자를 위한 배경 지식 설명 부족
- 글에서 임베딩이나 벡터 데이터베이스 등의 개념을 설명 없이 바로 사용법으로 넘어가고 있음
- AI에 관심 있는 앱 개발자의 좋은 시작점을 찾는 사람들에게는 관련 개념에 대한 소개가 필요했을 것으로 보임