LLM 의미 중복 제거 설계

AI · LLM4분 읽기

여러 곳에서 데이터를 모으면 반드시 중복 문제를 만납니다. 정책 공고 수집 파이프라인에서 겪은 사례가 전형적입니다. 복지 정책 하나가 부처 API에는 정식 명칭으로, 구청 게시판에는 줄인 제목으로, 기관 블로그에는 홍보 문구로 올라옵니다. 문자열은 다르지만 내용은 같은 정책입니다. 이걸 그대로 앱에 내보내면 시민은 같은 카드를 세 번 봅니다. 이 글은 그 문제를 LLM 의미 중복 제거로 푼 설계를 정리했습니다.

의미 중복 제거란

의미 중복 제거는 문자열이 아니라 내용이 같은 레코드를 찾아 하나로 통합하는 처리입니다. 완전히 같은 값을 지우는 전통적 중복 제거(유니크 키, 해시 비교)와 달리, 표기가 서로 다른 "같은 것"을 다뤄야 하므로 규칙만으로는 잡기 어렵습니다. 제목 유사도 같은 통계 기법은 경계 사례에서 흔들리고 임계값을 조이면 놓치고 풀면 오합칩니다. LLM 판정은 이 지점에서 실용적인 답이 됩니다. 사람이 두 공고를 나란히 놓고 "같은 정책이네"라고 판단하는 일을 모델에게 시키는 셈입니다.

전부 비교하지 않는다: 후보 압축 → LLM 판정 → 대표 선정

LLM에게 모든 쌍을 비교시키면 비용이 감당되지 않습니다. 레코드가 수천 건이면 쌍은 수백만 개가 되기 때문입니다. 그래서 처리를 3단계로 나눴습니다.

  1. 후보 압축(blocking): 기관·기간·핵심 키워드처럼 저렴한 신호로 "같을 가능성이 있는" 후보 그룹을 먼저 좁힙니다. 대부분의 쌍은 이 단계에서 비교 대상조차 되지 않습니다.
  2. LLM 판정(judge): 후보 그룹 안에서만 모델이 두 레코드가 같은 정책인지 판정합니다. 판정 결과에는 신뢰도가 함께 기록됩니다.
  3. 대표 선정(master selection): 같다고 판정된 그룹에서 정보가 가장 풍부한 출처의 레코드를 대표로 선정합니다. 출처별 우선순위를 두어, 상세 필드가 충실한 공식 출처가 홍보성 요약보다 앞서게 했습니다.

이 구조에서 LLM 비용은 후보 그룹 크기에만 비례합니다. 정밀한 판단이 필요한 좁은 구간에만 모델을 쓰고 넓은 구간은 싼 연산으로 거릅니다. 이것이 대량 데이터에 LLM을 붙일 때의 기본 전략입니다.

원본은 지우지 않는다: 2단계 DB

핵심 결정이 하나 더 있습니다. 통합을 원본 위에서 하지 않았습니다. DB를 두 층으로 나눠 1차 테이블에는 수집된 원본을 출처별로 전부 보존하고 2차 테이블에 통합된 마스터 레코드를 만들었습니다. 마스터에는 어떤 원본들이 묶였는지(원본 ID 목록), 판정 신뢰도, 그룹 크기가 함께 저장됩니다. 앱은 2차 테이블만 조회하므로 사용자는 정책 하나당 카드 하나만 봅니다.

원본 보존이 중요한 건 판정이 틀렸을 때입니다. 통합이 잘못됐다는 것을 발견하면 원본에서 다시 묶으면 됩니다. 원본을 지우고 병합했다면 복구할 길이 없습니다. LLM처럼 확률적인 구성 요소가 파이프라인에 들어올수록 되돌릴 수 있는 구조가 안전망이 됩니다.

내용역할
1차 테이블출처별 원본 전부 보존감사 · 재통합의 근거
2차 테이블통합 마스터 + 신뢰도 · 원본 ID 목록앱이 조회하는 최종 데이터

판정 프롬프트에서 배운 것

판정 작업은 분류보다 실수 비용이 큽니다. 다른 정책을 하나로 합치면 정보가 유실되고 같은 정책을 못 합치면 중복이 남습니다. 우리는 "확실하지 않으면 다른 정책으로 판정하라"는 보수적 기준을 프롬프트에 명시했습니다. 중복이 남는 것은 눈에 보이는 문제라 나중에 잡을 수 있지만, 잘못 합쳐진 것은 발견 자체가 어렵기 때문입니다. 비대칭한 실수 비용에는 비대칭한 기준으로 대응해야 합니다.

판정 결과에는 신뢰도와 그룹 크기가 함께 저장됩니다. 낮은 신뢰도로 묶인 그룹만 골라 살펴보는 표본 검수가 가능해지고 통합 품질을 수치로 추적할 수 있습니다. 대량 판정은 분류와 마찬가지로 배치 호출로 묶어 비용을 낮췄습니다.

앞 단계인 분류·추출 설계는 LLM 데이터 분류 자동화에서 다뤘고 이 중복 제거가 들어간 전체 파이프라인은 공공데이터 크롤링 자동화 사례에서 볼 수 있습니다.

자주 묻는 질문

의미 중복 제거와 일반 중복 제거는 무엇이 다른가요?

일반 중복 제거는 값이 완전히 같은 레코드를 유니크 키나 해시로 걸러냅니다. 의미 중복 제거는 제목과 표현이 서로 달라도 내용이 같은 레코드를 찾아 통합하는 처리입니다. 표기 차이를 넘어 내용을 판단해야 하므로 LLM 같은 의미 이해 도구를 씁니다.

LLM 판정 비용이 너무 커지지 않나요?

전체 쌍을 비교하지 않고 후보 압축을 먼저 하면 통제 가능합니다. 기관·기간·키워드 같은 저렴한 신호로 후보 그룹을 좁힌 뒤 그 안에서만 LLM이 판정하므로 비용은 데이터 전체 크기가 아니라 후보 그룹 크기에 비례합니다.

판정이 틀리면 데이터가 손상되지 않나요?

원본을 보존하는 2단계 구조라면 손상되지 않습니다. 통합 결과는 별도 테이블에 만들어지고 원본은 출처별로 전부 남아 있으므로 잘못된 통합을 발견하면 원본에서 다시 묶어 복구할 수 있습니다.

임베딩 유사도만으로 중복을 잡을 수는 없나요?

후보를 좁히는 용도로는 유효하지만 최종 판정 기준으로는 부족합니다. 유사도는 임계값을 어디에 두든 경계 사례에서 틀리고 "비슷한 정책"과 "같은 정책"을 구분하지 못합니다. 저렴한 신호로 후보를 압축하고 판정은 의미를 읽는 단계에 맡기는 분업이 안정적입니다.

어느 출처를 대표로 남길지는 어떻게 정하나요?

출처별 우선순위와 정보 충실도로 정합니다. 상세 필드가 풍부한 공식 출처를 우선하고 같은 조건이면 미리 정한 출처 순위를 따릅니다. 대표가 아닌 원본들의 ID도 마스터에 기록되어 근거를 추적할 수 있습니다.

#중복제거#LLM판정#데이터통합#데이터품질

업무자동화 구축이 필요하신가요?

무료 상담 신청