허깅페이스 트렌스포머 활용강좌, BERT 도큐먼트 벡터 처리 모듈 설치

딥러닝과 자연어 처리(NLP)의 발전에 발맞추어, 허깅페이스(Hugging Face)의 트랜스포머(transformers) 라이브러리는 많은 데이터 과학자들과 개발자들에게 필수적인 도구가 되었습니다. 특히, BERT(Bidirectional Encoder Representations from Transformers) 모델은 문맥을 이해하는 데 강력한 성능을 발휘하여 자연어 처리 작업에서 널리 사용되고 있습니다. 이 글에서는 허깅페이스 트랜스포머 라이브러리를 설치하여 BERT 모델을 활용한 도큐먼트 벡터 처리 방법에 대해 자세히 알아보겠습니다.

1. 허깅페이스 트랜스포머란?

허깅페이스 트랜스포머 라이브러리는 최신 자연어 처리(SQ) 모델을 쉽게 사용할 수 있도록 해주는 파이썬 패키지입니다. 이 라이브러리는 대규모 사전 훈련된 모델을 제공하여 개발자들이 복잡한 모델을 손쉽게 구현하고 활용할 수 있도록 지원합니다. 특히 BERT, GPT-2, RoBERTa 등의 인기 모델을 포함하고 있습니다.

2. BERT 모델의 이해

BERT(Bidirectional Encoder Representations from Transformers)는 문맥을 양방향에서 이해하기 위해 설계된 모델입니다. 기존의 RNN 계열 모델들은 단향성으로 정보의 흐름을 이해하기 때문에 문맥을 완벽히 처리하기 어려웠으나, BERT는 양방향의 정보를 모두 활용할 수 있게 되었습니다. 이를 통해 높은 수준의 문장 이해 및 문서 분류 작업에서 성능을 극대화 할 수 있습니다.

3. 개발 환경 준비하기

시작하기 전에 필요한 개발 환경을 준비해야 합니다. 아래의 단계를 따라 필요한 패키지를 설치하고 환경을 설정할 수 있습니다.

3.1. Python 설치

