이 프로젝트의 주요 목표는 사용자가 텍스트 문서 모음에서 상황별 검색을 수행할 수 있는 사용자 친화적인 인터페이스를 제공하여 벡터 검색 기능을 보여주는 것입니다. Hugging Face의 BERT와 Facebook의 FAISS의 강력한 기능을 활용하여 단순한 키워드 일치가 아닌 사용자 쿼리의 의미론적 의미를 기반으로 관련성이 높은 텍스트 구절을 반환합니다. 이 프로젝트는 상황에 맞는 텍스트 검색의 세계로 더 깊이 들어가고 최첨단 NLP 기술을 사용하여 응용 프로그램을 향상시키려는 개발자, 연구원 및 애호가를 위한 출발점 역할을 합니다.
제 목표는 배후에 있는 벡터 데이터베이스를 처음부터 이해하는 것입니다.
응용프로그램 스크린샷:
시스템에서 실행하려면 요구 사항 파일을 사용하여 pip를 통해 필요한 모든 패키지를 설치할 수 있습니다.
pip install -r requirements.txt
참고로 저는 Python 3.10.1을 사용하고 있습니다.
그러나 GPU가 있는 경우 더 빠르고 더 큰 데이터베이스 통합을 위해 FAISS GPU를 설치해야 합니다.
이 프로젝트의 현재 버전에는 다음이 포함됩니다.
이 프로젝트는 기능적인 상황별 검색 시스템을 제공하지만 모듈식으로 설계되어 더 큰 시스템이나 애플리케이션으로의 확장 및 통합이 가능합니다.
이 프로젝트의 기초는 현대 NLP 기술이 전통적인 키워드 기반 방법에 비해 훨씬 더 정확하고 상황에 맞는 검색 결과를 제공할 수 있다는 믿음에 있습니다. 우리의 접근 방식은 다음과 같습니다.
접근 방식을 기반으로 프로젝트를 두 섹션으로 나누었습니다.
섹션 1: 검색 가능한 벡터 데이터 생성
이 섹션에서는 먼저 문서에서 입력을 읽고 이를 더 작은 덩어리로 나누고 BERT 기반 모델을 사용하여 벡터를 만든 다음 FAISS를 사용하여 효율적으로 저장합니다. 다음은 동일한 내용을 보여주는 흐름도입니다.
청크 문서의 벡터 표현을 포함하는 FAISS 인덱스 파일을 만듭니다. 우리는 또한 각 청크의 인덱스를 저장합니다. 이는 데이터베이스/문서를 다시 쿼리할 필요가 없도록 유지됩니다. 이는 중복된 읽기 작업을 제거하는 데 도움이 됩니다.
create_index.py를 사용하여 이 섹션을 수행합니다. 위의 2개 파일이 생성됩니다. 다른 모델을 사용해야 하는 경우 HuggingFace 허브에서 사용할 수 있습니다.
참고: 차원에 대한 하이퍼파라미터 설정 시 문제가 발견되면 models config.json 파일을 확인하여 사용하려는 모델의 차원에 대한 세부 정보를 찾으세요.
섹션 2: 검색 가능한 애플리케이션 인터페이스 구축
이 섹션의 목표는 사용자가 문서와 상호 작용할 수 있는 인터페이스를 구축하는 것입니다. 나는 추가적인 장애물을 일으키지 않는 최소한의 디자인을 우선시합니다.
index.html
: 검색어를 입력하기 위한 프런트엔드 HTML 페이지입니다.app.py
: 프런트 엔드를 제공하고 검색 쿼리를 처리하는 Flask 애플리케이션입니다.search_engine.py
: 삽입 생성, FAISS 검색 및 키워드 강조를 위한 논리가 포함되어 있습니다. /context_search/
- templates/
- index.html
- static/
- css/
- style.css
- images/
- img1.png
- img2.png
- Approach.png files
- app.py
- search_engine.py
- create_index.py
- index_to_chunk.pkl
- faiss_index.idx
faiss_index.idx
)와 인덱스에서 텍스트 청크로의 매핑( index_to_chunk.pkl
)이 있는지 확인하세요. python app.py
-- OR --
flask run --host=127.0.0.1 --port=5000
http://localhost:5000
으로 이동합니다.항상 개선의 여지가 있습니다. 다음은 통합할 수 있는 몇 가지 잠재적인 개선 사항과 추가 기능입니다.
이 프로젝트는 MIT 라이센스를 따릅니다. 인용, 수정, 배포, 기여를 통해 자유롭게 사용하세요. 자세히 읽어보세요.
이 프로젝트를 개선하는 데 관심이 있다면 귀하의 기여를 환영합니다! 이 저장소에 대한 Pull Request나 Issue를 열어주세요. 저는 본질적으로 개선을 위해 위의 사항을 우선적으로 고려하고 있습니다. 다른 끌어오기 요청도 고려되지만 우선순위는 낮습니다.
관심을 가져주셔서 미리 감사드립니다. :행복하다: .