728x90
반응형

편집자 주: 이 프레젠테이션은 Luanne Misquitta와 Alessandro Negro가 GraphConnect New York 2017년 10월에 진행했어요.

프레젠테이션 요약

Knowledge Graph는 관련 검색 결과를 사용자에게 전달하는 데 핵심적인 역할을 하는데요. 관련성에 대한 네 가지 기준에는 쿼리, 컨텍스트, 사용자, 그리고 비즈니스 목표가 포함돼요. Luanne Misquitta와 Alessandro Negro는 Knowledge Graph의 등장과 관련 검색에서의 적용에 대해 설명하고, 사용 사례를 산업 전반에 걸쳐 살펴본 후, 그들이 고객을 위해 구현했던 전자상거래 사용 사례에 대해 자세히 알아봅니다.

관련 검색을 지원하는 데 있어서, Elasticsearch에 다중 보기를 저장하면 모든 데이터가 Knowledge Graph에 저장되면서 사용자에게 빠른 응답을 제공할 수 있어요. 이번 강연에서는 개인화, 개념 검색 등 관련 검색의 주요 측면을 다루고, 올바른 작업을 위한 올바른 도구를 활용해 다른 사람들이 사용할 수 있는 패턴 역할을 하는 강력한 솔루션을 고객에게 제공했답니다.

전체 프레젠테이션: Elasticsearch 및 Neo4j를 사용한 Knowledge Graph 검색

이 블로그에서는 Neo4j 및 Elasticsearch를 사용하여 관련 검색 결과를 제공하는 방법을 다루고 있어요.

루앤 미스키타: The 마스터 데이터 관리를 위한 Forrester Wave에서는 "Knowledge Graph는 마스터 데이터 도메인과 도메인 간의 링크에 대한 상황별 창을 제공한다"고 언급했죠.

지난 몇 년 동안 데이터에서 정보, 지식, 그리고 자동화된 추론으로 엄청난 발전이 있었어요. 그 중심에는 다양한 소스의 데이터를 모아서 유기적으로 연결하는 역할을 하는 **Knowledge Graph**가 있죠. **Knowledge Graph**는 확장, 쉬운 **Query**, 간편한 유지 관리를 가능하게 하면서도 관련성과 최신 상태를 유지할 수 있다는 장점이 있어요.

**Knowledge Graph** 사용 사례

**Knowledge Graph**는 지난 몇 년 동안 산업 전반에서 활용이 증가하고 있어요. 사용 사례를 한번 살펴볼까요?

**전자상거래**에서는 다양한 데이터 소스가 존재하는데요, 여기가 바로 **Knowledge Graph**의 주요 사용 사례 중 하나랍니다. 여러 카테고리 계층이 존재하고, 단일 제품이 여러 계층 구조에 속하는 경우가 많죠.

이 문제는 **Graph Database** 없이는 해결하기 정말 어려운 문제에요. 제품, 카테고리, 데이터 소스뿐만 아니라 마케팅 요소까지 결합되어 있거든요. 마케팅 전략과 프로모션은 판매되는 제품에 큰 영향을 미치죠. 이 세 가지 요소의 조합은 **Knowledge Graph** 개념에 아주 잘 맞아떨어진답니다.

**엔터프라이즈 네트워크**에서는 파트너, 고객, 직원, 기회, 공급자를 연결하는데요. **Knowledge Graph**는 연결된 모든 데이터 세트 간의 관계를 파악해서 새로운 기회를 발견하는 데 도움을 줄 수 있어요.

**금융** 분야는 풍부한 지식을 담고 있는 금융 문서의 텍스트 코퍼스를 가지고 있어요. ICIJ에서 를 사용해서 파나마 페이퍼스를 분석한 사례가 있죠. 1,100만 개가 넘는 문서를 연결해서 매우 구조화된 엔터티 그래프와 엔터티 연결 방식을 보여줬어요. 정말 흥미롭죠?

은 지난 몇 년 동안 많은 실제 응용 사례가 있었던 Knowledge Graph의 중요한 사용 사례 중 하나에요. Knowledge Graph는 여러 데이터 소스의 정형 및 비정형 데이터를 통합하고, 데이터가 사람, 장소 및 이벤트를 중심으로 특성화되고 구성되는 매우 동적인 온톨로지를 사용하여 그래프 기반 모델로 통합하죠. 이를 통해 관계와 데이터의 동시 발생을 기반으로 많은 지식을 생성할 수 있어요.