먼저 Python이 설치되어 있어야 합니다. [Python 공식 웹사이트](https://www.python.org/downloads/)에서 Python을 다운로드하고 설치합니다. Python 3.6 이상이 필요합니다.

3.2. 가상 환경 설정

가상 환경을 생성하는 것은 프로젝트의 종속성을 관리하는 데 유리합니다. 아래 명령어를 통해 새로운 가상 환경을 생성하고 활성화할 수 있습니다.

python -m venv bert-env
source bert-env/bin/activate  # Linux / macOS
.\bert-env\Scripts\activate  # Windows

3.3. 패키지 설치

이제 BERT 모델을 사용하기 위한 패키지를 설치합니다. 허깅페이스의 트랜스포머 라이브러리와 추가적으로 필요한 패키지를 설치합니다.

pip install transformers torch

4. BERT 모델 사용하기

설치가 완료되면 BERT 모델을 사용하여 문서 벡터를 처리할 수 있습니다. 아래의 예제 코드를 통해 간단한 문서 벡터처리 과정을 살펴보겠습니다.

4.1. 코드 예제

import torch
from transformers import BertTokenizer, BertModel

# BERT 모델과 토크나이저 초기화
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

# 예시 문서
document = "허깅페이스 라이브러리는 자연어 처리를 위한 매우 중요한 도구입니다."

# 문서 토크나이즈 및 텐서 변환
inputs = tokenizer(document, return_tensors='pt')

# BERT 모델에 입력하고 출력 값을 얻음
with torch.no_grad():
    outputs = model(**inputs)

# 마지막 은닉 상태 얻기
last_hidden_states = outputs.last_hidden_state
print(last_hidden_states.shape)  # (1, 문장 길이, 768)

4.2. 코드 설명

위 코드는 허깅페이스의 BERT 모델을 사용하여 단일 문서를 처리하는 과정을 보여줍니다.

  • from transformers import BertTokenizer, BertModel : 허깅페이스에서 BERT 모델과 관련된 클래스들을 불러옵니다.
  • BertTokenizer.from_pretrained('bert-base-uncased') : 사전훈련된 BERT의 토크나이저를 불러옵니다. ‘bert-base-uncased’는 대소문자를 구분하지 않는 모델입니다.
  • model = BertModel.from_pretrained('bert-base-uncased') : BERT 모델을 초기화합니다.
  • tokenizer(document, return_tensors='pt') : 입력 문서를 토크나이즈하고 PyTorch 텐서 형식으로 변환합니다.
  • model(**inputs) : 모델에 입력을 주고 출력값을 받습니다. 출력의 마지막 은닉 상태를 통해 문서의 의미적 정보를 얻을 수 있습니다.

5. 실제 문서 벡터 처리 예제

다수의 문서를 처리하여 각 문서의 벡터를 얻는 방법도 살펴보겠습니다. 아래의 코드는 여러 문서를 벡터화하는 과정을 보여줍니다.

documents = [
    "허깅페이스는 NLP를 위한 강력한 라이브러리입니다.",
    "딥러닝은 많은 산업에서 중요한 역할을 하고 있습니다.",
    "AI의 발전은 기술의 진화를 이끌고 있습니다."
]

# 각 문서를 반복하여 벡터화
doc_vectors = []
for doc in documents:
    inputs = tokenizer(doc, return_tensors='pt')
    with torch.no_grad():
        outputs = model(**inputs)
    doc_vectors.append(outputs.last_hidden_state.mean(dim=1).squeeze().numpy())

print(f"문서 벡터들: {doc_vectors}")  # 리스트 형태로 각 문서의 벡터 출력

5.1. 코드 설명

위 코드에서는 여러 개의 문서를 입력받아 각 문서의 벡터를 계산합니다.

  • 문서를 하나씩 반복하여 각 문서에 대해 토크나이즈 및 벡터를 계산합니다.
  • outputs.last_hidden_state.mean(dim=1) : 각 문서의 모든 토큰에 대한 은닉 상태를 평균하여 문서의 대표 벡터를 생성합니다.
  • 문서 벡터들은 리스트 형태로 저장되며, 최종적으로 doc_vectors에 저장됩니다.

6. 고급 활용: 문서 유사도 측정

벡터화를 통해 각 문서의 의미를 수치화할 수 있으며, 이를 바탕으로 문서 간의 유사도를 측정할 수 있습니다. 유사도 측정 방법 중 하나로는 코사인 유사도를 사용할 수 있습니다.

from sklearn.metrics.pairwise import cosine_similarity

# 문서 벡터 간의 코사인 유사도 계산
similarity_matrix = cosine_similarity(doc_vectors)
print(f"문서 유사도 행렬: \n{similarity_matrix}")

6.1. 코드 설명

코사인 유사도를 통해 각 문서 간의 유사도를 계산하여 유사도 행렬을 생성합니다.

  • from sklearn.metrics.pairwise import cosine_similarity : 코사인 유사도 계산을 위한 함수 불러오기
  • cosine_similarity(doc_vectors) : 벡터 리스트를 바탕으로 유사도 행렬을 계산합니다.

7. 마치며

이번 강좌에서는 허깅페이스 트랜스포머 라이브러리를 설치하고 BERT 모델을 활용하여 문서 벡터 처리 방법을 살펴보았습니다. BERT와 같은 고급 자연어 처리 모델은 다양한 NLP 작업에서 뛰어난 성능을 발휘하므로 이를 활용하여 다양한 데이터 분석 작업에 적용할 수 있습니다. 앞으로도 더 많은 예제와 심화 내용을 다룰 예정이니 많은 관심 부탁드립니다.

딥러닝과 자연어 처리의 세계에 발 빠르게 적응하여 실력을 쌓는 여러분이 되길 바랍니다!

허깅페이스 트렌스포머 활용강좌, BART 토크나이징 결과를 넘파이 어레이로 변경

최근 인공지능과 자연어 처리 분야에서 딥러닝 모델은 놀라운 발전을 거듭하고 있습니다. 특히, 허깅페이스(Hugging Face)Transformers 라이브러리는 다양한 자연어 처리(NLP) 모델을 손쉽게 사용할 수 있게 해줍니다. 실습에서는 BART(Bidirectional and Auto-Regressive Transformers) 모델을 활용하여 텍스트를 처리하고, 이의 결과를 넘파이(Numpy) 배열로 변환하는 방법에 대해 알아보겠습니다.

BART 모델 소개

BART는 Facebook AI Research에서 개발된 모델로, 텍스트 생성 및 요약 작업에서 우수한 성능을 보입니다. BART는 Encoder-Decoder 구조를 채택하여, 입력 텍스트를 이해하고 이를 기반으로 새로운 텍스트를 생성하는 데 강점을 가지고 있습니다. BART는 특히 그래픽 노드와 같은 복잡한 구조의 텍스트를 잘 처리하며, 다양한 NLP 태스크에서 성능을 발휘합니다.

허깅페이스 Transformers 설치하기

허깅페이스의 Transformers 라이브러리를 사용하기 위해서는 해당 라이브러리를 설치해야 합니다. 아래의 명령어를 통해 쉽게 설치할 수 있습니다.

pip install transformers

BART 토크나이저 사용하기

BART를 사용하기 위해 토크나이저를 초기화하고, 텍스트를 토큰화하는 과정을 살펴보겠습니다. 다음 코드는 기본적인 텍스트를 BART 토크나이저를 사용하여 토큰화하는 예시입니다.

from transformers import BartTokenizer

# BART 토크나이저 초기화
tokenizer = BartTokenizer.from_pretrained('facebook/bart-large')

# 입력 텍스트
text = "딥러닝은 미래의 기술이다."

# 텍스트를 토큰화
tokens = tokenizer(text)
print(tokens)

토큰화 결과

위의 코드에서는 BART 토크나이저를 사용하여 입력된 텍스트를 토큰화하였습니다. 토큰화의 결과는 딕셔너리 형태로 표현되며, 여러 가지 정보를 담고 있습니다.

Output: 
{'input_ids': [0, 10024, 327, 1311, 1346, 231, 1620, 2], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]}

