ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 관계로 기억을 넓히려면 어디서 출발해야 하는가: 앵커 정밀도가 막은 그래프 확장

    MEMENTO 2026. 11. 12. 09:01
    반응형

    기억 서버에 관계 간선을 쌓아 두면 검색이 좋아질 것이라는 기대는 자연스럽다. 기억 하나를 찾았다면 그 기억과 이어진 이웃도 같은 질문에 쓸모가 있을 가능성이 높다. 사람의 연상 기억이 그렇게 움직이고, HippoRAG 이후 그래프 기반 검색 논문 대부분이 같은 직관 위에 서 있다. Memento에도 FOLLOWS, REFERENCES, CONTRASTS_WITH, BELONGS_TO 같은 관계가 이미 적재된다. 그런데 검색 결과의 1-hop 이웃을 근거로 덧붙여 보는 실험(#1675)은 실패했다. 이 글은 그 실패 뒤 이틀 동안 같은 라벨로 다시 계산하고, 항목 단위 관련성 필터를 새로 만들어 본 기록이다. 결론부터 적으면 간선은 문제가 아니었다. 어디서 출발하느냐가 문제였다.

    실패한 확장은 관계를 부정하지 않았다

    1-hop 확장이 실패한 이유를 두 갈래로 읽을 수 있다. 관계 간선이 쓸모없다는 해석, 아니면 간선은 괜찮은데 쓰는 방식이 틀렸다는 해석이다. 앞쪽이 맞다면 관계 적재 자체를 줄이는 쪽으로 가야 한다. 그래서 새 측정을 하기 전에 이미 가진 라벨을 LLM 호출 없이 다시 집계했다. 질의 59개, 항목 라벨 1,594개는 두 모델이 서로 모르게 판정한 값이고(kappa 0.83), 사람이 붙인 gold가 아니라는 점은 이 글 전체에 깔린 한계다.

    top-10 검색 결과의 항목을 세어 보면 관련 159, 무관 366, 보류 65다. 정밀도가 30% 안팎이니 열 개 가운데 일곱 개가 질문과 상관없는 기억이다. 이 결과에서 이웃을 펼치면 무관한 항목이 무관한 이웃을 데려온다. 실제로 보류를 뺀 확장 후보 412개 가운데 부모가 정답인 경우의 정답률은 54%(36/67)였고, 부모가 무관한 경우는 2%(7/345)였다. 같은 간선인데 출발점이 맞았는지에 따라 정답률이 27배 갈린다.

    간선이 길을 품고 있는지도 따로 봤다. 같은 질의에서 둘 다 정답인 쌍 1,037개 가운데 1-hop으로 직접 이어진 쌍이 131개였고, top-10에서 놓친 정답 98건 중 58건(59%)이 top-10 항목 중 하나와 1-hop으로 이어져 있었다. 유형도 한쪽으로 쏠리지 않았다. REFERENCES 47, FOLLOWS 40, extracted_from 21, CONTRASTS_WITH 13, BELONGS_TO 9가 섞여 있어서 버려도 되는 간선 유형이 보이지 않았다. 관계 적재를 줄이자는 제안은 여기서 접었다. 관계는 놓친 근거의 절반 이상으로 가는 길을 갖고 있었고, 그 길을 잘못된 출발점에서 걸었을 뿐이다.

    다른 논문도 같은 조건을 달고 있었다

    같은 질문을 논문 쪽에서 확인했다. RippleMem, EMem, GAAMA, SYNAPSE, QGMem, EngramRAG, 그리고 HippoRAG 계열을 전문으로 읽고 그래프가 실제로 이득을 낸 설정을 비교했다. 공통점은 셋이었다. 질의, 또는 관련으로 확인된 앵커에서 시작한다. 이웃은 질의나 목표 유사도로 다시 점수를 매긴다. 억제, 필터, 충분하면 멈추는 조건을 둔다. 이웃을 무조건 덧붙이는 체계는 하나도 없었다.

    RippleMem은 첫 홉 결과에서 앵커를 최대 세 개만 고르고, 부족한 근거가 무엇인지 목표를 세운 뒤 2-hop 이웃을 목표에 비춰 재점수한다. 질문의 39%에서는 충분하다고 판단해 확장을 아예 하지 않는다. 확장을 빼면 LoCoMo 점수가 4.02점 떨어졌다. GAAMA는 PPR 가중치를 1.0으로 올리자 벡터 검색보다 나빠졌고, 질의 유사도가 점수를 지배해야 한다는 결론을 냈다. Hu 등의 LongMemEval 통제 실험은 더 직설적이다. 유사도 간선으로 만든 그래프는 평평한 검색보다 낮았고(R@5 0.9045에서 0.8424), 1-hop 확장은 재순위가 좋으면 차이가 없고 약하면 해로웠다(0.9546에서 0.8615). 그래프의 이득은 간선이 아니라 노드를 어떻게 표현했느냐에서 나왔다.

    한 가지 경계는 분명히 해야 한다. 이 논문들은 대부분 LoCoMo 같은 대화 벤치마크를 쓰고 LLM이 심판한다. 코딩 에이전트가 던지는 운영 질의와 분포가 다르다. 또 이들이 다루는 기억 단위는 한두 문장으로 정규화된 이벤트인데, Memento의 기억은 길이가 150자에서 12,514자까지 흩어져 있다(중앙값 308자). 논문이 보고한 이득을 그대로 기대하면 안 된다. 읽고 얻은 것은 이득의 크기가 아니라 순서다. 간선을 고치기 전에 사용 방식을 먼저 고친다.

    그래서 앵커부터 정밀하게 만들기로 했다

    순서가 정해지면 필요한 것이 보인다. 앵커가 되려면 질의 단위가 아니라 항목 단위로 관련성을 알아야 한다. 현재 기각 게이트는 질의 전체에 점수를 하나 매겨 통과 여부만 정한다. 질의가 통과하면 top-10이 통째로 주입되니, 무관한 항목 일곱 개가 따라 들어간다. 오라클로 시뮬레이션해 보니 부모가 정답인 항목에서만 확장하면 확장된 항목의 무관 비율이 46%, 다근거 질의 42개의 완전성이 11개에서 18개로 올랐다. 사전에 정한 통과선이 무관 40% 이하, 완전성 +20pp였으니 오라클조차 겨우 닿는 상한이다. 오라클을 실제 판정기로 바꾸면 이보다 나쁠 수밖에 없다는 뜻이므로 통과를 장담하지 않고 시작했다.

    1단계는 항목 판정기 비교였다. 기준은 거짓 기각 1.6% 이하, 거짓 통과 12.45% 이하, p95 지연 448ms 이하이고, 임계값은 튜닝용 30개 질의에서만 골랐다. 검증 질의 29개로 정리한 결과는 다음과 같다.

    안 항목 정밀도 / 재현율 거짓 통과 p95 지연 판정
    현재 질의 게이트 0.4 0.315 / 1.0 24.88% 224ms 기준
    Jev 항목 점수 0.5 이상만 주입 0.774 / 0.812 21.18% 224ms 거짓 통과 미달
    gpt-4o-mini 항목 판정 0.803 / 0.713 4.97% 1,969ms 지연 4.4배
    minilm cosine 0.366 / 0.750 24.44% 226ms 무용

    사전등록 기준을 모두 넘긴 안은 없었다. 정확한 판정기(gpt-4o-mini)는 매 턴 주입에 쓰기에 느리고, 빠른 판정기는 거짓 통과를 절반으로 줄이지 못했다. 원인을 파 보니 점수 분포가 아니라 판정 오류였다. 오류의 78%는 무관한 질의에서 주제가 비슷한 항목 여러 개가 함께 0.4에서 0.6 사이로 올라오는 경우였다. 임계값을 어디에 두든 이 항목들은 같은 쪽에 있다.

    그래도 부산물은 있었다. Jev 항목 점수가 0.5 이상인 항목만 주입하면 LLM 호출 없이 추가 지연 0으로 주입 항목의 무관 비율이 69%에서 내려간다. 숫자를 어떻게 읽는지가 중요한데, 처음 보고서의 대표 수치는 23%였다. 이 값은 검증 29개 질의에서 보류를 뺀 가장 좋은 부분집합이다. 교차 검토에서 이 점을 지적받아 정정했다. 59개 질의 전체로 보면 29%이고, 보류를 무관으로 치면 33%다. 관련 항목 재현율은 0.812로 19%가 사라지고, 관련 항목이 있는 질의 47개 중 4개는 빈 결과가 된다. 좋은 숫자는 대개 가장 유리한 부분집합에서 나오고, 그 부분집합을 고른 질의와 대표 수치를 낸 질의가 같으면 낙관으로 기운다.

    앵커가 정밀해지면 확장은 통과하는가

    그 필터를 앵커로 삼아 2단계를 돌렸다. 이웃에도 Jev 점수를 매겨 0.55 이상만 남기고, 비교군은 cosine 상위 2개를 그냥 붙이는 방식이다. 결과는 기준 40%를 넘었다. 확장된 항목의 무관 비율이 점수 기반 45.0%(보류를 무관으로 치면 56.0%), cosine은 61.8%(71.1%)였다. 앵커가 무관한데 이웃을 붙여 생기는 잡음은 20건에서 1건으로 줄었으니 방향은 맞다. 그러나 남은 무관 이웃 19건 중 18건은 Jev가 0.5 이상으로 통과시켰지만 실제로는 무관한 앵커에서 나왔다. 오라클 앵커로 바꾸면 무관 비율이 0에서 3.7%까지 내려가는데도 그렇다. 병목은 이웃을 거르는 일이 아니라 앵커의 정밀도(0.774)다. 앵커 임계를 0.6으로 올리면 검증 무관이 35.3%까지 내려가지만 1단계 재현율이 0.812에서 0.725로 떨어지고, 이 탐색은 판정이 아니라 사후 관찰이어서 새 라벨 세트에서 두 임계를 함께 사전등록해야 확인된다.

    그래서 관계 읽기 경로는 보류로 확정했다. 완전성은 6/20에서 8/20으로 +10pp 올랐고 오염, 토큰, 지연 기준은 모두 통과했다. 무관 비율 하나가 막았다. 이 결과를 두고 하나의 기준 미달이 전체를 막았다고 보는 것이 맞는지는 판단이 갈린다. 사전등록은 그러라고 하는 장치다. 통과 기준을 결과를 본 뒤에 바꾸면 이 측정은 아무것도 증명하지 못한다.

    연상 도구가 서지 않은 이유는 그래프의 모양이었다

    관계로 기억을 조합해 창의성을 흉내 내자는 아이디어도 있었다. 질의에서는 멀지만 관련 앵커를 거쳐 이어지는 기억을 후보로 돌려주는 도구다. Gabora 계열 이론은 먼 기억의 회상은 기억 구조가 하고, 합성과 검증은 생성이 한다고 갈라 놓는다. 서버가 맡을 수 있는 몫은 후보 제시까지다. 그 후보가 나오려면 그래프에 다른 커뮤니티로 건너가는 교량이 있어야 하는데, 내용 관계 6종 그래프를 Louvain으로 쪼개 보니 교량이 거의 없었다. 노드 9,938개, 간선 24,583개, 연결 성분 961개, 커뮤니티 993개에 모듈성 Q가 0.98이고, 커뮤니티 사이를 잇는 교량 간선은 127개로 전체의 0.5%였다. REFERENCES만 보면 Q가 1.00이고 교량은 2개다. 그래프가 섬이다. 교량이 늘어나는 쪽은 extracted_from뿐인데, 요약과 원본을 잇는 파생 관계라서 먼 연결이 아니다. 연상 도구는 지금 구조로는 성립하지 않아 보류했다.

    정리하지 않고 남기는 것

    관계 적재는 줄이지 않는다. 항목 필터 B를 memory_injection에 넣을지는 재현율 19% 손실과 무관 비율 감소를 맞바꾸는 일이라 제품 결정으로 넘겼다. 관계 읽기 경로는 앵커 정밀도를 올릴 판정기가 생길 때까지 시작하지 않는다. 지금 후보로 남은 길은 정확하지만 느린 판정기를 명시적 recall 도구에만 쓰는 안인데, 아직 검토하지 않았다.

    이번 작업에서 가장 쓸 만했던 것은 결과보다 순서였다. 첫 실험이 실패했을 때 관계를 버릴지를 결정하기 전에 같은 라벨을 다시 집계했고, 그 집계가 철회 근거가 됐다. 그 뒤 만든 필터와 확장 경로가 모두 사전등록 기준에서 떨어졌어도 어느 단계가 병목인지는 앵커 정밀도 0.774라는 하나의 숫자로 좁혀졌다. 두 단계 실험의 비용은 gpt-4o-mini 220회와 Jev 114회를 합쳐 약 $0.06이었다. 실패가 값싸게 끝나면 다음에 무엇을 해야 하는지가 남는다.

    반응형
Designed by Tistory.