Knowledge Graph는 질병의 진행 패턴, 질병과 관련된 인과 관계, 증상, 수많은 질병의 치료 경로를 밝히는 데 활용되고 있어요. 이 모든 데이터를 종합하고 해당 데이터가 어디서 발생했는지, 관련자는 누구인지, 이 데이터 주변에서 발생했을 수 있는 기타 자연적 사건에 대한 컨텍스트를 적용함으로써 이전에는 인식할 수 없었던 새로운 관계가 발견되었죠.

범죄 수사 및 정보는 최근 Knowledge Graph가 사례 조사에 어떻게 도움이 되었는지에 대한 수많은 논문이 발표된 분야에요. 가장 친숙한 사례 중 하나는 인신매매 분야였는데요. 추적하기 어려운 분야이고 대부분의 정보가 난독화되어 있기 때문에 Knowledge Graph가 도움이 되었어요. 암호화된 메시지는 공개 포럼에 게시되며 패턴을 형성하는데, 다음과 같은 도구 및 기술 Natural Language Processing(NLP)이러한 메시지를 해독하고, 이해하고, 주변에 맥락을 적용하는 데 사용되죠.

전체 Knowledge Graph의 또 다른 핵심 부분은, 특히 법 집행 기관의 경우 Knowledge Graph에서 정보 소스까지 추적할 수 있어야 한다는 점이에요. 그렇지 않으면 이 중 어느 것도 법정에서 효력을 발휘하지 못할 거예요. Knowledge Graph를 사용하면 소스부터 필요한 정보나 증거를 명확하게 제공하는 지점까지 데이터의 추적성을 유지할 수도 있어요.

데이터 희소성

이제 데이터 희소성과 관련하여 볼 수 있는 몇 가지 문제에 대해 이야기해볼게요.

협업 필터링에 관해 이야기할 때 고전적인 문제 중 하나는 콜드 스타트에요. 그래프에 다른 사람이 없거나 그래프에 다른 구매 내역이 없으면 실제로 다른 사람에게 제품이나 사물을 추천할 수 없죠. 이는 일반적으로 태깅 기반 시스템이나 신뢰 네트워크 등을 통해 해결되는데요. 협업 필터링이 없으면 콘텐츠 기반 추천이라도 데이터가 누락되거나 잘못된 데이터로 인해 많은 문제를 겪게 돼요. 이 모든 데이터를 통합할 수 있는 향상된 그래프가 없다면 해결하기 어려운 문제죠.

희박한 데이터를 사용하는 텍스트 검색을 사용하면 사용자에 구애받지 않는 검색으로 끝나고, 세계는 익명의 불가지론적 검색에서 관련 컨텍스트 지향 검색으로 이동하고 있어요. 마찬가지로 관련 검색도 문제인데요. 따라서 이러한 내용은 프레젠테이션 후반부에서 다루게 될 영역 중 일부에요.

스테로이드에 대한 지식 기반

Knowledge Graph는 우리가 지식 기반으로 알고 있었지만, 스테로이드에 관한 것이라고 할 수 있어요.

Knowledge Graph는 연결된 데이터에 대한 엔터티 중심의 뷰를 제공해요. 설명된 데이터가 실제로 그래프에 설명되어 있기 때문에 자체 설명적이죠.

따라서 이 데이터를 유기적인 방식으로 확장해서, 데이터에 대한 더 많은 사실을 발견함에 따라 데이터를 향상시킬 수 있어요. 확장하거나 개정할 수 있는 온톨로지가 있고, 지속적으로 실행되는 데이터 파이프라인을 지원하죠. 한 번 구축되면 영원히 그대로 유지되는 정적인 시스템이 아니에요. 도메인이 확장됨에 따라 함께 성장하는 거죠.

법 집행 기관의 사용 사례로 다시 돌아가 보면, 데이터 출처에 대한 추적성을 제공하는데, 이건 많은 산업에서 중요한 부분이에요.

데이터 융합으로서의 Knowledge Graph

Knowledge Graph는 다양한 장소의 데이터를 융합한 결과물이라고 할 수 있어요 (아래 그림 참고).