넘파이 배열로 변환하기

토켄화된 결과를 넘파이 배열로 변환하여, 모델 입력으로 사용하기에 적합한 형태로 만들겠습니다. 먼저, NumPy 라이브러리를 설치하고 불러옵니다.

import numpy as np

코드 예제

전체 과정을 포함한 예제 코드는 다음과 같습니다:

import numpy as np
from transformers import BartTokenizer

# BART 토크나이저 초기화
tokenizer = BartTokenizer.from_pretrained('facebook/bart-large')

# 입력 텍스트
text = "딥러닝은 미래의 기술이다."

# 텍스트를 토큰화
tokens = tokenizer(text)

# input_ids를 넘파이 배열로 변환
input_ids_np = np.array(tokens['input_ids'])
attention_mask_np = np.array(tokens['attention_mask'])

# 출력
print("Input IDs:", input_ids_np)
print("Attention Mask:", attention_mask_np)

결과 확인하기

위 코드를 실행하면 토큰화 결과가 넘파이 배열로 변환된 것을 확인할 수 있습니다. 이 배열들은 이후 모델의 입력으로 사용할 수 있습니다.

모델에 입력하기

생성한 숫자 배열을 모델에 입력하여 텍스트 생성 또는 다른 NLP 태스크를 수행할 수 있습니다. 예를 들어, 문장을 요약하는 작업을 진행할 수 있습니다. 다음은 BART 모델을 사용하여 입력 텍스트를 요약하는 예제입니다.

from transformers import BartForConditionalGeneration

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

# 모델에 입력하기
output_sequences = model.generate(input_ids_np[np.newaxis, :], attention_mask=attention_mask_np[np.newaxis, :])

# 결과 디코딩
summary = tokenizer.decode(output_sequences[0], skip_special_tokens=True)
print("Generated Summary:", summary)

모델의 출력

위 코드의 결과로 생성된 요약 텍스트를 확인할 수 있습니다. BART 모델은 입력된 문장을 바탕으로 자연스러운 텍스트 생성을 통해 유의미한 내용을 추출합니다.

결론

