동의어 API를 사용하여 동의어를 자동화하고 업로드하는 방법

LLM을 사용해 자동으로 동의어를 식별하고 생성하는 방법을 알아보고, 프로그래밍 방식으로 Elasticsearch 동의어 API에 용어를 로드할 수 있는 방법을 알아보세요.

Elasticsearch는 여러분의 사용 사례에 가장 적합한 검색 솔루션을 구축하는 데 도움이 되는 새로운 기능으로 가득 차 있습니다. 최신 검색 AI 경험 구축에 관한 실습형 웨비나에서 이러한 기능을 실제로 활용하는 방법을 배워 보세요. 지금 무료 클라우드 체험을 시작하거나, 내 로컬 기기에서 Elastic을 사용해 볼 수 있습니다.

효율적인 사용자 경험을 제공하기 위해서는 검색 결과의 품질을 개선하는 것이 필수적입니다. 검색을 최적화하는 한 가지 방법은 동의어를 통해 쿼리된 용어를 자동으로 확장하는 것입니다. 이를 통해 쿼리를 보다 폭넓게 해석하여 언어의 다양성을 포괄하고 결과 매칭을 개선할 수 있습니다.

이 블로그에서는 대규모 언어 모델(LLM)을 사용해 자동으로 동의어를 식별하고 생성하여 이러한 용어를 프로그래밍 방식으로 Elasticsearch의 동의어 API에 로드할 수 있는 방법을 살펴봅니다.

동의어는 언제 사용하나요?

동의어를 사용하면 벡터 검색에 비해 더 빠르고 비용 효율적인 솔루션이 될 수 있습니다. 임베딩에 대한 깊은 지식이나 복잡한 벡터 수집 프로세스가 필요하지 않으므로 구현이 더 간단합니다.

또한 벡터 검색은 임베딩 인덱싱 및 검색을 위해 더 큰 저장 용량과 메모리를 필요로 하기 때문에 리소스 소비가 더 적습니다.

또 다른 중요한 측면은 검색 지역화입니다. 동의어를 사용하면 현지 언어와 관습에 따라 용어를 조정할 수 있습니다. 이는 임베딩이 지역 표현이나 국가별 용어와 일치하지 않을 수 있는 상황에서 유용합니다. 예를 들어 일부 단어나 약어는 지역에 따라 다른 의미를 가질 수 있지만 현지 사용자에게는 자연스럽게 동의어로 취급됩니다. 브라질에서는 이런 일이 매우 흔합니다. "아바칵시" 와 "아나나스" 는 같은 과일(파인애플)이지만 북동부의 일부 지역에서는 두 번째 용어가 더 일반적으로 사용됩니다. 마찬가지로 동남부에서 잘 알려진 "팡 프랑세스" 는 북동부에서는 "팡 카레카" 로 알려져 있을 수 있습니다.

LLM을 사용하여 동의어를 생성하는 방법은 무엇인가요?

동의어를 자동으로 구하려면 용어의 문맥을 분석하고 적절한 변형을 제안하는 LLM을 사용할 수 있습니다. 이 접근 방식을 사용하면 동의어를 동적으로 확장할 수 있으므로 고정된 사전에 의존하지 않고도 더 광범위하고 정확한 검색을 보장할 수 있습니다.

이 데모에서는 LLM을 사용하여 이커머스 제품의 동의어를 생성합니다. 많은 검색에서 쿼리된 용어의 변형으로 인해 결과가 거의 또는 전혀 반환되지 않습니다. 동의어를 사용하면 이 문제를 해결할 수 있습니다. 예를 들어 ' "스마트폰" '을 검색하면 다양한 모델의 휴대폰이 표시되어 사용자가 원하는 제품을 찾을 수 있습니다.

필수 구성 요소

시작하기 전에 환경을 설정하고 필요한 종속성을 정의해야 합니다. Elastic에서 제공하는 솔루션을 사용해 Docker에서 로컬로 Elasticsearch와 Kibana를 실행할 것입니다. 코드는 Python v3.9.6으로 작성되며 다음과 같은 종속성이 있습니다:

제품 색인 생성

처음에는 동의어가 지원되지 않는 제품 색인을 생성합니다. 이렇게 하면 쿼리의 유효성을 검사한 다음 동의어가 포함된 인덱스와 비교할 수 있습니다.

인덱스를 생성하기 위해 Kibana DevTools에서 다음 명령을 사용하여 제품 데이터 세트를 일괄 로드합니다:

LLM 와 동의어 생성

이 단계에서는 LLM을 사용하여 동의어를 동적으로 생성합니다. 이를 위해 OpenAI API를 통합하여 적절한 모델과 프롬프트를 정의할 것입니다. LLM은 제품 카테고리와 이름을 수신하여 동의어가 문맥과 관련이 있는지 확인합니다.

생성된 제품 색인에서 "Electronics" 카테고리의 모든 항목을 검색하여 해당 이름을 LLM으로 보냅니다. 예상 출력은 다음과 같습니다:

생성된 동의어를 사용하면 동의어 API를 사용하여 Elasticsearch에 동의어를 등록할 수 있습니다.