여기저기 흩어져 있는 다양한 형식의 데이터 소스들을 가져올 수 있죠. 우리가 가진 데이터를 강화할 수 있는 외부 소스도 있고요. 사용자의 상호 작용을 통해 사용자가 애플리케이션이나 도메인을 사용하면 더 많은 것을 배우고 Knowledge Graph에 다시 피드백해서 Knowledge Graph를 향상시킬 수 있어요. 결국 비즈니스 목표를 달성하는 데 도움이 되는 Machine Learning 프로세스나 Natural Language Processing 같은 도구들도 활용할 수 있겠죠.

알레산드로 네그로: 최종 사용자에게 관련 검색 기능을 제공하는 고급 검색 엔진을 구현하는 특정 사용 사례, 즉 Knowledge Graph의 특정 애플리케이션을 한번 살펴볼까요.

여기서 관련성이란 검색 결과를 개선하고, 매우 구체적인 사용자 경험의 맥락에서 데이터 정보 요구 사항을 충족하는 동시에, 순위가 비즈니스의 특정 요구 사항에 미치는 영향을 결합하거나 균형을 맞추는 것을 의미해요.

최종 사용자에게 서비스를 제공하기 위해 그래프, 특히 Knowledge Graph를 Elasticsearch와 결합하는 구현을 살펴볼게요.

두 가지를 결합해서 최종 사용자에게 높은 수준의 서비스 세트를 제공할 수 있는 실제 아키텍처와 구체적인 인프라를 볼 수 있을 거예요. Knowledge Graph가 데이터 희박성과 관련된 문제를 해결할 뿐만 아니라, 그래프가 이러한 유형의 서비스를 최종 사용자에게 제공하기 위한 직접적인 모델을 나타내기 때문에 이 방향에서 어떻게 도움이 될 수 있는지 알게 될 거예요.

관련 검색의 4가지 차원

앞서 말씀드린 것처럼, 관련성은 텍스트, 사용자, 컨텍스트, 비즈니스 목표라는 네 가지 차원에서 움직여요.

가장 먼저, 검색은 사용자가 텍스트 쿼리를 통해 표현하는 정보 요구를 충족해야겠죠.

그래서 이런 맥락에서 정보 검색과 Natural Language Processing (자연어 처리)은 검색 쿼리에 담긴 사용자 의도를 최대한 만족시키는 검색 결과를 제공하는 데 아주 중요해요. 하지만 관련 검색은 검색에 대한 사용자 중심적인 관점으로 점점 더 이동하고 있어요. 같은 쿼리를 검색하더라도, 동일한 사용자에게 항상 똑같은 결과 세트를 보여줄 필요는 없다는 의미죠.

이런 점에서 사용자 모델링과 추천 엔진은 사용자 프로필이나 선호도에 따라 결과 세트를 맞춤화하는 데 도움을 줄 수 있어요. 반면에 컨텍스트는 특정 검색이 수행된 특별한 조건을 나타내는데요. 위치, 시간, 날씨 같은 상황별 정보는 사용자가 쿼리를 수행하는 동안 필요에 따라 검색 결과를 더 구체화하는 데 도움을 줄 수 있답니다.

마지막으로, 비즈니스 목표는 전체 구현을 이끌어가요. 왜냐하면 검색은 수익 측면에서든, 달성하려는 특정 목표 측면에서든, 조직의 특정한 요구 사항을 충족하기 위해서만 존재하니까요. 또한 관련 검색은 검색 이력이나 피드백 루프와 관련된 많은 정보를 저장해야 해요. 그리고 이 모든 데이터는 응답 시간이나 결과 품질에 영향을 미치지 않도록, 즉 사용자 경험에 나쁜 영향을 주지 않는 방식으로 액세스되어야 하죠.

왜 Knowledge Graph (지식 그래프)가 필요할까요? 관련 검색을 제공하기 위한 정보 구조 측면에서 Knowledge Graph (지식 그래프)가 어떻게 올바른 접근 방식을 나타내는지 한번 살펴볼게요.