이번 강좌에서 우리는 허깅페이스의 Transformers 라이브러리를 활용하여 BART 모델을 통해 토크나이저를 사용하고, 그 결과를 넘파이 배열로 변환하는 방법에 대해 알아보았습니다. 이 과정을 통해 자연어 처리의 기초적인 이해를 돕고, 모델 활용의 기초적인 기술을 익힐 수 있습니다. 앞으로 다양한 텍스트 처리 작업에서 BART와 같은 접근법을 활용하여 더 많은 성과를 거두길 바랍니다.

이 강좌를 통해 얻은 지식을 바탕으로 더 많은 프로젝트를 시도하고, 딥러닝에 대한 이해를 넓힐 수 있기를 바랍니다. 감사합니다.

허깅페이스 트렌스포머 활용강좌, BART 추론

기계 학습 및 특히 자연어 처리(NLP)의 발전과 함께, 트랜스포머 모델은 단어 임베딩, 문장 생성 및 기타 다양한 작업에서 혁신적인 결과를 보여주고 있습니다. 그중에서도 BART(Bidirectional and Auto-Regressive Transformers)는 텍스트 생성, 요약, 번역 등 여러 NLP 작업에서 뛰어난 성능을 보이는 모델로 주목받고 있습니다.

BART 소개

BART는 Facebook AI Research(Fair)에서 개발한 모델로서, 기본적으로 두 가지 아키텍처를 결합합니다: Encoder-Decoder 구조와 변형된 언어 모델링. BART는 입력 텍스트를 대칭적으로 변형하여, 노이즈가 추가된 텍스트로부터 원래의 텍스트를 복원하는 방식으로 학습됩니다. 이러한 특성 덕분에 BART는 문장 요약, 번역, 질문 응답 등 적응력이 필요한 다양한 언어 과제를 수행하는 데 적합합니다.

BART의 주요 특징

  • 양방향 인코더: BART의 인코더는 Transformer 모델의 양방향성 덕분에 앞 뒤 문맥 정보를 모두 고려할 수 있습니다.
  • 자동회귀 디코더: 디코더는 이전의 모든 단어를 고려하여 다음 단어를 예측하는 방식으로 작동합니다.
  • 노이즈 제거: 텍스트의 일부를 무작위로 마스킹하거나 변형하여 이 노이즈를 제거하는 방식으로 모델을 학습합니다.

Hugging Face Transformers 라이브러리

허깅페이스의 Transformers 라이브러리는 BART와 같은 다양한 트랜스포머 모델을 간편하게 사용할 수 있는 API를 제공합니다. 이 라이브러리의 장점은 다음과 같습니다:

  • 다양한 사전 학습된 모델 제공
  • 쉽고 직관적인 API
  • 다양한 NLP 작업을 위한 정교한 기능 지원

설치 방법

Transformers 라이브러리를 설치하려면 다음과 같은 pip 명령어를 사용하십시오:

pip install transformers

BART 모델 활용 예제

이번 섹션에서는 BART 모델을 활용하여 텍스트 요약을 수행하는 방법을 설명하겠습니다. 다음은 간단한 예제 코드입니다:

예제 코드

from transformers import BartTokenizer, BartForConditionalGeneration

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

# 요약할 텍스트
text = """
Deep learning is a subset of machine learning that is based on artificial neural networks.
It is used for various applications such as image recognition, natural language processing,
and more. Deep learning allows computers to learn from data in a hierarchical manner,
enabling them to achieve high accuracy in various tasks.
"""

# 텍스트를 토크나이즈하고 요약 모델에 입력
inputs = tokenizer(text, return_tensors='pt', max_length=1024, truncation=True)

# 요약 생성
summary_ids = model.generate(inputs['input_ids'], max_length=50, min_length=25, length_penalty=2.0, num_beams=4, early_stopping=True)

# 요약된 텍스트 디코딩
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
print("요약:", summary)

코드 설명

  1. 라이브러리 임포트: `transformers` 라이브러리에서 BART 모델과 토크나이저를 임포트합니다.
  2. 모델과 토크나이저 불러오기: `facebook/bart-large-cnn`의 사전 학습된 모델과 토크나이저를 가져옵니다.
  3. 입력 텍스트: 요약할 긴 텍스트를 설정합니다.
  4. 토크나이징: 입력 텍스트를 토크나이즈하고 텐서로 변환합니다.
  5. 요약 생성: `generate` 메서드를 사용하여 요약을 생성합니다.
  6. 결과 출력: 생성된 요약을 디코딩하여 출력합니다.

