이전 장에서는 머신 러닝 모델에 의해 생성된 임베딩으로 채워진 dense_vector 필드를 사용하여 Elasticsearch 인덱스를 확장하는 방법을 살펴보았습니다. 모델은 컴퓨터에 로컬로 설치되었고, 임베딩은 Python 코드에서 생성되어 색인에 삽입되기 전에 문서에 추가되었습니다.

이 장에서는 또 다른 벡터 유형인 sparse_vector에 대해 알아보겠습니다. 이 유형은 Elastic Learned Sparse EncodeR 모델(ELSER)에서 추론을 저장하도록 설계되었습니다. 이 모델에서 반환되는 임베딩은 각각 가중치가 할당된 태그(더 적절하게는 피처라고 부릅니다)의 모음입니다.

이 장에서는 머신 러닝 모델로 작업하는 다른 방법도 사용하게 되는데, Elasticsearch 서비스 자체가 모델을 실행하고 파이프라인을 통해 결과 임베딩을 인덱스에 추가합니다.

sparse_vector

이전 장에서 사용한 dense_vector 필드 유형과 마찬가지로 sparse_vector 유형은 머신 러닝 모델에서 반환한 추론을 저장할 수 있습니다. 고밀도 벡터는 소스 텍스트를 설명하는 고정 길이의 숫자 배열을 보유하는 반면, 희소 벡터는 가중치에 대한 피처 매핑을 저장합니다.

색인에 sparse_vector 필드를 추가해 보겠습니다. 인덱스 매핑에서 명시적으로 정의해야 하는 유형입니다. 아래에서 create_index() 메서드의 업데이트된 버전과 이 유형에 elser_embedding 이라는 새 필드를 볼 수 있습니다.

ELSER 모델 배포

위에서 언급했듯이, 이 예제에서는 Elasticsearch가 모델의 소유권을 갖고 문서를 삽입할 때와 검색할 때 모두 자동으로 모델을 실행하여 임베딩을 생성합니다.

Elasticsearch 클라이언트는 머신 러닝 모델과 그 파이프라인을 관리하기 위한 일련의 API 엔드포인트를 노출합니다. search.py의 다음 deploy_elser() 메서드는 몇 가지 단계를 따라 ELSER v2 모델을 다운로드 및 설치하고, 이를 사용하여 위에 정의된 elser_embedding 필드를 채우는 파이프라인을 생성합니다.

ELSER를 구성하려면 몇 가지 단계를 거쳐야 합니다. 먼저, Elasticsearch의 ml.put_trained_model() 방법을 사용하여 ELSER를 다운로드합니다. model_id 인수는 다운로드할 모델과 버전을 식별합니다(ELSER v2는 Elasticsearch 8.11 이상에서 사용할 수 있습니다). input 필드는 이 모델에 필요한 구성입니다.

모델을 다운로드한 후에는 배포해야 합니다. 이를 위해 배포할 모델의 식별자와 함께 ml.start_trained_model_deployment() 메서드가 사용됩니다. 이 작업은 비동기식 작업이므로 짧은 시간 후에 모델을 사용할 수 있습니다.

ELSER 사용을 구성하는 마지막 단계는 이를 위한 파이프라인을 정의하는 것입니다. 파이프라인은 모델을 어떻게 사용해야 하는지 Elasticsearch에 알려주는 데 사용됩니다. 파이프라인에는 식별자와 수행할 하나 이상의 처리 작업이 주어집니다. 위에서 만든 파이프라인은 elser-ingest-pipeline 이라고 하며 단일 추론 작업을 가지고 있는데, 이는 문서가 추가될 때마다 input_field 에서 모델이 실행되고 output_field 에서 출력이 문서에 추가된다는 것을 의미합니다. 이 예제에서는 이전 장의 고밀도 벡터 임베딩과 마찬가지로 summary 필드를 사용하여 임베딩을 생성합니다. 결과 임베딩은 이전 섹션에서 만든 elser_embedding 스파스 벡터 필드에 기록됩니다.

이 메서드를 쉽게 호출하려면 app.py의 Flask 애플리케이션에 deploy-elser 명령을 추가하세요:

이제 다음 명령을 사용하여 Elasticsearch 서비스에 ELSER를 배포할 수 있습니다:

마지막 구성 작업은 인덱스와 파이프라인을 연결하여 이 인덱스에 문서가 삽입될 때 모델이 자동으로 실행되도록 하는 것입니다. 이는 settings 옵션을 사용하여 인덱스 구성에서 수행됩니다. 다음은 이 링크를 생성하는 create_index() 메서드를 한 번 더 업데이트한 것입니다:

이 변경으로 이제 ELSER 추론을 완벽하게 지원하여 인덱스를 다시 생성할 수 있습니다:

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요