관련 검색을 제공하려면 검색 아키텍처가 스키마, 소스, 볼륨, 생성 속도 측면에서 이질적인 고품질의 대량 데이터를 처리할 수 있어야 해요. 게다가 통합된 데이터 소스로 액세스할 수 있어야 하죠. 이는 이전에 살펴본 관련 검색의 모든 정보 및 탐색 요구 사항을 충족하는 통합 스키마 구조로 정규화되고 액세스되어야 함을 의미해요.

그래프는 정보 추출, 추천 엔진, 컨텍스트 표현, 심지어 비즈니스 목표를 표현하기 위한 규칙 엔진까지, 관련 검색과 관련된 모든 문제를 제대로 표현해 줘요.

정보 추출은 텍스트를 비정형 데이터라고 부르기 때문에 텍스트의 의미 구조를 명시적으로 만들려고 시도하는 건데요, 텍스트에는 문법 및 언어 제약과 관련된 구조가 많이 있잖아요.

Natural Language Processing (자연어 처리)을 사용해서 이 정보를 추출할 수 있어요. 문서에서 문장을 추출하고, 각 문장에 대해 태그 목록을 추출할 수 있죠. 그런 다음 종속성, 언급 등의 유형을 기반으로 이러한 태그 간의 관계를 파악할 수 있어요.

이건 그래프에 쉽게 저장할 수 있는 연결된 데이터 세트예요. 이 데이터를 저장하면 다른 Knowledge Graph (지식 그래프)에서 정보를 가져와서 해당 데이터에 대한 지식을 쉽게 확장할 수 있어요. 컨셉넷 5는 이 기본 정보 세트에 쉽게 통합될 수 있는 온톨로지 구조로, 그래프에 새로운 관계를 추가해 준답니다.

추천 엔진은 그래프에 쉽게 저장되는 사용자-항목 상호 작용을 사용해서 구축되기도 하고요. 정보 추출이나 추천하려는 요소의 기능 목록이나 설명을 사용해야 하는 콘텐츠 기반 접근 방식을 사용해서 구축할 수도 있어요.

어떤 경우든 프로세스의 결과는 항목 간 또는 사용자 간의 새로운 관계로 그래프에 쉽게 저장할 수 있는 유사성 목록이 될 거예요. 그런 다음 이걸 사용해서 두 가지 접근 방식을 결합한 추천을 사용자에게 제공할 수 있죠.

컨텍스트는 정의에 따라 상태나 이벤트를 다차원적으로 표현한 것이라고 할 수 있어요. 주로 다차원 배열, 즉 텐서죠. 텐서는 하나의 NODE인 요소가 있고, 해당 요소를 참조하는 다른 모든 INDEX가 해당 특정 NODE를 가리키는 다른 NODE인 그래프로 쉽게 표현할 수 있어요.

이렇게 하면 슬라이싱 등의 모든 종류의 작업을 텐서에서 쉽게 수행할 수 있어요. 더 쉬운 방법은 이 텐서에 새로운 INDEX를 추가하는 건데요. 요소를 가리키는 새로운 NODE를 추가하기만 하면 돼요.

마지막으로 특정 비즈니스 목표를 적용하려면 일종의 규칙 엔진을 구현해야 해요. 그리고 이 경우에도 그래프는 규칙 자체를 저장할 뿐만 아니라 시스템에서 규칙을 시행하는 데도 도움이 될 수 있죠.

사용 사례: 전자상거래 검색 엔진

특정 사용 사례로 전자상거래 사이트의 검색 엔진을 한번 살펴볼까요?

모든 검색 애플리케이션은 검색 기대치 측면에서 고유한 요구 사항과 굉장히 구체적인 제약 조건이 있어요. 웹 검색 엔진의 경우 서로 완전히 다른 수백만 개의 페이지가 있죠. 그리고 지식의 출처조차 신뢰할 수 없고요.

전자상거래 검색이 더 간단한 경우라고 생각할 수도 있지만 꼭 그렇지만은 않아요. 문서 세트가 더 통제되고 숫자가 줄어든 건 사실이지만, 전자상거래 사이트에서는 탐색 카테고리와 텍스트 검색이 단순히 무언가를 검색하는 방법이 아니라 주요 '판매원'이거든요. 또한 무언가를 홍보하고 수요와 구매자 사이의 경로를 단축하는 방법이기도 하고요. 그것들은 매우 중요해요.

