청킹이란 무엇인가: 문서를 검색 단위로 자르는 기준 완전 정리
청킹이란, 긴 문서를 검색과 생성에 적합한 크기의 조각으로 나누는 작업으로, 어디에서 자르느냐에 따라 나중에 질문이 들어왔을 때 필요한 대목이 찾아지는지가 달라집니다.
자르는 위치가 답변 품질을 바꾸는 이유
문장 중간에서 끊기면 의미가 사라집니다.
문서를 검색에 쓰려면 통째로 넣을 수 없으니 나누어야 합니다. 가장 간단한 방법은 글자 수를 세어 일정 길이마다 자르는 것입니다. 구현이 쉽고 조각의 크기도 고르게 나옵니다.
문제는 문서가 글자 수대로 구성되어 있지 않다는 데 있습니다. 표가 중간에서 갈라지면 헤더가 있는 조각과 값만 있는 조각이 따로 생깁니다. 조항이 두 조각으로 나뉘면 조건과 예외가 떨어집니다. 검색이 그중 한 조각만 찾아 오면 모델은 절반의 정보로 답을 만듭니다. 답변 품질이 낮은 원인이 모델이 아니라 여기에 있는 경우가 많습니다.
청킹의 정확한 정의: 단순 분할과 무엇이 다른가
길이 분할과 구조 기반 청킹, 세 가지 축의 차이
첫째, 기준이 다릅니다. 길이 분할은 글자 수를 기준으로 자릅니다. 구조 기반 청킹은 절과 항, 표 같은 문서의 논리 단위를 기준으로 자르고 길이는 그다음 조건으로 둡니다.
둘째, 결과가 다릅니다. 길이 분할은 조각 크기가 고르지만 내용이 끊깁니다. 구조 기반 청킹은 조각 크기가 들쭉날쭉하지만 각 조각이 하나의 완결된 의미를 갖습니다.
셋째, 필요한 선행 작업이 다릅니다. 길이 분할은 텍스트만 있으면 됩니다. 구조 기반 청킹은 문서의 구조가 먼저 분석되어 있어야 합니다. 그래서 청킹의 품질은 앞 단계인 구조화의 품질에 좌우됩니다.
두 방식은 대체 관계가 아닙니다. 구조 단위로 나눈 뒤 지나치게 긴 조각만 길이로 다시 나누는 조합이 실용적입니다.
조각을 만들 때 정해야 할 5가지
설계에 들어가는 5가지 결정
첫째, 경계 기준입니다. 절 단위인지 항 단위인지, 표는 통째로 둘지를 문서 유형별로 정합니다.
둘째, 크기 범위입니다. 너무 작으면 맥락이 부족하고 너무 크면 관련 없는 내용이 섞입니다. 실제 구성에서는 수천 자 단위로 나누는 방식이 쓰입니다.
셋째, 겹침 여부입니다. 앞뒤 조각을 조금씩 겹치게 두면 경계에서 잘린 문장의 의미가 보완됩니다.
넷째, 함께 실을 정보입니다. 문서 제목과 절 제목, 페이지 번호, 시행일을 조각마다 붙여 두면 검색 정확도와 근거 제시가 모두 좋아집니다.
다섯째, 표의 처리 방식입니다. 표는 문장과 성질이 달라 그대로 두면 검색되지 않는 경우가 있습니다. 요약 문장을 함께 저장하는 방식이 효과적입니다.
청킹의 실제 적용 방법
문서 유형별로 규칙을 나눕니다
법령과 고시처럼 조항 구조가 뚜렷한 문서, 매뉴얼처럼 절과 항이 계층을 이루는 문서, 공문처럼 짧고 독립적인 문서, 신고 서식처럼 표가 본문인 문서는 각각 다른 기준이 맞습니다.
한 가지 규칙으로 전체를 처리하면 어느 한쪽에서 반드시 문제가 생깁니다. 문서 유형을 먼저 분류하고 유형별 규칙을 적용하는 편이 낫습니다.
구조화 결과를 남겨 두고 조각만 다시 만듭니다
청킹 규칙은 운영하면서 계속 조정하게 됩니다. 구조화와 조각 나누기를 하나의 처리로 묶어 두면 규칙을 바꿀 때마다 문서를 처음부터 다시 분석해야 합니다.
두 단계를 나누고 구조화 결과를 보관해 두면 조각 규칙만 바꿔 빠르게 실험할 수 있습니다.
국내 환경에서의 청킹
국내 공공 문서에는 다층 표와 원문자 항목번호, 별표와 서식이 본문 사이에 끼어 있는 경우가 많습니다. 이런 요소를 문장으로 보고 자르면 조각이 어수선해집니다.
개정이 잦은 것도 조건입니다. 조각마다 시행일을 붙여 두면 개정된 문서가 들어왔을 때 이전 조각을 검색 대상에서 빼는 처리가 자동으로 가능해집니다.
조각 경계를 문서 구조에 맞춥니다
조각을 나누는 기준으로 글자 수를 먼저 잡으면 표와 조항이 중간에서 끊어집니다. 절이나 항 같은 문서의 논리 단위를 먼저 경계로 두고, 길이는 그 안에서 조정하는 순서가 안전합니다.
실무에서는 세 가지를 함께 정합니다. 먼저 어떤 단위를 끊지 않을지 정합니다. 표 하나와 조항 하나는 통째로 유지하는 편이 낫습니다. 다음으로 앞뒤 조각을 얼마나 겹칠지 정합니다. 문장이 경계에서 잘려 의미가 끊기는 문제를 줄이기 위해서입니다. 마지막으로 조각마다 어떤 정보를 함께 붙일지 정합니다. 소속 절의 제목과 원본 페이지 번호가 붙어 있으면 검색된 조각만으로도 맥락을 알 수 있습니다.
한 공공기관 구축 사례에서는 텍스트를 일정 길이 단위로 나눈 뒤 결과를 정렬하는 방식이 쓰였습니다. 다만 이 길이는 문서 성격에 따라 조정해야 하며, 표가 많은 자료에서는 길이보다 구조를 우선하는 편이 결과가 좋습니다.
자주 묻는 질문
문서 성격에 따라 다릅니다. 길이보다 경계가 중요하므로 논리 단위를 먼저 정하고 그 안에서 길이를 조정하시기 바랍니다.
경계에서 문장이 잘리는 문제를 줄여 줍니다. 다만 겹침이 크면 저장량과 검색 중복이 늘어나므로 적정선을 찾으셔야 합니다.
구조를 유지한 채 하나의 조각으로 두고 소속 절 정보를 함께 붙이는 편이 좋습니다. 필요하면 요약 문장을 덧붙입니다.
구조화 결과를 보관해 두었다면 조각만 다시 만들면 됩니다. 두 단계를 나누어 설계하시기 바랍니다.
문서 성격에 따라 다릅니다. 길이보다 경계가 중요하므로 절이나 표 단위를 먼저 정하고 길이는 그 안에서 조정하시기 바랍니다.
권합니다. 앞뒤를 조금씩 겹쳐 두면 문장이 경계에서 잘려 의미가 끊기는 문제를 줄일 수 있습니다.