EleutherAI의 DPS
EleutherAI is a non-profit AI research lab that focuses on interpretability and alignment of large models.
- EleutherAI는 대형 모델의 해석 가능성과 정렬에 중점을 둔 비영리 AI 연구실이다.
- Multi language에 적합한 LLM 모델인 polyglot 모델로 유명한다.
- 기본 개발때 한국어가 중심 언어중 하나였기 때문에 한국어 관련 기능들이 풍부하게 있는 듯 하다.
- DPS(Data Processing System)은 LLM을 훈련하기 전에 훈련데이터 전처리를 위한 패키지이다.
- 기본적인 전처리를 end-to-end로 해주기 때문에 매우 편리하다.
1. DPS의 주요기능
- DPS는 언어 모델 훈련을 위한 데이터 전처리를 한번에 진행해주는 편리한 패키지이다.
- Pyspark를 통해 대용량의 corpus를 한번에 처리 가능한 듯 하다. 특히 multi source로 수집된 대용량 data의 중복 check 및 기타 전처리를 한번에 진행하는데 장점이 있다
- 별도로 정의된 korean_job 관련해서 대략적으로 살펴보면 다음과 같다.
- 파편화된 한글(자모)를 제거하고 유니코드 정규화를 통해 호환성을 높이고, bad word filtering, 너무 짧은 글 너무 긴글 필터링, 기타 구두점이 많은 corpus 필터링 등 여러 전처리가 이뤄진다. 개인정보 마스킹도 포함된다. 그외 기타 전처리는 아래와 같다
- Preprocessing
- process_html_and_uri_text
- reduce_emoticon
- remove_whitespace
- replace_email_and_url
- replace_korean_pii
- spam_words_filter
- remove_html_tags
- remove_repeated_text
2. DPS 설치
- DPS(Data Processing System) repository에는 파이썬 3.8환경에서 설치하라고 한다.
- conda 가상환경에서 파이썬 3.8버전으로 가상환경 생성 후 -> repsitiry clone -> requirements-kor.txt 를 먼저 설치후 -> python setup.py install로 인스톨 진행 -> 나의 경우에는 이렇게 해도 두개의 dependency가 설치되지 않아서 에러 메시지를 보며 수동설치했다.(
pip install sudachipy
, pip install sudachidict_core
) -> 이후 python bin/sparkapp.py korean_job --config_path=./configs/korean_job.yaml
으로 구동 테스트를 했다.
3. config 살펴보기
./configs/korean_job.yaml
에 한국어 전처리에 관한 설정을 수정 할수 있다.
base_dir: "./datasets/test_korean_jsonl_data"
targets:
- 0
- 1
output_dir: "./datasets/test_output_data"
n_dist: 10
n_output: 4
is_cluster: False
min_doc_len: 50
max_doc_len: 100000
min_mean_word_len: 3
max_mean_word_len: 10
symbol_to_word_ratio: 0.1
bullet_point_ratio: 0.9
ellipsis_ratio: 0.3
korean_word_ratio: 0.25
- base_dir: 원본파일이 있는 경로를 지정한다. 기본적으로
.jsonl
파일만 로드하도록 코드가 짜여져 있다. [Link] base_dir 아래에 바로 .jsonl
파일들이 있다면 다음에 나올 항목인 targets
를 "all"
로 정해줘야 한다. 자식 폴더가 있을 때는 자식 폴더의 이름을 targets
에 다음 개요로 넣어 줘야 한다.
- targets:
base_dir
아래 대상 자식폴더를 지정해주거나 전체 jsonl
파일을 지정해도록 되어 있다. 코드 구조상 개별 파일을 독립적으로 지정할수 없고, 그렇게 하기 위해서는 코드 수정이 필요하다. [Link]
- output_dir: 결과물을 저장하기 위한 폴더이다. 경로를 지정해주면 된다. 확실한건 아니지만 지정한 경로에 다른 파일들이 있으면 실행 초반에 중단된다.
- n_dist: 프로세싱 분할 수를 의미하는 듯 하다. 단일 컴퓨터의 경우 CPU가 가진 쓰레드를 몇개 쓸지 정해준다.
- n_output: 결과물을 몇개로 분할해서 저장할지 정하는 변수이다.
- is_cluster: 다수의 Node를 사용하는 cluster 모드에 대한 설정이다. 단일 컴퓨터가 아니라 다중 node사용을 위해 설정하는 모드인 듯 하다.
- min_doc_len, max_doc_len: corpus의 최소길이와 최대길이를 지정해주는 parameter이다. 글자단위로 센다.
- min_mean_word_len, max_mean_word_len: corpus의 단어들의 평균길이로 flitering하기 위한 parameter이다. 보통 대부분의 글은 3과 10사이에 들어가기 때문에 특수한 경우가 아니면 수정하지 않기를 바란다.
- symbol_to_word_ratio: "#"이나 줄임표 같은 특수기호가 포함된 단어의 비율을 정한다. 0.1경우 심볼이 붙어있는 단어(공백을 기준으로 나누었을 때) 비율이 10%를 초과하면 필터링 된다.
- bullet_point_ratio, ellipsis_ratio: 불렛포인트 "*"이나 "·"같은 기호로 시작하는 시작하는 비율, 줄임표(ellipsis)로 끝나는 글(띄어쓰기 기준)의 비율을 정해준다. 정한비율을 초과할 경우 필터링 된다.
- korean_word_ratio: corpus에 한글단어 비율을 정하는 parameter이다.
4. 실행
- aihub.go.kr에서 획든한 source에서 읽어들인 총 84GB짜리 corpus를 전처리 한 결과 12.1GB짜리 4개 파일로 나누었고, intel i7-1260p 프로세서가 장착된 nuc에서 12시간이 걸렸다.