brunch

10. 데이터중복제거

데이터중심 AI강좌: 데이터세트 구축 및 효율적인 데이터 학습 방법

by AI개발자
gaebalai-blog_(2) (1).jpg

(1) 데이터 중복제거

앞에서 텍스트 데이터의 필터링으로 대응할 수 없는 문제로 데이터세트 내에 중복문서가 존재하는 경우를 들 수 있습니다. 웹에서 수집한 텍스트 데이터에는 대량의 중복된 문서가 포함되는 것으로 알려져 있습니다. 아래에서는 대표적인 중복문서의 예시를 설명합니다.


▣ 특정 키워드를 제외한 부분이 일치하는 문서

데이터세트에는 특정 키워드를 제외하고 거의 모든 부분이 동일한 문서들이 포함되어 있습니다. 이는 특히 검색엔진 최적화(SEO, Search Engine Optimization)등을 목적으로 자동생성된 문서에서 자주 나타납니다. 예를 들어 다음과 같은 문서가 존재합니다.

dataai-007-1.png

▣ 소스코드의 라이선스 조항

GitHub와 같은 소스코드 공유 사이트에서는 많은 저장소(repository)에 그 소스코드의 라이선스(MIT, Apache-2.0)를 나타내는 파일(LICENSE)이 배치되어 있으며, 이 파일에는 라이선스종류에 따라 정해진 조항이 포함되어 있습니다. 따라서 소스코드를 단순히 크롤링하면 라이선스 조항이 대량으로 중복될 것입니다.


▣ 더미 텍스트(dummy text)

더미 텍스트는 웹페이지나 인쇄물 제작시 문서의 레이아웃(layout)을 결정하기 위한 자리표시자(placeholder)로 사용되는 임시 텍스트입니다. 관습적으로 더미 텍스트에는 특정한 정형화된 문장이 많이 사용되므로, 그러한 문장은 데이터세트 내에서 중복될 가능성이 있습니다. 예를 들어, 서양권에서는 더미텍스트로 'Lorem ipsum'으로 시작하는 문장이 널리 쓰입니다. 한편 한국어에서는 특별히 정해놓고 쓰는 경우는 없이 '한글 Lorem Ipsum'사이트에서 생성해서 자주 사용합니다.


이번에는 이러한 중복을 제거함으로써 기대할 수 있는 효과에 대해 논의하고 중복제거를 위한 기법을 설명합니다.


dataai-008.png 중복을 포함하는 사전학습데이터에서는 언어모델 평가세트상 성능(세로축 test loss)이 악화되는 것을 나타낸 그림 (Hernandez논문 인용)


① 왜 중복제거가 필요한가?

LLM(거대언어모델)의 사전학습 데이터에서 중복된 문서를 제거하면 다음과 같은 효과를 기대할 수 있습니다.


▣ 데이터세트 암기의 억제

중복된 문서를 포함한 데이터세트로 LLM을 학습시키면 모델이 사전학습 데이터를 일반화(Generalization)하기보다 단순히 데이터를 기억(암기)하게 될 가능성이 있으며, 그 결과 모델의 일반화 성능이 악화될 수 있습니다. 예를 들어, Hernandez논문등에서는 데이터세트의 중복이 언어모델 성능에 미치는 영향을 조사하였는데, 중복정도에 따라서는 800M 파라미터 언어모델의 성능이 400M 파라미터 언어 모델 수준으로까지 저하된다고 보고하고 있습니다.(아래 그림 참조) 사전에 중복된 문서를 제거함으로써 LLM이 단순 암기를 하게 되는 문제를 회피할 수 있을 것으로 기대됩니다.


▣ 학습의 효율화

중복된 문서를 제거함으로써 언어모델을 보다 효율적으로 학습할 수 있다는 보고도 있습니다. 구체적으로는 중복을 포함한 데이터세트와 중복을 제거한 데이터세트를 비교했을 때, 중복을 제거한 쪽이 언어모델의 업데이트 횟수(epoch)에 따른 성능향상이 더 뛰어나다고 합니다. 즉, 같은 계산자원을 사용할 경우, 중복을 제거한 데이터세트를 사용하는 쪽이 더 높은 성능의 모델을 구축할 수 있음을 의미합니다.