기대만큼 전자상거래 사이트에서 검색해 보면 할 일이 많다는 걸 알 수 있어요. 하지만 이 경우 더욱이, 프로모션, 제안 등 시스템에서 전략이나 마케팅 캠페인을 추진하는 판매자, 콘텐츠 제공자, 마케팅 담당자 등 다양한 데이터 소스에서 데이터를 수집할 수 있죠.

또한, 사용자를 고려해야 해요. 사용자의 기록에 따라 사용자에게 제공되는 결과를 맞춤설정하려면 사용자 항목 상호 작용 및 사용자 피드백을 저장해야 하고요. 그리고 분명히 비즈니스 제약이 있고요.

다음은 전자상거래 사이트에 대한 Knowledge Graph의 간단한 예시에요.

이 경우 주요 요소는 제품으로 표시돼요. 여기에는 iPhone, iPhone 케이스, 이어폰의 세 가지 제품만 있죠. 모든 제품에는 해당 제품을 설명하는 기능 목록과 같은 일부 정보가 있어요. 하지만 이 기능 목록은 제품 유형에 따라 달라지므로 TV, 신발 등에 따라 다를 수 있고요.

이 정보를 바탕으로 텍스트 설명과 태그 목록을 쉽게 처리할 수 있어요. 태그가 있으면 ConceptNet 5에서 데이터를 수집하고 스마트폰이 개인 장치라는 것을 알 수 있죠. 나중에 이것이 관련 검색을 제공하는 데 어떻게 귀중한 정보인지 살펴보겠습니다. 그러나 이러한 유형의 애플리케이션에 공통적인 데이터 외에도 우리는 데이터를 분석하고 항목 간의 새로운 관계를 생성해요.

이것이 "보통 함께 구매하는" 관계가 작동하는 방식이에요. 전화와 케이스 간의 관계와 같은 관계를 수동으로 추가하는 것도 가능하고요. 이러한 방식으로 귀하는 단계별로 보유하고 있는 지식의 양을 늘리고 검색 및 카탈로그 탐색 중에 이 모든 지식을 사용하게 되는 거죠.

지식 정보 인프라

이러한 모든 아이디어를 염두에 두고 우리는 고객 중 한 명을 위해 다음 인프라를 설계했어요.

Knowledge Graph는 이 인프라의 핵심 정보 소스이고, 다른 여러 소스들이 Knowledge Graph를 제공하고 있어요. Machine Learning 플랫폼은 그래프를 계속 처리하면서 Knowledge Graph에서 통찰력을 추출하고, 다시 Knowledge Graph에 저장하죠.

나중에 Elasticsearch와의 통합을 통해 Knowledge Graph Query가 프론트 엔드에 너무 많은 영향을 주지 않도록 여러 범위의 다양한 뷰를 내보낼 수 있는 방법에 대해 이야기해볼게요. Elasticsearch를 일종의 캐시로 사용하고, Knowledge Graph 위에 강력한 검색 엔진으로 사용하는 거죠.

Knowledge Graph의 데이터 흐름

데이터 흐름을 위해 여러 Queue에 데이터를 푸시하는 여러 데이터 소스가 있는 비동기식 데이터 수집 프로세스를 설계했어요. 마이크로서비스 인프라는 이러한 이벤트에 반응하고 처리하는데, 이 중간 데이터는 하나의 Queue에 저장된 다음, 데이터를 읽고 그래프에 저장하는 단일 Neo4j Writer 요소에 의해 처리돼요.

이렇게 하면 동시성 측면에서 모든 문제를 피할 수 있고, 요소에 다양한 우선순위를 할당할 수 있는 우선순위 기반 메커니즘을 쉽게 구현할 수 있답니다.

Elasticsearch에 여러 뷰 저장

Elasticsearch에 여러 뷰를 저장하기 위해, 사용자 정의가 가능하고 여러 유형의 이벤트를 푸시할 수 있는 이벤트 기반 알림 시스템을 만들었어요. Elasticsearch Writer는 이러한 이벤트에 반응해서 Knowledge Graph에서 데이터를 읽고, Elasticsearch에서 새로운 문서를 생성하거나 기존 문서를 업데이트하죠.

Neo4j의 역할

