RAG 기반 AI 답변 엔진(Perplexity, ChatGPT Search, Gemini grounding)이 출처를 선택할 때 수치·통계를 포함한 문장을 구조적으로 우선 인용하는 현상은, 희소 검색(BM25)·밀집 임베딩·교차 인코더 재순위화 세 단계 모두에서 수치가 관련성 신호로 독립적으로 작동하기 때문이다. 각 레이어의 작동 원리를 이해하면 콘텐츠 구조와 스키마 설계만으로 인용 가능성을 높일 수 있다.
검색 단계: 수치가 BM25 점수를 높이는 원리
BM25는 각 토큰의 역문서빈도(IDF)와 용어빈도(TF)를 결합해 문서 점수를 산출한다. 수치·통계값은 구조적으로 IDF가 높다.
- 높은 IDF: "성장률 23.4%"처럼 구체적 수치는 코퍼스 전체 출현 빈도가 낮다. 왜냐하면 정확히 같은 숫자가 다수 문서에 반복되는 일이 드물기 때문이다. 이를 활용하려면 보고서에서 인용한 정확한 수치를 완화·근사 표현 없이 문장에 직접 삽입해야 한다.
- 쿼리-문서 수치 매칭: "몇 퍼센트", "몇 명" 형태의 팩트 쿼리는 BM25에서 수치 토큰이 겹치는 문서에 가중치를 준다. 왜냐하면 쿼리 토큰과 문서 토큰의 직접 겹침이 TF 계산에 반영되기 때문이다. 따라서 예상 쿼리 패턴에서 요구하는 수치 단위(%, 명, 원, 배)를 미리 문장에 포함해야 한다.
밀집 임베딩 단계: 수치의 의미 앵커 효과
bi-encoder(E5, BGE, text-embedding-3 계열)는 문장 전체를 단일 벡터로 압축할 때 수치를 고밀도 의미 랜드마크로 처리한다.
- 수치 앵커 정렬: "매출 35% 증가"와 "수익 성장 35%"는 임베딩 공간에서 거리가 가깝다. 왜냐하면 수치가 의미 좌표계의 공유 앵커 역할을 하기 때문이다. 이를 활용하려면 핵심 수치를 단락 첫 문장에 배치해 벡터 표현 내 비중을 높여야 한다.
- 구체성 vs. 모호성: "상당수 기업이 도입했다"는 팩트 쿼리에 대한 코사인 유사도가 낮다(추정). "조사 기업 68%가 도입했다"처럼 수치를 명시하면 임베딩 유사도가 올라간다. 이를 적용하려면 형용사·부사("많은", "대부분")로 대체된 수치를 원래 숫자로 복원해야 한다.
재순위화 단계: 교차 인코더의 수치 평가 방식
cross-encoder는 쿼리-문서 쌍을 함께 인코딩해 관련성을 계산한다. 수치 포함 문장은 두 경로로 점수를 얻는다.
- 팩트 일관성(Entailment) 점수: NLI 헤드를 포함한 재순위 모델은 entailment 신호를 계산한다. "35% 성장"은 "성장했다"보다 쿼리 의도를 더 정밀하게 함의한다. 왜냐하면 수치가 쿼리의 기대 답변 타입(숫자)과 직접 일치하기 때문이다. 이를 적용하려면 단락 내 주장과 수치가 반드시 논리적으로 연결되어야 한다.
- Softmax 점수 격차 증폭: LLM이 최종 인용 문서를 선택할 때 softmax를 거치므로, 점수 격차가 클수록 인용 선택 확률이 비선형적으로 높아진다(추정). 수치로 재순위 점수가 벌어지면 경쟁 문서 대비 유리한 위치를 점하게 된다.
구현: JSON-LD로 수치를 구조화 데이터에 박제
RAG 파이프라인과 Knowledge Graph 크롤러 모두 JSON-LD에서 수치를 추출한다. 아래는 통계 수치를 Article과 citation 맥락에 함께 박제하는 패턴이다.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "2024 국내 생성형 AI 도입 현황 분석",
"datePublished": "2024-11-15",
"author": {
"@type": "Organization",
"name": "Citeon Research"
},
"description": "국내 제조업 기업 중 41.3%가 2024년 내 생성형 AI 파일럿을 완료했으며, 도입 전환율은 전년 대비 18.7%p 증가했다.",
"citation": {
"@type": "CreativeWork",
"name": "한국정보통신진흥협회 2024 AI 도입 실태조사",
"url": "https://example.org/report/2024",
"datePublished": "2024-10-01"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://citeon.kr/research/ai-adoption-2024"
}
}
description 필드에 핵심 수치를 직접 삽입하면 크롤러가 구조화 데이터에서 수치를 추출해 Knowledge Graph와 RAG 인덱스에 반영한다. citation으로 1차 출처를 명시하면 AI 답변 엔진이 신뢰도 신호로 활용한다.
측정: 수치 포함 여부에 따른 레이어별 비교
| 검색 레이어 | 수치 없는 문장 | 수치 포함 문장 | 핵심 메커니즘 |
|---|---|---|---|
| BM25 | IDF 평균 수준 | IDF 상위 구간 (희소 수치 기준) | 낮은 문서빈도(DF) → 높은 IDF |
| 밀집 임베딩 | 팩트 쿼리와 코사인 유사도 낮음 | 수치 앵커로 유사도 상승 (추정) | 의미 공간 내 수치 랜드마크 |
| 교차 인코더 | Entailment 점수 낮음 | 팩트 일치 → Entailment 상승 | NLI 헤드 팩트 일관성 신호 |
| LLM 최종 선택 | 경쟁 문서와 점수 차이 없음 | Softmax 비선형 증폭으로 유리 | 점수 격차 → 인용 확률 비선형 상승 |
흔한 함정: 수치 나열이 인용을 보장한다는 오해
맥락 없이 수치를 나열하면 cross-encoder의 coherence 평가에서 오히려 감점된다. LLM은 단락 전체의 논리 흐름을 평가하므로, 수치가 전후 문장과 인과적으로 연결되지 않으면 entailment 점수가 하락한다.
올바른 처리법: 수치는 반드시 (1) 출처, (2) 측정 기준, (3) 시점 세 요소와 한 문장에 묶어야 한다. "성장했다(23%)"처럼 괄호 삽입 형식은 피하고, "2024년 3분기 기준 IDC 보고서에 따르면 국내 퍼블릭 클라우드 시장은 전년 동기 대비 23% 성장했다"처럼 단일 문장으로 구성한다. JSON-LD description에도 동일 구조를 반복 배치한다.
Q. HTML 본문 수치와 JSON-LD description 수치, 어디에 넣는 것이 더 효과적인가?
RAG 파이프라인 구조에 따라 다르다. Perplexity·ChatGPT Search처럼 HTML 본문을 직접 청킹하는 시스템에서는 HTML 단락의 수치가 임베딩에 직접 반영된다. Knowledge Graph 우선 엔진(Google, Bing)은 JSON-LD를 먼저 파싱한다. 따라서 핵심 수치는 두 곳 모두에 중복 배치하는 것이 방어적으로 옳다. JSON-LD description에는 한 문장 압축 형태로, HTML 본문에는 출처·맥락을 포함한 단락으로 전개한다.
Q. 내부 실험 데이터나 비공개 조사 수치도 인용 가능성을 높이는가?
BM25·밀집 임베딩 단계에서는 수치의 출처와 무관하게 희소성 신호로 작동한다. 그러나 cross-encoder와 LLM 인용 선택 단계에서 일부 모델은 JSON-LD citation 메타데이터(출처 URL, 발행 기관, 날짜)를 신뢰도 신호로 참고한다. 내부 데이터라면 JSON-LD citation 필드에 사내 리포트 URL과 발행 기관명을 반드시 명시하고, 가능하면 외부 공개 보고서 수치와 교차 인용하는 구조로 보강하는 것이 인용 확률을 더 높인다.
참고 자료
이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.