본문 바로가기
NLP

[NLP] Korean LLM Leaderboard

by 단깅수 2024. 10. 16.
728x90

오늘은 프로젝트 얘기는 아니고 인턴생활하면서 여러 Korean LLM을 다뤄봤는데 제가 Prompt를 잘 입력하지 못해서 그런걸까요.. 성능이 그다지 좋지 않은 걸 너무 많이 봐서 어떤 한국어 LLM이 좋은 성능을 가졌는지 알아보던 도중 업스테이지에서 만든 Open Ko LLM LeaderBoard를 발견해서 공유 및 정리하고자 포스팅을 작성합니다!

 

그래서 아마 이번 포스팅은 제 취향이 100% 들어간 LLM Review라고 생각해주시면 좋을 것 같습니다. ㅎㅎ

 

https://huggingface.co/spaces/upstage/open-ko-llm-leaderboard

 

Open Ko-LLM Leaderboard - a Hugging Face Space by upstage

 

huggingface.co

 

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-42dot-1.3B · Hugging Face

 

huggingface.co

첫 번째 모델은 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

 

rtzr/ko-gemma-2-9b-it · Hugging Face

Model Details Ko-Gemma-2-9B-IT Ko-Gemma-2-9B-IT is a Korean-language conversational model that is part of the Gemma family of models. It is a text-to-text, decoder-only large language model, available in Korean. We fine-tuned this model on a carefully cura

huggingface.co

두 번째 모델은 리턴제로에서 파인튜닝한 '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-KTLim/llama-3-Korean-Bllossom-8B · Hugging Face

Update! [2024.08.09] Llama3.1 버전을 기반으로한 Bllossom-8B로 모델을 업데이트 했습니다. 기존 llama3기반 Bllossom 보다 평균 5%정도 성능 향상이 있었습니다.(수정중에 있습니다.) [2024.06.18] 사전학습량을 25

huggingface.co

세 번째 모델은MLP-LAB에서 개발한 'Blossom' 모델입니다. 이 모델은 제가 직접 사용해보지는 않았는데 이번 프로젝트에서 팀원이 이 모델로 Mermaid Diagram을 그리면서 좋다고 추천해서 가져와봤습니다.

 

 

 

Mermaid Diagram 생성 Code를 매 청크마다 오류없이 생성해내지는 못하지만 제대로 생성한 다이어그램 차트는 굉장하다고 생각합니다. 위와 같이 회의록을 다이어그램화 한 건데요. 회의록만 보고 LLM이 저런 다이어그램을 생성한다는 자체가 좀 신기하다고 생각했고 퀄리티도 괜찮아서 소개하고 싶다는 생각을 하였습니다. 물론 이제 출력된 다이어그램을 디자인적으로 수정할 필요는 있어 보이지만요.

 

이번 포스팅은 여기서 마무리입니다.

간만에 좀 짧은 포스팅인데 진짜 거의 모든 한국어 LLM을 찾아보면서 한국어 LLM의 한계를 많이 느꼈습니다... ㅠㅠ

물론 GPU 메모리 자원이 부족해 대형 모델을 써보지 못한 결과겠지만 영어는 소형 언어모델도 프롬프트를 잘 수행하거덩요.

아무튼 한국어 LLM을 찾아보시는 전공생분들께 조금이라도 도움이 되셨으면 좋겠고, 힘든 일상 모두 파이팅입니다 ~ !!

728x90

'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