본문 바로가기
Natural Language Processing/NLG 이모저모

LLM 학습을 위한 데이터 생성에 대하여,,

by beeny-ds 2023. 12. 29.
이전 포스팅에서는 LLM 에 관한 전반적인 내용을 비전문가도 이해할 수 있도록 소개했다.
이번 포스팅은 'LLM 을 학습하기 위해 어떻게 학습 데이터를 만들어야 하는지' 에 관해 알아보도록 하겠다.
이전 포스팅과 달리 전문가 Level 의 연구자에게 도움이 되는 글이라는 점을 유의하길 바란다.

 

목차

  1. sLLM 이란?
  2. Supervised Fine-Tuning 의 중요성
  3. 학습 데이터 생성 방법
  4. 학습된 모델의 예측 경향성 

 

1. sLLM 이란?

sLLM 은 small Large Language Models 의 줄인 말이다. 좀 이상하지 않은가? small Large 라는 표현이... 이상해도 어쩔 수 없다. 그냥 LLM 의 수식어로 small 이 들어갔다고 생각하자. LLM 인데 다소 작은 LLM 이라는 의미다.

 

그럼 왜 LLM 이 아닌 sLLM 일까? LLM 은 너무 많은 Parameter(100B 이상) 를 가지고 있어서 학습하려면 너무 많은 리소스가 필요하다. 학습을 위한 서버를 구축하는 것도 최소 몇 십억, 몇 백억 이상이 필요할거다. 사실 모델을 device 에 load 하는 것도 쉽지 않다. GPU 로 따지면 A100 이 최소 3장 이상 필요하기 때문이다.

 

그래서 LLM 보다 다소 작은 sLLM 을 사용하여 SFT 를 한다. 그런데 그거 아는가... sLLM 도 Parameter 가 많다. 3B~70B 까지 여러 종류가 있지만 3B 의 Parameter 를 가진 sLLM 을 학습하는 것도 쉽지 않다. 여기서 쉽지 않다는 말은 많은 리소스가 필요하다는 말이다. 때문에 최근 1년 동안 가장 많이 사용된 학습 방법이 LoRA 이다. 수많은 Parameter 모두 학습하지 않고(ex. backpropagation, optimization, ...) 일부 layer 만 학습하여 학습에 필요한 리소스를 최소화하되 학습에 의한 성능이 보장될 수 있도록 하는 방식이다. 더 자세한 LoRA 에 관한 설명은 다음 포스팅에서 다루겠다.

 

각설하고... sLLM 이 무엇인지 알았으니 이제 sLLM 을 왜 학습하는지, 학습을 위한 데이터는 어떻게 만들 수 있는지 다뤄보자.

 

 

2. Supervised Fine-Tuning 의 중요성

출처: https://www.gttkorea.com/news/articleView.html?idxno=6853

 

sLLM 을 SFT 를 통해 학습하는 이유는 특정 작업에 더 잘 적응하도록 만들기 위함이다. 이를 위해 특정 작업과 관련된 데이터를 수집하고 정리하여 sLLM 을 Fine-Tuning 해줘야 된다. 이 과정을 통해 특정 작업에 대해서 모델의 정확도와 효율성을 크게 향상시킬 수 있다.

 

SFT 가 중요한 이유를 예시를 통해 알아보자.

  • A 보험사 전용 보험 약관 QnA 챗봇 개발
    • 보험사마다 보험 약관이 다르기 때문에 자사의 보험 약관 지식을 학습한 LLM 이 필요하다.
  • B 금융사 전용 대출 QnA 챗봇 개발
    • 금융사마다 대출 약관이 다르기 때문에 자사의 대출 지식을 학습한 LLM 이 필요하다.
  • C 법률사 전용 문서 분석 Process 개발
    • 필자가 알기로 법 관련 종사자들의 니즈 중 하나는 판례 찾기다. 판례를 찾고 요약하여 분석해주는 Process 가 도움을 줄 것이다.

 

 

3. 학습 데이터 생성 방법

데이터 선정과 정제

데이터 선정은 모델의 목적에 맞는 데이터를 선택하는 과정이다. 예를 들어, 보험 약관 QnA 를 위해 보험 약관에 대한 질문과 답변을 수집해야 한다.

그런데 QnA 데이터 생성 중 사전에 수집한 질문이 없을 수 있다. 이런 경우 질문을 만들어줘야 한다. 어떻게 만들어줄 수 있을까?

방법은 여러 개 있겠지만 필자가 사용한 방법은 질문 자동 생성이다. (ChatGPT-4 사용)

  • ChatGPT 에게 보험 약관에 관한 Context 를 넣고 관련된 질문을 만들어달라고 지시하여 질문 데이터 생성
  • 사용한 Prompt : System prompt + Few-Shot Learning

다시 한번 생각했다. ChatGPT 짱짱맨...

 

정제 과정에서는 불필요한 정보를 제거하고 데이터를 표준화한다. 불필요한 정보라 함은 쉽게 말해 데이터에 노이즈가 껴있는 걸 의미한다. 예를 들면 보험 약관 데이터에 부동산 관련 질문이 있다면 목적과 다른 내용이 된다. 이러한 노이즈를 제거해야 한다.

데이터 표준화는 단어 그대로 학습 데이터를 표준화한다는 의미다.

 