동의어 API로 동의어 관리하기

동의어 API는 시스템 내에서 직접 동의어 집합을 효율적으로 관리할 수 있는 방법을 제공합니다. 각 동의어 세트는 동의어 규칙으로 구성되며, 여기서 단어 그룹은 검색에서 동등한 것으로 취급됩니다.

동의어 집합 생성 예시


이렇게 하면 "hello" 및 "hi" 가 동등한 것으로 취급되는 "my-synonyms-set,", "bye" 및 "goodbye라는 집합이 만들어집니다."

제품 카탈로그에 동의어 생성 구현하기

다음은 동의어 집합을 구축하고 이를 Elasticsearch에 삽입하는 방법입니다. 동의어 규칙은 LLM에서 제안한 동의어 매핑을 기반으로 생성됩니다. 각 규칙에는 슬러그 형식의 제품 이름에 해당하는 ID와 LLM에서 계산한 동의어 목록이 있습니다.

다음은 동의어 집합을 생성하기 위한 요청 페이로드입니다:

클러스터에 동의어 집합이 생성되면 정의된 집합을 사용하여 동의어를 지원하는 새 인덱스를 생성하는 다음 단계로 넘어갈 수 있습니다.

LLM에서 생성한 동의어와 동의어 API에서 정의한 동의어 세트 생성이 포함된 전체 Python 코드는 아래와 같습니다:

동의어 지원으로 색인 생성

products 인덱스의 모든 데이터가 재색인되는 새 인덱스가 생성됩니다. 이 인덱스는 앞서 만든 products-synonyms-set 을 적용하는 synonyms_filter 을 사용합니다.

다음은 동의어를 사용하도록 구성된 인덱스 매핑입니다:

products

이제 재색인 API를 사용하여 products 인덱스의 데이터를 동의어 지원을 포함하는 새로운 products_02 인덱스로 마이그레이션합니다. 다음 코드는 Kibana 개발자 도구에서 실행되었습니다:

마이그레이션이 완료되면 products_02 인덱스가 채워지고 구성된 동의어 집합을 사용하여 검색을 검증할 준비가 됩니다.

동의어로 검색 유효성 검사

두 색인 간의 검색 결과를 비교해 보겠습니다. 두 인덱스에서 동일한 쿼리를 실행하고 동의어가 결과를 검색하는 데 사용되고 있는지 확인합니다.

products

Kibana를 사용해 검색을 수행하고 결과를 분석합니다. 분석 > 검색 메뉴에서 생성한 인덱스의 데이터를 시각화할 수 있는 데이터 보기를 만듭니다.

Discovery에서 데이터 보기를 클릭하고 이름과 인덱스 패턴을 정의합니다. "products" 인덱스의 경우 "products" 패턴을 사용합니다. 그런 다음 이 과정을 반복하여 "products_02"패턴을 사용하여 "products_02 " 인덱스에 대한 새 데이터 뷰를 만듭니다.

데이터 보기를 구성했으면 Analytics > Discovery로 돌아가 유효성 검사를 시작할 수 있습니다.

여기서 DataView 제품을 선택하고 "태블릿" 이라는 용어를 검색한 후 "Kindle Paperwhite" 및 "Apple iPad Air" 와 같은 제품이 있다는 것을 알고 있음에도 불구하고 결과가 표시되지 않습니다.

products_02

동의어를 지원하는 "products_synonyms" 데이터 뷰에서 동일한 쿼리를 수행했을 때 제품이 성공적으로 검색되었습니다. 이는 구성된 동의어 세트가 올바르게 작동하여 검색된 용어의 다양한 변형이 예상 결과를 반환하는지 확인합니다.

Kibana 개발자 도구에서 직접 동일한 쿼리를 실행하여 동일한 결과를 얻을 수 있습니다. Elasticsearch 검색 API를 사용해 products_02 인덱스를 검색하기만 하면 됩니다:

결론

Elasticsearch에서 동의어를 구현함으로써 제품 카탈로그 검색의 정확도와 범위가 개선되었습니다. 핵심적인 차별화 요소는 사전 정의된 목록이 필요 없이 상황에 따라 자동으로 동의어를 생성하는 LLM을 사용했다는 점입니다. 이 모델은 제품 이름과 카테고리를 분석하여 이커머스와 관련된 동의어를 확보했습니다.

또한 동의어 API는 사전 관리를 간소화하여 동의어 집합을 동적으로 수정할 수 있도록 했습니다. 이러한 접근 방식을 통해 검색은 더욱 유연해지고 다양한 사용자 쿼리 패턴에 적응할 수 있게 되었습니다.

이 프로세스는 새로운 데이터와 모델 조정을 통해 지속적으로 개선할 수 있어 점점 더 효율적인 연구 환경을 보장합니다.

참고 자료

로컬에서 Elasticsearch 실행

https://www.elastic.co/guide/en/elasticsearch/reference/current/run-elasticsearch-locally.html

동의어 API

https://www.elastic.co/guide/en/elasticsearch/reference/current/synonyms-apis.html

관련 콘텐츠

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

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

직접 사용해 보세요