검색 엔진이 이모지를 이해하도록 만들었습니다 (그리고 이상하게 유용합니다)

발행: (2025년 12월 11일 오전 09:28 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

데모 URL

  • 키 이모지 → 실제 키를 가져오기:
  • 자전거 이모지 → 자전거 및 액세서리 가져오기:
  • 프린터 + 종이 → 프린터 용품 가져오기:
  • 귀여운 반려동물 귀걸이 (보석점) → 제품 제목이 다른 언어여도 고양이·강아지 귀걸이를 찾아줌:
  • Measure 🔥 (기술 문서) → 온도/불 측정 장치를 추천함:

파이프라인

  1. 웹사이트 크롤링Trafilatura 로 텍스트 추출.
  2. 임베딩 생성: BGE‑M3 (BAAI) 로 1024 차원 벡터 생성.
  3. Solr 에 원본 텍스트와 벡터 모두 저장.
  4. 쿼리 시점: 레키컬 검색 + KNN 벡터 검색을 실행하고 점수를 결합 (하이브리드 접근).

왜 이모지가 작동하는가

  • BGE‑M3 은 다언어 + 다중모달 데이터로 학습돼 이모지(예: 🔑)가 여러 언어의 텍스트 등가물(“key”, “Schlüssel”, “cheie” 등)과 의미적으로 가깝다는 것을 학습함.
  • 따라서 🚲 로 검색하면 “bicycle”, “bike”, “Fahrrad”, “bicicletă” 등과 같은 결과가 명시적인 번역 단계 없이 반환됨.

임베딩 및 인프라스트럭처

구성 요소상세 내용
임베딩 모델BGE‑M3 (BAAI), 1024 차원
추론 하드웨어RTX 4000 Ada, 쿼리당 약 2–5 ms
검색 엔진밀집 벡터 지원이 포함된 Solr 9.6
크롤링 스택커스텀 PHP + Python (JS‑무거운 사이트는 Playwright, 추출은 Trafilatura)
추가 기능VADER (감성 분석), langid (언어 감지), 커스텀 가격 추출
쿼리 지연 시간임베딩 생성 포함 전체 약 40–50 ms

하이브리드 vs. 순수 벡터 검색

  • 순수 벡터 검색은 의미적으로 유사한 항목을 찾아줄 수 있지만 정확히 일치하는 항목을 낮게 순위 매기거나 제품 코드·SKU 를 제대로 처리하지 못하고, 사용자가 기대하는 결과(예: “nike shoes”는 Nike 제품을 우선)와 충돌할 수 있음.
  • 하이브리드 접근: 레키컬 컴포넌트가 정확히 일치하는 항목을 보장하고, 벡터 컴포넌트가 “정확한 단어는 모르지만 원하는 것이 무엇인지 압니다” 같은 쿼리를 처리함.

Solr 쿼리 예시

# Vector part
vectorQuery = {!knn f=embeddings topK=250}[-0.032, 0.009, -0.049, ...]

# Lexical part
lexicalQuery = {!edismax qf="title^550 description^450 uri^1 text^0.1"
                         pf="title^1100 description^900" ...}

# Combined score
q = {!func}sum(
      product(1, query($vectorQuery)),
      product(1, div(query($lexicalQuery), sum(query($lexicalQuery), 6)))
    )

Solr 디버그 뷰(오른쪽 하단 버튼)에서 실제 벡터 쿼리 함수들을 확인할 수 있음.

실험적 기능: 결과 설명

같은 GPU에서 실행되는 로컬 LLM이 결과에 대한 설명을 생성할 수 있음. 예시: 기술 문서 사이트에서 “measure 🔥” 를 검색하면 특정 장치 추천이 반환되며, 인덱싱된 PDF에서 컨텍스트를 끌어옴.

마무리 생각

이모지 기능은 다언어 임베딩을 사용하면서 자연스럽게 등장했으며, 다국어 및 개념 기반 검색에 놀라울 정도로 유용함이 입증됨. 설정이나 하이브리드 검색 전반에 대해 궁금한 점이 있으면 언제든 질문해 주세요.

Back to Blog

관련 글

더 보기 »