Citeon
논문·연구 분석

LLM이 좋아하는 문장 구조는 따로 있다: 실험 분석

박도현
박도현 · AEO 리서처

RAG 기반 AI 답변 엔진이 출처를 선택하는 과정은 단일 모델이 문서를 '이해'하는 것이 아니라, BM25 희소 검색 → 밀집 임베딩 재순위화 → 교차 인코더 최종 점수화의 3단계 필터 체인이다. 정보량이 동일한 두 문장도 구조에 따라 각 레이어 통과율이 달라지므로, 문장 구조 최적화는 글쓰기 스타일 문제가 아닌 정보 공학 문제다. 2023년 이후 Perplexity·ChatGPT Search·Gemini Grounding이 RAG를 표준 답변 경로로 고착화하면서, 이 격차는 측정 가능한 수준이 됐다.

RAG 3단계 파이프라인과 문장 구조 관여 지점

인용 가능성을 높이는 5가지 문장 패턴

  1. 정의형 — "X는 Y이다": IS-A 관계가 밀집 임베딩·교차 인코더 양쪽에서 정의 쿼리 벡터와 구조적으로 가깝다. 구현: 개념 도입 시 첫 문장에 배치하고, 이후 문단에서도 약어 사용 없이 재선언한다.
  2. 수치 명시형 — "X는 320 ms다": 정수·단위 토큰은 IDF 우위로 BM25 고점. 구현: 주장 문장 직후 수치 문장을 독립 행으로 삽입한다.
  3. SVO 능동형 — "크롤러가 robots.txt를 요청한다": 주어·동사·목적어 명시로 청크 자립성 확보. 구현: "~에 의해 처리된다" 수동태를 능동 전환한다.
  4. 리스트 선두 완결 문장: 번호·불릿 항목 첫 줄은 청킹 경계와 맞물려 독립 검색 단위가 된다. 구현: 각 항목을 절이 아닌 완결 문장으로 작성하며, 주어를 생략하지 않는다.
  5. 청크 자립형 맥락 재진술: 500~700자 단락 첫 줄에 "이 섹션은 A의 B를 다룬다" 형태로 주제를 재선언한다. 구현: 앞 문단에서 이미 등장한 개념도 축약어 없이 재표기한다.
문장 유형 예시 BM25 밀집 임베딩 교차 인코더 청킹 강건성
정의형 "AEO란 AI 답변 엔진 최적화다." 높음 높음(정의 쿼리)
수치 명시형 "평균 지연은 320 ms다." 높음 높음(수치 쿼리)
SVO 능동형 "크롤러가 sitemap.xml을 파싱한다." 높음 높음
지시대명사형 "이것은 앞서 설명한 방식과 같다." 낮음 낮음 낮음
수동태 서술형 "해당 값은 시스템에 의해 처리된다." 낮음 낮음

실험 근거: "Lost in the Middle"과 청킹 경계 효과

Liu et al.(2023) "Lost in the Middle" 연구는 LLM이 컨텍스트 윈도 중간에 위치한 정보를 체계적으로 과소 인용함을 보였다. 20개 문서 컨텍스트에서 정답 문서 위치에 따라 정확도가 최대 20%p 이상 차이 났다. 원인은 어텐션 softmax가 초반·말미 포지션 임베딩에 편향되기 때문이다. 실무 함의: 청크 내에서도 중요 정보를 처음 2문장 이내에 배치해야 한다.

청킹 경계 효과: 512토큰 고정 청킹에서 문장이 경계에서 절단되면 두 청크 모두 의미가 손상된다. LangChain의 RecursiveCharacterTextSplitter(separators=["\n\n", "\n", ". "])처럼 문장 경계를 존중하는 sentence-aware chunking을 적용하면 RAGAS 컨텍스트 정밀도(context precision)가 향상된다는 측정 사례들이 보고돼 있다.

구현: FAQ JSON-LD로 정의형 문장 신호 강화