Neo4j는 유일한 진실 소스인 Knowledge Graph를 저장하기 때문에 이 인프라의 핵심이에요. 다른 곳에는 다른 데이터가 없어요. 우리가 처리하고 싶은 모든 데이터가 여기에 있고, 모든 것이 이 Knowledge Graph에 수렴되죠.

Neo4j는 사용자, 제품, 제품에 대한 세부 정보 등 여러 유형의 데이터를 저장할 수 있다는 점에서 정말 유용한 도구에요. 게다가 이 데이터에 쉽게 액세스할 수 있도록 Query하기 쉬운 메커니즘과 탐색하기 쉬운 시스템을 제공하죠.

또한 관련 검색 구현의 초기 단계에서는 관련성 엔지니어가 시스템에서 관련 검색을 구현하는 데 유용한 Knowledge Graph에서 가장 흥미로운 기능을 식별하는 데 도움이 될 수 있어요.

모든 데이터가 그래프에 포함되면 정리, 기존 데이터 확대 및 데이터 병합이라는 세 가지 작업을 포함하는 확장 프로세스를 거치게 돼요. 여러 소스가 동일한 개념을 다른 방식으로 표현할 수 있으므로 데이터 병합도 중요하답니다.

메모리 집약적인 프로세스를 위한 Machine Learning

이러한 프로세스 중 일부는 일부 플러그인이나 Cypher Query를 사용해서 Neo4j 자체에서 수행할 수 있어요. 다른 것들은 계산 및 메모리 요구 사항 측면에서 집약적이므로 외부화해야 하죠.

저희는 다음과 같은 Machine Learning 플랫폼(아래 참조)을 만들었어요. Neo4j 스파크 커넥터를 사용하면 Neo4j에서 데이터를 추출하고 Natural Language Processing 또는 추천 모델 구축을 사용해서 처리한 다음, 이 새로운 데이터를 Neo4j에 저장할 수 있어요. 이는 나중에 관련 검색을 위한 고급 기능을 제공하는 데 유용하답니다.

빠른 결과를 위한 Elasticsearch

저희는 올바른 작업에 적합한 도구를 사용하려고 노력하고 있어요. 저희는 Knowledge Graph를 저장하기 위해 Neo4j를 사용하고 있는데, 아마 이걸 수행하는 데 가장 유용한 도구일 거예요. 하지만 텍스트 검색 측면에서 Neo4j에서 더 고급 텍스트 검색을 하려면 문제가 될 수 있죠. 그래서 빠르고 안정적이며 조정하기 쉬운 텍스트 검색을 제공하기 위해 Neo4j 위에 Elasticsearch를 추가했어요.

저희는 여러 범위를 해결하고 패싯의 여러 기능을 제공하기 위해 동일한 데이터 세트의 여러 보기를 Elasticsearch에 저장해요. 여기서 패싯은 원하는 결과 집합의 모든 종류의 집계를 의미하는데, 제품 세부 정보 페이지를 제공하거나 제품 변형 집계를 제공할 수 있죠. Elasticsearch를 사용하면 자동 완성이나 제안도 제공할 수 있고요.

Elasticsearch는 데이터베이스가 아니며 저희는 그걸 데이터베이스로 사용하고 싶지 않아요. 이 사용 사례에서는 Neo4j의 데이터에 대한 검색 엔진일 뿐이고, 텍스트 검색을 위한 귀중한 도구랍니다.

Knowledge Graph 상단에서 관련 검색

이제 앞에서 다룬 인프라를 사용해서 구축한 Knowledge Graph 위에 관련 검색을 제공하기 위해 Elasticsearch를 사용하는 방법을 살펴볼까요?

신호란 무엇일까요?

관련 검색 측면에서 '신호(signal)'는 의미 있고 측정 가능한 정보에 해당하는 관련성 점수 계산의 모든 구성 요소에요. 가장 간단하게 말하면 Elasticsearch 문서의 필드일 뿐이죠.

복잡한 부분은 이 필드를 디자인하는 방법, 그 안에 무엇을 넣는지, Knowledge Graph에서 추출하고 정말 중요한 Elasticsearch에 데이터를 저장하는 방법이에요.

