오늘은 프로젝트 얘기는 아니고 인턴생활하면서 여러 Korean LLM을 다뤄봤는데 제가 Prompt를 잘 입력하지 못해서 그런걸까요.. 성능이 그다지 좋지 않은 걸 너무 많이 봐서 어떤 한국어 LLM이 좋은 성능을 가졌는지 알아보던 도중 업스테이지에서 만든 Open Ko LLM LeaderBoard를 발견해서 공유 및 정리하고자 포스팅을 작성합니다!
그래서 아마 이번 포스팅은 제 취향이 100% 들어간 LLM Review라고 생각해주시면 좋을 것 같습니다. ㅎㅎ
https://huggingface.co/spaces/upstage/open-ko-llm-leaderboard
1. BenchMark 소개
위 사이트에 접속하면 아래와 같은 페이지가 나옵니다.
다 영어로 작성되어 있어서 복잡해 보이지만 차근차근 하나씩 살펴보도록 하겠습니다.
- Benchmark
- Ko-GPQA : 모델이 일반적인 질문에 대한 답변을 얼마나 잘하는지 평가
- Ko-Winogrande : 모델의 텍스트 내의 애매한 문맥을 이해하고 올바르게 해석하는 능력을 평가
- Ko-GSM8k : 수학 문제를 해결하는 모델의 능력을 평가
- Ko-EQ Bench : 모델의 감정 인식과 같은 정서적 능력을 평가
- Model types
- pretrained : 대규모 데이터셋에서 사전 학습된 기본 모델을 의미
- continuously pretrained : 기본 모델을 추가 데이터로 더 학습시켜 성능을 향상시킨 모델을 의미
- fine-tuned on domain-specific datasets : 특정 산업이나 분야에 맞춘 데이터로 파인 튜닝된 모델을 의미
- chat models (RLHF, DPO, IFT, ...) : 강화 학습 기반의 인간 피드백(RLHF), DPO(Direct Preference Optimization), IFT(Instructions Fine-Tuning) 등의 기법을 사용한 대화 모델을 의미
- Precision
- float16 : 16비트 부동소수점 정밀도를 사용한 모델
- bfloat16 : float16의 변형으로 학습 속도와 성능을 높이기 위한 데이터 유형
- 8bit, 4bit : 8비트 정밀도로 양자화된 모델, 4비트 정밀도로 더 작은 크기를 가지는 양자화 모델
- GPTQ : GPT-Quantization을 적용한 모델
- Model sizes
- 0-3B : 파라미터 수가 0에서 30억 사이의 모델
- 3-7B : 파라미터 수가 30억에서 70억 사이인 모델
- 7-13B : 파라미터 수가 70억에서 130억 사이인 모델
- 13-35B : 파라미터 수가 130억에서 350억 사이인 중형 모델
- 35-60B : 파라미터 수가 350억에서 600억 사이인 대형 모델
- 60B+ : 파라미터 수가 600억을 초과하는 초대형 모델
2. 더 자세한 한국어 LLM Review (주관 100%)
저렇게 LLM LeaderBoard가 있어도 실제로 써보지 않으면 성능이 어떤지 잘 모르는 경우가 많습니다. 저는 기본적으로 이런 자료들을 잘 안 믿기도 하구요(그렇다고 LLM LeaderBoard가 잘못됐다는 얘기는 절대 아닙니다). 그래서 직접 이리저리 실험해보고 괜찮다 싶었던 모델들을 소개 및 정리해보려고 합니다.
1) maywell/Synatra-42dot-1.3B
https://huggingface.co/maywell/Synatra-42dot-1.3B
첫 번째 모델은 Maywell 씨가 자체 제작한 'Synatra' 라는 모델입니다. 왜 이 모델을 가장 처음 소개하냐면 제가 지금까지 사용해봤던 언어모델 중에 1.3B인 점을 감안했을 때 가성비로 상당히 괜찮은 모델이기 때문입니다. 이 모델을 예전에 "도배하자 도메인 챗봇 개발" 때와 이번에 진행하는 "회의 요약 Task"에서 사용해보았고 기대를 전혀 안했는데 생각보다 좋아서 소개드리고 싶었습니다.
# chunk별로 summary text에서 한 단어의 키워드 생성
def generate_keyword_from_summary(data):
for chunk in data['chunks']:
# 키워드 추출
original_text = chunk["original_text"]
summarized_text = chunk["summarized_text"]
# 프롬프트 정의 (키워드를 한 단어로 생성하는 명령어 포함)
prompt = (
f"Original text: {original_text}\n\n"
"위 요약된 회의 내용을 바탕으로 핵심 주제를 **세 문장**으로 요약해줘.\n"
)
prompt_len = len(prompt)
# 텍스트를 모델이 이해할 수 있는 input_ids로 변환
input_ids = tokenizer(prompt, return_tensors="pt").to("cuda")
input_ids.pop("token_type_ids", None)
# 모델로 키워드 생성
outputs = model.generate(**input_ids, max_new_tokens = 200) # 적은 토큰 수로 키워드 생성
keyword = tokenizer.decode(outputs[0], skip_special_tokens=True)[prompt_len:].strip()
# 결과 출력
print(f"Chunk {chunk['chunk_num']} Summary:")
print(original_text)
print("\n")
print(f"Generated Keyword: {keyword}")
print("\n")
위처럼 Prompt에 청크별로 쪼개진 텍스트를 3줄 요약해달라고 했는데 성능이 상당히 괜찮죠. 파인튜닝을 하거나 아웃풋을 조정한다면 결과가 더 잘 나올 가능성도 충분하구요. 그리고 추론 시간이 말도 안됩니다. 모델이 가벼워서 그런지 3줄 요약 한 번 출력하는데 1초 정도 걸려서 가볍게 언어모델 추론해보고 싶을 때나 시간이 중요할 때 유용하게 쓰일 수 있을 것 같습니다.
2) rtzr/ko-gemma-2-9b-it
https://huggingface.co/rtzr/ko-gemma-2-9b-it
두 번째 모델은 리턴제로에서 파인튜닝한 'Gemma 2 9b' 모델입니다. 리턴제로라는 기업은 음성인식 기술로 알려져 있어서 LLM을 파인튜닝했다고 했을 때 음성인식 기술도 잘하니 LLM 파인튜닝도 괜찮게 하지 않았을까? 하고 찾아봤습니다. 아니나 다를까 성능이 꽤 괜찮더라구요. 특히 추론 과정에서 다른 LLM들은 "안녕?"이나 "너에 대해 소개해줘."와 같이 일상적인 질문을 입력했을 때 답변이 이상하게 나오는 문제가 발견됐는데 이 모델은 이런 일상적이고 가벼운 질문에도 답변을 잘 하는 모습을 보았습니다.
위 사진은 프롬프트를 살짝 변형하여 "요약된 텍스트를 가지고 핵심 주제를 반영하는 짧은 한 표현으로 작성해줘." 라고 입력했을 때의 결과입니다. 9B 정도면 SLM에 속하는데 이 정도 성능이면 정말 괜찮다고 생각했습니다. 물론, 이 모델은 그만큼 메모리를 많이 차지하기 때문에 캐글 노트북 기준으로는 안 돌아가구요. device_map을 auto로 설정했을 때만 CPU랑 섞어서 자리를 차지하면서 돌아갑니다. 그래서 추론 속도도 오래 걸렸는데 한 청크당 5분 정도 걸렸었네요. 하지만 이 모델이 GPU에 온전히 담기는 GPU 환경을 가지신 분이라면 모델을 더 빠르게 돌릴 수 있을 거라 생각합니다. 부럽네요..
3) MLP-KTLim/llama-3-Korean-Bllossom-8B
https://huggingface.co/MLP-KTLim/llama-3-Korean-Bllossom-8B
세 번째 모델은MLP-LAB에서 개발한 'Blossom' 모델입니다. 이 모델은 제가 직접 사용해보지는 않았는데 이번 프로젝트에서 팀원이 이 모델로 Mermaid Diagram을 그리면서 좋다고 추천해서 가져와봤습니다.
Mermaid Diagram 생성 Code를 매 청크마다 오류없이 생성해내지는 못하지만 제대로 생성한 다이어그램 차트는 굉장하다고 생각합니다. 위와 같이 회의록을 다이어그램화 한 건데요. 회의록만 보고 LLM이 저런 다이어그램을 생성한다는 자체가 좀 신기하다고 생각했고 퀄리티도 괜찮아서 소개하고 싶다는 생각을 하였습니다. 물론 이제 출력된 다이어그램을 디자인적으로 수정할 필요는 있어 보이지만요.
이번 포스팅은 여기서 마무리입니다.
간만에 좀 짧은 포스팅인데 진짜 거의 모든 한국어 LLM을 찾아보면서 한국어 LLM의 한계를 많이 느꼈습니다... ㅠㅠ
물론 GPU 메모리 자원이 부족해 대형 모델을 써보지 못한 결과겠지만 영어는 소형 언어모델도 프롬프트를 잘 수행하거덩요.
아무튼 한국어 LLM을 찾아보시는 전공생분들께 조금이라도 도움이 되셨으면 좋겠고, 힘든 일상 모두 파이팅입니다 ~ !!
'NLP' 카테고리의 다른 글
[NLP] Survey of Chatbot, Persona (7) | 2024.09.04 |
---|---|
[NLP] NLP Task Review, 감정분석 (0) | 2024.07.11 |
[NLP] Similarity, 문서 유사도 측정 (0) | 2024.07.06 |
[NLP] Text Data Preprocessing (0) | 2024.07.02 |
[NLP] 정규 표현식, Regular Expression (0) | 2024.07.01 |