dataai-009.png 각 덤프데이터에 포함된 고유URL의 비율을 나타내는 그래프 (common crawl 인용)

이러한 효과를 기대하여 많은 데이터세트가 중복 제거 처리를 채택하고 있습니다. 다음은 실제 데이터세트 구축시 사용되는 중복제거 기법을 소개합니다.


② URL을 이용한 중복 제거

Common Crawl의 크롤러(crawler)는 동일한 URL을 여러 번에 걸쳐 수집하고 있으며, 같은 URL에서 가져온 문서가 여러 개의 덤프 데이터에 포함되는 경우가 있습니다. 또한, 서로 다른 여러 개의 URL이 같은 URL로 리다이렉트(redirect)되는 경우도 있으며, 이러한 경우, 하나의 덤프 데이터 내에 동일한 URL의 문서가 여러개 존재하게 됩니다. 따라서 같은 URL에서 가져온 문서는 동일한 내용이라고 가정하면 URL을 이용하여 간단하게 중복 제거를 수행할 수 있습니다. 구체적으로는 동일한 URL에서 수집된 복수의 문서를 중복으로 간주하고, 최신 문서만을 남기고 그 외의 문서를 삭제합니다.


③ MinHash

URL을 이용한 중복제거는 간단하게 수행할 수 있는 반면에 웹이외에서 얻은 문서 등 URL이 존재하지 않는 데이터이거나, 중복되는 문서가 서로 다른 URL에서 수집된 경우에는 제거할 수 없다는 문제가 있습니다. 이런 경우에는 문서 내용을 고려한 중복제거가 효과적입니다.


이번에는 중복제거의 대표적인 기법으로 널리 사용되는 MinHash를 이용한 방법을 설명합니다. 이를 위한 사전준비로서 문서간의 유사도를 나타내는 척도 중 하나인 Jaccard계수를 소개합니다. 지금 중복제거 대상인 문서의 집합을 D라고 합니다. 문서 di ∈ D에 포함된 N-gram의 집합을 xi라고 하면 문서 di와 dj간의 Jaccard계수는 아래와 같이 정의됩니다.



dataai-011-1.png MinHash계산: 문서di에서 Signature mi를 계산하는 과정

문서집합 D에서 중복을 제거할 때, 가장 단순한 방법으로는 D내의 모든 문서쌍에 대해 Jaccard계수를 계산하여 유사도가 높은 문서쌍을 찾는 방법을 생각할 수 있습니다. 그러나 실제로 이러한 계산을 수행하려면 문서집합 D의 모든 문서의 N-gram집합을 메모리에 유지할 필요가 있습니다. 또한 문서쌍의 조합수가 폭발적으로 증가하기 때문에 Jaccard계수를 직접 계산하는 방법은 계산량의 관점에서 현실적이지 않습니다.


MinHash는 앞서 설명한 Jaccard계수의 계산량 문제를 해결하여 문서 간의 유사도를 효율적으로 구하기 위한 기법입니다. MinHash에서는 문서 di의 N-gram 집합 xi의 각 요소를 해시함수(hash function) h를 통해 처리하여 최소값인 최소 해시값(minimum hash value) mi을 구합니다.

dataai-012-2.png

이때 문서 di의 최소 해시값 mi와 문서 dj의 최소 해시값 mj가 일치할 확률 P는 Jaccard계수와 같다는 것이 알려져 있습니다.

dataai-012-3.png

Jaccard계수를 추정하기 위해서는 K개의 해시함수에 대해 각각의 최소 해시값을 구합니다. 지금 해시함수 hk로 얻은 문서 di의 최소해시값을 mi,k라고 하고 최소 해시값을 K개 나열한 벡터를 mi로 나타냅니다.

dataai-012-4.png

