BIM 칼럼니스트 강태욱의 이슈 & 토크
이번 호에서는 LLM(대규모 언어 모델)의 자연어 처리에서 핵심 기술인 토큰, 임베딩 및 모델 파인튜닝의 이해를 위한 개념과 임베딩 모델의 동작 메커니즘을 살펴본다. 여기서 토큰은 문장을 구성하는 단어로 가정하면 이해하기 쉽다. 토큰과 임베딩은 입력 시퀀스에 대한 출력을 학습, 예측할 때 훈련의 전제가 되는 LLM의 기본조건이다. 이에 대해 좀 더 깊게 이해해 보자.
■ 강태욱
건설환경 공학을 전공하였고 소프트웨어 공학을 융합하여 세상이 돌아가는 원리를 분석하거나 성찰하기를 좋아한다. 건설과 소프트웨어 공학의 조화로운 융합을 추구하고 있다. 팟캐스트 방송을 통해 이와 관련된 작은 메시지를 만들어 나가고 있다. 현재 한국건설기술연구원에서 BIM/GIS/FM/BEMS/역설계 등과 관련해 연구를 하고 있으며, 연구위원으로 근무하고 있다.
페이스북 | www.facebook.com/laputa999
블로그 | http://daddynkidsmakers.blogspot.com
홈페이지 | https://dxbim.blogspot.com
팟캐스트 | www.facebook.com/groups/digestpodcast
최근 대규모 언어 모델(LLM : Large Language Model)과 검색 증강 생성(RAG : Retrieval-Augmented Generation) 기술을 이용해 다양한 전문가 서비스 에이전트를 개발하는 사례가 많아지고 있다. 특히, 전문가처럼 행동하며 문제를 해결하거나 의사결정을 지원하는 멀티 에이전트 기술은 이미 선진국을 중심으로 금융, 제조, 건설 등 엔지니링 분야에 개발되고 있다.
도메인 의존 정보와 토큰
의학과 같은 특별한 분야에서는 환각 현상 등으로 인해 챗GPT(ChatGPT)와 같은 범용 LLM이 제대로 정보를 생성하지 못하는 경우가 많다. 이런 문제를 해결하기 위해 전문 분야의 지식을 기존 LLM 모델을 이용해 재학습하는 방법이 생겨났는데, 파인튜닝은 그 중 한 가지 방법이다.
파인튜닝은 빅테크 업체가 공개한 LLM 모델을 특정 도메인 지식을 잘 표현할 수 있도록 재학습하는 방법 중 하나이다. LLM의 신경망 전체를 재학습하기 위해서는 매우 비싼 GPU 사용 비용이 필요하다. 이는 일반적인 기업에서 수행할 수 없는 수준이다. 이런 이유로, 파인튜닝은 메타에서 공개한 라마(LLaMA)와 같은 파운데이션 LLM 모델의 신경망에 별도의 작은 신경망을 추가해, 이를 별도로 준비된 데이터로 학습하는 방식을 사용한다.
LLM을 파인튜닝하기 전에 어떤 토큰이 사용되었는지, 임베딩 모델이 무엇인지 확인해야 한다. 파인튜닝 시 용어가 LLM에 사전 학습되어 있지 않다면, 용어 간 관계를 통계적으로 추론하는 학습 절차가 매우 비효율적으로 계산된다. 일반적으로 모델을 파인 튜닝하려면 LLM 토큰 확인 및 개발, 임베딩 모델의 적절한 사용이 필요하다.
<그림 1>은 토큰이 수치화된 결과를 보여준다. 참고로, 토큰이 숫자로 표현되지 못하는 문제를 OOV(Out-Of-Vocabulary)라 한다.
그림 1. 숫자 토큰화 결과
임베딩은 학습 모델이 입력되는 문장의 토큰 패턴을 통계적으로 계산하기 전, 토큰을 수치화시키는 함수이다. 이 함수를 임베딩 모델이라 한다. 임베딩 모델은 토큰을 수치화하여 모델 학습에 사용하는데 필요한 입력값을 출력한다. 이런 이유로, 토큰 사전과 임베딩 모델이 다르면 제대로 된 모델 학습, 예측, 패턴 계산 결과를 얻기 어렵다. 임베딩 모델도 별도의 신경망 모델이며 다양한 방식으로 학습될 수 있다. 이번 호에서는 구글에서 공개한 BERT(Bidirectional Encoder Representations from Transformers) 임베딩 모델을 사용한다.
이와 관련된 실험을 하기 위해, 개발 환경을 설치하고 파이썬 코드를 준비해 본다.
개발 환경 준비
미리 컴퓨터에 파이썬, 아나콘다 등 필수적인 라이브러리가 설치되어 있다는 조건에서, 실습을 위해 명령창에서 다음을 실행해 설치한다.
pip install transformers torch
참고로, 다음은 파인튜닝에 사용하는 오픈소스 라이브러리를 보여준다.
- Torch : 텐서 계산 및 딥 러닝을 위한 핵심 라이브러리이다.
- PEFT : 낮은 순위의 적응 기술을 사용하여 대규모 언어 모델을 효율적으로 미세 조정할 수 있다. 특히 리소스가 제한된 장치에서 학습 가능한 매개 변수의 수를 줄여 모델을 압축하고 더 빠르게 미세 조정할 수 있다.
- bitsandbytes : 신경망에 대한 양자화 및 이진화 기술을 제공하여 모델 압축을 지원한다. 모델 압축에 도움이 되므로 메모리와 계산 능력이 제한된 에지 장치에 모델을 보다 실현 가능하게 만들 수 있다.
- Transformers : 대규모 언어 모델 작업을 간소화하여 사전 학습된 모델 및 학습 파이프라인을 제공한다.
- trl : 대규모 언어 모델의 경우 효율적인 모델 학습 및 최적화에 중점을 둔다.
- accelerate : 다양한 하드웨어 플랫폼에서 학습 및 추론을 가속화한다.
- dataset : 기계 학습 작업을 위한 데이터 세트 로드 및 준비를 간소화한다.
- pipeline : 사용자 지정 학습 없이 일반적인 NLP 작업에 대해 사전 학습된 모델의 사용을 간소화한다.
- PyArrow : 효율적인 데이터 로드 및 처리를 위해 사용될 수 있다.
- LoraConfig : LoRA 기반 미세 조정을 위한 구성 매개변수를 보유한다.
- SFTTrainer : 모델 학습, 최적화 및 평가를 처리한다.
■ 자세한 기사 내용은 PDF로 제공됩니다.