language:
- ko
library_name: transformers
EAGLE: ETRI's Advanced-lightweight Generative Language Engine
(과거에 eGPT로 불렸으며, 2024.11.14 에 이름을 변경하였습니다. 추후 릴리즈되는 모델의 prefix는 egpt- 대신 eagle-로 변경됩니다)
본 모델은 사전학습만 수행된 모델이며, 별도의 Instruction Tuning 등이 적용되지 않은 기초 모델입니다. 챗봇 스타일의 입출력이 필요한 경우, 별도의 미세조정을 반드시 수행해야 합니다.
모델 정보
3.1B Decoder-only, Causal 언어모델. 수학, 정량 추론을 비롯한 STEM 분야에 특화된 소규모 언어모델을 지향합니다. 범용 언어모델의 역할을 목표로하지는 않기에, 통상의 이해 관련 범용 태스크 평가(e.g. hellaswag, sentineg 등)에는 낮은 성능이 나타날 수 있습니다. 학습 데이터 변경 및 학습 방법 수정, 개선으로 인해 본 모델은 비정기적으로 업데이트 될 수 있음을 미리 알려드립니다.
Tokenizer는 LLaMa의 구성과 유사하게 byte-fallbacked BPE + digit 분리 구성을 가지나, BOS/EOS(e.g. <s>,</s>
) 토큰이 모두 EOS(</s>
)로 통일되어 있습니다. 토크나이저 설정에서 PAD 토큰은 별도로 지정되어 있지 않으나, Byte-level BPE의 특성상 <unk>
심볼이 사용되지 않으므로, 미세조정 단계에서는 <unk>
토큰을 PAD 토큰으로 지정하여 활용할 것을 권장합니다.
LLaMA 호환 아키텍쳐로 구성되어 있으며, A100 80GB PCIE * 8장에서 약 720B tokens를 from-scratch로 사전 학습하여 획득된 모델입니다.
업데이트 기록/Update log
날짜 | 버전 | 세부 사항 |
---|---|---|
2024.10.28 | v24.10 | (현재버전) 첫번째 퍼블릭 릴리즈 후보. 약 720B tokens 학습 |
통지사항/Acknowledgement
- 이 모델은 2024년도 정부(과학기술정보통신부)의 재원으로 정보통신기획평가원의 지원을 받아 수행된 연구임 (RS-2023-00216011, 사람처럼 개념적으로 이해/추론이 가능한 복합인공지능 원천기술 연구)
- This work was supported by Institute of Information & Communications Technology Planning & Evaluation(IITP) grant funded by the Korea government(MSIT) (RS-2023-00216011, Development of artificial complex intelligence for conceptually understanding and inferring like human)
제한적 모델 접근 및, 모델 접근 허가와 관련한 개인정보 수집 및 사용 안내/Information on Collection and Use of Personal Information for Gated Model Access
본 모델은 연구와 교육 목적으로만 사용 될 수 있으며, 현재 제한적 공개 상태로, 본 언어 모델의 다운로드에는 담당자 사전 승인이 필요합니다. 사전 승인과 관련된 문의사항은 별도의 메일(jhshin82 at etri.re.kr)로 요청 부탁드립니다.
본 모델과 관련해 사회적, 법적 문제가 발생할 경우 모델의 사용을 제한하고, 배포를 철회할 수 있습니다. 이를 위해 모델 접근 허가에 사용된 이메일 주소를 다음과 같이 수집, 보유, 이용할 수 있습니다.
개인정보 수집동의/Concent to collection of Personal Information
본 모델의 사용과 관련, 배포/사용 제한/철회, 그 외 사용자의 이익에 관계된 라이선스 변경 시 이를 통지하기 위해, 아래와 같이 개인정보를 수집, 이용합니다.
수집 목적 | 수집 항목 | 보유, 이용기간 |
---|---|---|
모델의 사용제한/철회 요청 목적 | 이메일 주소, huggingface hub ID | 본 모델의 공개 기간 및 이용 목적 달성 시 |
모델의 사용 라이선스 등 변경 안내 | 이메일 주소, huggingface hub ID | 본 모델의 공개 기간 및 이용 목적 달성 시 |
본 모델에 대한 접근 요청을 수행하고, 모델에 접근하시는 행위는 아래에 안내된 안내사항, 본 모델의 한계, 책임있는 AI 연구에 대한 정보, 개인정보 수집/이용에 동의하신 것으로 간주합니다. 사용자는 동의를 거부하실 권리가 있으며, 동의를 거부하실 경우 모델 사용이 제한되며, 이에 관련한 사용, 결과에 대한 책임은 사용자에게 있음을 알려드립니다. 사용 후 동의 철회, 개인정보 폐기에 대한 사항은 상기 안내된 메일 주소 또는 Community tab을 통해서 요청하실 수 있습니다.
모델의 한계, 책임있는 AI 연구를 위한 관련 정보 안내
본 모델의 개발과 관련한 개발자 및 조직은 책임있는 AI 연구를 준수하고자 노력하고 있으며, 이와 관련해 AI 연구에 사용되는 입출력 데이터 내 포함된 욕설, 음란, 정치적 내용 및 기타 거친 언어에 대한 처리를 수행하고자 노력하고 있습니다. 그럼에도 불구하고, 원시 웹 텍스트 데이터의 특성 상 이를 기반으로 해 학습된 본 생성 언어 모델은 경도된 사상을 포함하거나, 사회적으로 용인될 수 없는 텍스트를 생성할 수 있으며, 다른 언어 모델과 마찬가지로 특정 프롬프트와 공격적인 콘텐츠가 반환될 수 있습니다. 이를 포함, 본 모델의 출력/생성 결과와 관련한 내용은 개발자 및 개발자가 속한 조직의 사상, 의도와 전혀 관련이 없음을 알려드립니다.
테스트중에 발생한 비정상적인 혹은 사회적으로 용인되지 않는 텍스트가 생성된 경우 jhshin82 at etri.re.kr로 (__at__을 @로 치환) 출력 유도에 사용된 입력문(프롬프트), 사용된 샘플링 기법 및 하이퍼파라미터(예: top-p=0.8, temperature, repetition-penalty 등), 이를 통해 생성된 출력 결과를 함께 보내주시면, 이를 억제하기 위한 노력을 기울이도록 하겠습니다.
평가/Evaluations
사전학습 모델의 KOBEST 평가
평가는 EleutherAI/lm-evaluation-harness, v0.4.2를 사용하여, KoBEST(Kim et al., 2022) 평가셋으로 fine-tuning 없이 zero-shot, 5-shot 테스트를 수행했습니다. (lm-evaluation-harness의 KOBEST 평가는 버전에 따라 다르게 나타는 문제가 있어, 최신 lm-evaluation-harness(버전 0.4.2 이후)를 통한 평가를 아래 별도로 제시하였습니다.)
Zero-shot 성능 | KB-BOOLQ (F1) | KB-COPA (F1) | KB-HELLASWAG (F1) | KB-SENTINEG (F1) | KB-WIC (F1) | Average (F1) |
---|---|---|---|---|---|---|
eagle-3b-preview (v24.08) | 0.3393 | 0.5353 | 0.3446 | 0.5653 | 0.3280 | 0.3994 |
eagle-3b-preview (v24.09) | 0.3343 | 0.5367 | 0.3383 | 0.4991 | 0.3280 | 0.3917 |
eagle-3b-preview (v24.10) | 0.3778 | 0.5648 | 0.3369 | 0.4763 | 0.3280 | 0.4092 |
eagle-3b-preview (v24.11) | 0.3651 | 0.5893 | 0.3551 | 0.4473 | 0.3280 | 0.4101 |
5-shots 성능 | KB-BOOLQ (F1) | KB-COPA (F1) | KB-HELLASWAG (F1) | KB-SENTINEG (F1) | KB-WIC (F1) | Average (F1) |
---|---|---|---|---|---|---|
eagle-3b-preview (v24.08) | 0.4680 | 0.5580 | 0.3332 | 0.4950 | 0.4830 | 0.4795 |
eagle-3b-preview (v24.09) | 0.5087 | 0.5599 | 0.3257 | 0.4207 | 0.4212 | 0.4681 |
eagle-3b-preview (v24.10) | 0.5207 | 0.5791 | 0.3511 | 0.5959 | 0.4712 | 0.5078 |
eagle-3b-preview (v24.11) | 0.4753 | 0.5924 | 0.3592 | 0.5810 | 0.4930 | 0.5024 |
10-shots 성능 | KB-BOOLQ (F1) | KB-COPA (F1) | KB-HELLASWAG (F1) | KB-SENTINEG (F1) | KB-WIC (F1) | Average (F1) |
---|---|---|---|---|---|---|
eagle-3b-preview (v24.08) | 0.4243 | 0.5673 | 0.3364 | 0.4232 | 0.4265 | 0.4465 |
eagle-3b-preview (v24.09) | 0.5001 | 0.5597 | 0.3377 | 0.3498 | 0.3578 | 0.4432 |
eagle-3b-preview (v24.10) | 0.5101 | 0.5894 | 0.3675 | 0.5101 | 0.4650 | 0.4994 |
eagle-3b-preview (v24.11) | 0.4151 | 0.6143 | 0.3718 | 0.5883 | 0.5134 | 0.4963 |
전이학습 능력 평가
준비중입니다.
모델 | GSM8k test | 비고 |
---|---|---|
- | - | - |
사전학습에 참여한 데이터셋 정보/Datasets
- FIXME: 학습데이터 목록 수정, 업데이트 필요
아래의 학습 데이터를 사용하여 학습하였습니다:
- AIHub 데이터셋, MRC, RAW, 대화, 번역, 요약
- KISTI 국내논문 EN, KR 데이터셋
- KcBERT v2022.3q 네이버 뉴스 댓글 데이터셋
- 국립국어원 모두의 말뭉치(문어, 구어, 신문, 비출판물, 국회회의록, 일상대화, 온라인대화, 메신저 말뭉치)
- 한국어 위키피디어 덤프, lovit/ko-wikitext 데이터셋. 20200920.v3 등 korpora 데이터셋의 사전학습용 말뭉치 일부
- (영) SlimPajama-627B (https://huggingface.co/cerebras/SlimPajama-627B)
- (영) stack exchange 데이터셋
- (영) OpenWebText2
- (영) 2020-09-08-arXiv-extracts
- (영) PUBMED title abstracts 2019
- THUDM/MathGLM Arithmetic Text Corpus (applied from 23/11/22, https://github.com/THUDM/MathGLM) 등
사용 요령/How to use
아래 코드를 통해, transformers>=4.28 버전에서 추론 가능합니다.
import sys
from transformers import (
AutoTokenizer, AutoModelForCausalLM, GenerationConfig
)
def load_model(mdl_path):
tokenizer = AutoTokenizer.from_pretrained(mdl_path,)
# device_map 인자를 사용하기 위해서는 accelerator 모듈 설치 필요.
model = AutoModelForCausalLM.from_pretrained(mdl_path, device_map="auto",
torch_dtype="auto")
return tokenizer, model
if __name__ == '__main__':
# FIXME: 모델 경로 수정!
tokenizer, model = load_model("etri-lirs/egpt-3b-preview")
# print(model.hf_device_map)
# 필요에 따라 아래 생성 옵션을 제어
gen_cfg = GenerationConfig(max_new_tokens=256, min_length=0,
max_time=10.0, do_sample=True,
top_p=0.9, epsilon_cutoff=3e-4,)
print("** Now Ready to input from stdin.")
for aline in sys.stdin:
aline = aline.rstrip("\n\r\t")
input_cond = tokenizer(aline, add_special_tokens=False, return_tensors="pt").to("cuda")
outs = model.generate(**input_cond, generation_config=gen_cfg)
out_str = tokenizer.batch_decode(outs, skip_special_tokens=True,
clean_up_tokenization_spaces=True)
print(">> " + ' '.join(out_str))