개요 : 이 강의에서는 BERT 모델을 로컬에 다운로드하여 Transformer 코드에 적용하는 방법과, Transformer의 다양한 활용 사례 10가지를 강의식으로 설명합니다. 코드와 설명을 구분해 작성하여 이해를 돕습니다.
1. BERT 모델 다운로드 및 코드 적용 방법
Transformer 모델은 Hugging Face Hub에서 다운로드 가능하며, 인터넷 연결이 어려운 경우 직접 다운로드한 모델 파일을 로컬에서 사용할 수 있습니다.
이를 위해 Hugging Face 페이지 (bert-base-uncased)에서 아래 파일들을 다운로드해 ./bert_model/
에 저장합니다:
pytorch_model.bin
(모델 가중치)config.json
(모델 구성)vocab.txt
(토크나이저 단어 집합)
로컬에 저장된 모델을 코드에 적용하는 방법은 다음과 같습니다:
코드 |
---|
from transformers import BertTokenizer, BertModel model_path = "./bert_model/" tokenizer = BertTokenizer.from_pretrained(model_path) model = BertModel.from_pretrained(model_path) |
2. Transformer 활용 예제 10가지
1️⃣ 감정 분석
문장에서 감정을 분류하는 작업 (예: 긍정/부정)
코드 |
---|
from transformers import pipeline classifier = pipeline("sentiment-analysis") print(classifier("I love Transformers!")) |
2️⃣ 텍스트 생성
GPT 모델을 사용하여 주어진 문장 이후의 텍스트를 생성
코드 |
---|
from transformers import pipeline generator = pipeline("text-generation", model="gpt2") print(generator("Once upon a time", max_length=50)[0]['generated_text']) |
3️⃣ 번역 (영-불)
영어 문장을 프랑스어로 번역
코드 |
---|
from transformers import pipeline translator = pipeline("translation_en_to_fr", model="Helsinki-NLP/opus-mt-en-fr") print(translator("Hello, how are you?")[0]['translation_text']) |
4️⃣ 문서 요약
긴 문서를 짧게 요약
코드 |
---|
from transformers import pipeline summarizer = pipeline("summarization") text = "Transformers have revolutionized NLP..." print(summarizer(text, max_length=50)[0]['summary_text']) |
5️⃣ 질문-응답
문서에서 질문에 대한 답변을 찾기
코드 |
---|
from transformers import pipeline qa = pipeline("question-answering") context = "The Transformer model was introduced by Vaswani et al." print(qa(question="Who introduced the Transformer?", context=context)['answer']) |
6️⃣ NER (개체명 인식)
문장에서 사람, 장소, 조직명을 추출
코드 |
---|
from transformers import pipeline ner = pipeline("ner", grouped_entities=True) print(ner("Hugging Face is based in New York.")) |
7️⃣ 문장 유사도
두 문장의 의미적 유사도 계산
코드 |
---|
from transformers import AutoTokenizer, AutoModel from sklearn.metrics.pairwise import cosine_similarity tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2') model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2') def embed(text): return model(**tokenizer(text, return_tensors='pt')).last_hidden_state.mean(dim=1) sim = cosine_similarity(embed("I like AI").detach().numpy(), embed("I love ML").detach().numpy()) print(sim) |
8️⃣ 임베딩 시각화
문장 임베딩을 2D 차원으로 시각화
코드 |
---|
from sklearn.manifold import TSNE import matplotlib.pyplot as plt sentences = ["I like AI.", "The sky is blue.", "It is raining."] embeddings = [embed(s).detach().numpy()[0] for s in sentences] tsne = TSNE(n_components=2, random_state=42).fit_transform(embeddings) plt.scatter(tsne[:,0], tsne[:,1]) for i, s in enumerate(sentences): plt.text(tsne[i,0]+0.01, tsne[i,1]+0.01, s) plt.show() |
9️⃣ Attention Score 시각화
BERT Attention Score를 시각화하여 입력 간 관계 분석
코드 |
---|
# BERT Attention Score 출력 코드는 앞서 작성한 코드와 동일 |
🔟 파인튜닝
BERT를 사용자 데이터셋(IMDB)으로 파인튜닝
코드 |
---|
from transformers import BertForSequenceClassification, Trainer, TrainingArguments from datasets import load_dataset dataset = load_dataset("imdb") def tokenize_fn(ex): return tokenizer(ex["text"], padding="max_length", truncation=True) tokenized = dataset.map(tokenize_fn, batched=True) model = BertForSequenceClassification.from_pretrained("bert-base-uncased") args = TrainingArguments(output_dir="./results", evaluation_strategy="epoch", num_train_epochs=1) trainer = Trainer(model=model, args=args, train_dataset=tokenized["train"].select(range(1000)), eval_dataset=tokenized["test"].select(range(1000))) trainer.train() |
마무리
BERT 모델 수동 다운로드 및 Transformer 활용법을 상세히 학습하였습니다. 각 코드를 직접 실행해보며 이해도를 높여보세요!