🍰Fine-tuning시 Features 추가하여 학습하기

이 글에서는 BERT 모델을 fine-tuning하는 동안 추가적인 features를 결합하는 두 가지 방법과 간단한 구현 예시를 소개합니다.

BERT는 사전학습된 언어 모델로 다양한 자연어 처리 작업에서 뛰어난 성능을 발휘합니다. 그러나 때때로 추가적인 features를 모델에 결합하여 문제를 해결하려는 경우가 있습니다. 이 글에서는 BERT 모델에 추가적인 features를 결합하는 두 가지 방법을 소개하고 간단한 구현 예시를 제공합니다.

추가적인 features를 input으로 결합하기

만약 한국어를 잘 이해한 사전학습 모델이라고 한다면? 이 방법은 매우 간단하면서 강력한 성능을 낼 수 있습니다. 바로 입력에다가 추가하고 싶은 features를 자연어로 추가하는 방법인데요 한가지 예로 설명드리겠습니다.

집값을 예측하는 문제가 있다고 가정 해봤을 때, 매우 많은 요소들이 집값에 영향을 줄 것입니다.

추가 할 수 있는 features

위의 예시처럼 다양한 요소들을 features로 추가할 수 있습니다. 이때 자연어 형태가 될 수도 있지만 categorical, numeric한 데이터 형태로 들어올 수도 있는데 이를 어떻게 학습에 사용하면 좋을까요?

자연어처리가 가진 최대 장점을 살린다면 첫번째 샘플의 추가적인 features를 자연어 형태로 변환해 입력으로 사용할 수 있습니다. 예를 들면 "서울시 동작구에 위치한 한강뷰 아파트이며 반려동물을 키울 수 있습니다. 또한 인근 1km내 학교가 3개 있습니다." 처럼이요!

추가적인 features 정보들을 자연어로 변환해 입력으로 사용할 수 있고, 이 자연어들을 인식하여 추가적인 features로 받아들일 수 있다는 게 정말 놀라운 것 같습니다. 수 많은 자연어를 학습한 거대 언어모델의 장점이기도 할텐데요, 그렇다면 전체적인 흐름을 그림으로 설명 드리겠습니다.

위 그림처럼 원래의 정보에 추가적으로 Categorical, Numeric 변수들을 자연어로 변환해서 입력으로 사용할 수 있습니다. 이 입력을 모델이 집값을 예측하는데 사용할 수 있습니다.

Embedding Vectors에 결합하기

그렇다면 자연어 형태로 결합하기 힘들다면 어떡할까요? 이 때 사용할 수 있는 방법은 자연어 embedding vectors와 추가적인 features를 결합하는 방법입니다. BERT를 이용한 자연어 embedding 방법은 여기 참조하시면 좋을 것 같습니다😄.

Embedding Vectors를 추출하게 되면 자연어를 숫자 형태로 모델에 입력할 수 있습니다. 따라서 추가적인 features를 사용자에 맞게 원하는 형식으로 변환해 MLP, 머신러닝 모델로 학습시킬 수 있습니다.

같은 예제로 살펴보면 자연어를 embedding vectors로 변환하여 추가적인 features들은 각각 범주형 변수들은 one-hot, label encoding, 등의 방법으로 변형하고 numeric 변수들을 추가하는 방식을 사용했습니다. 위 방법을 사용하게 되면 features가 명확해지기 때문에 더 가벼운 모델이나 머신러닝 방법을 통해 성능을 최적화 할 수 있게 됩니다.

실제로 제가 downstream model을 개발할 때, 위 방법을 사용해서 CatBoost라는 머신러닝 모델을 사용해 범주, 연속형 변수를 처리한 방법론이 최고 성능을 달성하기도 했습니다 👍.

마치며...

BERT를 사용한 Fine-tuning 에서 추가적인 features를 사용해 Downstream model을 개발하는 방법에 대해 2가지 소개드렸습니다. 최근에는 GPT 계열의 생성 모델이 매우 관심을 많이 받는지라 BERT의 관한 연구를 많이 찾아볼 수는 없는데요, 바이오 도메인에서 DNA, Protein 같은 형태의 데이터들은 BERT가 오히려 더 효율적인 경우가 있다고 생각합니다. 데이터마다 장점을 발휘하는 모델이 있을 수 있으니 Encoder 모델에 관한 연구도 많이 됐으면 좋겠네요😄.

Last updated