Elastic Search: 시맨틱 검색 경험을 구축하세요
개요
Elastic Search 소개
Elasticsearch에 대해 숙지하시면서 Elastic Cloud를 통해 데이터를 수집하고 확인하는 방법에 대한 개요를 알아보세요.
Elastic을 확장하고 벡터 검색을 시작할 때, "밀집 벡터"(일명, k-최근접 유사 항목(kNN) 벡터 검색)와 Elastic의 Learned Sparse Encoder(ELSER) 같은 "희소 벡터", 이렇게 두 가지 형태의 벡터 검색이 있다는 점을 기억해 두세요.
Elastic은 텍스트 검색의 업계 표준인 BM25를 시작으로 다양한 검색 기술을 제공합니다. 특정 검색에 대한 정밀한 매칭, 정확한 키워드 매칭을 제공하며, 튜닝을 통해 성능이 향상됩니다.
Elastic은 또한 시맨틱 검색을 위해 즉시 사용 가능한 Learned Sparse Encoder 모델을 제공합니다. 이 모델은 금융 데이터, 날씨 기록, 질문과 답변 등 다양한 데이터 세트에서 성능이 뛰어납니다. 이 모델은 추가적인 미세 조정 없이 도메인 전반에 걸쳐 높은 정확도를 제공하도록 구축되었습니다.
이 대화형 데모를 통해 Elastic의 텍스트 BM25 알고리즘에 대해 Elastic의 Learned Sparse Encoder 모델을 테스트할 때 검색 결과가 어떻게 더 정확한지 알아보세요.
또한 Elastic은 동영상, 이미지, 오디오 등 텍스트 이외의 비정형 데이터에 대한 유사성 검색을 구현하기 위해 밀집 벡터도 지원합니다.
시맨틱 검색과 벡터 검색의 장점은 이러한 기술을 통해 고객이 검색 쿼리에서 직관적인 언어를 사용할 수 있다는 것입니다. 예를 들어, 부수입에 대한 회사 지침을 검색하려는 경우, 공식적인 HR 문서에서는 볼 수 없는 용어인 "부업(side hustle)"을 검색할 수 있습니다.
이 안내서에서는, 몇 번의 클릭만으로 Elastic Cloud 계정을 생성하고, Elastic 웹 크롤러로 데이터를 수집하고, 시맨틱 검색을 구현하는 방법을 보여드리겠습니다.
데이터 온보딩
Elastic Cloud 계정 생성하기
14일 체험판으로 시작해 보세요. cloud.elastic.co에 접속하여 계정을 생성한 후에, 아래 단계를 따라 전 세계 50개 이상의 지원 리전 중 하나에서 Elastic 스택을 처음 시작하는 방법에 대해 알아보세요.
Edit settings(편집 설정)를 클릭하면 AWS, Microsoft Azure, Google Cloud 등 클라우드 서비스 제공자를 선택하실 수 있습니다. 클라우드 서비스 제공자를 선택하고 나면, 관련 리전을 선택하실 수 있게 됩니다. 다음으로, 몇 가지 하드웨어 프로파일 중에서 선택하여 필요에 따라 원하는 대로 배포를 사용자 정의할 수 있는 옵션이 있습니다. 또한 최신 버전의 Elastic이 이미 미리 선택되어 있습니다.
배포가 생성되는 동안, 사용자 이름과 비밀번호가 제공됩니다. 통합을 설치할 때 필요할 경우 이것을 복사하거나 다운로드해야 합니다.
Elastic Web Crawler를 사용하여 데이터 수집하기
배포를 생성했으므로, 이제 데이터를 Elastic으로 가져올 차례입니다. Elastic의 Web Crawler를 사용하여 이 작업을 해보겠습니다. 먼저, Build a semantic search experience(시맨틱 검색 경험 구축) 타일을 선택합니다.
다음으로, 시맨틱 검색을 설정하기 위해, 다음 중 하나로 시작할 수 있는 페이지가 표시됩니다.
- Elastic Learned Sparse Encoder
- 벡터 검색
- 자연어 처리(Natural Language Processing, NLP) 보강
이러한 모든 기능과 그 밖의 다른 기능은 Elasticsearch Relevance Engine(ESRE)의 일부입니다.
이 안내서의 목적을 위해, Elastic Learned Sparse Encoder와 벡터 검색을 둘 다 사용하여 시맨틱 검색을 설정해 보겠습니다.
참고: 시맨틱 검색을 시작하고 텍스트를 검색하려면, 먼저 Elastic Learned Sparse Encoder 가이드를 사용해 보셔야 합니다. kNN 벡터 검색 가이드는 다음 기준 중 일부를 충족하는 사용자에게 더 적합할 수 있습니다.
- 데이터 과학이나 데이터 과학 기술 세트에 액세스할 수 있음
- 기본 제공 Elastic Learned Sparse Encoder 시맨틱 검색 모델이 자신의 사용 사례를 다루지 않을 것으로 판단됨
- 임베딩 모델 비교 및 잠재적으로 머신 러닝 모델 미세 조정 경험이 있음
- 빠른 kNN 검색에는 상당한 RAM 리소스가 필요할 수 있음을 알고 있음
시작할 준비가 되었다면, AI 검색 지원 애플리케이션을 구축하기 위해 원하시는 방법을 선택하세요.
두 방법 모두 Create an index(인덱스 만들기)를 선택하여 시작합니다. 여기에서 web crawler(웹 크롤러)를 선택하여 데이터 수집을 시작할 수 있습니다.
웹 크롤러를 설정하려면, 이 가이드 투어를 확인하거나 아래 지침을 따르세요.
이제 인덱스를 생성합니다. 이 안내서의 목적을 위해, 우리는 elastic.co 전체에서 블로그를 수집하고 있습니다.
인덱스에 이름을 지정한 후, Create index(인덱스 생성)를 선택합니다. 다음으로, Validate Domain(도메인 유효성 검사)을 한 다음 Add domain(도메인 추가)을 선택합니다.
오른쪽 하단에서 도메인을 추가한 후 Edit(편집)을 선택하면 필요한 경우 하위 도메인을 추가할 수 있습니다.
다음으로, Crawl rules(크롤링 규칙)를 선택하고 아래와 같이 크롤링 규칙을 추가합니다.*
그런 다음, 나중에 필드를 선택하면, body_content와 같이 일부 필드가 512개의 토큰 수를 초과합니다. Extraction rules(추출 규칙)를 활용하여 블로그의 관련 부분만 필터링해야 합니다.
Extraction rules(추출 규칙)를 선택한 후, Add content extraction rule(콘텐츠 추출 규칙 추가)을 클릭합니다.
다음으로, Rule description(규칙 설명)에서 이 규칙이 어떤 데이터를 추출하게 될지를 다른 사람이 이해하는 데 도움이 되는 이름을 지정합니다. 이 안내서의 목적을 위해, 이를 "main"이라고 부르겠습니다.
이제, Apply to all URLs(모든 URL에 적용)를 선택한 다음 Add content fields(콘텐츠 필드 추가)를 선택하면 플라이아웃이 나타납니다. 플라이아웃이 나타나면 아래에서 다음 기준을 작성하고 선택합니다.
- 문서 필드:
- 필드 이름: main
- 출처:
- 다음에서 콘텐츠 추출: HTML 요소
- CSS 선택기 또는 XPath 표현식: main
- 콘텐츠
- 다음에서 콘텐츠 사용: 추출된 값
- 추출된 콘텐츠를 다음으로 저장: 스트링
이 기준을 입력한 후, Save(저장)를 클릭한 다음 Save rule(규칙 저장)을 클릭합니다.
Elasticsearch와 ESRE로 작업하기
Elastic Learned Sparse Encoder를 사용하여 데이터 수집 및 검색
벡터 검색을 시작하기 위해 위의 권장 기준을 검토했고 해당 내용이 여러분이 선호하는 방법이라면, 왼쪽의 Search your data using kNN vector search(kNN 벡터 검색을 사용하여 데이터 검색)로 이동하여 지침을 따릅니다.
그렇지 않고 Elastic의 즉시 사용 가능한 시맨틱 검색 모델인 Elastic Learned Sparse Encoder를 사용하려는 경우에는, 아래 지침을 확인하세요.
이를 수행하려면 Pipelines(파이프라인)를 선택하고 상단에서 Copy and customize(복사 및 맞춤 설정)를 선택하여 Unlock your custom pipelines(맞춤형 파이프라인 활용)를 선택합니다. 다음으로, Machine Learning Inference Pipelines(머신 러닝 유추 파이프라인)에서 Deploy(배포)를 선택하여 모델을 다운로드하고 Elasticsearch 배포에 이를 설치합니다.
배포되면 Start single-threaded(단일 스레드 시작)를 선택한 다음 + Add inference Pipeline(+ 유추 파이프라인 추가)을 선택합니다. 그리고 나서 다음 작업을 수행합니다.
- 신규 또는 기존 파이프라인을 선택합니다
- 이름을 지정합니다
- 마지막으로, 훈련된 머신 러닝 모델 선택 드롭다운에서 ELSER Text Expansion(ELSER 텍스트 확장)을 선택한 다음 Continue(계속)를 클릭합니다.
이제, ELSER Text Expansion(ELSER 텍스트 확장)을 적용하려는 필드를 선택해야 합니다. 소스 필드로 "title"과 "main"을 선택한 다음 Add(추가)를 선택합니다.
다음으로, Continue(계속)를 클릭합니다.
Continue(계속)를 클릭한 다음, Create pipeline(파이프라인 생성)을 클릭하여 Test your pipeline results(파이프라인 결과 테스트) 단계를 건너뜁니다.
이제 파이프라인을 생성했으므로, 오른쪽 상단에서 Crawl(크롤링)을 선택한 다음 Crawl all domains on this index(이 인덱스의 모든 도메인 크롤링)를 선택합니다.
이제 원하는 정보를 검색하실 차례입니다. 이를 수행하는 데 권장되는 두 가지 방법은 다음과 같습니다.
- 개발자 도구 사용
- 검색 애플리케이션 기능을 애플리케이션의 엔드포인트로 활용
각각을 사용하는 경우:
- 검색을 구현하는 개발자(예: 웹 애플리케이션용)인 경우 개발자 도구를 사용하여 색인된 데이터의 검색 결과를 테스트하고 세분화해야 합니다.
- 검색 결과를 반환할 수 있는 자체 애플리케이션으로부터 검색 요청을 보낼 수 있는 검색 엔드포인트를 만들려면, 검색 애플리케이션 기능을 사용해야 합니다.
개발자 도구 및 검색 애플리케이션 기능을 활용하는 방법을 간략히 살펴보려면, 아래의 짧은 동영상 두 개를 확인해 보세요. 이 가이드 투어를 탐색하여 그 방법을 알아볼 수도 있습니다.
kNN 벡터 검색을 사용하여 데이터 수집 및 검색
Elastic을 활용하면, 환경 전체에서 kNN 벡터 검색을 사용할 수 있습니다. 위에서 설명한 것처럼, kNN 벡터 검색을 사용하면 이미지나 오디오 등 텍스트 이외의 데이터를 검색할 수 있습니다.
웹 크롤러로 데이터를 수집한 후에는, 임베딩 모델을 Elasticsearch에 로드하여 데이터에 대한 벡터를 생성해야 합니다. 그 방법에 대해서는 아래 동영상을 확인해 보세요.
이를 수행하려면 Pipelines(파이프라인)를 선택하고 상단에서 Copy and customize(복사 및 맞춤 설정)를 선택하여 Unlock your custom pipelines(맞춤형 파이프라인 활용)를 선택합니다. 다음으로, Machine Learning Inference Pipelines(머신 러닝 유추 파이프라인)에서 Deploy(배포)를 선택하여 모델을 다운로드하고 Elasticsearch 배포에 이를 설치합니다.
배포되면 Start single-threaded(단일 스레드 시작)를 선택한 다음 + Add inference Pipeline(+ 유추 파이프라인 추가)을 선택합니다. 그리고 나서 다음 작업을 수행합니다.
- 신규 또는 기존 파이프라인을 선택합니다
- 이름을 지정합니다
- 마지막으로, 훈련된 머신 러닝 모델 선택 드롭다운에서 Dense Vector Text Embedding(밀집 벡터 텍스트 임베딩)을 선택한 다음 Continue(계속)를 클릭합니다.
이제, 밀집 벡터 확장을 적용하려는 필드를 선택해야 합니다. 웹 크롤러를 사용하고 있으므로, 기본적으로 선택할 수 있는 필드가 있습니다. 이 안내서의 목적을 위해, 새 필드를 시작할 title(제목)을 선택한 다음 Continue(계속)를 선택합니다.
그리고 나서 Continue(계속)를 선택한 다음, Create pipeline(파이프라인 생성)을 선택합니다.
이제 dense_vector 필드에 대한 매핑을 업데이트해야 합니다. (참고: Elasticsearch 버전 8.8+에서는 이 단계가 자동으로 수행되어야 합니다.)
- 탐색 메뉴에서, Dev Tools(개발자 도구)를 클릭합니다. Dev Tools를 처음 여는 경우 플라이아웃에서 Dismiss(무시)를 클릭해야 할 수도 있습니다.
- 콘솔 탭의 Dev Tools(개발자 도구)에서, 다음 코드를 사용하여 kNN 벡터 대상 필드에 대한 매핑을 업데이트합니다. 코드 상자에 붙여넣고 라인 1 오른쪽에 있는 작은 화살표를 클릭하기만 하면 됩니다.
POST search-blogs/_mapping
{
"properties": {
"title-vector": {
"type": "dense_vector",
"dims": 768,
"index": true,
"similarity": "dot_product"
}
}
}
"search-blogs"를 여러분이 지정한 인덱스 이름으로 바꾸어야 합니다. 또한 "title-vector"는 벡터가 저장될 필드의 이름입니다.
이제 파이프라인을 생성했으므로, 오른쪽 상단에서 Crawl(크롤링)을 선택한 다음 Crawl all domains on this index(이 인덱스의 모든 도메인 크롤링)를 선택합니다.
마지막으로, kNN 벡터 검색을 실행하여 필요한 정보를 찾을 차례입니다. 이렇게 하려면, Dev Tools를 활용해야 합니다. 그 방법을 알아보려면 아래 동영상을 확인해 보세요.
다음 단계
Elastic Cloud를 사용하여 데이터에 대한 시맨틱 검색을 설정하는 데 시간을 내주셔서 감사합니다. Elastic과 함께 하는 여정을 시작하면서, 환경 전체에 배포할 때 사용자로서 관리해야 하는 운영, 보안 및 데이터 구성 요소를 이해해야 합니다.