FAQ 스키마는 질문-답변 쌍을 기계 가독 형태로 선언한다. GPTBot·PerplexityBot·anthropic-ai 크롤러는 이 스키마를 파싱해 Q-A 쌍을 인용 후보로 직접 추출한다. 아래 JSON 객체를 <script type="application/ld+json"> 태그로 감싸 페이지 <head>에 삽입한다.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "BM25에서 수치 토큰이 유리한 이유는?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "BM25는 역문서빈도(IDF)를 가중치로 사용한다. 정수·소수·단위(ms, %, KB)는 전체 코퍼스 대비 출현 빈도가 낮아 IDF가 높으며, 쿼리에 수치가 포함된 경우 BM25 점수가 일반 서술 문장보다 높아진다."
      }
    },
    {
      "@type": "Question",
      "name": "청크 자립성(chunk self-containedness)이란?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "밀집 임베딩 모델이 청크를 독립 단위로 인코딩할 때, 지시대명사·생략 주어 없이 의미를 완결할 수 있는 정도를 청크 자립성이라 한다. 자립성이 낮은 청크는 쿼리 벡터와의 코사인 유사도가 낮아져 검색 상위 노출 가능성이 하락한다."
      }
    }
  ]
}

흔한 오해: "정보 품질이 좋으면 문장 형식은 무관하다"

지식 밀도가 높은 문서도 지시대명사·생략 주어·전 문단 참조가 많으면 단독 청크의 코사인 유사도가 하락한다. RAG 시스템이 "3번째 단락은 이전 단락 개념을 전제하므로 단독으로는 무의미하다"는 맥락 판단을 하지 않는 이유는, 각 청크가 독립 검색 단위로 처리되기 때문이다. 올바른 처리법: H2 섹션 또는 500자 단락마다 핵심 개념을 재선언한다. 독자에게는 중복처럼 보이지만, 검색 시스템에서는 청크 자립성 향상 신호로 작동한다. 첫 문장이 독자를 위한 요약인 동시에 AI 검색을 위한 맥락 재선언이 되도록 작성하는 것이 두 목표의 교집합이다.

문장을 짧게만 쓰면 복잡한 기술 개념 전달이 어렵습니다. 단문이 무조건 유리한가요?

단문 강제가 아닌 "개념 단위 1문장" 원칙이다. 복잡한 개념을 단일 문장에 욱여넣으면 임베딩 벡터가 희석된다. 권장 패턴: (1) 정의 문장 1개 → (2) 동작 메커니즘 1개 → (3) 수치·예시 1개의 3문장 블록으로 분리한다. 각 문장이 지시대명사 없이 단독으로 의미를 전달하도록 작성하면 청크 자립성과 가독성을 동시에 확보할 수 있다.

한국어 콘텐츠에서도 동일한 문장 패턴이 효과적인가요?

BM25와 교차 인코더 메커니즘은 언어 독립적이다. 다만 한국어는 형태소 분석기(Mecab, Kiwi) 처리 후 조사·어미가 별도 토큰으로 분리된다. "처리됩니다"와 "처리한다"는 BM25 토큰 레벨에서 다르게 처리되므로, 명사 종결형("처리 방식", "처리 결과")이 IDF 우위를 확보하기 쉽다. 밀집 임베딩은 다국어 모델(multilingual-e5, bge-m3)이 한국어를 직접 처리하므로 영어와 동일한 청크 자립성 원칙이 그대로 적용된다.

참고 자료

이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.

박도현
박도현 · AEO 리서처

생성형 검색·LLM 인용에 관한 논문과 데이터를 읽고 실무 언어로 옮깁니다. 근거 없는 '카더라'를 싫어합니다.

내 사이트의 AI 검색 점수가 궁금하다면

30초 무료 진단으로 SEO·AEO·GEO 점수와 처방을 받아보세요.

무료 진단 시작
← 블로그 목록으로