컨트롤 파라미터 설명

위의 코드는 다양한 컨트롤 파라미터를 통해 요약의 품질을 조정할 수 있습니다. 각 파라미터는 다음과 같은 역할을 합니다:

  • max_length: 생성될 요약의 최대 길이입니다.
  • min_length: 생성될 요약의 최소 길이입니다.
  • length_penalty: 요약 길이에 대한 벌점으로, 길면 길수록 낮은 점수를 주어 길이를 조정합니다.
  • num_beams: 빔 탐색에서 사용할 빔 수로, 값이 높을수록 더 많은 후보를 탐색합니다.
  • early_stopping: 최적의 요약이 생성되면 과정 중단 여부를 결정합니다.

BART의 다양한 활용 예

BART는 요약 외에도 여러 NLP 작업에 활용될 수 있습니다. 다음은 BART의 주요 활용 예시입니다:

1. 기계 번역

BART는 입력 텍스트를 다른 언어로 변환하는 번역 작업에도 효과적으로 사용됩니다. 사용자가 원본 언어에서 목표 언어로의 번역을 수행할 수 있습니다.

2. 질문 응답

BART는 주어진 질문에 대한 답변을 생성하는 작업에서도 강력한 성능을 보입니다.

3. 텍스트 생성

자유로운 형식의 텍스트 생성 작업에서도 BART를 사용하여 품질 높은 텍스트를 생성할 수 있습니다.

모델 성능 평가

BART 모델의 성능을 평가하기 위해 다양한 지표를 사용할 수 있습니다. 일반적으로는 ROUGE 지표가 많이 사용됩니다. ROUGE는 기계 생성 요약과 인간 요약 간의 유사성을 측정하는 지표로, F1 점수, 리콜 등 여러 지표를 제공합니다.

ROUGE 점수 계산

다음은 Python을 사용하여 ROUGE 점수를 계산하는 방법의 예입니다:

from rouge import Rouge

# 인간 요약과 모델 요약
human_summary = "Deep learning is a subset of machine learning."
model_summary = summary  # 위에서 생성한 모델 요약

# ROUGE 평가자 객체 생성
rouge = Rouge()

# ROUGE 점수 계산
scores = rouge.get_scores(model_summary, human_summary)
print("ROUGE 점수:", scores)

결론

BART 모델은 효과적인 텍스트 요약, 번역, 질문 응답 등 다양한 자연어 처리 작업에 적용될 수 있는 매우 유용한 도구입니다. Hugging Face의 Transformers 라이브러리를 통해 손쉽게 사용할 수 있으며, 많은 연구자와 개발자들이 이를 활용하여 NLP 분야에서 혁신적인 성과를 내고 있습니다. 이 강좌를 통해 BART의 기본 개념 및 활용 방법을 이해하고, 실제로 텍스트 요약을 수행하는 경험을 쌓길 바랍니다.

참고 자료

허깅페이스 트렌스포머 활용강좌, BART 추론 결과 디코딩

딥러닝의 발전은 자연어 처리(NLP) 분야에 혁신을 가져왔고, 그 중에서도 BART(Bidirectional and Auto-Regressive Transformers) 모델은 텍스트 요약, 번역, 생성 등 다양한 작업에서 탁월한 성능을 발휘하고 있습니다.

1. BART 모델 소개

BART는 Facebook에서 개발한 변형된 트랜스포머 모델로, 두 가지 주요 사용 사례를 염두에 두고 설계되었습니다: (1) 텍스트 생성 및 (2) 텍스트 복원. BART는 인코더-디코더 구조를 가지고 있으며, 인코더는 입력 텍스트를 압축하여 숨겨진 상태로 변환하고, 디코더는 이 상태를 바탕으로 출력 텍스트를 생성합니다.

2. BART의 핵심 아이디어

BART는 두 주요 단계로 작동합니다:

  • 전방향(Forward) 변환: 입력 텍스트를 다양한 방식으로 변형하여 모델이 다양한 정보에 대응할 수 있도록 합니다.
  • 역방향(Reverse) 생성: 변형된 입력을 바탕으로 원본 내용에 맞는 자연스러운 문장을 생성합니다.