관련성을 제어하는 ​​두 가지 주요 기술이 있어요 (아래 참조). 첫 번째는 신호 모델링(signal modeling)이에요. 일부 텍스트 `Query`에 반응하기 위해 문서를 구성하는 필드 목록을 디자인하는 방법이죠. 그리고 다른 하나는 순위 함수(ranking function)인데, 최종 점수와 결과 순위를 얻기 위해 여러 신호를 구성하고 각각에 특정 가중치를 할당하는 방법이에요.

항상 정밀도(precision)와 재현율(recall)의 균형을 맞춰야 해요. 여기서 정밀도는 결과 집합에서 관련된 문서의 비율이고, 재현율은 결과 집합에서 관련 문서의 비율이에요.

복잡한 주제이지만 단순화하기 위해 모든 문서를 사용자에게 반환하면 결과 세트에 관련 문서가 모두 포함되어 있으므로 100% 회수율을 갖게 돼요. 100% 재현율을 사용하면 정밀도가 매우 낮아지죠. 이 경우에도 신호 모델링에 사용할 수 있는 Knowledge Graph의 데이터 측면에서 여러 소스를 가질 수 있어요.

몇 가지 예를 들어볼게요. 첫 번째 접근 방식은 검색을 개인화하는 거예요.

여기에 사용자를 새로운 정보 소스로 포함시켜 맞춤형 결과 세트를 제공할 수 있어요. 사용자 프로필이나 사용자 기본 설정에 따라 결과 집합을 커스터마이징하고 싶은 거죠.

두 가지 다른 접근 방식이 있는데, 첫 번째는 사용자가 양식을 작성해서 수동으로 생성하거나 과거 검색에서 사용자 선호도를 자동으로 추론해서 사용자 프로필을 생성하는 프로필 기반 접근 방식이에요.

두 번째 접근 방식은 행동 기반인데, 이 경우 사용자와 항목 간의 관계를 명시적으로 만들기 위해 사용자-항목 상호 작용을 분석하는 추천 엔진과 더 관련이 깊어요.

사용자 프로필이나 행동 정보가 있다면, 이 정보를 쿼리에 연결해야 해요. 이 작업은 세 가지 방법으로 할 수 있어요. 쿼리 시 원하는 권장 사항에 따라 쿼리를 변경하거나, 인덱스 작성 시 원하는 권장 사항에 따라 문서를 변경하거나, 아니면 결합된 접근 방식을 사용하는 거죠.

예를 들어, 쿼리 시 사용자에 대한 결과를 커스터마이징하려면 쿼리를 변경해서 사용자가 관심을 가질 수 있는 제품 목록을 지정해야 해요. 이렇게 하면 결과 세트에 사용자가 관심을 가질 것으로 알려진 일부 제품이 포함되어 있을 때 결과를 쉽게 높일 수 있죠. 반면, 인덱스 시에는 각 제품에 관심을 가질 수 있는 사용자 목록을 저장해야 해요. 그런 다음 해당 경우에 특히 일치하는 결과를 쉽게 높일 수 있고요.

고전 검색의 또 다른 흥미로운 확장은 컨셉 검색이에요. 이 경우 문자열 검색에서 사물 검색으로 이동하는 거죠.

사용자는 동일한 개념을 표현하기 위해 다른 단어를 사용할 수 있어요. 이는 텍스트에 나타나는 특정 단어를 일치시켜야 하는 기존 텍스트 검색 환경에서 문제가 될 수 있죠. 데이터 강화 측면에서 이전에 설명한 기술을 사용하면 각 단어에 대해 갖고 있는 지식을 쉽게 확장할 수 있어요. 해당 단어를 Elasticsearch에 쉽게 저장하고 사용자가 페이지에 있는 용어를 사용하지 않더라도 사용자의 쿼리에 반응할 수 있고요.

이 정보를 풍부하게 하는 데는 다양한 접근 방식이 있어요. 콘텐츠 설명 측면에서 도움이 될 수 있는 태그 목록을 수동으로 또는 자동으로 추가할 수 있고, 동의어 목록을 작성할 수도 있죠. 예를 들어, TV의 경우 T.V., 텔레비전 등과 같은 동의어를 가질 수 있어요. 이런 방식으로 텍스트에 TV라고 적혀 있더라도 사용자가 예를 들어 "텔레비전"이라고 검색한다면 쉽게 결과를 제공할 수 있는 거예요.

