GraphRAG

그래프, 세상을 먹여 살리다: Neo4j와 GraphRAG의 힘

hsystems 2026. 5. 18. 14:32
728x90
반응형

편집자 주: 이 프레젠테이션은 2015년 10월 GraphConnect San Francisco에서 Tim Williamson이 진행했어요. 다음은 그가 다룬 내용에 대한 간략한 검토입니다.

    • 증가하는 인구의 요구
    • 과학 연구의 도약
    • Graph Database로 작물 수확량 늘리기
    • 몬산토에서 Graph Database 구축하기
    • 단순한 혈통 데이터 이상의 추적
    • 몬산토의 그래프 기술의 미래


몬산토는 전 세계 160개국에서 판매되는 생산성 제품(주로 종자)을 개발하는 글로벌 농산물 회사에요. 몬산토는 지난 6년 동안 유전체학 파이프라인 데이터에서 더 나은 추론을 얻을 수 있는 새로운 방법을 찾기 위해 노력해 왔습니다.

인구 증가

Monsanto에서 근무하기 전에 저는 세인트루이스에 있는 워싱턴 대학교 환경공학과에서 과학자로 재직했어요. 저는 2050년까지 95억 명으로 늘어날 것으로 예상되는 인구를 먹여 살리는 문제를 해결하기 위해 학계를 떠나 몬산토로 갔습니다.

이렇게 많은 인구는 생산적인 농지를 희생하면서 도시 면적을 크게 확장할 거예요. 더 많은 사람들이 농촌 지역을 떠나 도시에 살기 때문에 이전에 농업에 사용되었던 토지가 도시 목적으로 더 많이 사용될 것입니다. 실제로 인구가 95억 명에 도달할 때쯤에는 1인당 먹을 수 있는 농지가 3분의 1에이커도 채 남지 않을 것으로 예상됩니다.

이렇게 증가하는 도시 인구는 중산층일 가능성이 훨씬 높으며, 이는 더 많은 동물성 단백질 공급원(고기, 계란 및 유제품)을 더 많이 사용하는 방향으로 전환하게 됩니다. 이것들은 모두 생산에 더 많은 자원 집약적이며, 이는 농업 생산 시스템을 더욱 강조합니다.

마지막으로, 글로벌 기후 변화는 우리의 일상 생활에 극적인 영향을 미치고 있으며, 특히 악천후 패턴이 더 자주 발생하고 예측하기 어렵습니다.

2014년 12월, NASA 과학자 그룹은 캘리포니아 가뭄을 완전히 해소하려면 주 전체에 11조 갤런의 물이 고르게 퍼져야 한다는 예측을 담은 광범위한 계산 모델을 발표했어요. 이는 세계에서 가장 큰 저수지보다도 더 큰 규모죠.

놀랍게도 이는 같은 해 10월, 노스캐롤라이나와 사우스캐롤라이나에 5일 동안 쏟아진 물의 양과 정확히 같아요. 이 폭우로 수확 시기에 엄청난 홍수가 발생했죠. 캘리포니아에 필요한 물은 분명히 지구 어딘가에 있었지만, 정작 필요한 곳에는 없었던 거예요.

과학 연구의 도약

다행히 인류는 이러한 문제를 해결할 수 있는 도구를 가지고 있어요. 그중 하나가 주요 작물의 유전학을 개선하는 것이죠. 사실 이건 우리가 수천 년 동안 해오던 일이기도 해요. 약 10,000년 전, 최초의 농부들은 변화의 여정을 시작했답니다. 테오신테(Teosinte), 즉 현대 옥수수의 조상인 야생초를 오늘날 우리가 알고 있는 최적화된 태양열 발전 공장으로 만들어낸 거죠.

이들은 두 가지 중요한 관찰 덕분에 이런 일을 해낼 수 있었어요. 첫째, 테오신테 밭을 살펴보니 어떤 식물은 다른 식물보다 더 많은 종자를 생산하는 등 더 나은 특성을 보이는 걸 발견했죠. 둘째, 다음 해에 그 식물을 다시 심고 수분시키면 시간이 지남에 따라 바람직한 특성을 가진 식물의 빈도가 높아진다는 걸 알게 된 거예요.

