SemanticFinder: Web Browser 기반의 Semantic Search (feat. transformers.js)

SemanticFinder: Web Browser 기반의 Semantic Search (feat. transformers.js)

Semantic Finder 소개

SemanticFinder는 Web Browser에서 실행되는 강력한 툴로, 대규모 문서에 대한 실시간 시맨틱 검색과 문서 기반의 채팅 기능을 제공합니다. Semantic Finder는 transformers.js, WebAssembly (WASM), 그리고 WebGPU를 활용하여 모든 처리를 브라우저에서 수행하며, 데이터를 클라이언트 측에만 저장하여 높은 수준의 개인정보 보호를 보장합니다.

이를 통해 SemanticFinder는 사용자가 제공한 PDF 파일이나 웹 페이지를 분석하여 검색 결과를 제공합니다. 다양한 설정을 통해 분석 방법을 조정할 수 있으며, WebGPU를 활성화한 브라우저에서 실행할 수 있습니다.

SemanticFinder 사용 데모

Semantic Finder의 주요 기능은 다음과 같습니다:

  • 시맨틱 검색: 문서의 맥락을 이해하고, 관련 결과를 제공하는 검색 기능을 제공합니다.
  • 프론트엔드 처리: 임베딩 생성과 코사인 유사도 계산을 포함한 모든 연산이 브라우저에서 수행되며, 서버 측 처리가 필요하지 않습니다.
  • 대규모 모델 지원: WebGPU와 호환되는 대규모 모델을 최적화하여 최첨단 임베딩 모델을 사용할 수 있습니다.

Semantic Finder 설치 및 Chrome 확장 기능

Semantic Finder 설치 및 Chrome 확장 기능 소개

  • 설치: 저장소를 클론하고 npm install로 의존성을 설치한 후, npm run start 명령어로 실행할 수 있습니다.

  • Browser Extension: 간편한 접근을 위한 크롬 확장 프로그램(Chrome Extension)이 제공됩니다. 다국어 검색을 지원하며, 옵션을 통해 텍스트 분할 최소 문자 수 등을 설정할 수 있습니다.

SemanticFinder 동작 구조(Logic)

SemanticFinder는 transformers.js를 활용하여 입력 데이터를 토크나이징하고 모델을 실행합니다. 구체적으로는 다음과 같은 로직을 통해 SemanticFinder는 빠르고 효율적으로 텍스트 내에서 의미 있는 검색 결과를 제공할 수 있습니다.

입력

  • 텍스트: 브라우저가 처리할 수 있는 한계 내에서 얼마든지 입력할 수 있습니다. 데모에서는 "헨젤과 그레텔"의 일부를 사용하지만, 수백 페이지의 PDF도 처리할 수 있습니다.
  • 검색어 또는 구절: 사용자가 찾고자 하는 검색어를 입력합니다.
  • 텍스트 분할 길이: 텍스트를 몇 자 단위로 분할할지 설정합니다.
  • 유사도 임계값: 설정된 유사도 임계값보다 낮은 결과는 표시되지 않습니다.

출력

  • 하이라이트된 세그먼트: 유사도가 높은 순서대로 세 개의 텍스트 세그먼트가 하이라이트됩니다. 어두운 색일수록 유사도가 높습니다.

처리 파이프라인

  1. 스크립트 로딩: 모든 스크립트가 로딩되고 모델이 HuggingFace에서 한 번 로드된 후, 브라우저에 캐시됩니다.
  2. 텍스트 입력: 사용자가 텍스트와 검색어를 입력합니다.
  3. 텍스트 분할: 텍스트는 설정된 길이(문자 단위)에 따라 세그먼트로 나뉩니다. 단어 자체는 분할되지 않으며, 대략적인 길이로 나뉩니다.
  4. 검색어 임베딩 생성: 입력된 검색어에 대한 임베딩이 생성됩니다.
  5. 세그먼트 임베딩 생성: 텍스트의 각 세그먼트에 대한 임베딩이 생성됩니다.
  6. 유사도 계산: 각 세그먼트 임베딩과 검색어 임베딩 간의 코사인 유사도가 계산됩니다. 이 결과는 세그먼트를 키로, 점수를 값으로 하는 사전에 저장됩니다.
  7. 실시간 업데이트: 각 반복마다, 점수가 높은 세그먼트들이 실시간으로 하이라이트되며, 진행 바와 하이라이트된 섹션이 업데이트됩니다.
  8. 임베딩 캐시: 생성된 임베딩은 사전에 캐시되어 이후의 검색은 매우 빠르게 처리됩니다. 코사인 유사도 계산은 임베딩 생성보다 빠르게 수행됩니다.
  9. 세그먼트 길이 변경 시 재계산: 사용자가 세그먼트 길이를 변경하는 경우에만 임베딩이 재계산됩니다.

라이선스

이 프로젝트는 MIT License로 공개 및 배포되고 있으며, 자유롭게 사용, 수정 및 재배포할 수 있습니다.

:scroll: SemanticFinder 프로젝트 소개 글

:github: SemanticFinder GitHub 저장소

:framed_picture: SemanticFinder 사용해보기

(WebGPU 버전은 아래 링크에서 사용해볼 수 있습니다)




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: