본문으로 건너뛰기
r/LangChain조회 1

SONAR 임베딩으로 GraphRAG 트리플을 한 번에 추출하는 Cogito Estella

약 3,700만 파라미터 디코더가 SONAR 임베딩에서 GraphRAG 트리플을 직접 생성합니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

GraphRAG ingestion에서 LLM으로 엔터티와 관계를 순차적으로 생성할 때 발생하는 토큰 비용, 지연, 깨진 JSON 재시도 문제를 줄이기 위해 Cogito Estella가 개발됐습니다. 약 3,700만 파라미터의 non-autoregressive decoder가 SONAR sentence embedding을 입력으로 받아 엔터티와 typed relation을 한 번에 출력하므로 텍스트 생성이나 형식 검증이 필요하지 않습니다. held-out data에서 tool-call structures는 1.000 F1, python code는 0.781, entity candidates가 있는 prose는 0.827, open-vocab prose는 0.651을 기록했으며, `extract_batch`는 N개 청크를 한 encoder 호출로 처리합니다. 다만 SONAR encoder의 Meta CC-BY-NC 라이선스와 60개 동사로 제한된 관계 어휘가 상용 배포와 관계 표현의 정확성에 제약으로 남아 있습니다.

섹션별 상세

01
GraphRAG ingestion에 LLM 추출을 적용하면 실제 대규모 처리에서 토큰별 비용과 지연이 커지고, JSON 형식 오류로 재시도가 발생합니다. Cogito Estella는 문장을 먼저 SONAR sentence embedding으로 바꾼 뒤 약 3,700만 파라미터의 non-autoregressive decoder가 엔터티와 typed relation을 단일 패스로 출력해 텍스트 생성 단계를 제거합니다. 출력 구조가 문자열 생성이 아니라 직접적인 그래프 예측에 기반하므로 게시물 작성자는 malformed output이 구조적으로 불가능하다고 설명하며, 이 접근의 비용 절감 효과를 실제 100만 청크 환경에서 검증할 수 있는지 확인하려 합니다.
02
LlamaIndex 연동은 `CogitoGraphExtractor`로 체크포인트와 `vocab-prose.json`을 불러오고, `node.text`에서 트리플을 추출한 다음 `to_neo4j`로 Neo4j의 Cypher MERGE에 연결하는 흐름입니다. 각 엣지에는 source 정보가 함께 매핑되며, `extract_batch`는 N개 청크를 하나의 encoder 호출로 처리해 ingestion 단계의 호출 수를 줄입니다. 게시물에는 후보 기반 prose, 개방형 어휘 prose, python code, tool-call structures를 분리한 측정값이 제시돼 입력 유형에 따른 성능 차이를 확인할 수 있습니다.
03
모델 성능은 held-out data에서 tool-call structures 1.000 F1, python code 0.781, entity candidates가 있는 prose 0.827, open-vocab prose 0.651로 측정됐습니다. prose에서는 텍스트와 기존 graph nodes에서 만든 entity candidates를 사용하면 0.827까지 올라가지만, 후보 없이 자유롭게 추출하면 0.651로 낮아집니다. 학습 과정에서 focal loss, LLM label distillation, char-level generation을 시도한 실패 기록도 changelog에 남겨 두었고, 전체 학습은 집에서 단일 RTX 5070으로 수행했습니다.
04
관계 어휘는 60개 동사로 제한되며 문장에 정확한 동사가 없으면 가장 가까운 항목을 선택합니다. 게시물의 예에서는 `approved`가 `support`로 매핑되므로, 관계 의미를 표준화하는 대신 원문 표현의 정확성을 일부 포기하는 방식입니다. 작성자는 후보 기반 추출과 open-vocab 추출 중 어느 쪽이 실제 pipeline에 적합한지, 근사 관계명이 허용되는지, fairseq2 의존성이나 async API 부재가 도입 장벽인지, 100만 청크당 현재 추출 비용이 얼마인지에 대한 피드백을 요청합니다.

용어 해설

비자기회귀 디코더(Non-Autoregressive Decoder)
이전 출력 토큰을 하나씩 생성하지 않고 입력 임베딩에서 엔터티와 관계를 한 번에 예측하는 디코더입니다. 토큰 생성 과정이 없으므로 잘못된 JSON 형식이 발생하지 않는 구조가 핵심입니다.
문장 임베딩(Sentence Embedding)
문장 전체의 의미를 고정 길이 벡터로 바꾸는 표현입니다. 이 게시물에서는 SONAR가 만든 벡터를 디코더에 입력하고, 디코더가 텍스트를 다시 생성하지 않은 채 지식 그래프 트리플을 출력합니다.
지식 그래프(Knowledge Graph)
엔터티를 노드로, 엔터티 사이의 typed relation을 엣지로 저장하는 구조입니다. Cogito Estella는 문장에서 문자열 트리플을 만들고 Neo4j용 Cypher MERGE와 엣지별 출처 정보로 변환합니다.
개방형 어휘 추출(Open-Vocabulary Extraction)
미리 정해진 엔터티나 관계 후보 목록에 제한되지 않고 문장에 나타난 표현을 그대로 추출하는 방식입니다. 게시물의 측정값에서는 후보 기반 prose 추출보다 낮은 F1을 기록했습니다.
F1 점수(F1 Score)
정밀도와 재현율의 조화평균으로 추출 결과의 정확성과 누락 정도를 함께 평가하는 지표입니다. 게시물은 입력 양식별로 1.000, 0.781, 0.827, 0.651의 F1을 제시했습니다.

코드 예제

python
extractor = CogitoGraphExtractor(checkpoints, "vocab-prose.json")
triples = extractor.extract(node.text)
extractor.to_neo4j(driver, triples, source=node.id_)

LlamaIndex 파이프라인의 텍스트 노드에서 트리플을 추출한 뒤 Neo4j에 출처 정보와 함께 저장합니다.

python
extract_batch

여러 청크를 하나의 encoder 호출로 처리하는 배치 추출 메서드입니다.

언급된 도구

LlamaIndex중립

GraphRAG ingestion pipeline에 CogitoGraphExtractor를 연결하는 통합 계층입니다.

fairseq2중립

게시물에서 도입 마찰 요인으로 언급된 의존성입니다.

SONAR중립

문장을 sentence embedding으로 변환해 그래프 디코더의 입력을 만드는 encoder입니다.

BGE-M3중립

SONAR의 라이선스 제약을 피하기 위해 다음 단계에서 이전하려는 encoder입니다.

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 02.수집 2026. 09. 02.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.