기술나눔

다운스트림 작업에 BERT를 사용하는 방법 - Transformer Tutorial

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

BERT(BiDirectional Encoder Representations from Transformers)는 Google이 2018년에 출시한 사전 학습된 언어 모델입니다. BERT의 출현은 다중 언어 작업의 성능을 크게 향상시키기 때문에 자연어 처리 분야에서 중요한 이정표를 나타냅니다. 이 기사에서는 모든 사람이 이 강력한 도구를 더 잘 이해하고 적용할 수 있도록 다운스트림 작업에 BERT를 사용하는 방법을 자세히 소개합니다.

BERT 란 무엇입니까?

BERT는 Transformer 아키텍처를 기반으로 한 언어 모델입니다. 이전 언어 모델과 달리 BERT는 양방향 학습 방법을 채택하고 상황 정보를 동시에 고려할 수 있어 다양한 작업에서 좋은 성능을 발휘합니다. BERT의 핵심 아이디어는 광범위한 비지도 사전 학습을 통해 우수한 성능을 달성한 후 특정 작업에 대한 미세 조정을 수행하는 것입니다.

BERT의 사전 훈련 및 미세 조정

BERT의 훈련 과정은 사전 훈련(pre-training)과 미세 조정(fine-tuning)의 두 단계로 나뉩니다.

  1. 사전 훈련 : 이 단계에서 BERT는 대량의 텍스트 데이터를 통해 학습되며, 작업에는 Masked Language Model(MLM) 및 Next Sentence Prediction(NSP)이 포함됩니다. MLM 작업에서는 모델이 마스킹된 단어를 예측해야 하고, NSP 작업에서는 모델이 두 문장이 연속적인지 여부를 예측해야 합니다.

  2. 미세 조정 : 사전 훈련이 완료된 후에는 특정 다운스트림 작업에 따라 모델을 미세 조정해야 합니다. 다운스트림 작업은 분류, 회귀, 질문 답변, 명명된 엔터티 인식 등이 될 수 있습니다. 작업별 데이터 세트에 대한 추가 교육을 통해 BERT는 특정 작업의 요구 사항에 더 잘 적응할 수 있습니다.

다운스트림 작업에 BERT를 사용하는 방법

다음으로 구체적인 예시를 통해 텍스트 분류 작업에 BERT를 활용하는 방법을 소개하겠습니다.

1단계: 필요한 라이브러리 설치

먼저, 사전 훈련된 다양한 언어 모델을 사용할 수 있는 Hugging Face에서 제공하는 매우 인기 있는 라이브러리인 Transformers 라이브러리를 설치해야 합니다.

pip install transformers
pip install torch
  • 1
  • 2
2단계: 사전 학습된 모델 및 데이터 로드

Hugging Face의 모델 라이브러리에서 사전 훈련된 BERT 모델과 해당 Tokenizer를 로드해야 합니다.

from transformers import BertTokenizer, BertForSequenceClassification
from transformers import Trainer, TrainingArguments

# 加载预训练的BERT模型和Tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3단계: 데이터 준비

텍스트 분류를 수행하려면 텍스트 데이터를 모델이 허용하는 입력 형식으로 변환해야 합니다. 여기에는 일반적으로 텍스트를 토큰화하고 토큰 ID로 변환하고 주의 마스크를 만드는 작업이 포함됩니다.

# 示例数据
texts = ["I love programming.", "I hate bugs."]
labels = [1, 0]

# 数据预处理
inputs = tokenizer(texts, return_tensors='pt', padding=True, truncation=True)
inputs['labels'] = torch.tensor(labels)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
4단계: 모델 미세 조정

Trainer API를 사용하면 모델을 쉽게 미세 조정할 수 있습니다. 먼저 훈련 매개변수를 설정한 다음 훈련을 위해 트레이너를 호출해야 합니다.

training_args = TrainingArguments(
    output_dir='./results',          # 输出目录
    num_train_epochs=3,              # 训练的epoch数
    per_device_train_batch_size=4,   # 训练时每个设备的batch size
    per_device_eval_batch_size=8,    # 评估时每个设备的batch size
    warmup_steps=500,                # 预热步数
    weight_decay=0.01,               # 权重衰减
    logging_dir='./logs',            # 日志目录
    logging_steps=10,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=inputs,
    eval_dataset=inputs
)

# 开始训练
trainer.train()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
5단계: 평가 및 예측

훈련이 완료된 후에는 훈련된 모델을 평가 및 예측에 사용할 수 있습니다. 평가를 위해 검증 세트를 사용하여 예측의 정확성과 같은 지표를 계산하고 새 텍스트를 입력하고 분류 결과를 얻을 수 있습니다.

# 评估
results = trainer.evaluate()
print(results)

# 预测
test_texts = ["I enjoy learning new things.", "I dislike errors."]
test_inputs = tokenizer(test_texts, return_tensors='pt', padding=True, truncation=True)
predictions = model(**test_inputs)
print(predictions)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

BERT 애플리케이션 시나리오

텍스트 분류 외에도 BERT는 다른 자연어 처리 작업에서도 잘 수행됩니다. 예를 들어:

  • 질문과 답변 시스템: BERT를 사용하면 상황 이해를 통해 사용자 질문에 정확하게 답변할 수 있는 강력한 질문 및 답변 시스템을 구축할 수 있습니다.
  • 명명된 엔터티 인식: BERT는 사람 이름, 장소 이름, 조직 이름 등과 같은 텍스트의 엔터티를 식별할 수 있습니다.
  • 텍스트 생성: BERT는 주로 작업을 이해하는 데 사용되지만 빈칸 채우기, 다시 쓰기 등과 같은 일부 생성 작업에도 도움이 될 수 있습니다.

요약하다

강력한 사전 훈련된 언어 모델인 BERT는 여러 자연어 처리 작업에서 놀라운 결과를 달성했습니다. 사전 훈련과 미세 조정의 두 단계를 통해 BERT는 다양한 다운스트림 작업에 효율적으로 적응할 수 있습니다. 이 글의 서론을 통해 모두가 BERT를 더 잘 이해하고 적용하며 실질적인 문제를 해결할 수 있기를 바랍니다.

더 흥미로운 콘텐츠를 보려면 다음 사항에 주의하세요. ChatGPT 중국어 웹사이트