허깅페이스 트렌스포머 활용강좌, BART 라이브러리 설정 및 사전학습 모델 불러오기

BART(Bidirectional and Auto-Regressive Transformers)란 무엇인가?

BART는 자연어 처리(Natural Language Processing) 작업을 위해 설계된 딥러닝 모델로, 페이스북 AI Research에서 개발하였습니다. BART는 인코더-디코더 구조를 가지며, 다양한 NLP 작업에 유용하게 사용될 수 있습니다. 특히 BART는 텍스트 요약, 번역, 질문 응답 및 문서 생성과 같은 작업에서 뛰어난 성능을 보여줍니다.

허깅페이스 Transformers 라이브러리란?

허깅페이스의 Transformers 라이브러리는 다양한 사전 학습된 언어 모델을 손쉽게 사용할 수 있도록 해주는 파이썬 라이브러리입니다. 이 라이브러리는 BART 뿐만 아니라 BERT, GPT-2, T5 등 다양한 모델을 지원합니다. 추가로, 모델 사용 및 훈련을 위한 고급 API와 툴을 제공합니다.

1. BART 라이브러리 설정하기

1.1. 환경 설정

BART를 사용하기 위해서는 먼저 Python과 Hugging Face Transformers 라이브러리를 설치해야 합니다. 아래의 명령어를 통해 설치할 수 있습니다.

pip install transformers torch

위 명령어를 실행하면 Transformers 라이브러리와 PyTorch 설치가 완료됩니다.

1.2. 사전 학습된 모델 불러오기

사전 학습된 BART 모델을 불러오는 방법은 다음과 같습니다. 먼저 transformers 라이브러리에서 BART 모델과 tokenizer를 가져와야 합니다. 아래의 코드를 통해 이를 구현할 수 있습니다.


from transformers import BartTokenizer, BartForConditionalGeneration

# BART 모델과 tokenizer 불러오기
tokenizer = BartTokenizer.from_pretrained('facebook/bart-large')
model = BartForConditionalGeneration.from_pretrained('facebook/bart-large')

위 코드에서는 ‘facebook/bart-large’라는 사전 학습된 BART 모델을 불러옵니다. 이를 통해 고급 자연어 생성 작업을 수행할 수 있습니다.

2. BART를 이용한 텍스트 요약하기

BART를 사용하여 텍스트 요약 작업을 진행해보겠습니다. 아래의 예제를 통해 입력된 긴 문장을 짧은 요약으로 변환하는 과정을 살펴보겠습니다.

2.1. 예제 데이터 준비하기


text = """
딥러닝은 기계 학습의 한 분야로, 인공 신경망을 사용하여 컴퓨터가 데이터를 학습하도록 하는 기술입니다.
딥러닝은 이미지 인식, 자연어 처리, 음성 인식 등 다양한 분야에서 사용되며,
특히 대량의 데이터와 강력한 컴퓨팅 파워의 조합에 의해 최근 몇 년 동안 급격한 발전을 이루었습니다.
"""

2.2. 입력 텍스트 전처리하기

입력 텍스트는 모델이 이해할 수 있는 형식으로 encoding해야 합니다. 아래의 코드를 통해 이를 수행할 수 있습니다.


inputs = tokenizer(text, return_tensors='pt', max_length=1024, truncation=True)

2.3. 모델을 통해 요약 생성하기

전처리가 완료된 입력 데이터를 바탕으로 모델을 통해 요약을 생성합니다.


summary_ids = model.generate(inputs['input_ids'], num_beams=4, max_length=50, early_stopping=True)
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
print(summary)

위 코드는 BART 모델을 통해 요약을 생성하고, 그 결과를 출력합니다. num_beams 매개변수는 빔 서치를 위한 설정값으로, 더 좋은 요약 결과를 얻기 위해 높은 값을 설정할 수 있습니다.

3. BART Fine-tuning 하기

모델의 성능을 더욱 향상시키기 위해 Fine-tuning 작업을 수행할 수 있습니다. Fine-tuning은 특정 데이터셋을 사용하여 사전 훈련된 모델을 다시 훈련하는 과정을 의미합니다.

3.1. 데이터셋 준비하기

Fine-tuning을 위해서는 훈련 데이터셋과 검증 데이터셋을 준비해야 합니다. 아래의 코드는 예시 데이터셋을 준비하는 과정입니다.


# 예시 데이터셋
train_data = [
    {"input": "딥러닝은 기계 학습의 한 분야입니다.", "target": "딥러닝"},
    {"input": "자연어 처리 기술이 발전하고 있습니다.", "target": "자연어 처리"},
]

train_texts = [item["input"] for item in train_data]
train_summaries = [item["target"] for item in train_data]

3.2. 데이터셋을 텐서로 변환하기

훈련 데이터를 BART 모델에 입력할 수 있도록 텐서로 변환하는 과정도 필요합니다. 아래와 같이 진행할 수 있습니다.


train_encodings = tokenizer(train_texts, truncation=True, padding=True, return_tensors='pt')
train_labels = tokenizer(train_summaries, truncation=True, padding=True, return_tensors='pt')['input_ids']
train_labels[train_labels == tokenizer.pad_token_id] = -100  # 패딩 마스크 설정

3.3. Trainer 초기화 및 Fine-tuning 진행하기

Transformers 라이브러리의 Trainer를 사용하여 모델을 Fine-tuning 할 수 있습니다.


from transformers import Trainer, TrainingArguments

# 훈련 인자 설정
training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=3,
    per_device_train_batch_size=2,
    save_total_limit=2,
)

# Trainer 초기화
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_encodings,  # 훈련 데이터셋
)

# 모델 Fine-tuning 시작
trainer.train()

위 코드는 모델을 Fine-tuning 하는 과정을 보여줍니다. num_train_epochs는 훈련 루프를 몇 번 도는지를 설정합니다.

결론

BART 모델은 다양한 자연어 처리 작업에 효과적으로 사용될 수 있으며, Hugging Face의 Transformers 라이브러리를 통해 간편하게 사용할 수 있습니다. 본 강좌에서는 BART 모델의 설정부터 요약 생성, Fine-tuning까지의 과정을 배워보았습니다.

자세한 내용과 더 많은 예제는 Hugging Face의 공식 문서를 참조하시기 바랍니다.