라벨링과 프롬프트 디자인

모두 알듯이 정확한 라벨링은 모델이 올바른 학습을 할 수 있게 한다. 굉장히 중요하다.

만약 사전에 수집한 QnA 기록이 없다면 이 또한 ChatGPT 를 활용해서 만들어주도록 하자. 이때도 Prompt 구성이 중요하다. QnA 데이터를 생성한 뒤에는 웬만하면 Eye Checking 을 통해 데이터의 품질을 검사해주는게 좋다.

 

그리고 프롬프트 디자인은 모델에게 학습 목표를 명확하게 제시한다. LLM 은 웬만하면 Next Sentence Prediction 과 같은 CLM 을 통해 학습을 한다.(LLM 에도 Encoder 모델이 있어 `웬만하면` 을 붙임) 이전 Token 을 참고해서 Next Token 을 예측하기 때문에 이전 Token 의 구성이 LLM 의 성능에 영향을 준다. 모델 학습을 위한 Input 으로 사용할 Prompt 디자인에 신경을 쓰도록 하자.

 

필자는 이런식으로 디자인했다.

# prompt
```
아래 [내용]을 참고해서 [질문]에 대해 답변해주세요. 만약 질문에 답변할 수 없으면 "답변을 찾을 수 없습니다."로 대답하세요.

[질문]
~~~

[내용]
~~~

[답변]
```

 

 

4. 학습된 모델의 예측 경향성 

SFT 를 통해 학습된 모델은 어떤 예측을 하게 될까?

  1. 학습 데이터 관련 Domain 에 전문가가 된다.
  2. 학습 데이터의 품질과 양에 영향을 받는다.
    • 만약 데이터가 좋은 품질과 양이 많다면
      만족스러운 결과를 기대할 수 있을 것이다.
  3. 학습 데이터에서 라벨을 짧게 구성하면 모델의 예측 또한 짧은 답변을 준다.
    • 불필요한 답변을 길게 생성하던 ChatGPT 도 SFT 를 통해 짧은 답변만 하도록 학습하면 짧은 답변을 하게 된다..
  4. 학습 데이터를 만들 때 Context 에서 정답을 추출하여 라벨로 구성하였다면 모델의 예측 또한 Context 에서 정답을 추출하려는 경향을 보일 것이다.
    • 비슷한 논리로 학습 데이터의 특징이 추론형, 절차형이라면 모델의 예측 또한 추론형, 절차형의 답변을 도출하려는 경향을 보일 것이다.

필자가 하고자 하는 말은 이렇다.

 

목적에 맞게 sLLM 을 학습할 데이터를 구성해야 된다.
모델 예측 결과는 학습 데이터의 Type 에 영향을 받는다.
`목적에 맞는 학습 데이터 구성` 이 너무너무너무 중요하다. 

 


 

마무리,,

지금까지 sLLM 을 SFT 하기 위한 방법과 유의할 점을 대략적으로 알아봤다.

상세한 내용 및 팁은 업무 비밀이기 때문에 전부 담지는 않았지만 필자 개인적으로는 `목적에 맞는 학습 데이터 구성` 이 가장 중요하다고 생각한다. 물론 AI 연구원은 모두가 아는 사실이겠지만 Decoder Model 에도 해당 경향성이 반영되는건 개인적으로 신기한 경험이었기 때문이다. 

 

QnA 데이터 생성을 위해 ChatGPT 를 활용한 점도 유의하기를 바란다. ChatGPT 는 진짜 잘 만들었다. 잘 만들었다는 의미는 ChatGPT 가 가진 능력인 `배우지 않은 정보를 일반화하여 해석하는 능력이 매우 우수` 하다는 뜻이다. 

하지만 조심할 점은 ChatGPT 를 통해 질의응답 데이터 생성하기 전 데이터의 보안 Level 을 확인해야 한다. 만약 보안에 의해 자체적으로 LLM 을 개발하는데 LLM 학습을 위해 데이터를 만들 때 ChatGPT 를 사용한다면 아주 큰 모순이지 않은가... 보안에 주의해야 하는데 이를 무시하고 정보를 제공하는 꼴이니...

 

본 포스팅의 주제와는 다르지만 모델 성능 측정에 관해 조그만 팁을 주겠다. 필자는 학습된 모델의 성능을 검증하는 것 또한 ChatGPT 를 사용해봤다. ChatGPT-4 를 사용하면 사람이 Eye Check 을 통해 측정한 성능과 비슷한 결과를 보인다는 걸 알게 되었다. 물론 ChatGPT 를 활용한 성능 측정도 Prompt 구성이 중요하다. 개발하고자 하는 서비스는 어떤 성능을 중요하게 여겨야 하는지에 따라 Prompt 구성이 달라질 것이다.

 

뭔가 학습 데이터 생성 관련된 글이 ChatGPT 찬양 글이 된 느낌이다. 그만큼 이전에는 인공지능 모델을 학습하기 위한 데이터를 만들 때 HR 이 필요했지만 이제는 이 부분을 자동화시킬 수 있는 툴이 많아지고 있음을 인지하는게 중요하다고 생각한다. 변화하는 세대 우리의 업무 Process 또한 변화해야 한다.

반응형

댓글