지식을 강화하기 위해 Machine Learning 도구를 사용하는 고급 접근 방식도 있고, 간단한 동시 발생을 사용할 수도 있어요. 잠재 Dirichlet 할당 (Latent Dirichlet allocation) 같은 것들이요. 이는 문서 세트를 클러스터링하고 특정 클러스터와 해당 클러스터의 모든 문서를 더 잘 설명하는 단어 세트를 찾는 것을 의미해요.

Neo4j와 Elasticsearch의 결합: 두 가지 접근 방식

Neo4j와 Elasticsearch를 통합할 때 시도한 두 가지 접근 방식은 다음과 같아요.

아래 왼쪽에는 Elasticsearch의 문서와 Graph Database라는 두 가지 요소가 있는 첫 번째 접근 방식이 있어요.

이 접근 방식은 사용자가 쿼리를 날릴 때 두 단계를 거치게 돼요. 첫 번째는 Elasticsearch에서 수행되는 일반적인 텍스트 검색 쿼리죠.

그런 다음 첫 번째 결과 세트는 그래프에 접근해서, 사용하려는 규칙에 따라 결과를 증폭시켜 조작하게 돼요. 이 접근 방식도 효과가 있을 수 있지만, 복잡한 부스팅 작업을 해야 하는 경우에는 성능 면에서 약간 어려움을 겪을 수 있어요.

그래서 우리는 Elasticsearch와 Knowledge Graph 사이에 더 긴밀한 연결이 있는 두 번째 접근 방식(위 오른쪽 그림 참고)으로 전환했어요. 앞에서 설명했듯이, 이 접근 방식을 사용하면 Knowledge Graph가 여러 뷰를 Elasticsearch로 내보내는 데 사용되죠.

작업의 일부는 인덱싱 시간에 수행돼요. 사용자가 쿼리를 수행하면, 쿼리 자체가 강화되는 첫 번째 단계를 거쳐요. 그래프에 접근해서 쿼리를 변경할 수 있고, 그런 다음 Elasticsearch에 대해 쿼리를 수행하는 거죠. 이 작업 자체는 그래프의 모든 단일 요소와 관련이 있는 건 아니지만, 컨텍스트나 사용자에 따라 범위가 좁아져서 속도가 매우 빠르기 때문에 더 성능이 좋은 접근 방식이라고 볼 수 있어요.

우리는 Elasticsearch를 그저 텍스트 검색에만 사용한다고 생각할 수도 있지만, 사실 그 시점에는 이미 그래프를 사용해서 생성된 매우 복잡한 쿼리가 있는 거예요. 그리고 실제로 그래프의 구조에 따라 Index도 변경되죠.

결론

Knowledge Graph는 복잡한 지식을 그래프로 표현하기 때문에 정말 중요해요. Knowledge Graph는 여러 소스에서 데이터를 수집할 수 있는 쿼리하기 쉬운 모델을 사용하죠. 이는 사용자, 사용자 항목 상호 작용, 그리고 원하는 모든 것을 저장할 수 있다는 의미예요. 나중에 중요한 데이터를 더 확장하거나 새로운 정보를 추가해서 Knowledge Graph를 변경할 수도 있고요.

게다가 빠르고 안정적이며 조정하기도 쉽고, 패싯 및 자동 완성 같은 다른 흥미로운 기능도 제공하는 Elasticsearch와 같은 검색 엔진을 구현할 수 있다는 장점도 있죠.

Neo4j와 Elasticsearch를 결합하면 최종 사용자에게 높은 수준의 서비스 세트를 제공할 수 있어요. 핵심은 올바른 작업에 적합한 도구를 사용하는 것이죠. 복잡한 지식을 나타내는 그래프와 Elasticsearch와 같은 간단한 도구를 사용해서 최종 사용자에게 텍스트 검색 기능과 고급 검색 기능을 제공할 수 있답니다.

Knowledge Graph 구축을 고려하고 계신가요?
개발자 가이드: Knowledge Graph 구축 방법을 다운로드하여 자신 있게 구축을 시작하기 위해 알아야 할 모든 것을 단계별로 알아보세요.

  • 전자상거래
  • Elasticsearch
  • GraphConnect
  • Machine Learning
  • Natural Language Processing

에이치시스템즈LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.

👉 에이치시스템즈 홈페이지

728x90
반응형

+ Recent posts