딥 러닝을 이용한 자연어 처리, BART 파인 튜닝 실습: 뉴스 요약

작성자: 조광형

작성일: 2024년 11월 26일

1. 서론

자연어 처리는 인공지능의 한 분야로, 인간의 언어를 이해하고 처리하는 기술입니다. 최근 몇 년 동안 딥 러닝의 발전으로 인해 자연어 처리 분야는 비약적인 발전을 이루었으며, 특히 텍스트 생성, 번역 및 요약과 같은 작업에서 두각을 나타내고 있습니다. 이 글에서는 BART(Bidirectional and Auto-Regressive Transformers) 모델을 사용하여 뉴스 기사를 요약하는 방법에 대해 설명합니다. BART는 Facebook AI에 의해 개발된 모델로, 다양한 자연어 처리 작업에서 우수한 성능을 보입니다.

2. BART 모델 소개

BART는 변환기(Transformer) 아키텍처를 기반으로 한 모델로, 양방향 인코더와 오토 회귀 방식의 디코더로 구성되어 있습니다. 이 모델은 두 가지 작업을 동시에 수행할 수 있어 강력한 성능을 발휘합니다. 먼저, 입력 문장을 다양한 방식으로 변형하여 인코더가 이를 이해하도록 하며, 그 다음 디코더는 변형된 표현을 바탕으로 원하는 출력을 생성합니다. BART는 주로 텍스트 요약, 번역, 질문-응답 시스템 등 다양한 자연어 처리 작업에 사용됩니다.

BART의 구조는 크게 두 부분으로 나뉩니다:

  • 인코더: 입력 텍스트를 받아 이를 히든 상태로 변환합니다. 이 과정에서 다양한 노이즈를 추가하여 모델의 일반화 성능을 높입니다.
  • 디코더: 인코더의 출력을 기반으로 새로운 텍스트를 생성합니다. 생성 과정에서는 이전 단어의 정보를 이용하여 다음 단어를 생성합니다.

3. BART를 활용한 뉴스 요약 실습

이번 섹션에서는 BART 모델을 이용한 뉴스 요약 실습 방법에 대해 단계별로 설명하겠습니다.

3.1 데이터셋 준비하기

요약 작업을 수행하기 위해서는 적절한 데이터셋이 필요합니다. Hugging Face의 Datasets 라이브러리를 사용하면 여러 데이터셋을 손쉽게 다운로드하여 사용할 수 있습니다. 이번 예제에서는 CNNDM(CNN/Daily Mail) 데이터셋을 사용할 것입니다. 이 데이터셋은 뉴스 기사와 해당 요약 쌍으로 이루어져 있습니다.

3.2 환경 설정

BART를 사용하기 위해서는 먼저 필요한 라이브러리를 설치해야 합니다. Python 환경에서 아래의 명령어를 통해 설치할 수 있습니다:

pip install transformers datasets torch

설치가 완료되면 Hugging Face의 Transformers 라이브러리를 활용하여 BART 모델을 불러올 수 있습니다.

3.3 모델 불러오기

모델을 불러오기 위해 아래의 코드를 사용할 수 있습니다:

from transformers import BartTokenizer, BartForConditionalGeneration

tokenizer = BartTokenizer.from_pretrained('facebook/bart-large-cnn')
model = BartForConditionalGeneration.from_pretrained('facebook/bart-large-cnn')

3.4 데이터 전처리

데이터셋을 로드한 후, 모델에 맞게 전처리를 진행합니다. 이때, 입력 텍스트를 토크나이즈(tokenize)하고, 길이에 맞게 패딩(padding)을 추가해줍니다.

from datasets import load_dataset

dataset = load_dataset('cnn_dailymail', '3.0.0')
def preprocess_function(examples):
    inputs = [doc for doc in examples['article']]
    model_inputs = tokenizer(inputs, max_length=1024, truncation=True)

    # 디코딩 준비
    with tokenizer.as_target_tokenizer():
        labels = tokenizer(examples['highlights'], max_length=128, truncation=True)

    model_inputs['labels'] = labels['input_ids']
    return model_inputs

tokenized_dataset = dataset['train'].map(preprocess_function, batched=True)

3.5 모델 훈련

모델을 훈련하기 위해서는 PyTorch의 Trainer API를 사용할 수 있습니다. 이 API 덕분에 손쉽게 모델 훈련을 진행할 수 있습니다.

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir='./results',
    evaluation_strategy='epoch',
    learning_rate=2e-5,
    weight_decay=0.01,
    num_train_epochs=3,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset,
)

trainer.train()

3.6 모델 평가 및 요약 생성

모델 훈련이 완료된 후, 새로운 기사에 대해 요약을 생성해볼 수 있습니다. 이때, 입력 문장을 다시 토크나이즈하여 모델에 넣고, 생성된 요약을 출력합니다.

def generate_summary(text):
    inputs = tokenizer(text, return_tensors='pt', max_length=1024, truncation=True)
    summary_ids = model.generate(inputs['input_ids'], max_length=128, min_length=30, length_penalty=2.0, num_beams=4, early_stopping=True)
    return tokenizer.decode(summary_ids[0], skip_special_tokens=True)

sample_article = "Your news article text goes here."
summary = generate_summary(sample_article)
print(summary)

4. 결론

이번 글에서는 BART 모델을 활용하여 뉴스 기사를 요약하는 방법에 대해 알아보았습니다. 자연어 처리 기술은 계속해서 발전하고 있으며, BART와 같은 모델은 이러한 발전을 선도하고 있습니다. 이전에는 복잡한 룰 기반 시스템이 주를 이루었지만, 현재는 딥 러닝 모델들이 높은 성능을 보여주고 있습니다.

BART 모델은 다양한 자연어 처리 작업에 적용될 수 있으며, 텍스트 생성, 번역, 감정 분석 등 여러 분야에서도 강력한 성능을 보입니다. 앞으로도 이러한 기술이 발전하여 더욱 많은 분야에서 활용되기를 기대합니다.

감사합니다.