이걸 인공 선택 또는 선택적 번식이라고 부르는데요. 이런 과정이 수세대에 걸쳐 축적되면 사람들에게 더 효과적으로 식량을 제공할 수 있는 새롭거나 최적화된 작물 품종을 개발할 수 있게 되는 거죠.

1800년대 중반에 미국 농무부는 옥수수와 같은 주요 작물에 대한 전국 수확량 통계를 정기적으로 수집하기 시작했어요.

에이커당 부셸(Bushels per acre)은 옥수수와 같은 작물의 곡물 생산량을 측정하는 단위예요. 옥수수 1부셸은 약 56파운드의 옥수수 종자에 해당하고, 1에이커는 미식축구 경기장 면적의 약 90% 정도 된답니다.

1860년대부터 1930년대까지 옥수수 개선은 대체로 정체 상태였어요. 하지만 현대 트랜지스터 제조 기술의 발전으로 CPU 처리 속도가 무어의 법칙(Moore's Law)을 따라잡을 수 있게 되면서, 유전학에 대한 이해가 높아져 인구 증가에 맞춰 곡물 생산량을 늘릴 수 있게 되었죠.

1930년대에 우리는 특정 작물을 교배하여 새로운 품종을 만드는 방법을 알아냈어요. 그리고 분자 생물학을 발견하고 성능과 직접적으로 연관된 특정 DNA 조각을 분리하는 방법도 찾아냈죠. 지난 10~15년 동안에는 작물에서 정확히 원하는 것을 얻기 위해 DNA에 표적화된 변형을 가하는 데 매우 능숙해졌답니다.

Graph Database로 작물 수확량 늘리기

이제 곡선이 가파르게 상승하는 다음 단계는 더 많은 데이터를 수집하는 능력이 아니라, 그 데이터를 더 빠르고 의미 있는 방식으로 이해하는 능력이 될 거예요. 현재 우리는 몇 가지 중요한 발전을 활용하기 위해 8가지 상품 작물과 18가지 채소 작물군에 걸쳐 있는 모든 글로벌 작물 곡물 파이프라인을 재구성하고 있답니다.

유전자 곡물을 생산하는 방법은 무엇일까요? 대학에 있든 기업 연구실에 있든 더 나은 작물을 개발하는 것은 번식 주기를 중심으로 이루어져요.

발견 육종가가 질병 저항성과 같은 바람직한 특성 때문에 각각 선택되는 두 부모, 즉 수컷과 암컷을 선택하면 주기가 시작돼요. 우리는 또한 식물에 바람직하지 않은 특성이 없는지도 확인하고요.

다음으로, 우리는 그 두 부모를 교배해서 수십만에서 수백만의 자손을 얻은 다음, 고도로 집중된 번식 주기를 거치게 돼요. 주기의 모든 단계에서 우리는 특정한 바람직한 특성만을 가진 식물을 선별하죠. 우리는 최선의 것을 선택하고 나머지는 버려요. 그런 다음 이 단계에서 "승자"를 심고 서로 수분을 공급해서 주기의 다음 라운드로 자손을 전진시켜요.

주기의 마지막에 우리의 목표는 부모로부터 바람직한 특성을 모두 나타내는 새로운 식물을 갖는 것이에요. 이를 미래 교배에 사용하거나 세계 어딘가의 농부에게 판매하기도 하고요.

주기의 모든 단계에서 우리는 두 가지 종류의 데이터를 사용해서 어떤 종자를 보관하고 어떤 종자를 폐기할지에 대한 결정을 내리는데요. 하나의 데이터 세트인 유전자형 데이터는 실험실에서 저렴하게 생성되며 식물이 어떻게 작동할지에 대한 예측 정보를 제공해요.

다음 데이터 세트는 현장 시험에서 나오는데, 이 과정에서 씨앗을 심고 그 성능을 측정하죠. 불행하게도 임상시험의 규모 때문에 임상시험을 심고, 데이터를 수집하고, 모니터링하는 과정은 비용이 꽤 많이 들어요. 예를 들어, 우리는 수천 개의 교배를 만들고 5개 위치에 수십 개의 자손을 심을 수 있는데, 이는 수백만 달러의 비용이 들 수 있어요.

각 주기에서 더 좋은 식물을 얻을 수 있는 세 가지 방법이 있어요.

    1. 교차할 두 부모를 더 잘 선택할 수 있어요. 수십만 명의 부모가 있는데, Data Science를 사용해서 어떤 부모가 교배하기에 가장 좋은지 결정하려면 어떻게 해야 할까요?
    2. 우리는 선택 파이프라인의 모든 경로에서 최선의 결정을 내릴 수 있도록 보장할 수 있어요.
    3. 우리는 더 많은 플랜트를 테스트해서 파이프라인을 확장하려고 노력할 수 있어요. 우리는 현장 시험을 위해 사용 가능한 토지를 거의 모두 사용했기 때문에 이것은 어려운 일이죠.

이 슬라이드에서 C는 번식 주기를 거쳐 나온 한 식물을 나타내요. 이것은 생산을 시작하기 위해 원래 교배되었던 두 부모에게 다시 연결되는 자가 자손 세대(회색)를 포함하는 깨지지 않은 조상 나무를 가지고 있어요.

가능한 최상의 부모와 결과를 찾는 데 가까워짐에 따라 해당 체인의 길이는 1년에 약 4홉까지 늘어날 수 있어요. 해당 라인에서 나오는 최종 부모가 수백 또는 수천 개의 자체 교배에 사용되는 경우 이는 더욱 복잡해지죠. 게다가 우리는 식물을 육종한 지 20년이 되었고 그 이전에는 60년의 데이터가 있어요. 그 부모 A와 B 각각은 그것을 낳기 위해 교배된 풍부한 조상의 역사를 가지고 있고요. 시간이 지남에 따라 이것이 실제로 어떻게 형성되는지 쉽게 알 수 있을 거예요.

이 실제 데이터 세트의 중심에 있는 상위 C는 연구 개발 파이프라인에서 중요한 옥수수 계통의 가장 오래된 소스라고 해요. 이 그래프에는 최소 300,000개 이상의 식물이 표시되는데, 중앙에 있는 부모 식물의 유전적 영향이 파이프라인 전체에서 느껴진다는 점이 흥미롭죠.

위의 세 가지 영역에서 획기적인 변화를 만들려면 복잡하고 의미 있는 유전적 특징에 대해 이 정도 크기의 데이터 세트를 실시간으로 마이닝할 수 있어야 해요. 바로 그게 저희가 해결해야 할 문제였죠.

이전에는 Graph Database가 없었기 때문에, 어쩔 수 없이 관계형 데이터 구조를 사용해서 이 작업을 처리했어요. 기존 관계형 저장소에는 9억 행의 데이터를 나타내는 약 11개의 조인 테이블이 있었죠. 여러분이 상상하시는 것처럼, 이 시스템에서 뭔가를 읽어오는 건 사전 연결, 대규모 재귀 조인 때문에 꽤나 고통스러운 작업이었답니다.

우리의 목표는 단일 식물의 전체 조상 트리를 제공할 수 있는 도구를 찾는 거였어요. 이를 위해 가능한 최고의 최적화 테이블과 재귀 `JOIN` 쿼리를 작성하고 프로덕션 캐싱을 통해 속도를 최적화했죠. 하지만 우리의 성과 곡선을 보면 "실시간"이라는 목표는 달성되지 않았음이 분명해요.

이 그래프에서 깊이는 "트리 위로 뛰어오르기", 즉 조상 깊이의 한 수준을 나타내요. 응답 시간은 데이터 세트를 반환하는 실행 시간을 측정한 것이고요. 이는 데이터세트의 조상 수가 폭발적으로 증가하기 시작하는 시점과 정확히 관련이 있죠.

우리는 여전히 이 문제를 해결해야 했어요. 다행스럽게도 우리는 유전적 조상이 자연스럽게 발생하는 그래프를 형성한다는 것을 깨달았죠. 이는 실시간으로 데이터를 가져오는 과정에서 직면한 문제를 실제로 어떻게 처리했는지 보여주는 다소 작고 사소한 스냅샷이에요.

모든 씨앗 봉지에는 `Node`가 있어요. 새로운 `Node`를 사용하면 `Node`를 심을 때마다, 수확할 때마다 추적하므로 부모에서 자손까지 원하는 만큼 추상화 계층을 구축할 수 있죠. 이 그래프의 최종 테스터를 처음 구축했을 때 그래프에는 7억 개의 `Node`, 12억 개의 `Relationship`, 20억 개의 속성이 있었어요.

우리가 시작한 곳으로 돌아가서 동일한 프로덕션 속편을 사용하고 다음을 사용하여 동일한 알고리즘을 다시 만들어요.의 순회 프레임워크를 사용하고 동일한 조건과 데이터 세트를 사용하고 `Query`를 다시 실행하세요.

이제 거의 스케일 프리 성능에 가까운 수준으로 임의 깊이의 트리를 처리할 수 있어요. 이제 우리는 이 일을 신속하게 할 수 있을 뿐만 아니라, 성능만 추적하는 게 아니라 식물의 기능을 파악하기 위한 추상화를 구축할 수 있다니 정말 흥미롭죠? 또한 이제 단 몇 분 만에 단 하나의 식물이 아닌 백만 개의 식물의 조상을 분석할 수 있다니 놀랍지 않나요?

Graph Database 구축

이제부터 우리는 "무엇이었는지"의 세계를 뒤로하고 추상화를 어떻게 구축했는지 한번 살펴볼까요?

우리 그룹에서 데이터 과학 제품을 제공하는 것에 대한 우리의 철학은 REST 또는 우리가 원하는 프로그래밍 언어에서 액세스할 수 있는 일반적인 생물학적 문법을 사용하여 데이터 세트를 캡슐화하는 방법을 결정하는 거예요. 그렇게 하면 누구에게도 방법을 가르치지 않고도 복잡한 알고리즘을 실행할 수 있어요.

예를 들면 다음과 같은 기본 트리가 있다고 가정해 볼게요. 개체군 1에는 단일 연결 조상이 하나 있고 교배로 분리되며, 각 교배에는 고유한 단일 연결 조상이 있어요. 우리 문법에서는 간단한 REST 리소스를 사용하여 전체 트리를 반환하는 것을 캡슐화했어요. 인구 1이 있고 트리의 설득력 있는 JSON 표현으로 모든 조상을 반환하려고 해요. 모든 Node와 Relationship이 표시되죠.

이를 통해 누구나 실시간으로 Neo의 전체 하위 그래프를 얻을 수 있으며, 전체 데이터베이스를 자신의 컴퓨터에 복사하지 않고도 거대한 그래프의 기능을 효과적으로 활용할 수 있어요.

하지만 우리는 중요한 유전적 특징도 추적하고 싶어요. 유전학에는 혈통에서 얻는 정보를 이해하고 극대화하는 데 중요한 여러 가지 이정표가 있어요. 우리는 과학자들이 그것에 접근할 수 있도록 문법을 작성했답니다.

매우 기본적인 Query는 다음과 같아요. Plant One의 경우 해당 조상에서 가장 최근의 이진 교배를 표시합니다(예: 두 부모가 있는 경우). 이는 식물의 유전사에서 중요한 순간인데요, 왜냐하면 재조합 사건을 표시하기 때문이에요. 이는 계통에서 서로 다른 염색체를 가진 두 부모가 함께 교배되어 식물을 생산하는 시기입니다.이질적인 인구. 우리 시스템에서 사용자는 이진 교배만 요청하면 Plant One을 산출한 정확한 남성과 여성이 반환돼요.

특정 기능으로 이어진 계보를 추적하는 것도 가능해요. 예를 들어, 첫 번째 이진 교차까지만 인구 1의 조상을 요청할 수 있죠.

이 경우 동일한 트리 구조를 반환하지만, 이진 교차 수준으로 정리된 트리 구조를 얻게 돼요. 우리는 모든 의미 있는 유전적 요소를 고려하려고 노력했고, 그 주위에 문법을 구축했답니다. 2014년 9월에는 "Ancestry-as-a-Service"라는 내부 시스템을 가동하기 시작했어요.

우리 시스템은 파이프라인의 전체 유전적 이력을 포함하는 내장형 Neo4j 클러스터에 풍부한 RESTful 문법을 통합하고 있어요. REST 계층은 개별 데이터 과학자와 애플리케이션 개발자가 직접 액세스할 수 있는 계층이죠.

현재 우리 시스템에는 약 30개의 RESTful 문법 요소가 있어요. 이를 통해 우리는 가장 오래된 것으로 알려진 발견 교배부터 오늘날 현장에서 판매되는 가장 최근 작물까지 파이프라인을 추적할 수 있답니다. 우리 시스템을 사용하는 약 120명의 애플리케이션 개발자와 데이터 과학자가 있는데, 이들이 함께 6억 개가 넘는 REST 쿼리를 작성했어요.

이 도구의 개발은 우리에게 정말 큰 변화를 가져다 줬어요. 예를 들어, 우리가 개발한 애플리케이션 중 하나는 우리 파이프라인의 모든 시드에 적용되었죠. 우리는 이 애플리케이션에서 성능이 10배 증가한 것을 확인했고, 특정 데이터 과학자는 우리의 새로운 시스템을 사용하여 한 달 걸리던 분석 시간을 단 세 시간으로 단축할 수 있었어요.

실시간으로 데이터를 읽어오려면 당연히 실시간 데이터가 필요하겠죠? 그래프를 만드는 순간 데이터가 이미 낡았다면, 시스템을 실시간으로 활용하는 건 정확하지 않을 거예요. 그렇다고 모든 애플리케이션이 그래프에 데이터를 쓰도록 할 수도 없다는 걸 알고 있었죠. 그래서 저희는 Oracle의 기술인 GoldenGate를 사용해서 이 문제를 해결했어요. GoldenGate는 Exadata 인스턴스에서 나오는 리두 로그에서 변경 캡처 스트림을 생성해준답니다.

저희는 변경 스트림을 파이프하고, 이걸 Apache Kafka가 인식할 수 있는 형태로 변환하는 커스텀 어댑터를 만들었어요. 이 변경 스트림은 하루에 무려 1,000만 건의 쓰기를 그래프에 꾸준히 제공하고, 이 쓰기는 Oracle에 도달한 후 1초 안에 상위 계층에 반영돼요. 이걸 활용해서 전체 데이터 단일체를 조금씩 분할해서 AWS로 옮기고 있답니다.

이 방식이 저희처럼 규모가 크고 복잡한 상황에 놓인 회사들에게 정말 유용할 거라고 생각해요. 저희 어댑터에 대한 오픈 소스 액세스도 제공하고 있으니 참고해주세요.

가계 데이터 그 이상의 추적

저희가 가계 데이터 추적에만 관심 있는 건 아니에요. 이 다이어그램, Triforce는 현대 게놈 과학의 궁극적인 목표를 나타내죠. 이걸 통해 식물의 관찰 가능한 특성(표현형)을 식물의 성능을 예측하는 유전 정보, 그리고 해당 성능을 측정하는 환경에 대해 인덱싱할 수 있어요. 이건 현재 현대 과학에 존재하는 몇 가지 흥미로운 유전적 수수께끼를 풀 수 있는 문을 열어준답니다.

이러한 문제 중 하나는 조상 그래프에 유전자형 데이터를 계층화하는 방법을 고려해서 접근할 수 있다는 점이에요.

유전자형 데이터 세트가 있는 모든 식물에 대해 간단한 node를 그 population과 연결해줄 수 있어요. 이 node는 게놈 데이터를 저장하는 외부 시스템(이 경우 HBase 환경)에 대한 포인터 역할을 하죠. 이걸 통해 특정 유전형 특징의 존재를 기반으로 조상 그래프를 구문 분석하는 알고리즘을 만들 수 있답니다.

이 그래프에는 연결된 게놈 데이터 세트가 있는 세 개의 엔터티가 각각 있어요. "마커 수"는 데이터 세트의 크기와 직접적인 상관관계가 있죠. 이 예시에서 60,000개의 마커는 60,000이 되고, 300개의 마커는 300개의 사실이 되는 거예요. 대규모 마커 데이터 세트를 수집하는 건 비용이 꽤 많이 들기 때문에, 부모로 사용할 식물에 대해서만 수집하게 돼요.

이제 모든 저밀도 및 고밀도 마커 데이터 세트의 위치와 해당 데이터 세트 간의 정확한 유전 경로가 있다면, 저해상도 데이터의 데이터 콘텐츠를 값비싼 데이터 세트를 측정할 때와 비슷하게 업샘플링할 수 있어요.

RESTful 문법을 사용해서 이걸 구축하려면, 가장 최근의 유전자형 조상 세트에 도달했을 때 데이터베이스에 트리를 "가지치기"하도록 요청하는 거예요. ID는 해당 데이터세트가 포함된 HBase 데이터 저장소에 연결되는 키를 나타내기 때문에, 트리에는 이러한 모집단에 대해 보유하고 있는 모든 게놈 데이터가 주석으로 추가되죠.

이제 Ancestry-as-a-Service에서 이러한 유전자형 주석이 달린 조상 트리를 뱉어낼 수 있게 되었어요. 그래서 해당 시스템에 Apache Spark 및 GraphX 기반 유전자형 추정 엔진을 구축했답니다.

유전자형 데이터 세트와 연결된 조상 트리를 사용해서 대상 자손의 고해상도 유전자형을 업샘플링(추정)하는 방식이에요.

이 추정을 할 때 연결된 키를 사용해서 HBase에서 필요한 데이터 세트를 가져오고, 추정된 유전자형을 HBase에 다시 쓰고, Kafka를 통해 그래프에 전달해서 향후 계산에서 이러한 새로운 데이터 세트를 활용할 수 있게 만들죠. 이 거대한 피드백 루프는 우리의 육종 파이프라인 중 하나를 통과하는 모든 단일 종자의 유전자형을 추정할 수 있는 힘을 제공해요.

이제 종자에 대한 고해상도 유전자형 데이터가 있으니, 가장 효과적인 자손을 위해 해당 유전자형을 추정하고 해당 데이터를 유전적으로 마이닝해서 현장 시험의 첫 번째 단계를 대체할 수 있어요. 이로 인해 전체 번식 주기에 걸쳐 더 나은 선택이 가능해지죠.

실험실에서 종자를 스크리닝하면 더 빠르고 비용 효율적이어야겠죠? 더 이상 현장 시험을 할 필요가 없으니 연간 수백만 달러를 절약하고 토지를 다른 목적으로 사용할 수 있어요. 우리는 데이터를 활용해서 파이프라인의 수평적 확장을 확장하는 거예요.

우리가 다음으로 갈 곳

유전학자들은 오랫동안 그래프 분석의 힘을 알고 있었어요. [슬라이드 30:11 삽입] 이 예는 가금류 육종, 분자 전 생물학에 관한 1921년 교과서에서 발췌한 것인데요. 역사상 현 시점에서는 특성의 유전성을 의미 있는 방식으로 설명할 방법이 없었어요. 그럼에도 불구하고 는 자손의 조상이 유전적으로 어떻게 기여했는지를 나타내는 그래프 구조를 그렸답니다.

그가 설명한 내용은 정말 강력한 게놈 선택 기술의 기초가 되는 공동 조상 분석이라는 알고리즘이었어요. 오른쪽에 보이는 2010년 논문에서는 공동 조상 분석을 사용해서 특정 유형의 자손을 위해 교배할 부모를 선택하는 데 유용한 그래프 기반 알고리즘을 설명하고 있죠. 이때는 아직 Graph Database에 접근할 수 있는 사람이 없었다는 점이 아쉬워요.

공동 조상의 경우, 특정 식물에 대해 각 조상의 유전적 기여도를 나타내는 축소된 표현인 공동 조상 행렬을 생성하는 데 거의 근접했어요. 그래프 이론가들에게 행렬 형태의 그래프는 낯선 개념이 아닐 거예요. 왜냐하면 계산 효율이 정말 좋거든요. 그리고 우리는 게놈 선택 알고리즘을 사용해서 우선 파이프라인에 올바른 식물을 배치하는 거죠.

더 자세한 논의를 원하시면 언제든지 저에게 연락해주세요. 지저귀다.

이와 같은 그래프 기반 앱을 만들고 싶으신가요?
무료 사본을 다운로드하려면 아래를 클릭하세요.Neo4j 배우기세계 최고의 Graph Database로 속도를 따라잡으세요.
  • Graph
  • GraphConnect
  • HBase
  • Kafka
  • Monsanto
  • Oracle

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

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

728x90
반응형