3. 허깅페이스 트랜스포머 라이브러리 설치

허깅페이스의 트랜스포머 라이브러리는 BART 모델을 포함한 다양한 사전 훈련된 모델들을 제공합니다. 먼저, 해당 라이브러리를 설치합니다:

pip install transformers

4. BART 모델 사용하기

먼저, BART 모델을 불러오고 예제 데이터를 준비해 보겠습니다. 다음은 기본적인 사용 방법입니다:

from transformers import BartTokenizer, BartForConditionalGeneration

# BART 모델과 토크나이저 로드하기
tokenizer = BartTokenizer.from_pretrained('facebook/bart-large-cnn')
model = BartForConditionalGeneration.from_pretrained('facebook/bart-large-cnn')

# 입력 text
input_text = "딥러닝은 현대 인공지능의 핵심 기술입니다."
input_ids = tokenizer.encode(input_text, return_tensors='pt')

# 모델 예측
summary_ids = model.generate(input_ids)
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)

print("요약 결과:", summary)

5. 추론 결과 디코딩 이해하기

위 코드에서 실행된 model.generate() 메서드는 BART 모델의 디코더를 호출하여 요약을 생성합니다. 이 포맷은 BART가 처리한 인풋 시퀀스의 출력으로, 토큰화된 형태입니다. 이를 디코딩(decode)하여 사람이 이해할 수 있는 자연어 형태로 다시 변환해야 합니다.

5.1. 디코딩 과정

디코딩 과정은 주로 tokenizer.decode() 메서드를 통해 이루어집니다. 이 과정에서는 다음과 같은 중요 점들을 고려해야 합니다:

  • 특수 토큰 제거: BART와 같은 모델은 훈련 중에 특별한 목적을 위해 사용된 토큰(예: , , )을 포함할 수 있습니다. 이를 제거하기 위해 skip_special_tokens=True를 설정합니다.
  • 문장 연결: 디코딩 후 생성된 토큰들은 종종 공백 없이 이어질 수 있습니다. 이를 자연스러운 문장으로 분리하는 작업이 필요합니다.

5.2. 다양한 디코딩 기법

BART는 다양한 디코딩 기법을 지원합니다. 그 중 몇 가지는 다음과 같습니다:

  • Greedy Search: 가장 높은 확률을 가지는 단어를 선택합니다.
  • Beam Search: 고르지 않은 여러 경로를 고려하여 최종 출력을 생성합니다.
  • Sampling: 무작위로 다음 단어를 선택하여 더 창의적인 출력을 생성할 수 있습니다.

6. BART와 함께하는 실습 예제

그럼 여러 삽입된 텍스트에 대해 요약을 실시해 보겠습니다. 아래 예제 코드를 통해 쉽게 이해할 수 있습니다:

sample_texts = [
    "딥러닝의 정의는 기계학습의 일종으로, 인공 신경망을 기반으로 하는 학습 방법이다.",
    "BART 모델은 텍스트 요약, 번역, 생성 등 다양한 자연어 처리 작업에 잘 작동한다.",
    "허깅페이스는 다양한 사전 훈련된 모델을 공유하여 사용자가 쉽게 NLP 모델을 활용할 수 있도록 돕고 있다."
]

for text in sample_texts:
    input_ids = tokenizer.encode(text, return_tensors='pt')
    summary_ids = model.generate(input_ids)
    summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
    print("요약:", summary)

7. 결론

허깅페이스의 BART 모델은 다양한 자연어 처리 작업에서 효율적이고 강력한 성능을 보여줍니다. 본 강좌를 통해 모델의 기본적인 사용 방법을 이해하고, 실제 예제 코드를 통해 실습해 보았습니다. 이러한 모델들은 계속해서 발전하고 있으며, NLP 분야에서의 적용 가능성은 무한합니다.

다양한 튜토리얼과 실습을 통해 더 많은 경험을 쌓고, 자신만의 프로젝트에 활용해 보시기를 권장합니다.

© 2023 허깅페이스 트랜스포머 활용 강좌

허깅페이스 트렌스포머 활용강좌, 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의 공식 문서를 참조하시기 바랍니다.