이것을 문서 di의 시그니처(Signature)라고 부릅니다. 문서 di의 시그니처 mi와 문서 dj의 시그니처 mj에 대해 각 값을 처음부터 비교하여 값이 일치하는 개수를 K로 나눈 값이 Jaccard계수의 추정값이 됩니다.


dataai-012-1.png MinHash를 이용한 중복검출 개요도

MinHash를 이용하면 데이터세트 내의 중복문서를 효율적으로 특정할 수 있습니다. 먼저 데이터세트 D의 모든 문서에 대해 시그니처를 계산하고 이를 나열하여 크기가 K X |D|인 시그니처 행렬 M을 생성합니다. 다음으로 행렬에 있는 각 시그니처를 b개의 밴드(band)로 균등분할합니다 이때 각 밴드는 r개의 요소를 포함한다고 하면, b x r = K가 됩니다. 각 문서에 대해 이 r개의 요소를 입력으로 하여 다시 해시함수를 적용하여 버킷(bucket)이라 불리는 값을 계산합니다. 버킷값이 일치하는 문서쌍이 발견되면 그 쌍를 중복후보로 지정합니다. 예를 들어, 위 그림에서는 시그니처 mi와 시그니처 mj의 버킷값이 일치하므로 문서 di와 dj는 중복 후보가 됩니다. 이 비교를 b개의 모든 밴드에 대해 수행하여 하나의 밴드라도 버킷값이 일치하면 해당 문서쌍을 중복후보로 지정합니다.

이때 문서 di과 dj가 중복 후보로 판정될 확률은 다음 식으로 표현됩니다.

dataai-012-5.png

여기서 si,j는 문서 di와 dj간의 Jaccard계수 Jaccard(xi, xj)입니다.

이 식의 그래프는 아래 그림과 같습니다. 그 그림을 보면, 해시함수의 적용횟수 K가 동일하더라도 b와 r의 값에 따라 그래프 형태가 달라짐을 알 수 있습니다. 따랏서 문서쌍의 중복여부를 판단할 때 사용하는 Jaccard계수 기준값(임계값)에 따라 b와 r을 조정할 필요가 있습니다. 예를 들어, Jaccard계수가 0.8이상인 문서쌍을 중복으로 검출하고자 할 경우, (b, r) = (10, 5)로 설정한 것보다, (b, r) = (5, 10)으로 설정하는 편이 더 족합할 것입니다. 또한 해시 함수의 적용 횟수가 많을수록 더 정밀하게 중복여부를 판정할 수 있지만, 계산량과 메모리가 더 많이 필요하게 됩니다. 따라서 해시함수 적용횟수는 사용가능한 계산자원에 따라 결정해야 합니다.


