GN⁺: Semantic Grep - Word2Vec 기반 검색 도구
(github.com/arunsupe)- sgrep은 단어 임베딩을 사용하여 텍스트 입력에 대한 시맨틱 검색을 수행하는 명령줄 도구
- 단순한 문자열 매칭을 넘어 쿼리에 대해 시맨틱적으로 유사한 일치를 찾음
- grep과 유사한 경험을 제공하도록 설계됨
- 기능
- Word2Vec 임베딩을 사용한 시맨틱 검색
- 유사성 임계값 설정 가능
- 일치하는 줄 전후의 문맥 표시
- 일치하는 단어와 줄 번호에 대한 색상 코드 출력
- 파일 또는 표준 입력에서 읽기 지원
- JSON 파일 및 명령줄 인수를 통한 구성 가능
- 사용 예제
- 헤밍웨이의 "노인과 바다"에서 "death"와 유사한 단어를 문맥과 줄 번호와 함께 검색:
curl -s 'https://gutenberg.ca/ebooks/hemingwaye-oldmanandthesea/…' \ | sgrep -C 2 -n -threshold 0.55 death
- 이 명령어는 다음을 수행함:
- "노인과 바다" 텍스트를 Project Gutenberg Canada에서 가져옴
- 텍스트를 sgrep에 파이프함
- "death"와 시맨틱적으로 유사한 단어를 검색함
- 유사성 임계값을 0.55로 설정함 (-threshold 0.55)
- 각 일치 항목 전후로 2줄의 문맥을 표시함 (-C 2)
- 줄 번호를 표시함 (-n)
- 출력은 유사성 점수, 강조된 단어, 문맥 및 줄 번호를 보여줌
- 헤밍웨이의 "노인과 바다"에서 "death"와 유사한 단어를 문맥과 줄 번호와 함께 검색:
- Word2Vec 모델
- sgrep은 이진 형식의 Word2Vec 모델이 필요함. Google의 Word2Vec 모델과 같은 사전 학습된 모델을 사용하거나 gensim과 같은 도구를 사용하여 직접 학습할 수 있음
- .bin 파일을 로컬에 다운로드하고 config.json을 업데이트함
- Google의 Word2Vec: https://github.com/mmihaltz/word2vec-GoogleNews-vectors
- 슬림 버전: GoogleNews-vectors-negative300-SLIM.bin.gz 모델 https://github.com/eyaler/word2vec-slim/ (eyaler 덕분에)
- download-model.sh는 eyaler가 호스팅하는 작은 word2vec 모델을 models/googlenews-slim/ 디렉토리에 저장하는 간단한 도우미 스크립트임
GN⁺의 정리
- sgrep은 단어 임베딩을 사용하여 텍스트에서 시맨틱적으로 유사한 단어를 검색하는 도구임
- grep과 유사한 사용 경험을 제공하면서도 단순한 문자열 매칭을 넘어서는 기능을 제공함
- Word2Vec 모델을 사용하여 유사성을 판단하며, 다양한 설정 옵션을 통해 유연하게 사용할 수 있음
- 텍스트 분석 및 자연어 처리 작업에서 유용하게 사용될 수 있으며, 특히 문맥 기반 검색이 필요한 경우에 강력한 도구임
Hacker News 의견
-
코드를 읽으면서 몇 가지 작은 팁을 공유함
- 벡터를 한 번에 읽을 수 있음
- BLAS를 사용하여 유사성을 더 빠르게 계산할 수 있음
- 벡터를 로드할 때 정규화하면 코사인 유사도는 벡터의 내적이 됨
- 여러 CPU를 지원할 수 있는지 궁금함
- word2vec 저장소가 데이터 할당량을 초과했음
- 대체 소스로 Stack Overflow와 Hugging Face를 제안함
-
이 아이디어가 매우 유용하고 왜 생각하지 못했는지 궁금해짐
-
이미 semgrep이라는 도구와 회사가 존재함
-
이 도구가 설명적 문구나 복합 문구를 처리할 수 있다면 매우 유용할 것임
- 현재 검색 엔진의 가장 큰 단점은 단일 히트 검색임
-
매우 멋진 도구임
- 각 줄을 단어로 나누고 각 단어의 임베딩을 사용하는 것 같음
- 긴 텍스트 시퀀스를 의미적으로 검색할 수 있는지 궁금함
- Transformer 모델을 사용하는 것보다 단어 벡터를 사용하는 것이 더 빠르고 가벼울 것임
- 잘 분리되지 않은 단어를 감지하고 서브스트링으로 나타나는 모든 단어를 찾는 방법도 고려할 수 있음
-
이 도구가 매우 멋지며 꼭 사용해보고 싶음
- 텍스트 전반에 걸친 의미적 검색이 많은 응용 프로그램에서 더 나은 사용자 경험을 제공할 것임
-
비슷한 도구로 fltr를 제안함
- 자연어 질문을 위한 grep과 유사함
-
매우 멋지며, 파일 이름도 검색할 수 있는지 궁금함
-
매우 멋진 도구를 발견하게 됨
- semgrep이 이미 사용 중이므로 다른 이름을 고려해야 함