제2부 사전학습(Pretraining)
2.1 사전학습 데이터 — 수집·정제·중복제거·품질·혼합
아키텍처가 사실상 같은 두 모델이 전혀 다른 물건이 되는 일은 흔하다. 층 수도, 헤드 수도, 활성함수도 거의 같은데 하나는 코드를 잘 작성하고 하나는 못 작성하고, 하나는 한국어가 유창하고 하나는 어색하다. 차이는 대개 파라미터가 무엇으로 학습됐는가 — 곧 데이터 — 에서 온다. 사전학습의 비용·시간은 대부분 GPU가 쓰지만, 그 GPU가 만들어 내는 모델의 능력·성향·약점을 실제로 가르는 것은 데이터다. 그래서 데이터 파이프라인은 "학습 전 잡일"이 아니라 아키텍처 선택과 나란히 놓이는 모델 설계의 본체다.
한 가지를 먼저 명시해야 정직하다. 프런티어 모델의 정확한 데이터 구성 — 소스별 비율, 필터 임계값, 중복 제거 강도, 혼합 스케줄 — 은 거의 전부 비공개다. 회사가 공개하는 것은 "웹·책·코드 등을 정제해 수 조 토큰을 썼다" 수준의 개괄이고, 그 이상은 경쟁·법적 이유로 감춘다. "책을 몇 %, 코드를 몇 % 넣었나"는 성능을 가르는 핵심 노하우로 취급돼 논문에도 안 나온다. 이 장에서 드는 구체 수치·비율·통계는 대부분 공개 데이터셋과 논문의 예시다 — C4·The Pile·RefinedWeb·Dolma·FineWeb·RedPajama 같은 오픈 코퍼스는 상용 레시피를 볼 수는 없어도 그 원리를 투명하게 들여다보는 창이다. 이 장의 무게는 특정 레시피가 아니라 어느 레시피에나 내재된 원리·트레이드오프·함정에 있다.
2.1.1 데이터가 모델의 무엇을 정하나
사전학습 모델은 근본적으로 학습 데이터 분포의 압축이다(1.1). 모델은 데이터에 없던 세계를 발명하지 않는다 — 데이터에 담긴 규칙성(문법·사실·문체·편향·코드 관례·언어 비율)을 포착할 뿐이다. 그래서 데이터를 바꾸면 모델이 바뀐다. 구체적으로 데이터는 네 가지를 정한다.
첫째, 능력의 상한과 그 분포. 코드가 데이터에 거의 없으면 코딩을 못 하고, 어떤 언어가 전체의 1%뿐이면 그 언어가 약하다. 다국어·코딩·수학 능력은 상당 부분 해당 도메인의 양과 질이 정한다 — 없는 것을 학습할 방법은 없다. 둘째, 사실성과 최신성. 모델이 아는 사실은 데이터에 있던 사실이고, 학습 컷오프 이후는 모른다. 부정확한 소스가 많으면 부정확을 배운다. 셋째, 성향·편향·안전성. 데이터의 톤·관점·편향이 모델의 기본 성향으로 스며든다. 유해·차별적 텍스트의 비율이 출력의 위험과 직결된다. 넷째, 컴퓨트 효율. 저품질·중복으로 채운 1조 토큰보다 고품질·고유 3천억 토큰이 더 나은 모델을 만들 수 있다 — 같은 컴퓨트로도. 데이터 품질은 컴퓨트를 곱하는 승수처럼 작동한다.
여기서 흔한 통념 하나가 깨진다. "데이터는 많을수록 무조건 낫다"는 틀렸다. 규모가 성능을 높이는 것은 맞지만(스케일링, 2.2), 그것은 품질·고유성이 유지될 때의 이야기다. 저품질 웹 찌꺼기, 중복 문서, 오염된 평가셋을 더 부으면 성능은 정체하거나 나빠지고 컴퓨트·저장·법적 리스크만 는다. 오픈 데이터셋 연구에서 거친 대용량보다 잘 정제·중복제거한 소량이 더 강한 모델을 낸 사례가 반복 보고됐다(RefinedWeb·FineWeb 계열이 대표적이며, 조건 의존적 공학 결과다). 이 장의 나머지는 사실상 하나의 질문에 대한 답이다 — 어떻게 양을 줄이면서 유효 정보는 지키는가.
원천 데이터는 거대하지만 파이프라인을 지나며 부피는 줄고 밀도(유효 정보)는 오른다. 이 깔때기가 이 장의 그림이다.
2.1.2 소스마다 다른 성격 — 웹·책·코드·위키·논문·대화
사전학습 데이터는 여러 소스를 섞어 만든다. 각 소스는 양·품질·다양성·리스크가 다르고, 그 조합이 모델의 성격을 대략 결정한다. 아래 비중 개략은 공개 데이터셋(The Pile·RedPajama 등)에서 관찰되는 경향이지 특정 상용 모델의 실제 비율이 아니다.
| 소스 | 대표 예 | 강점 | 약점·리스크 | 대략적 비중 |
|---|---|---|---|---|
| 웹 크롤 | Common Crawl → C4·RefinedWeb·FineWeb | 압도적 양·다양성·최신성 | 품질 편차 극심, 스팸·중복·유해·저작권 혼재 | 최대 소스(과반인 경우 많음) |
| 책 | Project Gutenberg, 도서 코퍼스 | 길고 일관된 문맥, 고품질 서사·지식 | 저작권 민감(Books3 논란), 구식일 수 있음 | 중간, 품질 위해 업샘플 흔함 |
| 코드 | GitHub · The Stack | 코딩·추론, 구조·형식 학습 | 라이선스 다양, 비밀키·PII 유출, 저품질 저장소 | 중간~높음(코딩 모델은 큼) |
| 백과·참조 | Wikipedia, 위키류 | 사실 밀도 높음, 잘 정제됨, 다국어 | 양이 적음, 특정 관점 편향 | 작지만 흔한 업샘플 대상 |
| 학술·논문 | arXiv, PubMed, 저널 | 전문·수학·과학, 형식적 추론 | LaTeX·표·수식 추출 어려움, 도메인 편중 | 작음~중간 |
| QA·포럼·대화 | Stack Exchange, 공개 포럼 | 질의응답·설명 형식, 대화 리듬 | 품질·독성 편차, 개인정보 | 작음~중간 |
| 큐레이션·기타 | 뉴스·법령·특허·자막 | 도메인 커버리지 보강 | 소스별 라이선스·품질 별도 관리 | 작은 조각들의 합 |
구도의 요점은 웹이 양을 대고 큐레이션 소스가 밀도를 댄다는 것이다. 웹 크롤은 부피의 대부분을 차지하지만 품질이 불균일하다. 위키·책·논문 같은 고밀도 소스는 양은 작아도 반복 노출(업샘플, 2.1.11)로 비중을 키운다. 코드는 조금 다른 이유로 섞인다 — 코드 데이터가 코딩 능력만이 아니라 자연어 추론·구조화 능력까지 높인다는 관찰이 반복됐고(조건 의존적 연구 결과다), 코드가 논리·형식·장거리 의존을 명시적으로 담기 때문으로 해석된다. 그래서 코딩 전용이 아닌 범용 모델도 코드를 상당량 섞는다.
한 파이프라인이 모든 소스를 처리하지 못한다는 점이 실무의 첫 함정이다. 웹은 보일러플레이트 제거가 핵심이고, 책은 헤더·페이지번호·OCR 오류 정리가, 코드는 라이선스·바이너리·자동생성 파일 걸러내기가, 논문은 LaTeX·수식·참고문헌 처리가 필요하다. 자연어 웹에 맞춘 공백 축약·구두점 정규화를 코드나 수식에 그대로 적용하면 구조가 망가진다. 실제 정제는 "하나의 파이프라인"이 아니라 소스별 파이프라인이 각자 실행되어 마지막에 합류하는 형태다.
2.1.3 정제 파이프라인의 전체 형태
원천 데이터에서 학습 준비된 토큰까지의 흐름은 대략 여덟 단계다. 단계의 순서는 구현마다 다르다 — 특히 중복 제거를 앞에 둘지 품질 필터를 앞에 둘지는 트레이드오프가 있어 뒤에서 따로 다룬다. 아래는 하나의 대표 배치다.
세 원칙이 이 순서의 기저에 있다. 첫째, 저렴한 필터를 앞에, 비용이 큰 필터를 뒤에 둔다. 언어 식별·길이·문자비율 같은 값싼 휴리스틱이 대량을 먼저 쳐내면, 그다음의 비용이 큰 단계(분류기·중복 제거)가 처리할 양이 크게 준다. 순서는 성능뿐 아니라 비용의 문제다 — 수십조 토큰에 분류기를 먼저 실행하면 컴퓨트가 감당이 안 된다. 둘째, 필터는 되돌릴 수 없다. 버린 데이터는 재현되지 않는다. 너무 공격적이면 고품질까지 날리고 너무 느슨하면 찌꺼기가 남으므로, 각 필터의 통과율과 표본을 로깅하고 임계값을 데이터 카드로 남긴다. 셋째, 규모가 곧 엔지니어링이다. 수십조 토큰은 단일 머신에서 안 실행된다 — 맵리듀스류 분산 처리, 해시, 근사 자료구조가 필수다. 데이터 파이프라인은 그 자체로 대규모 분산 시스템이다.
2.1.4 추출 — HTML에서 본문만 건지기
웹 크롤 원본은 HTML(또는 WARC 아카이브)이다. 여기서 사람이 읽는 본문만 남기고 태그·스크립트·CSS·내비게이션·광고·쿠키 배너·푸터 같은 보일러플레이트(boilerplate)를 제거해야 한다. 순진하게 태그만 벗기면 "메뉴·저작권 고지·댓글 UI"처럼 사이트마다 반복되는 텍스트가 잔뜩 남는다. 이 잔여물이 나중에 중복과 저품질의 주범이 된다 — 같은 푸터 문구가 수백만 페이지에 붙어 있으면 그것이 곧 대량 중복이다.
추출에는 본문 추출기(trafilatura·jusText·readability 계열)를 쓰거나, 크롤 파생 데이터셋이 제공하는 사전 추출 텍스트(WET 파일)를 쓴다. WET는 편하지만 보일러플레이트가 많이 남아, 정제에 진지한 데이터셋들은 원본 HTML(WARC)에서 다시 추출하는 쪽을 택하기도 한다 — RefinedWeb이 이 선택으로 품질을 높인 사례다. 추출의 딜레마는 양방향이다. 덜 추출하면(under-extraction) 본문이 잘려 정보가 손실되고, 더 추출하면(over-extraction) 메뉴·광고가 섞여 품질이 떨어진다. 완벽한 추출은 없다. 실무는 "다운스트림 필터가 잔여를 보정한다"는 전제로 추출을 설계한다 — 추출에서 못 지운 보일러플레이트를 뒤의 반복 필터·중복 제거가 검출하게 두는 것이다. 그래서 추출 품질과 이후 필터 강도는 함께 튜닝된다.
2.1.5 언어 식별과 형식 정규화
크롤에는 온 세상 언어가 섞여 있다. 언어 식별기(language identification)로 각 문서의 언어를 판정해 목표 언어만 통과시킨다. 흔히 fastText 기반 분류기 같은 경량 모델에 신뢰도 임계값을 적용해 — 이를테면 신뢰도가 일정값 미만이면 버린다. 문제는 임계값이 곧 편향이라는 점이다. 짧은 문서·코드·다국어 혼용 문서에서 오판이 잦고, 코드는 애초에 언어 식별이 애매하다. 특히 저자원 언어는 임계값에 걸려 과도하게 잘려 나가, 다국어 능력을 원하면서도 정작 그 언어의 데이터를 스스로 버리는 자충수가 된다. 다국어 모델을 목표로 한다면 언어별 임계값과 목표 비율을 따로 관리해야 한다. 언어 식별의 편향이 데이터의 언어 분포가 되고, 그 분포가 그대로 모델의 언어 능력 분포가 된다(2.1.1).
형식 정규화는 지루하지만 중요하다. 같은 내용이 다른 바이트로 표현되면 중복 제거와 토큰화가 어긋난다. 유니코드 정규화(NFC/NFKC), 인코딩 통일(UTF-8), 깨진·제어 문자 제거, 과도한 공백·줄바꿈 축약, HTML 엔티티 복원(&를 &로), 따옴표·대시 통일이 여기 들어간다. 이 단계가 불충분하면 "보이기엔 같은데 바이트가 달라" 근사 중복 제거가 제 기능을 못 한다(2.1.11). 반대로 정규화를 너무 세게 — 이를테면 모든 숫자·구두점을 제거 — 하면 코드·수식·표가 망가진다. 자연어 웹에 맞춘 정규화를 코드·논문에 그대로 쓰면 안 되는 이유이자, 소스별 파이프라인이 필요한 또 하나의 이유다.
2.1.6 품질 필터 — 무엇을 "좋은 텍스트"로 정의하나
"품질"은 정의하기 어렵다. 실무는 세 계열의 필터를 겹쳐 쓴다. 각각 무엇을 검출하고 무엇을 놓치는지가 다르고, 셋 다 중립이 아니다.
휴리스틱 필터는 문서의 표면 통계로 명백한 쓰레기를 쳐낸다. Gopher·C4 계열에서 정착한 규칙들이 대표적이다 — 너무 짧거나 비정상적으로 긴 문서 제거, 평균 단어 길이가 3~10자 범위 밖이면 의심(깨진 텍스트·나열), 기능어(the·is·and) 비율이 자연어치고 너무 낮으면 키워드 나열·스팸으로 판정, 기호 대 단어 비율이 과다하면 목록·스팸, 같은 줄·문단·n-gram이 문서 내에서 과도하게 반복되면 제거, "lorem ipsum"이나 "쿠키를 허용하세요" 같은 금지 패턴 차단, 문장이 구두점으로 끝나는 비율이 낮으면 잘린 텍스트로 감지. 장점은 저렴하고 투명하고 재현 가능하다는 것이다. 단점은 임계값이 자의적이라 정상 문서 — 시, 표, 저자원 언어 — 를 잘못 버리거나 교묘한 스팸을 통과시킨다는 것. 그래서 휴리스틱은 기초 정리용이고, 세밀한 품질은 다음 두 방법에 맡긴다.
분류기 기반 필터의 아이디어는 이렇다. 신뢰할 만한 참고 코퍼스(위키·책·많이 인용된 페이지)를 양성(positive), 무작위 웹을 음성(negative)으로 삼아 이진 분류기를 학습한다. 그런 다음 각 웹 문서에 "참고 코퍼스를 닮은 정도" 점수를 매겨, 낮으면 버리거나 점수에 비례해 샘플링 확률을 정한다.
$$\Pr(\text{keep} \mid \text{doc}) = f\big(\text{clf\_score}(\text{doc})\big)$$
GPT-3·CCNet 계열이 쓴 접근이고, 수십조 문서를 채점해야 하므로 흔히 fastText 같은 경량 분류기를 쓴다. 표면 규칙이 못 검출하는 "읽을 만함"을 근사한다는 것이 장점이지만, 함정이 더 중요하다. 분류기는 양성 코퍼스의 편향을 그대로 상속한다. "위키를 닮음 = 좋음"으로 정의하면 위키와 다른 정당한 텍스트 — 구어체, 방언, 소수 문체, 특정 지역·집단의 글 — 가 체계적으로 걸러져 표현 편향이 심어진다. 품질 필터는 중립이 아니라 "무엇을 좋은 글로 정의할 것인가"라는 가치 판단이 내재된 선택이고, 그 판단이 곧 모델의 성향이 된다.
퍼플렉서티 필터는 깨끗한 참조 코퍼스(위키 등)로 학습한 경량 n-gram 언어모델(KenLM 등)로 각 문서의 퍼플렉서티(PPL, 1.1)를 잰다. PPL이 아주 높으면 참조 모델이 크게 놀란 것 — 뒤죽박죽·비문·깨진 텍스트일 가능성이 크다. 반대로 PPL이 비정상적으로 낮으면 반복·보일러플레이트·기계생성 텍스트일 수 있다. 그래서 양 끝을 자르고 중간 대역만 취한다.
$$\text{keep if } \tau_{\text{low}} \le \mathrm{PPL}_{\text{ref}}(\text{doc}) \le \tau_{\text{high}}$$
여기서도 참조가 곧 편향이다. 위키 기반 참조 모델은 위키를 닮은 글에 낮은 PPL을 주므로, 도메인이 참조와 다른 정상 텍스트 — 코드, 수식, 저자원 언어 — 는 높은 PPL을 받아 억울하게 잘린다. 세 필터는 경쟁이 아니라 보완이다. 휴리스틱으로 명백한 쓰레기를 치우고, 분류기·PPL로 미세 품질을 조절한다. 어느 것도 품질의 객관적 진리가 아니다 — 모든 품질 필터는 "누구의 글을 표준으로 삼는가"라는 선택을 내장하며, 그 선택은 조용히 모델의 목소리를 정한다.
2.1.7 유해 콘텐츠와 PII
품질과 별개로 위험한 내용을 걸러야 한다. 두 축이 있다.
유해·안전(toxicity/safety) 축은 혐오·폭력·성착취·극단주의·자해 조장 같은 내용이다. 키워드 목록, 유해성 분류기, 도메인 블록리스트로 거른다. 완전 제거는 불가능하고, 과도한 필터는 정당한 논의(의학·법률·역사)까지 지우므로 균형이 필요하다. 사전학습에서 걸러도 남는 위험은 정렬(제3부)과 서빙 가드레일(7.3)이 뒤에서 다시 막는다 — 안전은 데이터 한 단계로 끝나지 않는 다층 방어다.
개인정보(PII, Personally Identifiable Information) 축은 이메일·전화·주민등록번호·신용카드·주소·API 키 등이다. 정규식·패턴 매칭·개체명 인식으로 탐지해 삭제하거나 마스킹(비식별화)한다. 이메일은 [\w.+-]+@[\w-]+\.[\w.-]+ 같은 정형 패턴으로 비교적 잘 검출되지만, 전화·카드·주민번호는 지역마다 형식이 제각각이고, "누군가의 이름 + 병력"처럼 문맥상 PII는 정규식으로 못 검출한다. 엄밀히 말하면 PII 필터의 재현율은 100%가 아니다. 정형 PII에는 강하지만 문맥상 PII는 놓치므로, "모델이 학습 데이터를 암기해 개인정보를 뱉을 위험"은 데이터 단계에서 완전히 제거되지 않는다(7.4).
여기서 데이터 위생의 두 문제가 만난다. 중복 제거가 그 자체로 프라이버시 완화책이다. 어떤 정보가 데이터에 여러 번 나오면 모델이 그것을 암기·재생할 확률이 크게 오르기 때문이다. 다음 절들에서 볼 중복 제거는 낭비를 줄이는 작업이면서 동시에 학습 데이터 추출 공격의 위험을 낮추는 프라이버시 조치이기도 하다. 그리고 법적 축이 겹친다 — PII 처리·삭제권·데이터 최소화는 GDPR·개인정보보호법의 영역이라(9.3), 데이터 단계의 처리 결정이 나중의 법적 리스크를 좌우한다. 사전학습의 유해·PII 필터는 위험을 낮추는 완화이지 안전 보증이 아니다. 수십조 토큰을 완벽히 검수할 방법은 없다.
2.1.8 왜 중복이 해로운가 — 유효 토큰의 회계
웹은 같은 텍스트가 수없이 반복된다 — 미러 사이트, 재게시, 인용, 상용구, 템플릿, SEO 스팸. 중복을 방치하면 네 가지가 나빠진다. 암기(memorization)가 늘고, 유효 데이터량이 줄고, 분포가 왜곡되고, 평가 오염의 통로가 열린다. 이 넷을 수치로 계산해 보면 왜 중복 제거가 손실이 아니라 투자인지가 분명해진다.
유효 토큰(effective tokens) 개념부터 세우자. 총 토큰 $D_{\text{total}}$ 중 고유 토큰이 $D_{\text{unique}}$ 라면, 모델이 겪는 평균 반복 횟수 — 실효 에폭 — 는
$$r = \frac{D_{\text{total}}}{D_{\text{unique}}}$$
이고, "새 정보"의 관점에서 학습 예산은 $D_{\text{unique}}$ 에 가깝다. 1조 토큰 중 절반이 중복이면 $D_{\text{unique}} = 5$ 천억, $r = 2$ 다. 모델은 1조 토큰을 처리하는 컴퓨트를 쓰지만 실제로 보는 고유 정보는 5천억 토큰어치이고, 나머지 절반의 컴퓨트는 이미 본 것을 다시 미는 데 소모된다. 학습 컴퓨트가 대략 $C \approx 6ND$ (파라미터 $N$, 토큰 $D$; 1.4.15의 $2P$ 규칙에서 순전파 2 + 역전파 4)임을 떠올리면, 중복 절반은 컴퓨트 예산의 절반을 새 신호 없이 투입하는 것과 같다.
암기 쪽은 더 날카롭다. 같은 문자열이 여러 번 노출되면 모델은 그것을 일반화하는 대신 전부 외운다. 어떤 문서가 데이터에 1000번 나오면, 경사하강은 그 문서를 정확히 재현하도록 1000배의 기울기 압력을 받는 셈이라, 어느 임계를 넘으면 이해가 아니라 암송으로 흐른다. 한 번만 나온 문자열은 거의 암기되지 않지만 수백~수천 번 반복된 문자열은 자주 암기된다는 관찰이 이를 뒷받침한다(Lee 등 2021의 중복 제거 연구가 대표적이며, 중복 제거가 학습 데이터의 그대로 재생을 실측으로 줄였다). 이것이 프라이버시(7.4)·저작권(9.3) 위험과 직결된다 — 모델이 출력하는 것이 학습 데이터의 축자 복사라면 그 자체가 유출이다. 분포 왜곡도 같은 근원이다. 특정 문서가 1만 번 반복되면 그 관점·문체·사실이 과대 대표되어 모델 성향을 왜곡한다.
핵심은 중복 제거가 $D_{\text{total}}$ 을 줄이되 $D_{\text{unique}}$ 는 거의 그대로 둔다는 것이다 — 낭비만 도려내고 유효 정보는 지킨다. 그래서 "중복을 지우면 데이터가 줄어 손해"라는 생각은 뒤집힌다. 줄어드는 것은 낭비뿐이고, 여러 오픈 연구에서 잘 중복제거한 데이터가 같은 컴퓨트로 더 낮은 손실과 더 적은 암기를 냈다. 이제 그 제거를 어떻게 수십억 문서 규모에서 실제로 하는지가 남았다.
2.1.9 중복의 두 축 — 정확 대 근사, 문서 간 대 문서 내
중복은 두 축으로 나뉜다. 정확(exact)이냐 근사(near-duplicate)냐, 그리고 문서 사이냐 문서 안이냐다.
정확 중복은 완전히 동일한 문자열이다. 문서 전체를 하나의 해시(SHA 등)로 요약해 같은 해시끼리 묶으면 $O(N)$ 에 포착된다 — 저렴하고 확실하다. 문서 내 정확 중복, 즉 한 문서 안에서 같은 문단·문장이 반복되는 경우는 접미사 배열(suffix array)로 "길이 $k$ 이상 반복되는 부분문자열"을 찾아 도려낸다(Lee 등의 exact-substring 방법). 문제는 정확 중복이 한 글자만 달라도 못 검출한다는 것이다. 웹의 근사 중복 — 날짜·조회수·광고 배너만 다르고 본문은 같은 페이지 — 은 해시가 통하지 않는다. 이 사실상 같은 문서를 검출하려면 유사도를 근사하는 지역 민감 해시(Locality-Sensitive Hashing, LSH) 계열, 곧 MinHash·SimHash가 필요하다.
| 구분 | 정확 중복 | 근사 중복 |
|---|---|---|
| 정의 | 완전히 동일 | 대부분 동일(소수 차이) |
| 문서 간 | 전체 해시 일치 | MinHash/SimHash + LSH |
| 문서 내 | suffix array로 반복 substring | (드묾) 문단 단위 근사 |
| 비용 | 저렴하다(해시) | 비용이 크다(유사도 근사·후보 쌍) |
| 놓치는 것 | 한 글자만 달라도 못 잡음 | 임계값 아래 유사는 통과 |
여기서부터가 이 장에서 가장 직접 따라갈 값이 있는 부분이다. 근사 중복 제거의 표준 도구인 MinHash와 LSH 밴딩은 확률로 정확히 설명되며, 그 확률을 유도하고 숫자를 넣어 보면 "왜 이게 수십억 문서에 확장되는가"가 계산으로 드러난다.
2.1.10 MinHash — 자카드 유사도를 확률로 추정하다
두 문서의 유사도를 재는 표준은 자카드 유사도(Jaccard)다. 각 문서를 n-gram(셰이글, shingle) 집합으로 보고
$$J(A, B) = \frac{|A \cap B|}{|A \cup B|} \in [0, 1]$$
로 정의한다. 문제는 집합이 크고 문서가 수십억이라 모든 쌍의 $J$ 를 직접 계산할 수 없다는 것이다. MinHash가 이를 확률적으로 근사하는데, 그 근거가 되는 정리 하나를 완전히 유도해 보자.
전체 셰이글의 우주 $U$ 에 무작위 순열(permutation) $\pi$ 를 하나 적용한다고 하자. 집합 $S$ 에 대해 그 최소해시(min-hash) 를 $\pi$ 로 매긴 순위가 가장 작은 원소, 즉 $h_\pi(S) = \arg\min_{x \in S} \pi(x)$ 로 정의한다. 주장은 다음이다.
$$\Pr_\pi\big[\,h_\pi(A) = h_\pi(B)\,\big] = J(A, B)$$
유도는 합집합 $A \cup B$ 에 눈을 두는 데서 나온다. $\pi$ 가 균등 무작위 순열이므로, $A \cup B$ 의 원소 중 $\pi$ 값이 가장 작은 원소 $x^\star$ 는 $A \cup B$ 안의 어느 원소든 될 확률이 같다. 이제 두 경우를 보면 된다. $h_\pi(A)$ 는 $A$ 안에서 $\pi$ 가 최소인 원소인데, $x^\star$ 는 $A \cup B$ 전체의 최소이므로 만약 $x^\star \in A$ 이면 $h_\pi(A) = x^\star$ 다. 마찬가지로 $x^\star \in B$ 이면 $h_\pi(B) = x^\star$. 따라서 두 최소해시가 같으려면 둘 다 $x^\star$ 여야 하고, 그것은 $x^\star \in A \cap B$ 일 때뿐이다. 반대로 $x^\star$ 가 $A \setminus B$ 에만 있으면 $h_\pi(A) = x^\star$ 지만 $h_\pi(B)$ 는 그보다 순위가 큰 다른 원소라 서로 다르다. 정리하면 두 최소해시가 일치할 사건은 정확히 "$A \cup B$ 의 전역 최소 원소가 교집합에 있다"는 사건과 같다. $x^\star$ 가 $A \cup B$ 위에서 균등하므로 그 확률은
$$\Pr[x^\star \in A \cap B] = \frac{|A \cap B|}{|A \cup B|} = J(A, B)$$
이고 증명이 끝난다. 실무에서는 순열 대신 충돌이 드문 해시 함수 $h$ 를 써서 $\min_{x\in S} h(x)$ 를 최소해시로 삼는데, 근거는 동일하다.
이 한 줄이 전부를 연다. 독립 해시 $K$ 개로 각 문서를 길이 $K$ 의 서명(signature) 으로 압축하면 — 각 자리가 그 해시의 최소해시값 — 두 서명이 일치하는 자리의 비율이 $J$ 의 불편 추정치가 된다. 각 자리의 일치 여부는 성공확률 $J$ 인 베르누이 시행이고 서로 독립이므로, 일치한 자리 수는 $\text{Binomial}(K, J)$ 를 따른다. 추정량 $\hat J = (\text{일치 자리 수})/K$ 는
$$\mathbb{E}[\hat J] = J, \qquad \mathrm{Var}(\hat J) = \frac{J(1-J)}{K}$$
를 만족한다. 집합 전체를 비교하는 대신 서명 $K$ 개만 비교해 유사도를 얻는 것이다.
숫자를 넣어 보자. 두 문서를 2-gram 집합으로 만든다.
$$A = \{\text{“the cat”}, \text{“cat sat”}, \text{“sat on”}\}, \quad B = \{\text{“the cat”}, \text{“cat sat”}, \text{“sat down”}\}$$
교집합은 $\{\text{“the cat”}, \text{“cat sat”}\}$ 로 크기 2, 합집합은 크기 4이므로 $J = 2/4 = 0.5$ 다. 이제 $K = 100$ 개 해시로 서명을 만들면, 각 자리가 확률 0.5로 일치하므로 일치 자리 수의 기댓값은 50, 즉 $\hat J \approx 0.5$ 를 얻는다. 추정의 표준편차는 $\sqrt{J(1-J)/K} = \sqrt{0.25/100} = 0.05$ 다 — 약 95% 구간이 $0.5 \pm 0.1$ 정도로, 100개 해시로 유사도를 소수 첫째 자리까지 구분하는 셈이다. 더 정밀하게 표준편차를 0.01로 줄이려면 $K = J(1-J)/0.0001 = 0.25/0.0001 = 2500$ 개가 필요하다. 정밀도가 $\sqrt K$ 로만 좋아지므로 오차를 절반으로 줄이려면 해시를 네 배 써야 한다 — 이 비용 곡선이 실무에서 서명 길이를 수백~수천 자리로 정하는 이유다.
2.1.11 LSH 밴딩 — S자 문턱으로 후보를 추리다
MinHash 서명이 있어도 문서 쌍이 $N^2$ 개라 전부 비교할 수는 없다. 10억 문서면 쌍이 $5\times 10^{17}$ 개다. 여기서 LSH 밴딩(banding)이 들어온다. 아이디어는 서명 $K$ 자리를 $b$ 개 밴드로 분할하고 각 밴드가 $r$ 행을 갖게 한다($K = b \cdot r$). 두 문서가 어떤 밴드 하나라도 그 $r$ 자리 전체가 일치하면 후보 쌍으로 추리고, 실제 유사도 비교는 후보에만 한다.
후보가 될 확률을 유도하자. 실제 유사도가 $s$ 인 두 문서를 생각한다. 앞 절에서 최소해시 한 자리가 일치할 확률이 정확히 $s$ 임을 보였다. 한 밴드의 $r$ 자리가 모두 독립으로 일치할 확률은 $s^r$ 이고, 그 밴드 전체가 일치하지 않을 확률은 $1 - s^r$ 이다. $b$ 개 밴드가 서로 독립이라 보면, 어느 밴드도 전부 일치하지 않을 확률은 $(1 - s^r)^b$ 이므로, 적어도 한 밴드가 일치해 후보가 될 확률은
$$\Pr[\text{candidate}] = 1 - (1 - s^{\,r})^{b}$$
이다. 이 함수를 $s$ 에 대해 그리면 특정 유사도 부근에서 급격히 0에서 1로 오르는 S자 곡선이 된다. 변곡이 일어나는 문턱은 근사적으로
$$s^\star \approx \left(\frac{1}{b}\right)^{1/r}$$
에 있다. $b$ 와 $r$ 을 조절하면 "유사도 몇 이상을 중복으로 볼지"의 문턱을 원하는 곳에 놓을 수 있다.
숫자로 곡선을 그려 보자. $K = 100$ 을 $b = 20$ 밴드 $\times$ $r = 5$ 행으로 분할한다. 문턱은 $s^\star = (1/20)^{1/5} = 0.05^{0.2}$ 인데, $\ln 0.05 = -3.00$, 나누기 5는 $-0.60$, 지수는 $e^{-0.60} \approx 0.55$ 로 대략 0.55다. 이제 여러 유사도에서 후보 확률을 직접 계산한다.
- $s = 0.3$: $s^r = 0.3^5 = 0.00243$, $(1 - 0.00243)^{20} \approx e^{-0.0487} = 0.9525$, 후보 확률 $\approx 0.047$. 약 4.7%.
- $s = 0.5$: $0.5^5 = 0.03125$, $(0.96875)^{20} \approx e^{-0.635} = 0.530$, 후보 확률 $\approx 0.470$. 약 47%.
- $s = 0.55$: $0.55^5 = 0.0503$, $(0.9497)^{20} \approx e^{-1.032} = 0.356$, 후보 확률 $\approx 0.644$. 약 64%.
- $s = 0.7$: $0.7^5 = 0.168$, $(0.832)^{20} \approx e^{-3.68} = 0.025$, 후보 확률 $\approx 0.975$. 약 97%.
- $s = 0.9$: $0.9^5 = 0.590$, 나머지가 사실상 0이라 후보 확률 $\approx 1$.
즉 이 설정은 유사도 0.3인 문서 쌍은 20번에 한 번꼴로만 후보에 높이고 실제 비교를 건너뛰지만, 0.7 이상 닮은 쌍은 거의 100% 검출한다. 느슨하게 닮은 것은 통과시키고 실제 중복만 급격히 걸러내는 문턱이 생긴 것이다.
문턱은 $b$ 와 $r$ 로 움직인다. 같은 100자리를 $b = 10$ 밴드 $\times$ $r = 10$ 행으로 바꾸면 문턱이 $(1/10)^{1/10} = e^{-0.230} \approx 0.79$ 로 올라가, 유사도 0.8가량은 돼야 후보가 된다 — 아주 닮은 것만 검출하고 싶을 때다. 반대로 $b = 50 \times r = 2$ 면 문턱이 $(1/50)^{1/2} \approx 0.14$ 로 내려가 느슨하게 닮은 것까지 대량으로 후보에 포함한다. 밴드를 많게(작은 $r$) 하면 재현율이 오르는 대신 후보가 많아져 비용이 늘고, 밴드를 적게(큰 $r$) 하면 정밀도가 오르는 대신 실제 중복을 놓친다. 이 조정 변수로 "얼마나 공격적으로 지울지"를 정하는 것이다.
확장성의 실체가 여기서 드러난다. 밴딩은 각 밴드의 $r$ 자리를 해시해 같은 버킷에 떨어진 문서들만 후보로 보므로, 실제 유사도 비교는 $N^2$ 이 아니라 후보 쌍 수 — 잘 튜닝하면 $N$ 에 준선형 — 에만 든다. MinHash가 각 문서를 짧은 서명으로 줄이고 밴딩이 비교를 후보로 줄이는 두 근사가 겹쳐, 수십억 문서의 근사 중복 제거가 비로소 단일 클러스터에서 실행된다.
2.1.12 SimHash·suffix array, 그리고 언제 얼마나 세게
MinHash가 자카드를 겨냥한다면 SimHash는 다른 유사도를 겨냥한다. 문서를 하나의 지문 비트열로 요약하고 두 문서의 해밍 거리(다른 비트 수)가 작으면 유사로 본다 — 코사인·가중 유사도 계열을 근사한다. 짧은 지문과 해밍 거리 인덱싱으로 대규모에 강해, 문서 단위 근사 중복에 MinHash의 대안으로 쓰인다. 접미사 배열(suffix array)은 성격이 아예 다르다. 코퍼스 전체를 하나의 긴 문자열로 보고 길이 $k$ 이상 반복되는 모든 부분문자열을 찾아 도려낸다 — 문서 전체가 아니라 문서에 내재된 반복 조각(상용구·인용 블록·삽입된 면책 문구)을 잘라낸다. 문서 단위 중복 제거가 못 검출하는 문서 내·부분 중복에 강하다. 셋은 대체재가 아니라 서로 다른 종류의 중복을 맡는 분업이다.
순서와 강도에는 정답이 없다. 중복 제거를 품질 필터 앞에 두면 뒤 단계 처리량이 줄어 저렴하지만, 품질 필터가 문서 경계를 바꾸면 중복 제거 결과가 달라진다. 그래서 큰 파이프라인은 원시 단계와 정제 후로 나눠 중복 제거를 여러 번 하기도 한다. 강도도 마찬가지다. 너무 세면(낮은 유사도 문턱) 정당한 재사용 — 공통 인용, 표준 문구, 번역쌍 — 까지 지워 데이터가 줄고, 너무 약하면 중복이 남는다. 목표는 고유성은 지키되 낭비만 제거하는 것이고, 앞 절의 $b, r$ 조정 변수가 바로 그 강도를 정하는 조정 변수다.
2.1.13 오염 제거 — 평가셋 누출을 막기
오염(contamination)은 평가에 쓸 벤치마크의 문제·정답이 학습 데이터에 섞여 든 상태다. 그러면 모델은 그 문제를 추론이 아니라 암기로 맞히고, 벤치마크 점수는 실력이 아니라 누출을 잰다 — 가짜 점수다. 벤치마크는 대개 웹에 공개돼 있으므로, 크롤에는 벤치마크 텍스트가 자연스럽게 섞인다. 아무 조치도 안 하면 평가가 조용히 부풀려진다.
오염 제거(decontamination)는 알려진 평가셋의 텍스트를 학습 데이터에서 찾아 제거한다. 흔한 방법은 n-gram 겹침이다 — 학습 문서가 평가 문항과 길이 $n$(이를테면 13-gram) 이상 연속으로 겹치면 그 문서나 구간을 버린다. $n$ 을 작게 설정하면 우연한 겹침까지 검출해 정상 데이터를 과하게 지우고, 크게 설정하면 약간 변형된 누출을 놓치므로 $n$ 이 곧 정밀도-재현율의 조정 변수다. MinHash 같은 근사 매칭을 추가해 변형된 누출까지 검출하기도 한다.
한계를 정직하게 봐야 한다. 오염 제거는 알려진 평가셋만 지운다 — 나중에 나올 벤치마크, 비공개·사설 평가는 미리 못 지운다. 패러프레이즈·번역·부분 누출은 n-gram으로 못 검출해, "같은 문제를 말만 바꾼" 오염은 통과한다. 그리고 "우리는 오염 제거를 했다"는 주장은 얼마나·어떻게 했는지 없이는 검증 불가다. 그래서 벤치마크 점수는 언제나 오염 가능성과 함께 읽어야 한다. 이 주제는 평가 신뢰성 전체와 얽혀 4.1에서 정면으로 다루지만, 데이터 장에서 챙길 한 문장은 이것이다 — 데이터 파이프라인에서 오염을 막지 못하면 뒤의 어떤 평가도 그 모델의 실력을 정직하게 말할 수 없다. 오염 제거는 데이터 위생이자 평가 정직성의 전제다.
2.1.14 데이터 혼합·가중 — 무엇을 얼마나 섞나
정제된 소스들이 모였다. 이제 어떤 비율로 섞을지를 정한다. 이것이 데이터 작업의 마지막이자 성능·성향에 대한 가장 직접적인 조정 변수다. 혼합은 각 도메인 $\mathcal{D}_i$ 에 가중치 $w_i$ 를 주는 것으로 볼 수 있다.
$$\mathcal{D}_{\text{train}} = \sum_i w_i\, \mathcal{D}_i, \qquad \sum_i w_i = 1$$
여기서 $w_i$ 는 그 도메인의 원래 크기와 다르다. 웹은 양이 많아 자연 비율이 압도적이지만, 위키·책처럼 밀도 높은 소스는 자기 크기보다 큰 가중치를 받는다 — 곧 업샘플링, 같은 데이터를 여러 번 노출하는 것이다. 숫자로 보면 규모가 드러난다. 고유 코퍼스가 웹 800B 토큰, 위키 30B 토큰이라 하자. 자연 비율대로면 위키는 전체의 약 3.6%다. 그런데 최종 학습 예산 1조 토큰에서 위키를 5%로 높이고 싶으면 위키를 $0.05 \times 1000\text{B} = 50\text{B}$ 토큰만큼 노출해야 하는데, 고유 위키가 30B뿐이니 $50/30 \approx 1.7$ 에폭, 즉 위키를 평균 1.7번 반복해 보는 셈이다. 반대로 웹을 60%로 낮추면 $600\text{B}$ 노출인데 고유 웹이 800B이라 $600/800 = 0.75$ 에폭, 즉 웹의 4분의 3만 골라 쓴다. 같은 1조 토큰이라도 도메인별 실효 에폭이 이렇게 갈리고, 이 배수가 곧 "어떤 능력을 얼마나 강조하나"의 결정이다.
가중치를 정하는 길은 셋이다. 대부분은 직관과 경험 — 과거 실험과 경험으로 비율을 정하고 소규모 프록시 모델로 검증한다. 프런티어 레시피는 대개 이 반복 튜닝의 결과이고, 그래서 비공개다. 연구 쪽에는 다운스트림 지향 최적화가 있어, DoReMi 계열은 작은 프록시 모델로 도메인 가중치를 최적화(최악 도메인 손실 최소화 등)한 뒤 큰 모델에 적용한다 — "어떤 혼합이 목표 능력을 최대화하나"를 데이터로 푸는 시도다(조건 의존적 연구 결과다). 마지막은 목표 능력 기반 설계다. 코딩·수학·다국어를 강화하려면 해당 도메인 비율을 의도적으로 키운다 — 원하는 능력의 비율을 데이터의 비율로 반영하는 것이다.
혼합 비율을 학습 내내 고정할 필요는 없다. 사람의 커리큘럼처럼 단계별로 데이터를 바꾸는 전략이 쓰인다. 품질 어닐링(quality annealing)은 학습 막바지에 특히 고품질·고신뢰 데이터 — 잘 편집된 텍스트, 지시·추론 형식, 코드·수학 — 의 비율을 높이는 방식으로, "마지막에 본 데이터가 더 크게 각인된다"는 직관에 기댄다. 길이·난이도 커리큘럼은 짧고 쉬운 것에서 길고 어려운 것으로, 또는 컨텍스트 길이를 단계적으로 늘리는(롱컨텍스트 확장, 5.6) 방식이다. 다만 커리큘럼·어닐링의 이득은 설정 의존적이고 항상 재현되지는 않는다 — 검증된 것은 "데이터 순서와 후반 비중이 결과에 영향을 준다"는 정도이지, "막판 고품질이 무조건 낫다"로 단정할 것은 아니다.
에폭 반복이 어디까지 유효한가는 별도의 질문이다. 고유 데이터가 컴퓨트 예산에 비해 부족하면 같은 데이터를 여러 번 본다. 데이터 제약 스케일링 연구는 적당한 반복 — 대략 수 에폭 수준 — 까지는 새 데이터와 거의 맞먹는 효과를 내지만, 그 이상 반복하면 수익이 급감하고 결국 과적합·암기로 흐른다고 보고한다(Muennighoff 등의 결과이며, 정확한 "몇 에폭"은 모델 규모·데이터에 따라 다르다). 실무 함의는 분명하다 — 고유 데이터가 왕이고, 반복은 그것을 늘리는 임시방편이지 무한정 짜낼 수 없다. 앞서 본 중복 제거가 $D_{\text{unique}}$ 를 지켜 두면 반복에 기대는 정도를 줄일 수 있으니, 데이터 작업의 앞뒤가 여기서 만난다.
2.1.15 토큰 예산과 품질 대 양
사전학습 계획의 골격은 토큰 예산이다. 스케일링 법칙(2.2)은 파라미터 수 $N$ 에 대해 얼마나 많은 학습 토큰 $D$ 가 컴퓨트 최적인지를 말한다 — 대략적 어림으로 파라미터당 20토큰 안팎(Chinchilla 계열 결과이며 정확한 계수는 2.2에서 정밀화한다).
$$D_{\text{needed}} \approx 20\,N$$
여기에 현실 제약이 겹친다. 목표 $D$ 가 확보 가능한 고유 토큰을 넘으면 반복(에폭)에 기대거나, 데이터를 더 긁거나, 합성데이터를 보태야 한다. 게다가 컴퓨트 최적은 학습 컴퓨트만 최적화한다는 함정이 있다. 서빙에서 수십억 번 추론할 모델이라면 스케일링 법칙이 권하는 것보다 작은 모델을 더 많은 토큰으로 학습(over-training)해 추론을 저렴하게 만드는 선택이 흔하다 — 데이터 양은 학습만이 아니라 총소유비용(TCO)의 일부다(2.2·7.5).
이 전체를 한 번 직접 회계해 보자. 원시 크롤 30조 토큰에서 시작한다. 추출·언어·품질 필터를 지나며 20%가 통과하면 6조 토큰이 남고, 중복 제거로 30%가 추가로 빠지면 약 4.2조 고유 토큰이 남는다. 여기서 목표를 7조 학습 토큰으로 설정하면 실효 에폭은 $7 / 4.2 \approx 1.7$ — 평균 1.7회 반복이라 앞 절의 "수 에폭까지 유효" 구간 안이다. 그런데 욕심을 내 목표를 20조로 설정하면 $20 / 4.2 \approx 4.8$ 에폭이 되어 반복 수익 급감·암기 구간에 발을 들인다. 스케일링 쪽에서 보면, 이 4.2조 고유 토큰은 $D \approx 20N$ 을 뒤집어 대략 $N \approx 4.2\text{T}/20 \approx 210\text{B}$ 파라미터까지가 컴퓨트 최적이라는 뜻이다 — 그보다 큰 모델을 이 데이터로 학습하면 데이터가 병목이 된다. 회계가 곧 설계 결정임을 보여 주는 흐름이다(모든 수치는 개략 규모 파악용 예시다).
품질 대 양의 선택은 이 회계 위에서 갈린다. 같은 컴퓨트로 양을 늘릴 수도, 질을 높일(더 세게 정제·중복제거·큐레이션) 수도 있다. 저품질·중복이 많은 상태라면 정제·중복제거의 한계효용이 커서 걸러내는 편이 낫고, 이미 고품질만 남았다면 양(더 많은 고유 토큰)이 병목이라 스케일링이 지배한다. 즉 "양 대 질"은 현재 데이터 상태에 달린 것이지 보편 정답이 없다 — 다만 저품질을 양으로 대체하려는 것이 가장 흔한 실수다(2.1.1의 통념).
고유·고품질 데이터가 고갈되면 강한 모델로 데이터를 생성해 보충하는 길이 있다 — 문제·풀이 생성, 교과서식 설명, 재작성·증강, 지시-응답 쌍. 코딩·수학처럼 정답을 검증할 수 있는 도메인에서 특히 효과적이라는 보고가 있다. 다만 무비용이 아니다. 모델이 생성한 데이터로만 반복 학습하면 분포가 좁아지고 오류가 누적되는 모델 붕괴(model collapse) 위험이 있고, 합성데이터는 생성 모델의 편향·환각을 상속·증폭할 수 있으며, 다른 모델 출력으로 학습하는 데 따른 라이선스·이용약관 문제도 있다. 합성데이터의 생성·품질 관리·붕괴 회피는 3.9에서 본격적으로 다룬다 — 여기서는 데이터 부족의 한 출구이되 무비용이 아니라는 점만 기억해 둔다.
2.1.16 데이터는 법·윤리 문제이기도 하다
데이터는 기술 문제이자 법·윤리 문제다. 이 절은 큰 지도만 세우고 상세는 9.3(법·규제·저작권·프라이버시)·9.2(라이선스 생태계)로 넘긴다. 핵심은 "공개돼 있음"과 "학습에 써도 됨"이 다르다는 것이다. Common Crawl에 있다고 자유롭게 학습해도 되는 것은 아니다 — 크롤에는 저작권 있는 기사·책·이미지·코드가 섞여 있고, 크롤에 담겼다는 사실이 권리 정리를 뜻하지 않는다.
몇 갈래의 리스크가 있다. 저작권 있는 책 코퍼스(Books3 관련 논란)나 뉴스 전문을 학습에 쓰는 문제는 소송·규제의 초점이며 판례가 유동적이라 특정 사건의 결론을 단정할 수 없다. GitHub 코드는 저장소마다 라이선스가 달라(MIT·GPL·독점·무라이선스) 학습·재생성 시 준수·귀속 의무가 문제될 수 있고, 코드 데이터셋은 라이선스별 필터를 두기도 한다. 사이트의 크롤 거부(robots.txt)와 학습 제외 요청(opt-out) 신호를 존중하는지가 윤리·법 양면의 쟁점이고, EU의 텍스트·데이터 마이닝(TDM) 예외와 opt-out, 각국 저작권·개인정보법이 달라 어디서 학습·서비스하느냐가 허용 범위를 바꾼다. PII는 2.1.7에서 봤듯 저작권과 별개의 법적 축이다.
이 분야는 법·판례가 유동적이라 "이렇게 하면 합법"이라는 단정이 가장 위험하다. 확실한 것 하나는 데이터 단계의 결정 — 무엇을 넣고 어떻게 기록했나 — 이 나중의 법적 방어 가능성을 좌우한다는 점이다. 출처·라이선스·처리 이력을 문서화하는 데이터 거버넌스(8.3)가 리스크 관리의 골격이다.
지금까지 무엇으로 학습하는가를 봤다. 어느 필터를 어느 순서로 걸고, 중복을 어떻게 확률로 추정하고, 무엇을 얼마나 섞을지를 정하고 나면 다음 질문은 규모다 — 이 데이터로 얼마나 큰 모델을 얼마나 오래 학습해야 하는가. 이 장에서 $D \approx 20N$ 과 "작은 모델을 더 오래", "품질 대 양"을 정성적으로만 다뤘는데, 2.2이 그 파라미터·데이터·컴퓨트의 관계를 법칙으로 정밀화한다 — 정해진 컴퓨트 예산에서 손실을 최소화하는 모델 크기와 토큰 수, 그리고 그 "최적"이 학습만의 최적일 뿐 추론까지 보면 왜 달라지는지를.