dataai-013-1.png 위 식의 그래프 (해시함수적용횟수 50회는 같지만 밴드의 총수b와 각 밴드에 포함되는 요소수r에 의한 그래프는 다름

MinHash를 이용한 중복제거를 구현한 대표적인 라이브러리로는 datasketch, text-dedup, NeMo-Curator등이 알려져 있습니다. 사전학습 데이터에서 중복제거를 수행할 때는 이들 라이브러리를 참고할 수 있습니다.



(2) 텍스트 데이터 수집의 한계

지금까지의 논의에서는 사전학습 데이터를 웹에서 거의 무제한적으로 얻을 수 있다고 암묵적으로 가정했습니다. 그러나 실제로 이 가정이 정확하다고는 할 수 없으며, 가까운 미래에는 텍스트 데이턱다 고갈될 가능성이 지적되고 있습니다. 구체적인 예로 현재까지 공개된 데이터세트 중 최대 규모인 RedPajama v2를 생각해 봅시다. RedPajama v2의 구축에는 지금까지 수집된 거의 모든 Common Crawl덤프(dump)가 사용되었으며, 그 영어 부분에는 약 20조(20T)토큰이 포함되어 있습니다.


그러나 앞서 설명했던 친칠라 법칙(Chinchilla Scaling Law, 하나의 파라미터에 약 20개의 토큰이 필요)을 고려하면 20T 토큰으로 학습 가능한 영어 기반 LLM의 파라미터수는 최대 1조(1T)개 정도로 제한됩니다. 최근에는 LLM의 파라미터수가 계속 증가하고 있는 경향을 고려하면, 20T토큰이라는 데이터 규모는 충분하지 않다고 볼 수 있습니다.


또한, 한국어의 경우 상황은 더욱 심각합니다. Common Crawl 데이터에서 한국어가 차지하는 비율은 약 0.7%정도로 영어와 비교했을 때 약 100분의 1규모도 안됩니다. 따라서 만약 RedPajama v2와 동일한 방법으로 한국어 데이터세트를 구축할 경우, 영어 기준 약 2T토큰에 해당하는 규모의 데이터세트가 만들어질 것입니다. 친칠라 법칙에 따르면 이는 최대 약 백억(10B) 파라미터 규모의 한국어 LLM을 구축할 수 있음을 의미하며, 영어 LLM과 비교하여 약 100분의 1 규모의 파라미터수가 상한선이 됩니다.


이와 같은 상황을 고려할 때, 한국어로 백억개의 파라미터(10B)이상의 LLM(Large Language Model)을 만들기 위해선는 어떻게 해야 할까요? 이번에는 사전학습 데이터가 부족한 경우에 대응할 수 있는 3가지 접근법을 소개합니다.


① 다중 에포크(epoch)의 활용

LLM의 사전학습 데이터가 부족한 경우, 같은 데이터세트를 여러번 사용(다중 에포크 학습)하여 추가적인 데이터 수집 비용 없이 사전학습 데이터의 총량을 증가시킬 수 있습니다. 간단히 말하면, 전체 200B(2000억) 토큰의 데이터세트를 3회 반복(3 에포크 학습)하는 경우, 사전학습 데이터의 총량은 600B(6000억)토큰이 됩니다. Muennighoff논문등에 따르면 다중 에포크 활용이 LLM성능에 미치는 영향을 조사하기 위해 LLM학습에 사용되는 총 토큰수를 동일하게 유지한 상태에서 다음 2가지 설정을 비교했습니다.


동일한 데이터를 N회 반복 학습

매번 새로운(유니크한) 데이터를 사용하여 학습


결과는 아래 그림과 같이 나타나며, 사전학습 데이터를 최대 4회 반복(4 에포크 학습)할 때까지는 설정1과 설정2의 사이에서 LLM성능에 차이가 없다는 점을 확인할 수 있습니다.


dataai-014.png 데이터 반복시 반환 및 할당

② 데이터세트의 다국어화

특정 언어의 데이터가 부족한 경우, 다른 언어 데이터를 함께 활용(다국어화)하여 원래 목표로 하는 언어의 성능을 향상시킬 수 있는 경우가 있습니다. 원래 LLM(Large Language Model)이 등장하기 이전부터 다국어화는 부족한 데이터를 보완하기 위한 접근법으로 연구되어 왔습니다. 예를 들어, 기계번역(machine translation)분야에서는 다국어 데이터를 사용함으로써 번역 데이터가 제한적인 언어(저자원 언어)의 번역 성능이 향상되는 것이 널리 알려져 있습니다. 최근에는 LLM의 사전학습에서도 여러 언어를 동시에 사용하는 사례가 증가하고 있으며 , 기존 LLM으로는 mT5, Bloom, GLM등이 있습니다. 또한 한국어 기반 LLM으로는 한국어와 영어를 혼합한 사전학습 데이터로 학습한 HyperCLOVA(네이버, 82B, 204B 모델), KULLM(구름, 고려대학교)와 같은 모델이 있습니다.


dataai-015-1.png 계속 사전학습 개요도

LLM에서 다국어 데이터를 활용하는 재미있는 방법 중 하나는 기존 LLM으로부터의 연속 사전학습(계속 사전학습, Continued Pretraining)이 있습니다. 계속 사전학습은 기존에 사전학습된 LLM을 초기값으로 사용하여 추가적인 사전학습을 수행하는 방식입니다. 예를 들어, 영어기반 LLM을 초기값으로 설정한 뒤 한국어 사전학습 데이터를 사용하여 추가학습을 수행하면 효율적으로 한국어 성능이 뛰어난 LLM을 구축할 수 있습니다. 실제로 서울과기대의 Bllossom이 Llama 3을 초기값으로 하여 추가학습하여 한국어 태스크 성능을 Llama 3 대비 크게 개선했다고 보고하였습니다. 만약 무작위 초기값으로부터 LLM을 새로 학습할 경우, 동등한 성능을 얻으려면 100B토큰보다 더 많은 토큰수가 필요하게 됩니다. 즉, 연속사전학습은 LLM사전학습에 필요한 토큰수를 크게 절약할 수 있는 방법으로서 사전학습 데이터부족 문제에 대응하는 매우 유망한 접근법이라고 할 수 있습니다.


그외에도 최근에는 자연어뿐만 아니라 프로그래밍 언어코드(Python 등) 또한 활발히 사용되고 있습니다. 예를 들어, 영어데이터를 사용하는 경우, 전체 데이터 중 최대 절반을 Python으로 작성된 코드로 대체해도 LLM성능이 크게 저하되지 않는다고 보고되고 있습니다. 또한, LLM의 다단계 추론 능력(chain-of-thought reasoning)이 학습데이터에 포함된 프로그래밍 코드 덕분에 실현되었을 가능성도 지적되고 있습니다.


③ 품질 높은 텍스트 데이터의 활용

LLM의 사전학습 데이터가 부족할 때 대응하는 방안으로 품질 높은 데이터를 사용하는 방법이 주목받고 있습니다. 특히 최근에는 이미 학습된 LLM을 활용하여 품질 높은 데이터를 생성하는 기법을 활발하게 연구되고 있습니다.


예를 들어, Gunasekar논문은 2가지 기법을 제안하고 있습니다. 하나는 학습이 완료된 LLM을 사용하여 품질이 높은 데이터를 직접 생성하는 방법입니다. 이 방법에서는 프로그래밍 코드를 설명하거나 고품질의 자연어 텍스트(위키피디아와 유사한 설명형식)를 생성합니다. 다른 하나는 사전학습 데이터를 LLM에게 입력하여 '교육적 가치'라는 관점에서 평가하도록 지시하고, 그 결과를 바탕으로 필터링하는 방법입니다. 이렇게 구축된 사전학습 데이터는 약 70억(7B) 토큰으로 비교적 소규모이지만, 이 데이터세트로 사전학습된 LLM은 우수한 성능을 보이고 있습니다.


또한, 기존 문서에서 품질 높은 문서를 생성하는 또 다른 접근법으로 WRAP이라는 방법이 있습니다. WRAP은 Gunasekar등이 제안한 방법과 유사한 것으로 학습이 완료된 LLM에게 '입력문서를 위키피디아 스타일로 바꾸어달라'와 같은 지시를 주어, 기존문서를 위키피디아 스타일의 고품질 문서로 변환하도록 합니다. 이러한 방식으로 기존 문서로부터 위키피디아와 유사한 고품질 문서를 얻을 수 있습니다. 이 기법을 사용하여 구축한 데이터세트를 이용해 사전학습한 결과, WRAP로 생성한 데이터세트를 사용한 경우 기존 데이터세트보다 더 높은 성능을 달성하였습니다. 다만, 이들 기법은 품질 높은 데이터를 생성하기 위해 이미 대량의 사전학습 데이터로 학습된 LLM을 사용하고 있다는 점에 주의가 필요합니다. 즉, 고품질 데이터 생성과정에 사용되는 사전학습된 LLM자체가 이미 많은 양의 데이터를 요구했다는 점을 고려해야 합니다.


©2024-2025 GAEBAL AI, Hand-crafted & made with Damon Jaewoo Kim.

GAEBAL AI 개발사: https://gaebalai.com

AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5


keyword
이전 09화9. 사전학습, 노이즈제거필터링