데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      EMNLP24 늦은 후기 2탄: CC 데이터로 LLM 사전학습 데이터셋을 만들어본 경험 및 NVIDIA 논문 리뷰

      sparklingness 25.08.07
      1,772 4 1
      DEVOTEE 요약
      LLM 학습을 위한 데이터 파이프라인을 개발했던 경험을 바탕으로, 웹 크롤링 데이터를 활용한 대규모 사전학습 데이터 구축 과정을 공유합니다. 품질 필터링, 언어 식별, 중복 제거 등에서 많은 어려움과 시행착오를 겪었으나, 엔비디아 EMNLP 2024 논문이 이러한 문제를 체계적으로 분석하고 실질적인 전략을 제시하여 큰 공감을 얻었습니다. 특히, 고품질 데이터 선별과 도메인별 샘플링 기법 등이 모델 성능 향상에 긍정적 영향을 미쳤다는 점에서 의미 있는 시사점을 제공한다고 평가됩니다.
      DEVOTEE 추천 블로그

      LLM 시대가 오기 전에 SK텔레콤에서는 일종의 Moon shot 프로젝트를 진행한 적이 있습니다.

      지금은 LLM(Large Language Model)이라는 이름이 당연하지만 당시에는 GLM(General-Purpose Language Model)이라고 불렸죠.

      사전학습 모델을 위한 대규모 말뭉치가 필요했지만, 얼마나 필요한지도 몰랐고, 당연하게도 아무런 기반이 없었습니다.

      그래서 데이터 엔지니어링을 담당했던 저와 동료들은 처음부터 데이터를 모으고 처리하는 파이프라인을 기획하고, PySpark를 이용해 뼈대를 개발했습니다.

      CCNet: Extracting High Quality Monolingual Datasets from Web Crawl Data 논문을 참고하여 웹 크롤링 데이터에서 한국어 문서를 모으고 선별하는 방식으로 구축했습니다.


      작년 EMNLP 참가했을 때, 워크숍 세션에서 엔비디아 연구팀은 Pretrain 용 데이터 구축 방법에 대한 노하우를 연구 성과로 발표했습니다.

      우리 팀에서 과거에 매 과정마다 시행착오를 거치면서 알게 되었던 내용이 체계적으로 정리되어 있어서 크게 반가웠고 많이 공감했습니다.

      이 글에서는 당시의 좌충우돌 경험을 회상하며 Pretrain Dataset 구축 방법(엔비디아 논문)을 소개해 보려 합니다.


      CCNet 기반 데이터 파이프라인 구축

      데이터 구축을 위해 병렬처리가 필요한데, Spark나 Dask도 고민은 했었지만 개발 용이성과 성능 이점 모두를 고려해봤을 때 PySpark가 최선의 선택이라고 생각했습니다.

      일정 단위로 파이프라인을 스케줄링하기 위해서는 Airflow를 이용했고요. 당시에는 대규모 데이터를 다룰 경험이 많지 않아 매 단계가 도전이었습니다.

      CCNet 구조를 토대로 기본적인 데이터 흐름을 만들었지만, 실제 적용 과정에서 많은 문제에 부딪혔습니다.

      그 중 가장 기억에 남는 세가지를 소개합니다.

      1. 품질 필터링과 양성 데이터 학습

      Common Crawl 데이터셋 처럼 웹에서 긁어온 문서는 품질 편차가 매우 큽니다. 그래서 웹 크롤링 데이터를 활용할 때 가장 처음 맞닥뜨리는 문제는 데이터의 질 관리입니다.

      그래서 CCNet 논문에서도 위키백과 등 고품질 코퍼스만으로 학습한 언어 모델을 사용해 perplexity metric로 문서를 평가한다는 방식을 소개합니다.

      이후 cross‑entropy difference나 positive–unlabeled learning 등을 이용한 다양한 연구가 나왔던 것 같습니다.

      그래도 골자는 고품질 데이터(positive)만 학습한 모델의 점수로 문서를 분류하는 것 입니다.

      저희도 비슷한 아이디어를 적용하여, 먼저 위키백과, 뉴스 등 신뢰할 수 있는 자료만으로 모델을 학습하고,

      이후 크롤링 데이터에 적용해 퍼플렉서티/확률 분포가 threshold 보다 낮은 문서를 제거하여 noisy 데이터를 줄였습니다.

      2. 언어 식별(LangID)

      웹 크롤링 데이터에는 한국어 외의 언어가 섞여 있습니다. 사실 한국어 데이터는 비율상 많이 없죠.

      비록 웹문서 header에 해당하는 부분에 language 정보가 있지만, 데이터를 하나씩 보다 보면 그 정보를 믿기는 어려웠습니다. 그래서 LangID 모듈이 필요하다고 생각했습니다.

      그 때 당시 외부에서 공개된 언어 식별 모델들이 몇개 있었는데 적용하면, 특이하게도 한국어와 힌디어를 헷갈려하는 등 문제점이 많았습니다.

      2020년 COLING 논문 Language ID in the Wild에서는 1,629개 언어에 대해 F1 점수는 높았지만 웹 크롤링 데이터에 적용했을 때 저자원 언어의 정밀도가 매우 낮은 수준에 불과하며,

      도메인 불일치와 클래스 불균형 때문에 오분류가 많다는 점을 레포팅 했습니다.

      논문은 단어 목록 기반 필터와 Transformer 기반 준지도 학습 모델을 도입하여 데이터셋의 중간값 정밀도를 높였다고 합니다.

      이런 연구를 참고하여 내부 시스템도 단순 rule‑based 방식에서 벗어나 단어 목록, 언어 모델 출력 등을 조합해 언어를 판별하는 모듈을 만들었습니다.

      3. 대규모 중복 제거(de-duplication)

      LLM 학습 데이터에서는 중복 문서 제거가 가장 어렵고 비용이 많이 드는 작업입니다. 원칙적으로 모든 문서 쌍을 비교해야 하기에 복잡도가 O(n^2)에 달합니다.

      한 HackerNoon의 글은 중복 제거가 이러한 이유로 어렵다고 설명하며, 성능을 높이기 위해 blocking key 생성, 해싱 및 Locality Sensitive Hashing(LSH) 등으로 후보 집합을 줄이는 전략을 소개합니다.

      우리는 한 AWS 엔지니어가 블로그 작성한 Jaccard 유사도와 MinHash를 사용해 near‑duplicate를 찾는 방법을 보았습니다.

      GPT‑3 논문에서도 사용되었다는 이 방법은 Spark의 MinHashLSH 구현을 이용해 fuzzy dedup을 수행하고, 약 10%의 데이터를 제거했다고 합니다.

      하지만 실제로 적용해 보니 Spark MinHashLSH가 내부적으로 효율적으로 구현되어 있지 않아 메모리와 시간이 크게 소비되는 문제가 있었고,

      정확도를 높이려면 hash 테이블 수를 늘려야 하지만, Databricks 사례처럼 테이블을 3개에서 5개로 늘릴 때 시간과 정확도 사이의 trade‑off가 발생한다는 점도 확인했습니다.

      우리는 결국 데이터 분할과 후보 집합 생성을 반복하며 중복 제거를 수행했지만, 완벽하다고 할 수는 없었습니다.


      엔비디아 EMNLP 2024 논문 요약

      2024년 EMNLP에서 엔비디아 연구팀은 Data, Data Everywhere: A Guide for Pretraining Dataset Construction라는 논문을 발표했습니다.

      LLM 학습 데이터가 중요함에도 불구하고 관련 사례가 제대로 공개되지 않는다는 문제의식에서 출발해,

      웹 크롤링 기반 코퍼스를 만드는 전 과정을 분석하고 체계화하여 논문으로 publish 했습니다.

      1. 데이터 큐레이션: 중복 제거와 품질 필터링

      먼저 정확한 중복 제거와 퍼지(fuzzy) 중복 제거를 수행한다고 소개합니다.

      정확한 중복 제거에서는 128비트 해시를 사용하여 완전히 같은 문서를 그룹화한 후 하나만 남기는 방식이며,

      퍼지 중복 제거는 Smith 등(2022)의 LSH 기반 방법을 활용해 유사 문서를 제거하는 방법입니다.

      이후 품질 필터링 단계에서 CCNet과 유사하게 KenLM으로 학습한 퍼플렉서티 모델을 사용하고, 여러 휴리스틱을 결합해 낮은 품질의 문서를 걸러냅니다.

      논문에서는 중복 제거와 품질 필터링을 거치면 LLM의 정확도가 향상되고, 중복 제거 시에는 가능한 한 오래된 문서를 먼저 제거하는 것이 효과적이라는 것을 실험을 통해 확인합니다.

      2. 데이터 선택: 도메인 재샘플링(DSIR)

      다음으로 DSIR(Domain Selection via Importance Resampling)을 이용해 특정 도메인을 의도적으로 강조하거나 약화하는 방법을 제안합니다.

      크롤링 데이터는 뉴스, 블로그, 토론 게시판 등 다양한 도메인으로 구성되지만, 모델 성능은 도메인 분포에 큰 영향을 받습니다.

      DSIR은 목표로 하는 데이터 분포에 맞춰 각 도메인에서 샘플링 비율을 조정해 품질을 개선합니다.

      논문은 DSIR이 웹 크롤링 데이터에 적용될 때 전체 데이터에 일괄 적용하기보다는 도메인별로 독립적으로 적용하는 것이 더 효과적이라고 합니다.

      3. 데이터 분석: 품질, 도메인, 발화 유형 태깅

      Nvidia 연구팀은 DeBERTaV3 기반 분류기를 사용해 각 문서의 품질, 도메인, 발화 유형을 자동으로 라벨링했습니다.

      분석 결과, 웹 크롤링 데이터의 65%가 웹사이트 홈이나 뉴스, 블로그로 구성되어 있고, 기술, 금융, 법률, 과학과 같은 전문 도메인은 크게 부족함을 발견했습니다.

      또한 과학이나 건강 관련 뉴스처럼 품질이 높으면서도 독성(toxicity)도 높은 도메인도 존재한다고 합니다.

      라벨 기반 분석을 통해 어떤 도메인/발화 유형이 모델 성능에 긍정적/부정적 영향을 주는지 파악할 수 있다고 합니다.

      4. 샘플링 전략

      마지막으로 이 논문에서는 라벨 정보를 활용하여 균형 있게 샘플링하는 전략을 실험했습니다.

      예를 들어 품질 등급에 따라 데이터를 여러 버킷으로 나누고, 고품질 비율을 높이거나 특정 도메인을 강조하는 방식입니다.

      실제로 웹 크롤링 데이터에서 품질 기반의 세분화된 샘플링을 적용하면 언어 모델 평가 점수가 56.81에서 57.88로 향상됐다고 합니다.


      소회

      회사에서 처음 PLM(지금의 LLM) 데이터 파이프라인을 만들던 시절엔 참고할 자료가 거의 없어 여러 논문과 블로그를 찾아가며 시행착오를 끊임없이 반복했었습니다.

      언어 식별의 어려움, 품질과 신뢰도를 판단하는 기준, 대규모 dedup의 복잡도 등은 직접 부딪혀보기 전까지는 난이도는 물론이고 필요성 조차 알 수 없었습니다.

      엔비디아 EMNLP 2024 논문은 이러한 전체 과정을 하나의 프레임워크로 묶어 체계적으로 분석했다는 점에서 큰 의미가 있다고 생각합니다.

      특히, 중복 제거와 품질 필터링을 위해 다양한 전략을 제시하고, 실제로 성능을 개선한다는 점을 실험으로 보여준 것은 현업 개발자도 유용하게 활용할 수 있는 포인트인 것 같습니다.

      과거에는 CCNet 논문을 메인으로 참고하며 시행착오 겪으며 구현했던 것이 세계적 기업들도 비슷한 문제를 겪고 있었다는 사실을 확인하며,

      그 때는 어렵고 힘들었지만 지금은 뿌듯한 기분을 느낄 수 있었습니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      sparklingness 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기